3

配列に含まれる各単一の文字列を指定せずに、perlで文字列変数の配列を作成することは可能ですか?文字と数字に「..」ショートカットを使用するようなものです。

例えば:

$v1 = "hey";
$v2 = "hello";
$v3 = "bye";
$v4 = "welcome";

@f = ("$v1" .. "$v4");

$f[2]を出力するように; 「さようなら」に等しいだろう...

4

4 に答える 4

2

私はこのアプローチにわくわくしていませんが、あなたはこれを行うことができます:

$v1 = "hey";
$v2 = "hello";
$v3 = "bye";
$v4 = "welcome";

@f = map{eval "\$v$_"}1..4;
于 2012-10-24T20:21:14.260 に答える
1

それはあなたが意味することですか?

my @v = qw/hey hello bye welcome/;

print join "\n", @v;

これARRAYが作成されると、次のアイテムにアクセスできます。

print $v[0];

ここで、 :hey0のインデックスはここにあります。ARRAY

于 2012-10-24T20:12:55.683 に答える
1

evalを使用してこれを行うためのプロシージャを作成できると思いますが、そもそもなぜ$ v1、$v2を使用するのでしょうか。配列から始めてみませんか?

または、実際に何をする必要があるかに応じて、次のようなものを使用します

@f = qw(hey hello bye welcome);

于 2012-10-24T20:13:16.720 に答える
1

これは、を使用して解決できる可能性がありますが、おそらく解決すべきではありませんno strict 'refs'。そして偶然にもno strict 'vars'

use strict;
use warnings;
use Data::Dumper;

{
    no strict 'vars';
    $v1 = "hey";
    $v2 = "hello";
    $v3 = "bye";
    $v4 = "welcome";

    no strict 'refs';
    my @f = map ${'v'.$_},1..4;
    print Dumper \@f;
}

出力:(警告なし)

$VAR1 = [
          'hey',
          'hello',
          'bye',
          'welcome'
        ];

実際に参照する必要no strict 'vars'のある変数は(実際には)名前が付けられて$main::v1いるなどの理由で必要ですno strict 'vars'。完全な指定を使用することで、実際に必要性を回避できます。また、strictをまったく使用していない場合、これは問題ではありません。使用しないことstrictは、警告ランプにステッカーを貼って車のエンジンの問題を解決するのと同じくらい賢いですが、エンジンの故障を防ぐことはできません。

あなたはそれをすべきですか?しそうにない。それを回避する方法は常にあります。しかし、あなたがこのような不正行為で船外に出ないことを前提として、このようにすることはひどく間違っていません。

適切な方法は、、...を使用する代わりに、、$v1...$v1000を使用すること$v[0]です$v[1000]。つまり、値をすぐに配列に割り当てます。

于 2012-10-24T21:11:00.427 に答える