我仍然在赚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,@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.