perl中的split函数应该如何工作?

Bts*_*Bts 4 regex perl split

我今天在分割功能方面遇到了一些困难,并通过perlfunc读取 以查看我是否错误地解释了某些内容.我试图在'.'上分割一个字符串,因此应该支持perlfunc:

my $string = "hello.world";
my ($hello, $world) = split(".", $string);
Run Code Online (Sandbox Code Playgroud)

要么

my $string = "hello.world";
my ($hello, $world) = split(/\./, $string);
Run Code Online (Sandbox Code Playgroud)

但是,测试第一个导致空变量,所以我将测试扩展到以下内容:

#!/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";
Run Code Online (Sandbox Code Playgroud)

这是输出:

> ./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
Run Code Online (Sandbox Code Playgroud)

这是否按预期工作?如果是这样,我是如何误解perlfunc文档的?

AKH*_*and 9

split的第一个参数是正则表达式.你永远不应该在这里使用字符串(特殊情况除外" "),因为它对实际行为有误导性.

与分裂时,你有没有结果的原因".",并'.'是,它是解释这些正则表达式(分上的一切).

使用/\./'\.'获得预期结果,因为点在正则表达式中正确转义.

您没有得到任何结果,"\."因为在被视为正则表达式之前,它首先被双引号字符串视为转义序列split.当它进入split呼叫时,它就像是一样".".