Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
perl调用子例程以生成不工作的随机字符串_Perl_Variables_Global Variables_Subroutine - Fatal编程技术网

perl调用子例程以生成不工作的随机字符串

perl调用子例程以生成不工作的随机字符串,perl,variables,global-variables,subroutine,Perl,Variables,Global Variables,Subroutine,用于生成随机字符串的脚本: sub rand_Strings { my @chars = ("A".."Z", "a".."z", "0".."9"); my $string; $string .= $chars[rand @chars] for 1..8; } my $strings = &rand_Strings; print $strings; 但是,当它不在子例程中时,它会工作。如果$string是一个全局变量,它也可以工作。我错过了什么?谢谢,您需要在子例

用于生成随机字符串的脚本:

sub rand_Strings {
   my @chars = ("A".."Z", "a".."z", "0".."9");
   my $string;
   $string .= $chars[rand @chars] for 1..8;
}

my $strings = &rand_Strings;
print $strings;

但是,当它不在子例程中时,它会工作。如果$string是一个全局变量,它也可以工作。我错过了什么?谢谢,

您需要在子例程中显式添加
return
语句。 子例程中最后一条语句的自动返回在循环构造中不起作用,在您的示例中,循环构造是
for
循环。
for
循环的后缀版本相当于带大括号的常规版本

发件人:

如果未找到“return”,并且最后一条语句是表达式,则其 返回值。如果最后一条语句是循环控制结构,如 如果是“foreach”或“while”,则返回值未指定。空潜艇 返回空列表


您需要在子例程中显式添加
return
语句。 子例程中最后一条语句的自动返回在循环构造中不起作用,在您的示例中,循环构造是
for
循环。
for
循环的后缀版本相当于带大括号的常规版本

发件人:

如果未找到“return”,并且最后一条语句是表达式,则其 返回值。如果最后一条语句是循环控制结构,如 如果是“foreach”或“while”,则返回值未指定。空潜艇 返回空列表


在子例程中添加
return$string
。此外,您不需要子例程名称前面的
&
,这是调用子例程的(非常)老方法<代码>我的$strings=rand_strings()可以…参数是可选的。自从1994年发布Perl 5以来,在调用子例程时不必使用
&
。“调用子例程时不必使用
&
”不仅如此,这是不正确的,
&rand_Strings
应该是
rand_Strings()
。在子例程中添加
返回$string
。此外,您不需要子例程名称前面的
&
,这是调用子例程的(非常)老方法<代码>我的$strings=rand_strings()可以…参数是可选的。自1994年发布Perl 5以来,在调用子例程时不必使用
&
。“调用子例程时不必使用
&
”不仅如此,这是不正确的,
&rand_Strings
应该是
rand_Strings()
。亲爱的@xxfelixxx,我发现贴出的问题不是我真正的问题,然而,你的回答确实解决了贴出的问题,我设法解决了我真正的问题。还是谢谢你!很高兴你成功了。您可以尝试在代码上运行
perlcritic
,它会让您了解非最佳实践perl代码。亲爱的@xxfelixxx,我发现发布的问题不是我真正的问题,但是,您的答案确实解决了发布的问题,我设法解决了我真正的问题。还是谢谢你!很高兴你成功了。您可以尝试在代码上运行
perlcritic
,它将让您了解非最佳实践perl代码。