在perl中没有参数分割

问题描述:

我是perl的新手,我不知道这行代码是什么意思?在perl中没有参数分割

($q,$dummy, $d,$v) = split; 

我通过谷歌搜索,但我发现没有解释使用拆分没有参数,这种使用与“while”块有关吗?

而且完整的代码片段:

open(T,"$opt_judgments") || die "can't open judgment file: $opt_judgments\n"; 
while (<T>) { 
    if ($opt_trec) { 
    ($q,$dummy, $d,$v) = split; 
    } else { 
    ($q,$d,$v) = split; 
    } 
    $dict{$q ."=".$d} =$v; 
    if ($v != 0) { 
    $totalRels{$q} ++; 
    } 
} 
+4

[perldoc -f split](http://perldoc.perl.org/functions/split.html) –

+0

我只是尝试一下,很酷的perl开发环境! – realjin

+1

“我通过谷歌搜索” - 这是你的错误。你最好在http://perldoc.perl.org/或http://metacpan.org/搜索Perl信息。 –

它将当前行($_)分割为空格。引用手册:

如果省略了EXPR,则会拆分$ _字符串。如果PATTERN也被省略,则在空白处跳过(在跳过任何前导空格之后)。

+0

哦,我明白了!谢谢你的解释! – realjin

perldoc

分裂的一般语法是:

split /PATTERN/,EXPR 

如果EXPR被省略,它将该$_字符串。

如果PATTERN也被省略,则在空白处跳过(在跳过任何前导空格之后)。任何匹配PATTERN的东西都被视为分隔字段的分隔符。 (请注意,分隔符可能长于一个字符。)

由于在您的情况下,PATTERNEXPR都被省略。发生空白时出现$_的分割,并将分割的前四个分别分配给$q$dummy$d$v

+0

感谢您的详尽解释!似乎我对此很新。 – realjin

+0

...所以'split()'和'split('',$ _)一样' – ikegami