• ベストアンサー

変数はグローバルなんですか?

初心者です。 関数sub xxx{  $abc=10; } 関数sub yyy{  $def=$abc } というように、関数xxxで宣言した変数もPerlでは 関数yyy内で参照できるのでしょうか。つまり、同じ ファイルにあれば関数内で宣言してもグローバル 変数として使用されるのでしょうか。 (my変数は除きます)

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

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

  • ベストアンサー
回答No.1

>関数内で宣言してもグローバル >変数として使用されるのでしょうか グローバル変数となります。 最近では、 use strict宣言をするのがが主流ですから、 グローバルで使う場面は少ない気がしますけれど。

myfrend
質問者

お礼

natsuki_tkさん、回答ありがとうございます。   use strict宣言ですか。。。わからないので 調べてみます。 (もし時間があれば教えて下さい)

その他の回答 (1)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

Perl では、my 等を使ってローカルスコープにした変数以外は全てグローバルです。

myfrend
質問者

お礼

回答ありがとうございました。 CやC++しか知らない私にとって、use strict宣言 は必須のようです。

関連するQ&A

  • 関数スコープの変更の仕方について

    こんにちは。いつも勉強させていただいております。 VB2005始めて間もない初心者なので分かりにくい表現が多々あるかと思いますが よろしくお願いいたします。 現在2つのプロジェクトを作っていて、どちらもxxx.dllというファイルを参照しています。 やりたいことは、xxx.dll内でグローバル変数として宣言しているyyy変数の関数スコープを動的に変更したいと思っております。 プロジェクト1ではyyy変数の関数スコープをPrivate プロジェクト2ではyyy変数の関数スコープをPublic なお、このxxx.dllは他にも色々と使われており、基本はPrivateのままにしておきたいので、 最初からxxx.dllのグローバル変数のスコープをPublicにすれば良いということはできません。 特定のプロジェクトから呼び出されたときだけPublicにすることは可能でしょうか? どうぞよろしくお願いいたします。

  • 変数に「.」が含まれる場合...

    例えば・・・ Dim ABC As String '変数ABC の型宣言 ABC = "1.0" DEF = "522" …とまぁ、こんな感じの時。(文法とか、いいかげん) 変数ABCに「.」が含まれている時といない時に 特定の動作をさせたいんです。 変数ABC「.」が含まれていない時 ABC = DEF 「.」が含まれている時 「.」より右の数字を消して ABC & DEF Select Case、もしくはIF文を使って動作させる予定です 変数は、3文字限定です。それと、「.」の位置は 左か真ん中になることもあります。 例)ABC = .12 ABC = 0.1   ABC = 012 …なんとなく、Format関数を使ったら できそうな気がするんですが…。

  • 変数の定義について

    perl中級者です。 とあるPGMの修正を頼まれて行っていたのですが、 変数の定義において print "$ABC{$DEF}\n" という記述がありました。 $ABC$DEF や $ABC[$DEF]、 $ABC${DEF} という記述は使用しますが、 $ABC{$DEF} のような記述ってあるのでしょうか? 前後の処理は関係無しにこのような表現があるのかどうかを教えてください。 また、その場合print等で表現すると、 どのような表示になるのでしょうか? perl:Ver4 開発環境:HP-UX 以上、よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • phpでの局所変数

    phpで、perlでいうlocalやmyのような宣言はできないのでしょうか? function a() {  if(1){   $a=2;   print "$a<br>";  }  print "$a<br>"; } としても2が2つ表示されてしまいます。 ある関数内で場所を問わず宣言したグローバル変数でない変数のスコープは、宣言場所がどこであれ、「関数内」となるのでしょうか?

    • ベストアンサー
    • PHP
  • パッケージ内のグローバル変数

    perlでいまいち理解できないことがあります。 パッケージ内にグローバル変数を作った場合、 外部のスクリプトから完全修飾名で参照できますが、 myによるグローバル変数だけ見ることができません。 レキシカルスコープとはいえ、パッケージ内では グローバル変数にしても参照できないようです。 package MyGlobalVal use vars qw($val1); # これは外部から見える our $val2; #これも外部から見える my $val3; # これは見えない この場合、$val3は外部からなんらかの方法でアクセス 可能なんでしょうか? また参照できない理由はmy宣言により、パッケージの 名前空間とは別の場所(Cだとローカル変数はスタック上に 積まれますよね)にあるから、という理解でよいのでしょうか? アドバイスなどいただけると幸いです。

    • ベストアンサー
    • Perl
  • 特殊変数 $_ の使い方

    Perl初心者です。現在、海外の大学で勉強中なのですが、英語の壁にぶち当たり途方にくれ、こちらのサイトに駆け込みました。どうぞご協力よろしくお願いいたします。 (1)以下の関数で、特殊変数$_ が使われている部分がどこか?という問題があるのですが、よくわかりません。4行目の forの前かな?とは思ったりしたのですが、教えてください。 (2)また、この関数で、引数が「&@」となっていますが、この&の意味を教えてください。 (3)2行目のmy ($block, @listin) = @_ で各$block, @listinに格納される値を教えてください。 (4)この関数の呼び出し方を教えてください。 1sub map_block (&@) { 2   my ($block, @listin) = @_; 3 my @listout = (); 4 push @listout, &$block() for (@listin); 5 return @listout; 6}

  • 変数の宣言をグローバルにしないと変数の参照が出来ま

    変数の宣言をグローバルにしないと変数の参照が出来ません。 ソース全体はカプセル化のために即時関数で囲っています。 function found内で小数点第三位までで四捨五入するようにする処理が共通なので関数化したのですが、 var gramNumを外で宣言しないと参照できずにgramNumが定義されていないと出てしまい困りました 関数スコープの影響だと思い宣言を外に出したのですが、それでも定義されていないと出て、 最終的にグローバル変数にしてやっとうまくいきました。 スコープは自分より上のスコープの変数は参照できるようですが if(xGramEmptyFlag === true) {ないの式がroundの上にあるvar gramNumを参照する場合、 if分の中にある式の一つ上のスコープなので参照できると思ったのですがなぜできないのでしょうか? varはブロックスコープがないので一つ上ではなく同じスコープにあることになるのでしょうか? ただその場合も同じスコープの変数は参照できるのではないのでしょうか?

  • 初心者です。Perlではどんな時変数宣言は必要ですか?

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

    • ベストアンサー
    • Perl
  • BEGIN{}での変数宣言

    'perl'では変数の有効範囲について、'c' と考えかたが違うようですが、違和感があります。 1000行を超えるような'perl'で、随処で頻繁に使うような重要なグローバル変数では、BEGIN 内で明示的に宣言したほうが、引き継いだひとにも親切にかんじるのですが、みなさんはどうお感じになりますか? 'perl'を作られたかたは、'c'の自動変数を'my'で、'extern'を宣言不要という思想でつくられたのでしょうか? (2回目の質問です。変な質問でしたら、ごめんなさい<ToT>)

    • ベストアンサー
    • Perl
  • use strictを宣言してlocal変数を使うには?

    Perl初心者です。初歩的な質問ですが、 サブルーチンの中で my だと、その下の{ } ブロックではmyで宣言したローカル変数がスコープされないので  localを使うのではないかと思いますが、 それだと、use strictではエラーになります。 こんなときどう処理したらよいのでしょうか。

    • ベストアンサー
    • Perl

専門家に質問してみよう