2010-11-19 8 views
0

なぜこれは機能しませんか?Perl匿名リストの質問

my @str = split... 

が、私はそれをスキップする方法はあります覚えている:

my $str = 'we,you,them,us'; 

print $(split($str,','))[0]; 

私は私が行うことができます知っています。

ありがとう、

+0

私はコンパイルすることさえできません。 '$(...)'が何かのために働くことができるなら、あなたはあなたが期待しているもの以外を得るかもしれません。しかし、これはその言語のケースであり、そのようには機能しません。あなたは*スカラー逆参照括弧* $ {...} 'から何かを得たかもしれません。それは、「私たち、あなた、彼ら、私たち」のために '$ _'を探していて、それを見つけていないのです。あなたが分割したいのは* second *引数で、区切り文字が最初です。 – Axeman

答えて

8

スプリットリバースの引数の順序があります。括弧の前にドル記号はないはずです。以下の作品(プラス記号力が式として次のことを評価するためのperl):

use strict; 
use warnings; 

my $str = 'we,you,them,us'; 

print +(split(',',$str))[0]; 
+3

あなたはそこに一列に4文字を持っています、XYXY、最初のYは、2番目のYとはまったく異なる何かをしていますが、外観は同じです。これは混乱しています。そういうわけで、人々はそのシナリオで太ったコンマに切り替えるのです。また、引数の先頭にプラスを置くと、混乱やエラーの可能性を犠牲にして1文字しか保存されません。したがって、最後の行を 'print((split、" => $ str)[0]);と書き換えることをお勧めします。それほど*読みやすい? ***私は***と確信していますが、あなたの1kg・キロメートルは異なるかもしれません。 – tchrist

+0

ありがとう!私はこのことについてどこで読むことができますか? perltocのサブマンページを見ていましたが、関連するものは見つかりませんでした。 – snoofkin

+0

@ soulSurfer2010:何について読む?もっとも良いことは、podディレクトリへのchdirとgrepです。 – tchrist

-1

[split $str, ',']->[0];を使用するには、罰金になります。

+0

無名配列を作成する必要はありません – Arkadiy

5

関数の戻り値のほんの一部にしかアクセスする必要がない場合は、使用できるスコープの小さい関数があるかどうかを確認する必要があります。この場合、私は正規表現を使用するかもしれません:

print $str =~ /^([^,]*)/;