Perl阶乘子例程不接受命令行参数

phi*_*ogg 0 perl

我正在尝试在Perl中创建一个简单的递归阶乘函数,它将从命令行中获取一个数字,然后返回它的阶乘,例如

>./factorial.pl 3
>6
Run Code Online (Sandbox Code Playgroud)

我的子程序似乎没有采用命令行参数.但是,如果我在没有子包装器的情况下使用完全相同的代码,它会采用命令行参数,但显然不能用作子例程.以下是代码:

#!/usr/bin/perl
use strict;
use warnings;
use diagnostics;

sub fact() {
my $number = shift or return;
return 0 if $number < 0;

my $results = 1;

while ($number--) { $results *= $number--};
return $results;
}
Run Code Online (Sandbox Code Playgroud)

yst*_*sth 7

shift在子默认情况下从@_(子的参数)转移; 在子外部,它默认从@ARGV(命令行参数)移位.

所以无论是打电话fact(shift)还是明确说shift(@ARGV)出来fact.

并摆脱()原型:sub fact {...


Sin*_*nür 5

子程序参数被打包@_.传递@ARGV给子程序(并摆脱空原型 - 除非你确切知道他们做了什么,否则不要使用原型):

#!/usr/bin/env perl

use warnings; use strict;

print fact(@ARGV), "\n";

sub fact {
    my ($number) = @_;
    # ...
}
Run Code Online (Sandbox Code Playgroud)

  • 他还需要打电话给分队 (3认同)