アプリ版:「スタンプのみでお礼する」機能のリリースについて

-------------
---aaa---




---bbb---






--------------


上記のようなテキストファイルがあります。
この場合、
@aaa,@bbb (変数名は事前に分かっています)
にそれぞれ配列に入れたい
どのようにすると、スマートにそれぞれ配列に入れることができますか?

一応、自分でもやってみて動きはするのですが、仮に---ccc---のブロックができると対処できません。
open(F,"<$test");
my @f = <F>;
close F;
shift @f;
chomp @f;
for(@f){
if($_ =~ m/--bbb--/){last;}
if(length($_) <= 4){last;}
push(@aaa,$_);
}
@f = reverse @f;
for(@f){
if($_ =~ m/--bbb--/ ){last;}
if(length($_) <= 4){next;}
push(@bbb,$_);
}

A 回答 (2件)

No1です。


連投すみません。
No1は、破棄してください。

open(F,"<$test");
my @f = <F>;
close F;
for(@f){
chomp($_);
if ($_ =~ m/---([a-z]{3})---/){
$var = $1;
$str = '@' . $var . '= [];';
eval($str);
next;
}
if(length($_) <= 4){next;}
$str = 'push(@' . $var . ',\'' . $_ . '\');';
#print($str);
eval($str);
}
print @aaa,"\n";
print @bbb,"\n";
    • good
    • 0
この回答へのお礼

再度、回答いただきありがとうございます。
コンパイラーが通りました。
evalを使ってする方法があるのですね!
大変勉強になりました!

お礼日時:2022/04/27 23:42

eval をつかってみました。


最後の2行の
print @aaa,"\n";
print @bbb,"\n";
は確認用です。
ーーーーーーーーーーーーーーーーーーーーー
open(F,"<$test");
my @f = <F>;
close F;
for(@f){
chomp($_);
if ($_ =~ m/---([a-z]{3})---/){
$var = $1;
$str = '@' . $var . '= [];';
eval($str);
next;
}
if(length($_) <= 4){next;}
$str = 'push(@' . $var . ',"' . $_ . '");';
eval($str);
}
print @aaa,"\n";
print @bbb,"\n";
    • good
    • 0

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