($dummy, $class) = split;
Split返回一個值數組。第一個輸入$dummy
,第二個輸入$class
,並且忽略任何其他值。第一個arg很可能被命名爲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 的內容都被視爲分隔字段的分隔符。 (請注意,分隔符 可能比一個字符長。)
我是三元運算符? :
的忠實粉絲,用於設置字符串值以及將邏輯推入塊和子例程。
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
與split(/\s+/, $_)
不完全相同,如果行以空格開始,它們的行爲將有所不同。在完全限定的拆分中,返回空白的前導字段。沒有參數的split
會丟棄前導空格。
$_ = " ab cd";
my @a = split # @a contains ('ab', 'cd');
my @b = split /\s+/, $_; # @b contains ('', 'ab', 'cd')
`(民主,$類)=分裂 「」,$ _`和`$類=(分裂 「」, $ _)[1]`等同於'($ dummy,$ class)= split`(好吧,只要沒有人去,並且開始使用`$ dummy`) – hobbs 2011-12-16 21:11:49
`perldoc -f split` – 2011-12-16 21:20:21
啊是的,我發現在代碼 – alvas 2011-12-16 21:51:02