而不是写:
@holder = split /\./,"hello.world";
print @holder[0];
是否可以只做一个单线来获得拆分的第一个元素?就像是:
print (split /\./,"hello.world")[0]
尝试第二个示例时出现以下错误:
print (...) interpreted as function at test.pl line 3.
syntax error at test.pl line 3, near ")["
而不是写:
@holder = split /\./,"hello.world";
print @holder[0];
是否可以只做一个单线来获得拆分的第一个元素?就像是:
print (split /\./,"hello.world")[0]
尝试第二个示例时出现以下错误:
print (...) interpreted as function at test.pl line 3.
syntax error at test.pl line 3, near ")["
你应该试试你的直觉。这就是如何做到这一点。
my $first = (split /\./, "hello.world")[0];
您可以使用仅获取第一个字段的列表上下文分配。
my($first) = split /\./, "hello.world";
要打印它,请使用
print +(split /\./, "hello.world")[0], "\n";
或者
print ((split(/\./, "hello.world"))[0], "\n");
加号是因为语法歧义而存在的。它表明以下所有内容都是print
. perlfunc 文档print
解释了。
注意不要在 print 关键字后面加上左括号,除非您希望相应的右括号终止 print 的参数;在所有参数周围加上括号(或插入 a
+
,但这看起来不太好)。
在上面的案例中,我发现这个案例+
更容易编写和阅读。YMMV。
如果您坚持使用split
它,那么您可能会将一个长字符串拆分为多个字段,只丢弃除第一个之外的所有字段。第三个参数 tosplit
应该用于限制将字符串划分为的字段数。
my $string = 'hello.world';
print((split(/\./, $string, 2))[0]);
但我相信正则表达式更好地描述了你想要做什么,并完全避免了这个问题。
任何一个
my $string = 'hello.world';
my ($first) = $string =~ /([^.]+)/;
或者
my $string = 'hello.world';
print $string =~ /([^.]+)/;
将为您提取第一个非点字符字符串。
尝试第二个示例时出现以下错误:“test.pl 第 3 行的语法错误,靠近“)[”
不,如果您按照应有的方式启用了警告,您会得到:
print (...) interpreted as function at test.pl line 3.
syntax error at test.pl line 3, near ")["
这应该是您的问题的一个重要线索。