- ベストアンサー
chomp( shift(@array) )
前々から疑問だったのですが、Perl 5.8 で @array = ("test\n", "hogehoge"); chomp( shift(@array) ); は Can't modify shift in chomp at XXXX.pl line X, near "))" というエラーの下実行できないのですが、なぜこの書き方が出来ないのでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
chomp が引数にとるのは、変数(や変数のリスト)です。 chomp ("test\n"); などはできません。 配列の中の要素から末尾の改行を取り除くには 単に @array = ("test\n", "hogehoge"); chomp( @array ); とすれば良いです。 末尾に改行が無い場合何も変化しません。
その他の回答 (1)
- osamuy
- ベストアンサー率42% (1231/2878)
回答No.1
shift()が左辺値(lvalue)でないからだと。
質問者
お礼
あ、そう言われてみればそうですね! $a = chomp( shift(@array) ); みたいな使い方をしたかったのですが、chompは引数で与えた文字列そのものが影響を受けるのですね。 (しかも戻り値は \n があった場合に1、そうでない場合は0) かなり間抜けな質問でしたが、長年の疑問が晴れました。 ありがとうございます。
お礼
chomp(@array) と書くことができるのですね。 いつも, $a = shift(@array); chomp($a); と書いていたので、直感的に chomp(shift(@array)); となぜ書けないんだろうと長く悩んでいました。 そして、間抜けな質問だったことに気が付きました^^; ご回答ありがとうございました。