我有一个功能:
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;
}
Run Code Online (Sandbox Code Playgroud)
为什么它不起作用?= \我尝试了其他一些方法,但它们没有帮助我
您永远不应该在Perl子例程声明中使用原型.他们做了一些非常具体的事情,除非你知道那是什么,否则你应该完全避免它们.Perl的任何版本都不支持特定的命名原型
你应该也总是 use strict和use 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;
}
Run Code Online (Sandbox Code Playgroud)