-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 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;
}
于 2012-09-15T12:34:48.837 に答える
1

サブルーチンは次のようになります。

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

いいえ:

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