perl调用子例程生成随机字符串不起作用

时间:2017-10-13 09:26:30

标签: 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是全局变量,也可以工作。我错过了什么?谢谢,

1 个答案:

答案 0 :(得分:11)

您需要在子例程中明确添加return语句。 在子例程中自动返回最后一个语句在循环结构中不起作用,在您的示例中,循环结构是{​​{1}}循环。 for循环的后缀版本等同于带花括号的常规版本。

来自perldoc perlsub

  

如果没有"返回"找到,如果最后一个语句是表达式,则为       返回值。如果最后一个语句是循环控制结构,如       a" foreach"或者"而",未指定返回的值。空子       返回空列表。