• ベストアンサー

Perlでsub a($)のように$をつける効果は? 引数の細かい仕様について

よくPerlの書籍にsub a($$)のように$をつけるのは、 その関数の引数を明示するのに記述面で優れていると重いますが、他に何か効果や果たす役割はあるのでしょうか? また sub a(){と sub a{の記述の仕方で動作が異なることはあるのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.1

> sub a(){と sub a{の記述の仕方で動作が異なることはあるのでしょうか? 例えば、 % cat a.pl use strict; sub a () { print $_[0]; } a( 1 ); % perl -c a.pl Too many arguments for main::a at a.pl line 5, near "1 )" a.pl had compilation errors. % cat b.pl use strict; sub a { print $_[0]; } a( 1 ); % perl -c b.pl b.pl syntax OK % ――とか。

参考URL:
http://www.kt.rim.or.jp/~kbk/perl5.005/perlsub.html
全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Perlの関数の引数について詳細

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

    • ベストアンサー
    • Perl
  • Perlのサブルーチンの引数引継ぎ?

    こんにちは。 Perlの引数について質問です。 サブルーチンに引数を渡し、サブルーチンの中で他のサブルーチンをよんでいます。 すると引数を渡していないサブルーチンにまで引数が与えられてしまっているようです。 @_で受け取ると引数が渡されてしまい、$_[0]だと渡されずにすみます。 これはなぜなのでしょうか?Perlには引数を引き継ぐルールでもあるのでしょうか? 以下、サンプルです。 -------------------------------- &test('引数です'); sub test { &test2; } sub test2 { (my $hoge) = @_; } -------------------------------- $hogeに「引数です」が入ります。 &test2;を&test2();とすると大丈夫です。

    • ベストアンサー
    • Perl
  • Perlの名前付き引数について

    よく Tkで (-flag=>1, -width=>3) という風に引数に名前が設定できる記述を見たのですが、関数の受け取り側でどのように処理しているのでしょうか? ({-flag=>1, -width=>3}) なら、ハッシュなので、 sub xxxxx($){ my ($h) = @_; $h->{-flag}などでアクセスできるのですが (-flag=>1, -width=>3)はどのようにパラメータを取得しているのでしょうか?

    • ベストアンサー
    • Perl
  • perlでURLに引数を入れるで表示する方法

    現在以下のURLで正常に表示しています。 http://hoge.jp/i.cgi?id=a これを http://hoge.jp/i.cgi?a で表示させたいと思うのですが、ウエブで調べましたら「METHOD=GETで渡す」方法が現在のやり方 で「コマンドライン引数で渡す」方法に変えたいのですが、perlの記述がいまいちわからず迷ってます。 プログラムはファイルを読み込んで if ("$idno" eq "$id") のこの$idの条件式でヒットさせているものになります。 変数記述等アドバイスいただけますと助かります。 うまく説明できずすみません。 よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • perl system関数 引数 フォルダ

    perlのsystem関数を使って、コマンドを実行したいのですが、 実行ファイルの引数にフォルダを指定すると、うまく動作しません。 以下のように書いています system "実行ファイル フォルダ"; 実行ファイルは .BATファイルで、 指定しているフォルダには複数のテキストファイルが入っています。 perlで書いたcgiファイルは実行ファイルと同じディレクトリにあります。 コマンドからではなく、手動でドラッグ&ドロップすると正常に動作します。 windous7でperlはActivePerlを使用しています。 引数にはフォルダを指定できないのでしょうか? またフォルダを指定できない場合、解決策などはあるのでしょうか? よろしくおねがいいたします。

    • ベストアンサー
    • Perl
  • Perlのsystemでdosコマンドの引数の指定

    Perlでfcコマンドを実行する場合、 system 'fc E:\A\B\x.exe F:E:\A\B\x.exe'; では、うまくいきますが、 引数を変数で指定するにはどのように 記述すればよいのでしょうか。 (Active Perl ,Windows7) my $filename1="E:\A\B\x.exe"; my $filename2="F:\A\B\x.exe"; system 'fc $filename1 $filename2'; <--- (NG) system "fc $filename1 $filename2"; <--- (NG) system fc $filename1 $filename2; <--- (NG)

    • ベストアンサー
    • Perl
  • VB6で配列を引数にするときの2通りの方法について

    VB6で引数に配列を渡す方法が2通りあるよう?ですが以下のような配列があり、渡し方によって引数の定義の仕方が異なると思うのですが、(2)番目の関数の書き方が知りたいです。 dim ary_dat(10) as integer (1)test_A( ary_dat ) は、sub test_A( byref ary() as integer)という関数を作れば動作することはわかりましたが、 (2)test_B( ary_dat(0) ) は、関すでどのような引数を定義すればできるのでしょうか?

  • 各々の関数を処理するごとに変数aに1を足したい

    各々の関数を処理するごとに変数aに1(実際には関数ごとに異なる数)を足したいと考えています。 (関数Aの処理を行った場合には変数aに1を足し(0+1=1)、加えて関数Bの処理を行った場合には変数aにさらに1を足して(1+1=2)、加えて関数Cの処理を行った場合には変数aにさらに1を足して(2+1=3)・・・・) perlでは以下のような記述で実現できるかと思いますが、JAVAスクリプトではどのように記述すればよいのでしょうか。色々と参照しながら試行錯誤したのですが、うまく動作しませんでした。恐らくは基本的な質問かとも思われ大変恐縮ですが、特にJAVAスクリプトに関しては全くの初心者の為、何卒ご教授いただけないでしょうか。申し訳ありませんが、よろしくお願いいたします。 $a = 1; sub A{$a = $a+1;} sub B{$a = $a+1;} sub C{$a = $a+1;} &A; &B; &C; print "$a"; ############################################# ちなみに、本などを見ながらreturnや引数を利用するのかと試行錯誤したのですが、具体的な記述方法が分からず、失敗しました。 a=1; function A() {a = a+1;} function B() {a = a+1;} function C() {a = a+1;} function A(); function B(); function C(); document.write(a);

  • 外部関数を利用する方法。

    外部関数を利用する方法。 初歩的な質問で恐縮ですが、ご教授願います。 perlで、他のディレクトリ(フォルダ)にあるcgiファイルの関数(sub aaa())を呼び出したいのですが、記述方法がわかりません。 /aaa/a1.cgi #↓=========================== : &hoge; : #↑=========================== /bbb/b1.cgi #↓=========================== : sub hoge{ : } : #↑=========================== このような感じです。よろしくお願いします。

    • ベストアンサー
    • Perl
  • 変数など厳密なプログラムが書きたいのですが、どうすればよいでしょうか?

    PHPで関数の引数に渡すとき、以下のように$aaを$aとしてしまった場合に 関数内の$idは値がありませんが、関数内でこれを検出することができるのでしょうか? Perlなら use strict;とし、my等で定義されていない変数はすべて警告表示されますが、PHPはスルーです。 変数など厳密なプログラムが書きたいのですが、どうすればよいでしょうか? $aa = 1; test($a) function test($id){ ... }

    • ベストアンサー
    • PHP