![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
以下例1.例2のサブルーチンの部分についてリファレンスを使った書きかたを教えて下さい。よろしくお願いします。
例1.
@array1 = ('111x111', '22y2'); $str1 = 'x';
print "find '$str1': ",sagasu($str1,@array1), "\n";
@array2 = ('333x333', '44y4', '555'); $str2 = 'y';
print "find '$str2': ",sagasu($str2,@array2), "\n";
@array3 = ('666x666', '77y7'); $str3 = 'z';
print "find '$str3': ",sagasu($str3,@array3), "\n";
sub sagasu {
my ($what,@area) = @_;
foreach my $idx (0..$#area) {
if ($area[$idx] =~ /$what/) { return $idx }
}
return -1;
}
例2.参照(perlの引数が不安定になります。http://okwave.jp/qa1958086.html)
@array1 = ('111x111', '22y2'); $str1 = 'x';
print "find '$str1': ",sagasu(@array1,$str1), "\n";
@array2 = ('333x333', '44y4', '555'); $str2 = 'y';
print "find '$str2': ",sagasu(@array2,$str2), "\n";
@array3 = ('666x666', '77y7'); $str3 = 'z';
print "find '$str3': ",sagasu(@array3,$str3), "\n";
sub sagasu {
(@area, $what); (@area[0..($#_ - 1)], $what) = @_;
foreach my $idx (0..$#area) {
if ($area[$idx] =~ /$what/) { return $idx }
}
return -1;
No.1ベストアンサー
- 回答日時:
リンク先の回答にも同じことが書いてありますけど、
渡すときに、\ を付けて、
print "find '$str1': ",sagasu(\@array1,$str1), "\n";
渡された方で、受け取ったリファレンスをデリファレンスするだけですよ。
sub sagasu {
($area, $what) = @_;
foreach my $idx (0..$#{$area}) {
if ($area->[$idx] =~ /$what/) { return $idx }
}
return -1;
}
ただ、配列のリファレンスじゃない物を渡されたら、
エラーになるでしょうけど。
No.3
- 回答日時:
サブルーチンのプロトタイプはあまり推奨されてません。
>Tacosanさま#!/usr/bin/perl
use strict;
use warnings;
sub sagasu ($\@){
my ($what, $area) = @_;
foreach my $idx (0 .. scalar(@{$area})-1) {
# foreach my $idx (0 .. $#{$area}) {
return $idx if ($area->[$idx] =~ /$what/)
}
return -1;
}
my @array1 = ('111x111', '22y2');
my $str1 = 'x';
print "find '$str1': ", sagasu($str1, @array1), "\n";
my @array2 = ('333x333', '44y4', '555');
my $str2 = 'y';
print "find '$str2': ", sagasu($str2, @array2), "\n";
my @array3 = ('666x666', '77y7');
my $str3 = 'z';
print "find '$str3': ", sagasu($str3, @array3), "\n";
>perlcritic ref.pl
Subroutine prototypes used at line 5, column 1. See page 194 of PBP. (Severity: 5)
ありがとうございました。
#!/usr/bin/perl
use strict;
use warnings;
sub sagasu (\@$){
my ($area,$what) = @_;
foreach my $idx (0 .. scalar(@{$area})-1) {
return $idx if ($area->[$idx] =~ /$what/)
}
return -1;
}
my @array1 = ('111x111', '22y2');my $str1 = 'x';
print "find '$str1': ", sagasu(@array1,$str1), "\n";
my @array2 = ('333x333', '44y4', '555');my $str2 = 'y';
print "find '$str2': ", sagasu(@array2,$str2), "\n";
my @array3 = ('666x666', '77y7');my $str3 = 'z';
print "find '$str3': ", sagasu(@array3,$str3), "\n";
No.2
- 回答日時:
sub sagasu(\@$)
のようにプロトタイプ宣言しておけば
sagasu(@array, $str)
のように呼び出しても OK. 勝手にリファレンスに変換されるだけだけど.
ところでこれ, shift とか pop 使ったらもっと簡単にならない?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript java keyを配列で表記したい 10 2022/12/01 17:53
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- Visual Basic(VBA) ワークブック内すべて検索 2 2022/12/20 20:13
- Visual Basic(VBA) Worksheet_Change 4 2023/03/12 21:54
- Visual Basic(VBA) VBAで時間(00:00形式)を積算(足し算)したい 1 2022/11/15 17:04
- 英語 文法的解釈を教えてください 1 2023/06/22 10:05
- 電車・路線・地下鉄 初台→新宿3→代官山(7.6km)IC528円 笹塚→新宿3→中目黒(10.2Km)IC433円なぜ 5 2022/11/24 09:26
- Visual Basic(VBA) select caseの入れ子 3 2023/03/08 18:48
- FTTH・光回線 ビッグローブ光とルーターの相性 2 2023/03/18 19:44
- Visual Basic(VBA) 順列をランダムに発生するプログラム 1 2022/11/16 12:16
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
乱数と順列と組み合わせ
-
画面を強制的に再描画させる方法
-
VBAでの一時停止と再開の方法
-
Escキーを押すと、中断する時と...
-
DOSコマンドのループ内のTIMEコ...
-
範囲指定したセルを1つずつ飛...
-
VBA横データを縦にしたいです
-
VB2010でCSVファイルの読み込み
-
チェックデジットについて
-
乱数の桁数指定、または範囲指定。
-
CSVファイルの特定の行だけを読...
-
リストボックスに縦スクロール...
-
Can't use string ("0") as an ...
-
フラグについて
-
GIFアニメをループさせたくない
-
ループからの抜け出し方
-
VBA Dir関数でファイルをループ...
-
VBAのautofilter、criteriaの配...
-
ループフリー
-
VBAで3秒だけ時間を止めたい
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
index関数で複数個抜き出す
-
perlで2つの配列を比較する方...
-
perlでファイルの拡張子を除い...
-
桁数指定と四捨五入
-
[Perl]長すぎるif文を簡単にしたい
-
grep関数を用いた複数行からの抽出
-
配列やハッシュで中身が同じか...
-
組み合わせを作るアルゴリズム
-
複数の配列の要素を繰り返し処...
-
正規表現に関する質問
-
データベースから取得したデー...
-
非共通要素を抜き出す
-
ソート時同じ値がある場合、表...
-
Perl 戻り値の型の判定って出来...
-
QNo.3258883データベースから取...
-
配列に入った変数を二度使いたい
-
C言語の関数ポインタのイメージ...
-
ループ中でのmy宣言と処理速度
-
配列から網羅的な文字列を生成...
-
アルファベットn文字の組み合わ...
おすすめ情報