($dummy, $class) = split;
拆分返回一个值数组。第一个放入$dummy
,第二个放入$class
,任何其他值都将被忽略。第一个 arg 可能被命名为 dummy 因为作者计划忽略该值。更好的选择是使用 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 匹配的内容都被视为分隔字段的分隔符。(请注意,分隔符可能超过一个字符。)
我非常喜欢使用三元运算符? :
来设置字符串值并将逻辑推入块和子程序中。
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
没有 args 与 不完全相同split(/\s+/, $_)
,如果行以空格开头,它们的行为会有所不同。在完全限定的拆分中,将返回空白的前导字段。 split
没有 args 会删除前导空格。
$_ = " ab cd";
my @a = split # @a contains ( 'ab', 'cd' );
my @b = split /\s+/, $_; # @b contains ( '', 'ab', 'cd')