perl 上的函数不起作用



我有一个函数:

my $descr = 'Rand [Hi|Hello|Aloha] [Kate|Ann|Polly]';
print intrp($descr);
sub intrp($str)
{
my $str =~ s{
    [ ( [^]]* ) ]
}{
    my @choices = split /|/, $1;
    $choices[rand(@choices)]
}xeg;
return $str;
}

为什么它不起作用?=\ 我尝试了一些其他方法,但它们对我没有帮助

永远不应该在 Perl 子例程声明中使用原型。他们做了一些非常具体的事情,除非你知道那是什么,否则你应该完全避免他们。特别是命名的原型还没有被任何版本的Perl支持。

您还应该始终use strictuse warnings每个程序的顶部。它将突出显示容易被忽视的错误,否则可能需要一段时间才能修复,并且在您向其他人寻求程序帮助之前是常见的礼貌

此版本的代码似乎可以正常工作

use strict;
use warnings;
my $descr = 'Rand [Hi|Hello|Aloha] [Kate|Ann|Polly]';
print intrp($descr);
sub intrp {
  my ($str) = @_;
  $str =~ s{ [ ( [^]]* ) ] }{
      my @choices = split /|/, $1;
      $choices[rand(@choices)]
  }xeg;
  return $str;
}

您的子例程应如下所示:

sub intrp
{
 my ($str) = @_;
 $str =~ s{
....

不:

sub intrp($str)
...

最新更新