![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
只今、Perlを勉強中なのですがリファレンスについてご質問させて頂ます。
Perlのリファレンスについて自分でも調べてみたのですが、いまいち使い方や使うメリットがよくわかりません。
どなたかわかりやすいサンプルなどと一緒に教えて頂けないでしょうか。
どういった場面で、どのように使うと便利なのかがわかりません。
そもそもリファレンスは積極的に使うべきものなのでしょうか?
Perlのオブジェクト指向で使うものなのでしょうか?
C言語のポインタと似てる、と説明されてもC言語は全く知らないのでイメージがつきません。
素人でもわかるようにご教授、またはサイトの紹介をお願い致します。
No.2ベストアンサー
- 回答日時:
まあ無責任な話ですが、使う必要がなければ使わないでいいです。
ではどういうときに使わなければならないかというと
・多次元配列を実現するとき
・↑に関連しますが、複雑なデータ構造を実現するとき
・Perlでオブジェクト指向プログラミングをするとき
などです。
#多分抜けがあります。
ご自分でも検索されたとのことで、すでに見たものだったら申し訳ありませんが
perlreftut - Mark's very short tutorial about references
http://www.kt.rim.or.jp/~kbk/perl-5.8/perlreftut …
perlref - Perlのリファレンスとネストしたデータ構造
http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlref …
あと続・はじめてのPerlあたりに詳しい話があったと思います。
今手元にないので確認できませんが。
Amazon.co.jp: 続・初めてのPerl 改訂版: 本: Randal L. Schwartz,brian d foy,Tom Phoenix,吉川 英興,伊藤 直也,田中 慎司,株式会社ロングテール/長尾 高弘
http://amazon.jp/dp/4873113059
最後に重箱の隅をつつきます :)
> ご質問させて頂ます。
自分が質問する立場の場合は「ご」をつけちゃダメです。
相手の質問に答えるときはつけていいですけど。
> 素人でもわかるようにご教授
音が似ているので誤解されますがこのような場合は「教示」
を使う方がよいです。
返事が遅くなりすみませんでした。
紹介して頂いたサイトは非常に参考になりまた。
これから少しづつ勉強していきたいと思います。
ありがとうございました。
No.4
- 回答日時:
まあ,ほんと使う必要がなければ使うことはないというところです.
書籍だったら,とりあえず既出の
「続・初めてのPerl改訂版」が定番でしょう.
それだけじゃ何なので,ちょっとした例を.
use strict;
use warnings;
sub add{
return $_[0]+$_[1];
}
sub multi{
return $_[0]*$_[1];
}
sub add_or_multi{
return $_[2]->($_[0],$_[1])
}
print add_or_multi (1,2, \&add),"\n";
print add_or_multi (1,2, \&multi),"\n";
サブルーチンのリファレンス,いわゆるコールバックの例です.
リファレンスはスカラーですので,
他のサブルーチンの引数にできます.
こうすることで
ちょびっとだけ違うサブルーチンの違う部分を抽出して
一個に整理できます.
返事が遅くなりすみませんでした。
特に使う場面がなければ無理に使う必要はないんですね。
他の方もお勧めしている「続・初めてのPerl」は書店で拝見したいと思います。ありがとうございました。
No.3
- 回答日時:
何度もすみません。
#1です。さっきのは、ハードコーディングしちゃってて、
いまいちだったかな?と反省。
同じデータ構造を生成するヤツを。
データは不自然ですが勘弁してください。
あと、なんでそんな構造?ってのも無しでお願いします。(あくまでも例ですんで。)
push @{$actors->{$family_name}} , { name => $first_name , age => $age };
この行ですが、
$actors はハッシュのリファレンスで、その値は配列のリファレンスで、
その配列に無名ハッシュのリファレンスを push してるってことになります。
で、最終的には、
$actors->{'磯野'}->[2]->{name}
か
$actors->{'磯野'}[2]{age}
みたいに参照できます。
で、リファレンスを他の変数に代入しても良いので、
my $wakame = $actors->{'磯野'}->[3];
てすれば、
$wakame->{name}
で使えます。
要は決まった形のデータ構造を繰り返している場合なんかに、
無名配列やら無名ハッシュが便利です。
なんか、便利そうな感じが分かってもらえたらいいんですが…
(やっぱ分かり難くしてます?)
あと、Perl のオブジェクト指向は、リファレンスを理解しとかないと辛いでしょね。
#! perl
use strict;
use warnings;
use Data::Dumper;
my $actors;
while ( my $line = <DATA> ) {
chomp $line;
my( $family_name , $first_name ,$age ) = split /,/ , $line;
push @{ $actors->{ $family_name } } , { name => $first_name , age => $age };
}
print Dumper $actors;
print $actors->{ '磯野' }->[ 2 ]->{ name } , 'は' , $actors->{ '磯野' }[ 2 ]{ age } ,'才' , "\n";
my $wakame = $actors->{ '磯野' }->[ 3 ];
print $wakame->{ name } , 'は' , $wakame->{ age } , '才' , "\n";
__DATA__
磯野,波平,54
磯野,フネ,50
磯野,カツオ,11
磯野,ワカメ,9
フグ田,マスオ,28
フグ田,サザエ,24
フグ田,タラオ,3
返事が遅くなりすみませんでした。
丁寧な回答ありがとうございます。
Perlのオブジェクト指向にはリファレンスは欠かせないんですね。
少しづつ勉強していきたいと思います。
No.1
- 回答日時:
こんにちは、
多分色んな方が良いアドバイスをくれるでしょうから、
難しい説明は他の方に任せます(無責任)。
以下の様なデータ構造の場合に便利っぽいですよ、
かえって分かりにくいでしょうか?
$actors に無名ハッシュのリファレンスを格納してます。
で、苗字をキーにして無名配列のリファレンスを持たして、
さらにその中には、無名ハッシュのリファレンスです。
#! perl
use strict;
use Data::Dumper;
my $actors = {
'磯野' => [
{ name => '波平' , age => 54 },
{ name => 'フネ' , age => 50 },
{ name => 'カツオ' , age => 11 },
{ name => 'ワカメ' , age => 9 },
],
'フグ田' => [
{ name => 'マスオ' , age => 28 },
{ name => 'サザエ' , age => 24 },
{ name => 'タラオ' , age => 3 },
],
};
print Dumper($actors), qq(\n) x 2;
while ( my($family_name , $members) = each %{$actors} ) {
print '*' x 20 , "\n" , $family_name , '一家一覧' , "\n" , '*' x 20 , "\n";
for (@{$members}) {
print $_->{name} , ' => ' , $_->{age} ,"\n";
}
print "\n";
}
サイトは知りませんが、
本なら、高いですけど、オライリーの「続・初めてのPerl」あたりだと思いますよ。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Perl perlをバージョンアップしたら、今まで正常に動いていたプログラムが、エラーになってしまった 3 2022/10/05 15:44
- CGI サイト訪問者の情報を取得したい 1 2023/02/21 11:03
- Perl perlで2次元配列をサブルーチンに値渡しで渡す 5 2022/12/17 18:49
- Perl Windows10においての『Perl』のプログラムについて 1 2022/05/09 16:04
- IT・エンジニアリング c言語とjavaの需要について 3 2022/06/23 22:59
- その他(プログラミング・Web制作) プログラムの勉強のおすすめは 7 2022/12/09 20:09
- 英語 再帰代名詞の使用及び不使用条件について 2 2022/10/17 11:28
- その他(プログラミング・Web制作) HTMLを組み込むことができない言語 3 2022/05/21 10:05
- Perl perlでリテラル値はメモリにどのように格納されているか? 1 2023/01/15 20:45
- Perl Perlのエラーについてご教授ください。初心者です。 CGIを別サーバに移したところ、Perlのバー 5 2023/05/31 10:48
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
テキストファイルで提出とは?
-
Perlの質問:行と列を入れ替え...
-
perlについて
-
openした後、closeしないでプロ...
-
Perl 特定のフォルダ以外削除
-
perl LWPでURLにアクセスした時...
-
perlをバージョンアップしたら...
-
ファイルをディレクトリ分配の...
-
アルファベットに付いて質問し...
-
#!/usr/bin/perlで書きだしたCG...
-
Perlのエラーについてご教授く...
-
perlのflock関数でロックをかけ...
-
AI sisterとは、偽物の人ですか?
-
bashスクリプト
-
ファイルアイコンの左下に緑の□...
-
perlプログラミング 空白行削除
-
perlでリテラル値はメモリにど...
-
perlで2次元配列をサブルーチ...
-
Perlで時間の計算
-
perlのrequireの動き方について...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
双方向リスト(?)
-
HTML::TemplateのTMPL_LOOPにつ...
-
if($key){ ($key eq 'aaa') ||...
-
連番ごとに印をつける
-
変数に何も入ってないとき
-
ハッシュを無名変数へ代入して...
-
Perlのリファレンスについて
-
VB6の公式リファレンスはありま...
-
DBIを使用してデータを連想配列...
-
bashのリファレンス的なWEB...
-
ハッシュの配列を作ることは可...
-
Yahooの掲示板のような掲示板を...
-
重複する値を表示しない
-
Perl構造体、出力方法
-
ファイルからデータを読み込ん...
-
クラスの作り方
-
構造体の配列の指定方法
-
サブルーチンの返値に配列のハ...
-
C言語について。
-
Perlで縦横変換のような事をし...
おすすめ情報