如何浏览(和修改)这个Perl语句

如何浏览(和修改)这个Perl语句,perl,Perl,我是Perl新手 如何解释此Perl语句 my( $foo, $bar ) = split /\s+/, $foobar, 2; 我知道split函数同时分配局部变量,但我不明白整数2的作用是什么-我猜func将返回一个包含两个元素的数组 Perl贩子能给我解释一下上面的语句吗 此外,有时被拆分的字符串不包含预期的标记,这会导致foo或bar未初始化,从而在试图在代码中进一步使用它们时发出警告 如果拆分无法返回两个字符串,如何将$foo和$bar初始化为合理值空字符串?2是拆分返回的最大组件数

我是Perl新手

如何解释此Perl语句

my( $foo, $bar ) = split /\s+/, $foobar, 2;
我知道split函数同时分配局部变量,但我不明白整数2的作用是什么-我猜func将返回一个包含两个元素的数组

Perl贩子能给我解释一下上面的语句吗

此外,有时被拆分的字符串不包含预期的标记,这会导致foo或bar未初始化,从而在试图在代码中进一步使用它们时发出警告


如果拆分无法返回两个字符串,如何将$foo和$bar初始化为合理值空字符串?

2是拆分返回的最大组件数

因此,regexp/\s+/在空白块上拆分$foobar,但只拆分一次,以生成两个组件。如果没有空格,那么$bar将是未定义的

除了amon的方法之外,Perl还有一个definedx函数,它根据参数x是已定义的还是未定义的返回true或false,这可以在if语句中用于纠正某些未定义的情况


请参见2是split返回的最大组件数

因此,regexp/\s+/在空白块上拆分$foobar,但只拆分一次,以生成两个组件。如果没有空格,那么$bar将是未定义的

除了amon的方法之外,Perl还有一个definedx函数,它根据参数x是已定义的还是未定义的返回true或false,这可以在if语句中用于纠正某些未定义的情况

请参见

拆分函数采用三个参数:

匹配分隔符的正则表达式,或由单个空格组成的字符串的特殊值,它修剪字符串,然后在空格处拆分,如/\s+/

应该分开的绳子

结果片段的最大数量。有时,当您对所有字段都不感兴趣时,这是一种优化,有时您不想在每个分隔符处分割,这里就是这样

因此,拆分表达式将返回最多两个字段,但不一定是两个字段。若要为变量指定默认值,请在拆分前指定默认值,或在拆分后检查它们是否未定义,并指定默认值:

my ($foo, $bar) = ('', '');
($foo, $bar) = split ...;
或合并

(my ($foo, $bar) = ('', '')) = split ...

如果左侧未定义,则/=运算符在右侧分配值。for循环只是缩短代码的一种方法

您可能还希望仅在生成两个字段时才继续使用一段代码:

if ( 2 == (my ($foo, $bar) = split ...) ) {
  say "foo = $foo";
  say "bar = $bar";
} else {
  warn "could not split!";
}
标量上下文中的列表分配计算为分配的元素数。

拆分函数采用三个参数:

匹配分隔符的正则表达式,或由单个空格组成的字符串的特殊值,它修剪字符串,然后在空格处拆分,如/\s+/

应该分开的绳子

结果片段的最大数量。有时,当您对所有字段都不感兴趣时,这是一种优化,有时您不想在每个分隔符处分割,这里就是这样

因此,拆分表达式将返回最多两个字段,但不一定是两个字段。若要为变量指定默认值,请在拆分前指定默认值,或在拆分后检查它们是否未定义,并指定默认值:

my ($foo, $bar) = ('', '');
($foo, $bar) = split ...;
或合并

(my ($foo, $bar) = ('', '')) = split ...

如果左侧未定义,则/=运算符在右侧分配值。for循环只是缩短代码的一种方法

您可能还希望仅在生成两个字段时才继续使用一段代码:

if ( 2 == (my ($foo, $bar) = split ...) ) {
  say "foo = $foo";
  say "bar = $bar";
} else {
  warn "could not split!";
}
标量上下文中的列表分配计算为分配的元素数。

如下所述:

如果指定了LIMIT且为正数,则它表示可将EXPR拆分为的最大字段数

例如:

#!/opt/local/bin/perl

my $foobar = "A B C D";
my( $foo, $bar ) = split /\s+/, $foobar, 2;

print "\nfoo=$foo";
print "\nbar=$bar";
print "\n";
输出:

foo=A
bar=B C D
如下文所述:

如果指定了LIMIT且为正数,则它表示可将EXPR拆分为的最大字段数

例如:

#!/opt/local/bin/perl

my $foobar = "A B C D";
my( $foo, $bar ) = split /\s+/, $foobar, 2;

print "\nfoo=$foo";
print "\nbar=$bar";
print "\n";
输出:

foo=A
bar=B C D

+1.详细说明。Perl与我使用过的其他语言完全不同;$\u/=Cmon中列出了操作员。这本书很有趣+1.详细说明。Perl与我使用过的其他语言完全不同;$\u/=Cmon中列出了操作员。这本书很有趣您应该知道分割模式/\s+/不会去除前导空格,在许多情况下,您需要的实际上是“”,这是默认模式,并且做相同的事情,除了它也会去除前导空格,它模拟awk的行为。等等,等等,等等,等等。。。让我把这个弄对。你不会为谷歌而烦恼吧???????你是认真的吗?你到底是怎么得到2800点经验的?怎么做?@PP点不是一切。看那些徽章。他很受欢迎
估计数x 71。你有一个很受欢迎的问题x7。试着问几个更流行的问题:-您应该知道分割模式/\s+/不会去掉前导空格,在许多情况下,您想要的实际上是“”,这是默认模式,并且做同样的事情,除了它也会去掉前导空格,它模仿awk的行为。等等,等等,等等,等等。。。让我把这个弄对。你不会为谷歌而烦恼吧???????你是认真的吗?你到底是怎么得到2800点经验的?怎么做?@PP点不是一切。看那些徽章。他有一个很受欢迎的问题x71。你有一个很受欢迎的问题x7。试着问几个更受欢迎的问题:-