• ベストアンサー

こういった文法構造はありうるの?

elbendの回答

  • elbend
  • ベストアンサー率50% (7/14)
回答No.3

# サブルーチンの宣言と定義 sub func {   my $hoge = "1";   print "hoge: ", $hoge, "\n"; } my $hoge = "2"; print "hoge: ", $hoge, "\n"; {   my $hoge = "3";   print "hoge: ", $hoge, "\n";   $hoge = "4"; } print "hoge: ", $hoge, "\n"; &func; exit; ----------------------------------------- 結果 hoge: 2 hoge: 3 hoge: 2 hoge: 1 サブルーチンとは関係ないです。

demoe
質問者

お礼

回答ありがとうございました。

関連するQ&A

  • 「-wc」オプションの文法チェックで、警告が出ないようにするには?

    「-wc」オプションの文法チェックで、警告が出ないようにするには? たとえば「temp.pl」というライブラリに変数「$A」が定義されてあり、 それを「temp.cgi」というPerlスクリプトで参照したいとします。 これらを、「-wc」オプションを使って文法チェックをすると、 「変数$Aが一度も設定・参照されてないよ」といった旨の警告が出てしまいます。 この警告を出さないようにするにはどうしたらいいのでしょうか? 警告を出さないようにする記述方法って、なにかあるのでしょうか? それとも出てしまうのは仕方ないのでしょうか? 以下、実際のソースの中身および文法チェック結果です。 よろしくお願いします。 ===temp.plの内容=== #! c:/perl/bin/perl $A = '123'; 1; ===temp.cgiの内容=== #! c:/perl/bin/perl require "temp.pl"; print $A; ===文法チェック結果=== >perl -wc temp.pl Name "main::A" used only once: possible typo at temp.pl line 2. >perl -wc temp.cgi Name "main::A" used only once: possible typo at temp.cgi line 3.

    • ベストアンサー
    • Perl
  • fortran90 引数で渡された関数の呼び出し

    fortran90を始めて間もない者です。 メインプログラムより呼び出しているサブルーチンにユーザ関数を渡しています。 このサブルーチンを自前で作成するのが目的です。 引数で受け取った関数を、自前の別関数より呼び出すにはどうしたら良いでしょうか。 Cであれば関数のポインタをグローバルな変数にセットしてやれば可能だと思いますが・・・ !-------------------------------- subroutine sub(func1, a) real::a interface real function func1(x) real::x end function func1 real function func2(x) real x end function func2 end interface call sub2(func2, a) write(*,*) a return end subroutine sub !-------------------------------- real function func2(x) real::func2, x ! ここでfunc1を呼び出したい ! func2=func1(x) end function func2 !-------------------------------- subroutine sub2(funca, a) real::a interface real function funca(x) real::x end function funca end interface a=funca(10.) return end !-------------------------------- program main external func real a call sub(func, a) write(*,*) a end program !-------------------------------- function func(x) real func, x func=2.*x*x end function func

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

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

  • Perlのmyのサブルーチンの内外での宣言の違い

    Perlでmyを使う場合、サブルーチンの内外での宣言の違いについて知りたいです。 私はよくある変数をそのプログラム内全体で使う時(カウントするだけの$iみたいなものや、DBのクエリなど)は、同じ変数名をサブルーチン内で毎回宣言するのが嫌(個人的に同じことを重複するプログラムが好きではないという主義)なので、サブルーチンの外でmyを宣言するのですが、myとかはサブルーチン外で宣言するとどんな問題が生じる可能性があるのでしょうか? また毎回サブルーチン内で宣言するのと外部で宣言するのではどういった時に問題になるのでしょうか?もちろんサブルーチンの外でmy宣言した場合はサブルーチンにその変数が引き継がれることは知っています。 リファレンス部分で変わるような記述を見たことはあります。 さしあたって問題を感じでいないのです、ふと疑問に思ったのですが、どうもそれに書かれたソースが少ないので御存知の方がいればぜひ御教授願いたいです。 <例> my $hoge; sub hoge1 { $hoge = 1; } sub hoge2 { $hoge = 5; } と sub hoge1 { my $hoge = 1; } sub hoge2 { my $hoge = 5; }

    • ベストアンサー
    • Perl
  • 初心者です。Perlではどんな時変数宣言は必要ですか?

    Perl初心者です。 マニュアル本を見ると、Perlでは特に変数を宣言しなくても扱えるようになっていますよね。 今まで幾つか自作CGIプログラムを作ってきたのですが、一度も my や localといった変数宣言を使った事がありません。 プログラム自体は正常に稼働しているので今まで全く無視していたのですが、こちらのPerlカテゴリの質問などを参照させていただいていると、皆さん必ず変数を my で宣言してらっしゃいます。 これは行った方がよいものなのですか? 宣言する事のメリット、宣言しない事のリスク、もしくはしたほうが良い場合、しない方が良い場合等を教えてください。とりあえず、サブルーチン内で宣言すると他のサブルーチンでは使えないらしい、という事だけは朧気に… よろしくお願いします。

    • ベストアンサー
    • Perl
  • 変数の宣言を省略する

     sub main {    local %ren = ("suzuki","30","satou","25","tanaka","50");    &func(\%ren);    print "Test ".$ren{satou}." Test";########「Test 44 Test」  }  sub func {    my ($hashref) = @_;    $hashref->{satou} = "44";  }  &main; このソースは sub func の中で「my ($hashref)」を宣言していますが 変数を用意せずに   (@_)->{satou} = "44"; のようにできるならその方法を教えてください。  sub func {    local (*hash) = @_;    $hash{satou} = "44";  } だった場合についても教えてください。

  • サブルーチンを探すには?

    4万行ほどあるcgiを解読中ですが、サブルーチンだけで数+個あるので、サブルーチンを定義してあるところを探すのが大変です。 &ikeike を選択すると sub ikeikeに手軽にジャンプするにはどういうeditorでどうしたらいいのでしょうか? 秀丸エディタやPerlEditorでは&ルーチンの一覧がでますが、たくさんあるのでその中から見つけるのが大変なのですが..

    • ベストアンサー
    • Perl
  • 関数原型宣言について

    関数原型宣言について 下記のプログラムのfunc関数は、関数原型宣言 <func(int a, long b, char *c);>が述されていないのにfunc関数の仮引数の型longは、関数原型宣言が与えられるといると本に書かれていたのですが、何故でしょうか教えて頂きたい。 ******************************************** #include <stdio.h> /*--- 三つの引数を受け取る関数 ---*/ void func(int a, long b, char *c) { int x; long y; /* … */ } int main(int argc, char *argv[]) { int a = 1; char s[] = "abc"; func(a + 3, 2, s); return (0); } *************************************************************

  • 構造体メンバがポインタであるときの代入

    typedef struct WRITE_BUF_TYPE{  byte adr_h; // ワードアドレス上位  byte adr_l; // ワードアドレス下位  byte *buf_adr; // 送信/受信先 アドレス  byte cnt; // 文字数 }; struct W_BUF_TYPE b[10]; 構造体、データ定義を上のようにしています。 b[10]の空きを探して書き込むサブルーチンを作ったのですが、*buf_adrの設定方法がわかりません。 ご存知の方、教えてください。 サブルーチン sub_func(int8 *adr){  byte i;  for(i=0;i<10;i++){    if(b[i].adr_h==0){  // b[10]の空き検索    b[i].buf_adr=*adr; // アドレスを設定する。ここでエラーとなります。  } } サブルーチンでバッファのアドレスを受けて、b[10]の空きエリアに設定するプログラムです。

  • 関数の定義

    度々すみません、教えてください。。。 func(int a,int b,int c,int d); func(int a,int b); func(int a); っていう関数を使いたい場合、関数の定義(宣言?)はどのように書けばよいのですか?エラーになってしまいます・・・。