Bruce.です。
Kenji Inoue さんは書きました (2007/09/10 23:48):
> 井上です。
>
> Bruce. さんは書きました:
>> 前回書き忘れましたが、
>> hello-world のようなハイフンつきのものはクォートの必要があります。
>> shift のような予約語と同じも文字列も同様。
>> あと何かあったかなあ?
>
> 手元の Perl 5.8 では,$hash{shift} では shift の関数呼び出しは実行されない
> ようです。
>
> my %hash;
> $hash{shift} = 'value';
> print keys %hash; # => shift
>
そのようですねえ。
perlfaq7で
Do I always/never have to quote my strings or use semicolons and commas?
Normally, a bareword doesn't need to be quoted, but in most cases
probably should be (and must be under "use strict"). But a hash key
consisting of a simple word (that isn't the name of a defined
subroutine) and the left-hand operand to the "=>" operator both count as
though they were quoted:
This is like this
------------ ---------------
$foo{line} $foo{'line'}
bar => stuff 'bar' => stuff
という記述があり、shiftは defined subroutine なのでクォートはされない
と思うのですが。じゃあユーザー定義のものならどうか、と確かめてみると
use strict;
my %hash;
sub foo {
return "hello";
}
sub bar {
$hash{shift} = 'world';
}
$hash{foo}='xxxx';
bar('moge');
print join ':', keys %hash;
実行結果
shift:foo
はて?
余裕があったらソースに潜ってみます。