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

perlで引数に関することでわからないことがあるのですが、以下の状態で、実行した際に、$aは1が入るのはわかりますが、$bには具体的にどんな値が入っているのでしょうか? 引数が無い場合は、デフォルトで1をセットしたいです。
phpのvar_dump関数のようなものがPerlには存在すれば便利ですが、そういうものはあるのでしょうか?

sub test{
my ($a, $b, $c, $d) = @_;

}

&test(1);

あと引数の数を2つは必須にして、残りの引数(3つ目はデフォルトで1つ目の引数と同じ値になり、4つ目以降はデフォルトで1となる
関数のプロトタイプを書きたいのですが、どうですればよいのでしょうか?

sub test($$;@  ?のようなものを見たことがあるのですが、どんな意味をしているのでしょうか?結構複雑な引数を持たせることができそうなのですが、詳しく書かれている本などご存知の方教えてください。

A 回答 (2件)

>、$bには具体的にどんな値が入っているのでしょうか?


> 引数が無い場合は、デフォルトで1をセットしたいです

値が渡されずにサブルーチンが呼び出された場合には undef が入ります。
デフォルト値の設定をするにはサブルーチン側で

sub foo {
my $arg1 = shift;
my $arg2 = shift;

$arg2 = defined($arg2) ? arg2 : 1;
}

のようにします。数値のゼロがこないという前提を置いていいなら

$arg2 ||= 1;

と書くこともできます。

PHPの var_dump のようなことは、Perlではモジュールを使ってやります。
データのダンプを行うためのモジュールはいくつかありますが、
簡単なのは Data::Dump か Data::Dumper でしょう。

use Data::Dump qw(dump);
my @foo = qw(abc def ghi);

dump(@foo);

のように使います。
詳しくは perldoc Data::Dump や perldoc Data::Dumper して調べてください。

サブルーチンのプロトタイプに関する解説は、これもPerlがインストールされていれば
使えるはずのコマンド perldoc を使って
perldoc perlsub
とすれば読むことができます。

簡単に説明すると、カッコの中の記号(sigil)はサブルーチンに渡される
引数の型をあらわします。$なら通常のスカラー、@なら配列(リスト)です。

>あと引数の数を2つは必須にして、残りの引数(3つ目はデフォルトで1つ
> 目の引数と同じ値になり、4つ目以降はデフォルトで1となる
> 関数のプロトタイプを書きたいのですが、どうですればよいのでしょうか?

これはプロトタイプだけでは書けません。なぜならデフォルト引数の
指定ができないからです。
すべての引数がスカラーであるなら、
sub foo($$;$$);
としておいて(セミコロンのあとは省略可能な引数の指定です)、
その定義のところで対処するということになります。
    • good
    • 0
この回答へのお礼

非常にわかりやすい説明ありがとうございます。

私は本を読んでいるつもりでしたが、sakusaker7様のような理解度はありませんでした。
そこまでの理解度を得るためには、どんな努力をされてきたのでしょうか?

>のようにします。数値のゼロがこないという前提を置いていいなら
>$arg2 ||= 1;

この部分は、前提条件なくすべて適用できると私の解釈違いをしておりました。(感服します。)

お礼日時:2007/01/08 10:39

> 私は本を読んでいるつもりでしたが、sakusaker7様のような理解度はありませんでした。


> そこまでの理解度を得るためには、どんな努力をされてきたのでしょうか?

本を読むというのも良いことだと思います。ただ、特に日本語での書籍となると
どうしても情報が古いものになったりしがちです。
また、ちょっとしたテクニック(tips)みたいのはあまり本にまとまるようなことはありません。

じゃあどうするかですが、一つには英語でもめげずにドキュメントを読むことです。
perlのインストールされているディレクトリの下に lib/podというディレクトリがあります。
ここに .pod という拡張子のファイルがたくさんありますが、これはみんな
情報の詰まったドキュメントです。少しずつでも読んでいけば得るところは大きいと思いますよ。
全部ではありませんが、日本語に訳されているものもあります。
http://cpan.jp で検索することができるので英語はどうも…というのなら
まずはこちらで。

また、日本にはわたしなんぞ足元にも及ばない Perl Hacker がたくさんいます。
そういった人たちはまとめて情報を発信するということはあまりありませんけれども、
blogなんかにちょこちょこ書いていたりします。はてななんかにはそういう人たちが
多いみたいですから、探してみてはどうでしょう。
またそういう人たちは CPAN にモジュールを登録していることが多いので、
そういったモジュールを読んでみることですね。実際にどういうテクニックを使って
書いているかのいい勉強になります。


Perlプログラマとして有名な Damian Conway という方がいらっしゃるのですが、
彼がテクニックやスタイルをまとめた本 Perl Best Practices という本があります。
昨年秋に日本語訳が出ていますので、読んでみるといい勉強になると思います。

Amazon.co.jp: Perlベストプラクティス: 本: Damian Conway,クイープ
http://www.amazon.co.jp/dp/4873113008/

参考URL:http://cpan.org/
    • good
    • 0

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