加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-15 23:23:57 所属栏目:大数据 来源:网络整理
导读:我仍然在赚Perl,知道我还有很长的路要走,我一直在读O’Reilly的Perl书籍,还在Udemy学习一些课程,甚至还参加了Perl的Lynda课程. 我正在尝试编写一个备份程序来解决我的需求,但我似乎很难用我的一个功能. sub list { my @zfs_temp = `zfs list`; foreach (@zfs
我仍然在赚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,@mountn";
    return (@name,@mount);
    }
}

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

谢谢

解决方法

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

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

 }

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

另外,你应该用my声明这些数组.否则Perl会在use strict下投诉,你应该经常使用.

欢迎来到Perl!

编辑:

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

return (@name,@used,@available,@refer,@mount);

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读