• ベストアンサー

サブルーチンの中にサブルーチンが書ける?

どこかのサンプルでサブルーチンの中にサブルーチンが書いてあったのですが、 元々Perlではそういう書き方が出来たのでしょうか? Perl4、Perl5、Perl5.6、Perl5.8 どれでも使えるものかどうか知りたいです。

  • Perl
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
  • kabaokaba
  • ベストアンサー率51% (724/1416)
回答No.1

>どこかのサンプルでサブルーチンの中にサブルーチンが書いてあったのですが、 そもそもその「サンプル」がないとお話になりませんが, sub hoge{ my $a=shift; sub huga{ print "naka\n";} huga; return $a; } print hoge(10); この程度のことは当然可能です.たぶん,Perl4でも動くでしょう. Perl5からはいわゆるコードリファレンスがあるので, サブルーチンを返すサブルーチンや サブルーチンを引数にするサブルーチンもかけます.

kt_yuka
質問者

お礼

ありがとうございます。 サブルーチンの入れ子が出来るのか、 そうです、その程度のことが可能なのかどうか知りたかったのです。 見たこと無かったので。 これが出来るんだったら、もっとコードが見やすく出来たのに。 今日はじめて知りました。

関連するQ&A

  • Perlのサブルーチンの引数引継ぎ?

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

    • ベストアンサー
    • Perl
  • サブルーチンについて

    下記のようなソースコードを書いたところエラーが出てしまいました。 $sum = $sample2($a); の箇所でエラーが起こっているようなのですが、解決の仕方が分かりません。 &sample1(5,'&sample2'); sub sample1 { ($a,$sample2) = @_; $sum = $sample2($a); print $sum; } sub sample2 { ($a) = @_; $b = 10; $sum = $a + $b; return $sum; } このように、サブルーチンの中に更にサブルーチンを書いて、なおかつそのサブルーチン名を一旦変数に格納して使用する場合はどのようにプログラムを書けば良いのでしょうか?? ""で囲ったりといろいろとしてもダメでした。 もちろん、$sum = $sample2($a); ではなく $sum = sample2($a); のように書けば良いとは思うのですが、一度サブルーチン名を変数に入れてから使用する場合はどのようにすれば良いのでしょうか?? ご回答の程よろしくお願い致します。

    • ベストアンサー
    • CGI
  • サブルーチンを認識しません。

    perlプログラムで サブルーチンの中で、別のサブルーチンを呼び出していますが、 なぜか認識しません。 KCatchでは以下の表示をしています。 Catch: Mon Sep 22 07:56:36 2003 ------------------------------------------------- [regist.cgi:375:die] Undefined subroutine &main::lock called. > &lock; ------------------------------------------------- regist.cgi with Perl 5.00502 for freebsd サブルーチン名には頭に & を付けて呼び出しています。 サブルーチンは、スクリプトの最後にまとめてあります。 同じサブルーチンは、他のスクリプトでも利用していますが、 エラーは出ていないのですが。 何が原因か、わかりません。 関係ないかもしれませんが、プログラム最初の方でuse strict;の宣言をしています。 他のサブルーチンも認識しません。 KCacthの表示は同じ &main::サブルーチン名 called になっています。 よろしくお願いします。

    • ベストアンサー
    • Perl
  • サブルーチンからサブルーチンを呼び出す

    #平均を求める,サブルーチンを使用 @dat=(1,2,3,4,5,6,7,8,9,10); $mean=&mean(@dat); print "mean="; print $mean; sub mean{ $sum=&sum(@dat); $n=@dat; $mean=$sum/$n; return($mean); } sub sum{ for($i=0;$i<$n;$i++){ $sum+=$dat[$i]; } return($sum); } Perlを勉強し始めたのですがサブルーチンの所で分からない所があるので教えていただけませんか? mean関数(Perlではmeanルーチンなどと呼ぶべきでしょうか?)の中でsum関数を呼び出してデータの合計を$sumに代入したいのですが,この場合だとうまく代入されていないようなのですが,何がよろしくないのでしょうか?

    • ベストアンサー
    • Perl
  • サブルーチンについて

    サブルーチンについての質問です。 サブルーチンの中で設定した変数が、そのサブルーチンを呼び出す度に初期化されてしまいます。 (例えば初めてサブルーチンを呼び出し、そのサブルーチンを抜ける時にはx=10と記憶されているのに、また次にそのサブルーチンが呼び出される時には、x=0となっている。) これをx=10のまま記憶させておき、引き続きサブルーチンの中でこの値を使う事は不可能なのでしょうか? 乱文で申し訳ありませんが、よろしくお願いいたします。

  • phpでサブルーチン

    最近phpを学び始めました perlでよく使うsub(サブルーチン)はphpではどうなるのでしょうか?

    • ベストアンサー
    • PHP
  • サブルーチンについての質問デス

    サブルーチンについての質問です。 サブルーチンの中で設定した変数が、そのサブルーチンを呼び出す度に初期化されてしまいます。 (例えば初めてサブルーチンを呼び出し、そのサブルーチンを抜ける時にはx=10と記憶されているのに、また次にそのサブルーチンが呼び出される時には、x=0となっている。) これをx=10のまま記憶させておき、引き続きサブルーチンの中でこの値を使う事は不可能なのでしょうか? 乱文で申し訳ありませんが、よろしくお願いいたします。

  • JavaScriptでPerlのサブルーチンを呼び出すには?

    JavaScriptでPerlのサブルーチンを呼び出すことはできますか。 #Perl Sub Func_a(){ ... } この Func_a 関数をJavaScriptから呼び出したいのです。

  • ***.cgi内のサブルーチンにアクセス

    とあるスクリプトを見ると、htmlページのボタンで***.cgi?サブルーチン名 へリンクさせるものがあって、特定のサブルーチンにアクセスするようになっているのですが、自作スクリプトでこのようなことを真似てもそのサブルーチンだけが呼び出されず、普通に***.cgiにアクセスした状態になります。過去の記事で***.cgi?変数名=***として、Perl側でifを使って操作させるというのを見つけましたがそれではなく、直接特定のファイルの特定のサブルーチンにアクセスしているようなのですが、どうすればできるのでしょうか?

  • サブルーチンを変数を使って呼び出したい。

    お世話になります。 Perlでサブルーチンを呼び出す場合、 &hogehoge; としますが、 このhogehogeの部分に変数を持っていきたいのですが、 やり方が分からず困っております。 試しに &{$hensu}; とやってみましたが、動きませんでした。 何かやり方はありますでしょうか。 解決策をご存じの方、ご教授よろしくお願いいたします。

    • ベストアンサー
    • Perl

専門家に質問してみよう