第二次请教 shift用法

第二次请教 shift用法

#!/usr/bin/perl -w
$dir = shift(@ARGV) || "/tmp";
system("ls -l $dir");

传多个参数,只是把ARGV[1]传给系统,后面的为什么没传呢,如何要传,如何做
./or.pl  /home/billy/PleacPerl/string /etc /tmp


perl语言编程中这么写道:
shift ARRAY
shift
这个函数把数组的第一个值移出并且返回它,然后把数组长度减一并且把所有的东西都顺移。如果在数组中不再存在元素,它返回 undef。

如果省略了 ARRAY,那么该函数在子过程和格式的词法范围里移动 @_;它在文件范围(通常是主程序)或者在由 eval STRING,BEGIN { },CHECK { },INIT { },和 END {} 这样的构造里面的词法范围里移动 @ARGV。
哪位指点一下呀
我来消灭零回复吧
不是大家不友好
只是你的问题实在是...
你都已经看了shift,知道是啥意思了:就是将一个数组的第一个元素除去并返回(类似pop)
你知道如何取第一个参数(shift)就可以了
那第二个参数你再shift一遍不就行了?


或者你就老老实实赋值好了,别用这么高深的技巧
my $frist_arg =$ARGV[0]
my $second_arg = $ARGV[1]

.....

这个很困难吗?
或者你可以看看

[Copy to clipboard] [ - ]
CODE:
perldoc -f splice

这是一个更全面的操作符,几乎可以对数组进行任意的操作,相应的也更加复杂一点
好好读读书书吧


QUOTE:
原帖由 bitterness 于 2008-12-19 11:38 发表
#!/usr/bin/perl -w
$dir = shift(@ARGV) || "/tmp";
system("ls -l $dir");

传多个参数,只是把ARGV[1]传给系统,后面的为什么没传呢,如何要传,如何做
./or.pl  /home/billy/PleacPerl/string /etc / ...

这个你应该用 foreach,用啥 shift
哎,我现在是在看别人写的程序,遇到问题,不理解就来问了,麻烦各位了

情况是这样的,之前没用过PERL,现在工作中有很多程序是别人用PERL写的,也是没办法

原来是临时用户,失敬失敬。
呵呵,不过我倒对PERL感兴趣了,就想认真学一下,苦于公司用PERL的是另一个部门

另请教
@name = qw(soap blanket shirt pants plow);
@category = qw(home home apparel apparel farm);
@subcategory = qw(bath bedroom top bottom field);
@indices = sort {$category[$a] cmp $subcategory[$b]
    or $category[$a] cmp $subcategory[$b]} (0 .. 4);
#这里的  a cmp b
            or a cmp b 这个写法蛮有意思的呀,没看懂,知道是排个顺,据我的理解
a cmp b 就可以得到结果,为什么还有or a cmp b ,不知道是作者的笔误还是有其他道理,请指点
foreach $index (@indices) {
    print "$category[$index]/$subcategory[$index]: $name[$index]\n";
}


QUOTE:
原帖由 bitterness 于 2008-12-19 17:36 发表
@indices = sort {$category[$a] cmp $subcategory[$b]
    or $category[$a] cmp $subcategory[$b]} (0 .. 4);
#这里的  a cmp b
            or a cmp b 这个写法蛮有意思的呀,没看懂,

perldoc -f sort

QUOTE:
a cmp b 就可以得到结果,为什么还有or a cmp b ,不知道是作者的笔误还是有其他道理,请指点

估计是写错了或者后来被别人改错了