電子書籍の厳選無料作品が豊富!

Perl初心者です。お願いいたします。
下記のような動きを実現したいのですが、どのような方法があるでしょうか。
できる限りすっきり書きたいのですが、自分で書きますと全パターンを記述していく・・等しか思いつきませんでした。お分かりになる方お教えいただけますと助かります。

$a1、$a2、$a3、$a4、$a5、$a6の6種類のデータがあり、いずれも「1」または「2」が代入されます。
その時に「1」が代入されたもののうち、aの後ろの数字が大きいほうの変数を抽出したいです。

たとえば、$a1、$a2、$a3、$a4、$a5、$a6 のデータが、1、2、2、1、1、2 であれば、「1」のうち数字が大きいのは$a5 なので $TOP = $a5; 、としたいです。

宜しくお願いします。

A 回答 (5件)

表示がくずれるので空白2文字を全角空白1文字で書いていることに注意



use strict;
use warnings;
use feature 'say';

my $a1 = 1;
my $a2 = 2;
my $a3 = 3;
my $a4 = 1;
my $a5 = 2;
my $a6 = 3;

my $top = 'Not Found';
for my $num ( reverse 1 .. 6 ) {
  my $var = eval '$a' . $num;
  if ( $var == 1 ) {
    $top = $num;
    last;
  }
}
say $top; # 4
    • good
    • 0
この回答へのお礼

お礼が遅くなりまして申し訳ありません。
皆さまのアドバイスで大変勉強になりました。_--_1l1_1様の例で無事実現に至りました。
つたない質問に回答くださり大変ありがとうございました。

お礼日時:2012/03/15 20:36

回答No.3さんの言うとおり、最初から配列としてデータを構成するようにしたほうが良いと思います。


ということでこんなのとか:

http://www.ideone.com/qw7nw
    • good
    • 0

>$a1、$a2、$a3、$a4、$a5、$a6の6種類のデータ


配列を使わないのはなぜですか?
    • good
    • 0

if ($a1 == 1) {$TOP = 1;}


if ($a2 == 1) {$TOP = 2;}
if ($a3 == 1) {$TOP = 3;}
if ($a4 == 1) {$TOP = 4;}
if ($a5 == 1) {$TOP = 5;}
if ($a6 == 1) {$TOP = 6;}
    • good
    • 0

そこの「たとえば」の状況では $TOP の値は 1 となりますが, それでいいのですか?



ちなみに, 値が 1 のものがないときにどうすればいいのかも書かれていませんね.

この回答への補足

早速ありがとうございます。そしてご指摘助かります。
TOPが「1」では困ります。。すみません、$TOP=5 にしたいです。
それから「1」が全くなかった場合ですが、その場合は別処理で、このプログラムを通らずに進むことになっていて、そちらの方は動いています。
なので「1」が全くない場合はない、と思っていただけると幸いです。

補足日時:2011/12/17 01:08
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!