-3

我有一个功能:

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;
}

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

4

2 回答 2

5

永远不应该在 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;
}
于 2012-09-15T12:34:48.837 回答
1

您的子程序应如下所示:

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

不是:

sub intrp($str)
...
于 2012-09-15T12:34:02.693 回答