私は次のサブを宣言しました(実際には、値はデータベースから取得されるため、単純化しました):
sub get_date {
my ($ref_last)=@_;
$$ref_last->{duration}='24,0,4';
($$ref_last->{duration}->{d},
$$ref_last->{duration}->{h},
$$ref_last->{duration}->{m})
= split(/\,/, $$ref_last->{duration});
}
このサブは、次のように、スクリプトのメイン部分から呼び出されます。
my $hashy;
get_date(\$hashy);
print $hashy->{duration}->{d};
strictを使用するまでは、すべてが正常で、魅力のように機能します。
use strict;
my $hashy;
get_date(\$hashy);
print $hashy->{duration}->{d};
この場合、perlは「文字列(「24,0,4」)をハッシュ参照として使用できませんが、「厳密な参照」は使用中です」と表示します。
すでに試しref($ref_last)
ましたref
が、読み取り専用の関数です。
何か提案、なぜこれが起こるのか-そしておそらくより良い解決策?
これが完全な(非)動作スクリプトです:
#!/usr/bin/perl -w
use strict;
my $hashy;
get_date(\$hashy);
print $hashy->{duration}->{d};
sub get_date {
my ($ref_last)=@_;
$$ref_last->{duration}='24,0,4';
($$ref_last->{duration}->{d},
$$ref_last->{duration}->{h},
$$ref_last->{duration}->{m})
= split(/\,/, $$ref_last->{duration});
}