($dummy, $class) = split;
Split は、値の配列を返します。$dummy
最初の値はに、2 番目の値はに入れられ、$class
それ以降の値は無視されます。作成者がその値を無視することを計画しているため、最初の引数はおそらくダミーと名付けられています。より良いオプションは、返されたエントリを無視するために undef を使用することです:( undef, $class ) = split;
Perldoc は、どのように分割が機能するかを示すことができます。引数なしで呼び出された場合、split は$_
空白に対して動作し、空白で分割されます。 $_
は perl のデフォルト変数です。コンテキストによって定義される暗黙の「それ」と考えてください。
暗黙の $_ を使用すると、短いコードをより簡潔にすることができますが、大きなブロック内で使用するのは適切ではありません。どの「それ」を扱いたいかについて、読者を混乱させたくありません。
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 文字より長くなる可能性があることに注意してください。)
私は、? :
文字列値を設定し、ロジックをブロックやサブルーチンにプッシュするための三項演算子の大ファンです。
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;
}
このバージョンには微妙なバグがあるかもしれません。 split
with no args は とまったく同じではありませんsplit(/\s+/, $_)
。行がスペースで始まる場合、動作が異なります。完全修飾された分割では、空白の先行フィールドが返されます。 split
引数なしで先頭のスペースを削除します。
$_ = " ab cd";
my @a = split # @a contains ( 'ab', 'cd' );
my @b = split /\s+/, $_; # @b contains ( '', 'ab', 'cd')