alv*_*vas 2 perl split classification dummy-data
我需要一些帮助解码这个perl脚本.$ dummy没有在脚本中的任何其他位置初始化.以下行在脚本中的含义是什么?为什么分裂函数没有任何参数时呢?
($dummy, $class) = split;
Run Code Online (Sandbox Code Playgroud)
该程序试图使用某种统计分类方法检查陈述是真实还是谎言.因此,让我们说它计算并给出"真实性"和"虚假性"的下列数字,然后它检查测谎仪是否正确.
# some code, some code...
$_ = "truth"
# more some code, some code ...
$Truthsity = 9999
$Falsity = 2134123
if ($Truthsity > $Falsity) {
$newClass = "truth";
} else {
$newClass = "lie";
}
($dummy, $class) = split;
if ($class eq $newClass) {
print "correct";
} elsif ($class eq "true") {
print "false neg";
} else {
print "false pos"
}
Run Code Online (Sandbox Code Playgroud)
($dummy, $class) = split;
Run Code Online (Sandbox Code Playgroud)
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.
Run Code Online (Sandbox Code Playgroud)
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;
}
Run Code Online (Sandbox Code Playgroud)
这个版本可能有一个微妙的错误. split没有args与split(/\s+/, $_)它们完全相同,如果行以空格开头,它们的行为会有所不同.在完全限定的拆分中,返回空白的前导字段. split没有args会掉落前导空格.
$_ = " ab cd";
my @a = split # @a contains ( 'ab', 'cd' );
my @b = split /\s+/, $_; # @b contains ( '', 'ab', 'cd')
Run Code Online (Sandbox Code Playgroud)