【发布时间】:2013-12-03 10:29:44
【问题描述】:
我今天在使用拆分功能时遇到了一些困难,并阅读了perlfunc 看看我是否解释错了。我试图在 '.' 上拆分一个字符串,根据 perlfunc 应该因此得到支持:
my $string = "hello.world";
my ($hello, $world) = split(".", $string);
或
my $string = "hello.world";
my ($hello, $world) = split(/\./, $string);
但是,测试第一个导致空变量,所以我将测试扩展到以下内容:
#!/usr/bin/perl
use strict;
use warnings;
my $time_of_test = "13.11.19.11.45.07";
print "TOD: $time_of_test\n";
my ($year, $month, $day, $hr, $min, $sec) = split(/\./, $time_of_test);
print "Test 1 -- Year: $year month: $month day: $day hour: $hr min: $min sec: $sec\n";
($year, $month, $day, $hr, $min, $sec) = split(".", $time_of_test);
print "Test 2 -- Year: $year month: $month day: $day hour: $hr min: $min sec: $sec\n";
($year, $month, $day, $hr, $min, $sec) = split('.', $time_of_test);
print "Test 3 -- Year: $year month: $month day: $day hour: $hr min: $min sec: $sec\n";
($year, $month, $day, $hr, $min, $sec) = split("\.", $time_of_test);
print "Test 4 -- Year: $year month: $month day: $day hour: $hr min: $min sec: $sec\n";
($year, $month, $day, $hr, $min, $sec) = split('\.', $time_of_test);
print "Test 5 -- Year: $year month: $month day: $day hour: $hr min: $min sec: $sec\n";
这是输出:
> ./test.pl
TOD: 13.11.19.11.45.07
Test 1 -- Year: 13 month: 11 day: 19 hour: 11 min: 45 sec: 07
Test 2 -- Year: month: day: hour: min: sec:
Test 3 -- Year: month: day: hour: min: sec:
Test 4 -- Year: month: day: hour: min: sec:
Test 5 -- Year: 13 month: 11 day: 19 hour: 11 min: 45 sec: 07
这是否按预期工作?如果是这样,我是如何误解 perlfunc 文档的?
【问题讨论】:
-
+1 这证实了我的怀疑,即 split 总是将第一个参数插入为正则表达式。
-
如有疑问,请检查 perldoc => perldoc.perl.org/functions/split.html
-
如果您没有让 Perl 抱怨
my $string = hello.world;中的裸词,那么您就没有使用use strict;和use warnings;,这是……粗心?危险的?傻吗? -
@JonathanLeffler - 你是对的,这对我来说是粗心的。我打算将这些信息设为伪代码。我测试的真实代码是从 she-bang 行开始的大块代码。很抱歉造成混乱。
-
我已更新问题以更正裸词。