• 締切済み

変数名(配列)の中の変数

配列変数の名前の中に変数を入れたい場合、どのように記述すればいいのでしょうか? use strictを用いて、以下のように書いてみましたが、エラーが出て上手く動きません。 ループ x: 1-3 ループ y: 1-2 ${"answer$x"[$y]}=入力値 ←この部分を教えてください。    ループ閉 y ループ閉 x --------------------     answer1[1] answer1[2] answer2[1] answer2[2] answer3[1] answer3[2] とループを通るように、変数名を設定したいのですが、 エラーが出て実行ができません。 エラー:Can't use string ("answer1") as an ARRAY ref while "strict refs" in use at~ -------------------- 実際のプログラムは以下のように書いています。(該当部分のみ) for(my $x=1; $x<$num; $x++) { for (my $y=0; $y<$n; $y++) { my $y = ($x*$n)+$d; my @line = split(/\r/, $data[$y]); my @line0 = split(/\t/, $line[0]); ${"answer$x"[$y]} = $line0[0]; } } よろしくお願いします。

  • kooru
  • お礼率60% (6/10)
  • Perl
  • 回答数1
  • ありがとう数1

みんなの回答

  • mflow
  • ベストアンサー率63% (42/66)
回答No.1

普通はこんな感じに配列の配列にすると思いますが、なぜその書き方が必要なんでしょう。 $answer[$x][$y] = $line0[0];

kooru
質問者

お礼

お礼が遅くなってしまい申し訳ありません。 次の日には回答を見させていただいて、プログラムを動かすことができました。 perlで配列の配列が使えることに気づいていなかったので、本当に助かりました! ありがとうございました。

