使用Perl按点分割

I a*_* am 6 perl split

我通过两种方式使用split函数.第一种方式:

my $string="chr1.txt";
my @array1=split(".",$string);
print $array1[0];
Run Code Online (Sandbox Code Playgroud)

我收到此错误: Use of uninitialized value in print

当我通过第二种方式分裂时,我没有任何错误.

my @array1=split(/\./,$string);print $array1[0];
Run Code Online (Sandbox Code Playgroud)

我的第一种分裂方式不仅仅适用于点.

有人可以解释一下这背后的原因吗?

Mat*_*Mat 9

"\."只是.,小心逃脱序列.

如果你想在双引号字符串中使用反斜杠和一个点,你需要"\\.".或者使用单引号:'\.'


sno*_*kin 6

如果你只是想解析文件并获得它们的后缀,那么最好使用fileparse()方法File::Basename

  • `fileparse` 不是这个问题的改进解决方案,因为它只是提供了一种更笨拙的应用正则表达式的方式。如果后缀总是以点开头,则应使用 `my ($name, $suffix) = $filename =~ /(.*)(\..*)/` 拆分基名 (2认同)