1

私はPerlスクリプトに取り組んでおり、以下に示すように、ユーザーがスクリプトの先頭にいくつかの設定変数を追加します。これらはすべて接頭辞が付いて$XXいます。ただし、ユーザー設定変数は、それらをクリーンアップするために短い変換関数を実行する必要があります。

$XXプレフィックスが付いたすべての変数でサブを実行する方法はありますか?

my $XXvar1 = "something";
my $XXvar2 = "something";
my $XXvar3 = "something";
my $XXvar4 = "something";

sub processVar {
    my $fixVar = $_[0];
    # Do stuff
    return $fixVar;
}

# This obviously doesn't work. Use some kind of loop or something? How...
$XXvar* = processVar($XXvar*);

編集: グーグルのいくつかの提案に従って、私は今ハッシュでこれをやろうとしています:

my %XX;

$XX{var1} = "something 1";
$XX{var2} = "something 2";
$XX{var3} = "something 3";
$XX{var4} = "something 4";

for次に、またはwhileループ内のキーと値を操作できます。ただし、ループ内の変換された変数に各変数を再割り当てするにはどうすればよいですか?

もう一度編集し てください:了解しました。このforループは、すべての変数を正常に処理します。

for my $key ( keys %XX ) {
    $XX{$key} = processVar($XX{$key});
}

ただし、以下に示すように、今は間違いなく構成ファイルを作成しようとしています。今、私はそれを理解する必要があります:)

4

4 に答える 4

10

ユーザーがソースを編集して奇妙な変数名を提供する代わりに、代わりに構成ファイルを使用します。すべてのユーザーは、独自の構成ファイルを取得できます。CPANには、ほぼすべての形式の構成ファイルを処理するモジュールがいくつかあります。Perl プログラムの構成方法については、Mastering Perlの章で説明しています。これらの変数名を魔法のように取得するために必要なトリックよりもはるかに簡単です。

于 2009-06-21T13:38:39.133 に答える
2

MJD を読む:

  1. なぜ「変数を変数名として使う」のはばかげているのか
  2. パート2
  3. パート3
于 2009-06-21T13:43:24.680 に答える
1
#!/usr/bin/perl

use strict;
use warnings;

my $XXvar1 = "something";
my $XXvar2 = "something";
my $XXvar3 = "something";
my $XXvar4 = "something";

my @values;
for ( 1 .. 4 ) {
    push @values, eval '$XXvar' . $_;
}

processVar(@values);

sub processVar {
    print "@_";
}
于 2009-06-21T13:20:56.970 に答える
1

それを楽しむためだけに。しかし、これは悪いことをしないでください:-)

use PadWalker qw(peek_my peek_our peek_sub closed_over);
my $XXvar1 = "something1a";
my $XXvar2 = "something2b";
my $XXvar3 = "something3c";
my $XXvar4 = "something4d";
my $noXXvar = "something5e";

#remove last character
sub clean {
  my $h = peek_my(1);
  while(my ($key, $value) = each(%$h)) {
    if ($key =~ /^\$XXvar.+/) {
       chop ${$h->{$key}}
    }
  }
}
clean();

print "$XXvar1\n";  //something1
print "$XXvar2\n";  //something2
print "$XXvar3\n";  //something3
print "$XXvar4\n";  //something4
print "$noXXvar\n"; //something5e

私の Perl は少し錆びているので、おそらくより短い/よりクリーンなバージョンがあります。

于 2009-06-21T14:43:16.663 に答える