関連するQ&A

  • perl 配列名変数指定するには

    perlプログラムで for文で ループ分の配列定義するには どうしたらよいですか? 下記のようなことができないかと 考えております。 for(my $i = 0; $i < $file_no; $i++){ my @{"segments$i"} =(); #配列定義 my ${"line$i"}="";     #変数定義 my %{"hash$i"}= ();    #ハッシュ定義 open(ARG1,$ARGV[$i]); while(<ARG1>){ ${'line'.$i} = $_; chomp ${'line'.$i}; @{'segments'.$i} = split(/\t/,${'line'.$i});        ${'hash'.$i}{${'segments'.$i}[0]}=${'segments'.$i}[1];     } close(ARG1); } #下記で、その後 各ハッシュに設定したデータをもとに いろいろ計算したい foreach my $a (keys %{'hash'.$i}){ ・・・ } 今は、Can't declare array dereference in "my" at test.pl line XX, near "} =" と 配列定義でエラーとなり処理できません。

    • ベストアンサー
    • Perl
  • 変数名を配列として利用するには?

    複数のモジュールに記述されている配列を1つの配列へ代入したいと思っています。 単純に考えれば、 @array = (@Module1::array, @Module2::array, @Module3::array); で良いのですが、モジュールが多岐に渡っており、モジュール名自体はスカラー変数へ代入して置き、それを利用したいと考えています。 @array = (); foreach $m (qw(Module1 Module2 Module3)) { $mn = $m. '::array'; foreach $w (@{$mn}) { # @Module1::array にアクセスしているつもり push(@array, $w); } } この様なイメージです。 しかし、@{$mn}は Can't use string ("変数名") as an ARRAY ref while "strict refs" in use at 行番号. になってしまいます。 スカラー文字列に入っている配列変数へアクセスするにはどう記述すれば良いでしょうか?

    • ベストアンサー
    • Perl
  • use strictを用いた際のmy,our,local の使い分け

    perl-5.6.1でuse strictを使っていますが、 あるループで定義した変数値を、その後にでてくるいくつかのループで 参照したい場合は、my,our,localのどれを用いればよいのでしょうか? 例えば、 for ( my $x=0; $x<$n; $x++) { my $b= $x*2+1; ??? @a[$x]=$b;  ← our? local? } と定義をし、その後幾つかのループで以下のように参照する場合です。 for (my $z=0; $z<$n; $z++) { if ($z == ($n-1)) { print $a[$z], "\n"; } else{ print $a[$z], "\t"; } } よろしくお願いいたします。

  • perlで配列名を動的に作り出したい

    試しに次のようにしてみましたがエラーになりました。 #!/usr/local/bin/perl use strict; use warnings; my $mystr = "abcde"; my @{$mystr} = (1,2,3); $mystrの内容はいろい変わっていきます。 ご存知の方いらっしゃいましたらすみませんが教えてください。 よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • @{$protocol_name}

    usr strict; をつかって、 $protocol_name = "pppoe"; @{$protocol_name} のような使い方をしたいと思っていますが、 Can't use string ("pppoe") as an ARRAY ref while "strict refs" in use at ./ctest.pl line 152, <RCFG2> line 7 のようにエラー表示がでてしまいます。 どうしたら回避できるでしょうか。

    • ベストアンサー
    • Perl
  • redoを実行するとスカラー変数の値がundefになってしまうのはどうしてでしょうか?

    はじめまして。 質問があります。 まずは以下のコードを見てください。 ---------------------------------------------------------------- use strict; use warnings; open(FILE,'redo01.txt') or die "$!"; while(my $line = <FILE>) { print "undef\n" unless( defined($line) ); chomp($line); if($line =~ /---$/) { $line .= <FILE>; redo; } print $line,"\n"; } close(FILE); ---------------------------------------------------------------- --redo01.txt---------------------------------------------------- zero--- one--- two--- three--- four ---------------------------------------------------------------- ファイルから一行を読み込んできてスカラー変数$lineに代入して、 redoを実行しながら$lineの値をどんどん連結していき最後に文字列を 表示させようと思っていたのですが、なぜかredoを実行後 ループ内の先頭行に制御を移してから$lineの値を調べてみると、 undefになってしまいます。事実、chomp()関数やパターンマッチ、 print関数を実行すると、エラーになってしまいます。なぜ$lineの値 がundefになってしまうのでしょうか?どうかご教授お願いします。

    • ベストアンサー
    • Perl
  • strict refs in use

    Perl cgiを作っているものです。 Can't use string ("from_auto") as a HASH ref while "strict refs" in use at common.cgi line 43. というエラーがでました。line 43にはstrict refsに関係のありそうな記述はありません。 common.cgiの中に、連想配列の参照渡しを追加したとたん、上記のエラーが出るようになりました。解決策をご指導ください。

    • ベストアンサー
    • Perl
  • threads を使ったマルチスレッドのエラー

    threads のモジュールを使ってマルチスレッドのテストをすると下のようなエラーが 発生します。 何が原因なんでしょうか? Usage: threads->create(function, ...) at C:\testPerl\test9\test0006.pl line 11. use strict; use threads; use Data::Dumper; no strict "refs"; my $countM; for ($countM = 0; $countM < 5; $countM++){ my $test = "test".$countM; ${"thd".$countM}= threads->new(\&mtest($test)); ${"thd".$countM}->join; } print "test end.\n"; sub mtest { my $name = @_; print "$name"."\n"; threads->yield(); }

  • splitの結果をarrayに入れる

    use strict; while (my $line = readline($WILD)) { my @lines = (); my ($column1, $column2, $column3, $column4) = split (/\t/, $line); } とした際に $column1~4を同じarrayつまり@linesに入れたいのですが、どうしたらできますか?

    • ベストアンサー
    • Perl
  • use strictを宣言してlocal変数を使うには?

    Perl初心者です。初歩的な質問ですが、 サブルーチンの中で my だと、その下の{ } ブロックではmyで宣言したローカル変数がスコープされないので  localを使うのではないかと思いますが、 それだと、use strictではエラーになります。 こんなときどう処理したらよいのでしょうか。

    • ベストアンサー
    • Perl