Perl分裂函数为第一个单词

1 perl split

我是Perl编程的新手.我正在尝试拆分功能.这是我的代码:

#!perl;
use strict;
use warnings;
use Data::Dumper;

my @sections = ("Hard Drive", "Multi Drive");
foreach my $secname (sort @sections) 
{
    my $file_name=split / /, $secname;
    print $file_name;
}
Run Code Online (Sandbox Code Playgroud)

所以我试图只输出第二个字的输出.

输出是 22

预期的产出是:

drive
drive
Run Code Online (Sandbox Code Playgroud)

在这里,我试图得到第二个字,但它没有给出预期的输出.

请有人建议并帮助我.

Dav*_*oss 5

当您从Perl函数中获得意外行为时,您的第一步应该是阅读该函数的文档.说明这个的文件split:

将字符串EXPR拆分为字符串列表,并返回列表上下文中的列表,或标量上下文中列表的大小.

因此,在标量上下文中,split返回列表中的元素数,而不是实际列表.你的代码:

my $file_name = split / /, $secname;
Run Code Online (Sandbox Code Playgroud)

正在调用split标量上下文(因为您将结果分配给标量变量).为了得到你想要的结果,你需要split在列表上下文中调用.有很多方法可以实现这一目标.

# Assign to an array, take the second element
my @bits = split / /, $secname;
my $file_name = $bits[1];

# Use a list slice to only get the value that you want
my $file_name = (split / /, $secname)[1];

# Use a list assignment
my (undef, $file_name) = split / /, $secname);
Run Code Online (Sandbox Code Playgroud)