($dummy, $class) = split;
スプリットは値の配列を返します。最初は$dummy
に、2番目は$class
に入れられ、それ以上の値は無視されます。最初の引数は、その値を無視する予定のため、dummyという名前が付けられています。より良い選択肢は、undefを使用して が返されたエントリを無視することです:(undef, $class) = split;
Perldocはどのように分割機能を示すことができます。引数なしで呼び出されると、splitは$_
に対して動作し、空白で分割されます。 $_
はperlのデフォルト変数です。文脈で定義されている暗黙の "it"と考えてください。
暗黙の$ _を使用すると、短いコードをより簡潔にすることができますが、大きなブロック内で使用することは難しいです。あなたは読者があなたと仕事したいと思っていることについて混乱させたくありません。
split ; # split it
for (@list) { foo($_) } # look at each element of list, foo it.
@new = map { $_ + 2 } @list ;# look at each element of list,
# add 2 to it, put it in new list
while(<>){ foo($_)} # grab each line of input, foo it.
perldoc -f split
EXPRが省略されている場合は、$ _の文字列を分割します。 PATTERNも省略された場合は、先頭の空白をスキップした後に、空白( )を分割します。 PATTERN と一致するものは、フィールドを区切る区切り文字と解釈されます。 (デリミタは が1文字より長いことに注意してください。)
文字列の値を設定し、ロジックをブロックとサブルーチンにプッシュするために、3進演算子? :
の大ファンです。
my $Truthsity = 9999
my $Falsity = 2134123
print test_truthsity($Truthsity, $Falsity, $_);
sub test_truthsity {
my ($truthsity, $falsity, $line) = @_;
my $newClass = $truthsity > $falsity ? 'truth' : 'lie';
my (undef, $class) = split /\s+/, $line ;
my $output = $class eq $newClass ? 'correct'
: $class eq 'true' ? 'false neg'
: 'false pos';
return $output;
}
このバージョンでは、微妙なバグがあるかもしれません。 argsのないsplit
は、split(/\s+/, $_)
とまったく同じではありません。行がスペースで始まる場合は、動作が異なります。完全修飾の分割では、空白の先頭のフィールドが返されます。引数なしのsplit
は先頭のスペースを削除します。
$_ = " ab cd";
my @a = split # @a contains ('ab', 'cd');
my @b = split /\s+/, $_; # @b contains ('', 'ab', 'cd')
'のように書くことができる(undefを、$クラス)=スプリット ""、$ _'と' $クラス=(スプリット ""、 ($ダミー、$クラス)=スプリット '(' $ dummy'を使う人がいない限り)と同等の行です。 – hobbs
'perldoc -f split' –
ah yes、コード内に$ _があることがわかりました – alvas