逐行解析数组并将其爆炸成更多数组

Ron*_*oiu 4 arrays perl return function

我仍然在赚Perl,知道我还有很长的路要走,我一直在读O'Reilly的Perl书籍,还在Udemy学习一些课程,甚至还参加了Perl的Lynda课程.

我正在尝试编写一个备份程序来解决我的需求,但我似乎很难用我的一个功能.

sub list {
    my @zfs_temp = `zfs list`;
    foreach (@zfs_temp) {
    my ($name, $used, $available, $refer, $mount) = split(/\s+/);
    push(@name, $name);
    push(@used, $used);
    push(@available, $available);
    push(@refer, $refer);
    push(@mount, $mount);
#    print "@name, @used, @available, @refer, @mount\n";
    return (@name, @used, @available, @refer, @mount);
    }
}
Run Code Online (Sandbox Code Playgroud)

似乎我只回到了一条线,我真的不确定我做错了什么,有人能指出我正确的方向吗?

谢谢

Dan*_*zer 5

你的问题在于你过早地回来了.

sub list {
    my @zfs_temp = `zfs list`;
    my (@name, @used, @available, @refer, @mount); #declared ahead of time and scoped appropriately 
    foreach (@zfs_temp) {
        my ($name, $used, $available, $refer, $mount) = split(/\s+/);
        push(@name, $name);
        push(@used, $used);
        push(@available, $available);
        push(@refer, $refer);
        push(@mount, $mount);
    }
    return (@name, @used, @available, @refer, @mount); #note how it's outside the loop now

 }
Run Code Online (Sandbox Code Playgroud)

否则你只需在经过一次循环后返回,可能不是你想要的.

另外,您应该使用a声明这些数组my.否则Perl会抱怨use strict你应该经常使用.

欢迎来到Perl!

编辑:

正如Joel所指出的,您可能希望返回对这些数组的引用.它很容易做到,只需使用:

return (\@name, \@used, \@available, \@refer, \@mount);
Run Code Online (Sandbox Code Playgroud)

如果你对此感到困惑,请查看perlref.