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($$;@ ?のようなものを見たことがあるのですが、どんな意味をしているのでしょうか?結構複雑な引数を持たせることができそうなのですが、詳しく書かれている本などご存知の方教えてください。
No.1ベストアンサー
- 回答日時:
>、$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($$;$$);
としておいて(セミコロンのあとは省略可能な引数の指定です)、
その定義のところで対処するということになります。
非常にわかりやすい説明ありがとうございます。
私は本を読んでいるつもりでしたが、sakusaker7様のような理解度はありませんでした。
そこまでの理解度を得るためには、どんな努力をされてきたのでしょうか?
>のようにします。数値のゼロがこないという前提を置いていいなら
>$arg2 ||= 1;
この部分は、前提条件なくすべて適用できると私の解釈違いをしておりました。(感服します。)
No.2
- 回答日時:
> 私は本を読んでいるつもりでしたが、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/
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAでfunctionを利用しようとしたときに「引数は省略できません」というエラーが出ます 1 2022/10/15 16:30
- Visual Basic(VBA) VBA ユーザーフォームからSubプロージャ―に値を引き渡す方法 3 2023/04/09 01:54
- Excel(エクセル) エクセルで同じ数字同士を自動で線で結ぶVBAを教えてください 6 2022/04/26 23:13
- JavaScript useStateの分割代入について 1 2022/05/06 10:02
- UNIX・Linux bash環境でのエラー対応をお願い致します。 1 2022/11/26 17:41
- Amazon Amazonの代引について 1 2023/08/01 17:32
- その他(教育・科学・学問) 関数、写像について 1 2022/04/10 23:45
- C言語・C++・C# c言語 配列とポインタについて 3 2023/02/09 22:53
- その他(Microsoft Office) SUMIFとCOUNTIFの違いについて 4 2022/09/29 14:13
- Excel(エクセル) 数列の数値補間 2 2022/10/27 16:38
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBのReturnの使い方
-
ExcelVBAでのデータ型変換、も...
-
$#{スカラー変数}とは何を意味...
-
画面を強制的に再描画させる方法
-
VBA Dir関数でファイルをループ...
-
JQueryのスライドショーを停止...
-
vb.netからエクセル関数書き込み
-
DOSコマンドのループ内のTIMEコ...
-
Escキーを押すと、中断する時と...
-
エクセルVBAでTransposeの不思議
-
VBAのautofilter、criteriaの配...
-
perl 配列の要素数について
-
文字列を変数名として扱う方法
-
チェックボックスのperlでの値...
-
範囲指定したセルを1つずつ飛...
-
Excel VBA ユーザーフォームの...
-
まったく同じファイルのハッシ...
-
DoEventsが必要な理由について
-
ExcelVBA FindNextを使用して条...
-
隣同士の数字を足し合わせる
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBのReturnの使い方
-
${str}と$strの違いとは?
-
サブルーチンの引数の、呼び出...
-
流れ図・・・
-
サブルーチン(共通の処理)の...
-
COBOLの日付操作
-
ExcelVBAでのデータ型変換、も...
-
スカラー変数をチェック
-
Perlの関数の引数について詳細
-
Perl・DBIでの汎用selectサブル...
-
perlの構文でわからない部分が...
-
CGIのサブルーチンの呼び出...
-
関数の戻り値に配列は設定できる?
-
Perl実行時のメモリ不足について
-
foreachでループした変数を他の...
-
FORTRANのwarning
-
定数についての質問です
-
$#{スカラー変数}とは何を意味...
-
パターンマチングについて(CGI)
-
my($Str)とmy $Strの違い
おすすめ情報