• ベストアンサー

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 "))" というエラーの下実行できないのですが、なぜこの書き方が出来ないのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

chomp が引数にとるのは、変数(や変数のリスト)です。 chomp ("test\n"); などはできません。 配列の中の要素から末尾の改行を取り除くには 単に @array = ("test\n", "hogehoge"); chomp( @array ); とすれば良いです。 末尾に改行が無い場合何も変化しません。

arcsin
質問者

お礼

chomp(@array) と書くことができるのですね。 いつも, $a = shift(@array); chomp($a); と書いていたので、直感的に chomp(shift(@array)); となぜ書けないんだろうと長く悩んでいました。 そして、間抜けな質問だったことに気が付きました^^; ご回答ありがとうございました。

その他の回答 (1)

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.1

shift()が左辺値(lvalue)でないからだと。

参考URL:
http://en.wikipedia.org/wiki/Lvalue
arcsin
質問者

お礼

あ、そう言われてみればそうですね! $a = chomp( shift(@array) ); みたいな使い方をしたかったのですが、chompは引数で与えた文字列そのものが影響を受けるのですね。 (しかも戻り値は \n があった場合に1、そうでない場合は0) かなり間抜けな質問でしたが、長年の疑問が晴れました。 ありがとうございます。

関連するQ&A