![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
ただいま掲示板を製作中なのですが、
コマンドプロンプトでチェックしたところ
"my" variable 変数 masks earlier declaration in same scope at ××××.cgi line….
とのエラーが出ます。
おかしなことにサブルーチン内で重複していたため変数名を変えたはずの以前の変数名でエラー表示になっています。
また現在使用中の変数名でのエラーも出るのですが、以前の変数、使用中の変数のエラーとも指摘されたlineの行では使用してません。
エラーの意味は「同じ名前の変数がありますよ。」ってことなのでしょうか?確かに同じ名前を使ってしまっていたのですが現在は修正したので問題ないはずです。
現在はネットで頂いてきた「Perl CGI Script 実行チェックプログラム」ではエラーなくブラウザに表示されるのですが、直接CGIを実行してもブラウザには表示されません。
なにを修正すればいいのかまったく検討がつきません。
どなたかご教授願いませんでしょうか?
No.3ベストアンサー
- 回答日時:
tetsu222 さん、おはようございます。
(スクリプトのサンプルもありがとうございました)
さて私の申し上げた「myを使わなくてすむスクリプト」ですが、これは「グローバル変数だけを使ったスクリプト」という意味なのでした。このことによりスコープを気にする必要がなくなるので、その分ロジックのほうに集中できる、というメリットがありますね~(私の経験から)。掲示板を作られているということですが、これってロジックがある程度込み入ってますよね~。
あと、書いてくださったコードについては、特に問題は無さそうですが…「my」の後にカッコ「(…)」がついているのは初めて見ました。これってエラーにならないんですね…。あ、余談でした(笑)。
…ご参考になれば幸いです。もし追加でご質問あれば、どうぞ。
hkd900さん、ありがとうございます。
まずは変数名を整理してみようと思います。
さすがにファイルが違えば同じ変数名でも大丈夫ですよね?
requireのものまでとなるとちょっとへこみます。
変数が多くなると名前をつけるので考え込んでしまうときがあるので(笑)
余談ですが、myの()「カッコ」ですが値を複数渡すときに使用してます。
&SUB($AA,$BB,$CC,@DD);
↓
subSUB{
my($AA,$BB,$CC,@DD)=@_;
ってな感じです。
こんなときは()カッコなしでも良いのかな?
たしか参考にした本にこう書いてあったのでまったく違和感なく使ってました(笑)
No.2
- 回答日時:
tetsu222 さん、レスありがとうございます。
では次に、このスクリプト全体でみた場合(今度は、スコープは考えない)、「my」で宣言されている変数にダブリがあるかどうか見てみてください。
もしあれば、それが原因と考えられるので、ダブらないような手立てをしてみてください。
反対に、ダブリがないのであれば、そもそも「my」を使わなくてすむようにスクリプトを修正してしまうのが早いかも。
…これで うまく解決できるといいのですが…
この回答への補足
ご丁寧にありがとうございます。
サブルーチンに値を渡すときは渡す側と受け取り側を同じ変数名にしているのですが、もしかしてそれがいけないのでしょうか?
myで宣言しているのでサブルーチンが違えばいいのかと思ってました!もともとlocalはぜんぜん使ってませんが・・・。
それを直すとするとかなりダブりがあるのでちょっと時間がかかるかもしれません。がんばってやってみます。
ちなみにmyを使わないスクリプトとはすべてlocalで宣言すると言うことでしょうか?
No.1
- 回答日時:
tetsu222 さん、こんにちは。
さて、スクリプトの詳細を拝見しないと何とも言えないのですが、まず…
「my」などで変数を宣言している部分がお有りかと思うのですが、同じものが2つ書かれていないかチェックしてみては如何でしょうか?
ちなみにエラーの意味は「"my"変数<変数名>が、同じスコープ(有効範囲、と考えてください)の中での より早期の宣言とカブッている」みたいな感じですね。
この回答への補足
hkd9001さん、こんにちは。
スコープとはその変数の有効範囲ということですよね?
エラーで指摘されている変数名は指摘された行があるサブルーチン内では現在使用してません。よって、宣言もしてないのです。確かに以前は使用していたのですが、変更しました。ほかのサブルーチンでは使用しているのですが、そっちまで関係しているのでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java コンソールから所属財産を入力(単位:万円 1000~100000以内でIntegerに変換できない場 2 2022/05/31 21:32
- UNIX・Linux bash環境でのエラー対応をお願い致します。 1 2022/11/26 17:41
- 輸入車 BMW2シリーズ アクティブツアラーの警告表示について 2016年製 走行39000km 2022年 2 2022/11/15 07:54
- Visual Basic(VBA) VBA アドインについて お詳しい方 ご教授をお願いします。 相談事項 現在以下の対応を実施した所、 1 2022/11/02 16:53
- Perl perlをバージョンアップしたら、今まで正常に動いていたプログラムが、エラーになってしまった 3 2022/10/05 15:44
- Excel(エクセル) Excelを開くとエラーが出る 2 2022/10/03 16:13
- Access(アクセス) アクセス where句を使用して複数条件抽出をするには 2 2022/08/29 13:24
- C言語・C++・C# プログラミングの問題です。至急教えてください。 /***から***/の部分をプログラミングにしてほし 1 2022/10/13 11:48
- Excel(エクセル) エクセルのSUM関数について 4 2023/04/18 10:37
- その他(インターネット接続・インフラ) PCに関してのトラブル 2 2023/04/02 18:52
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Perlで時間の計算
-
掲示板はPerlだけで作れますか?
-
アルファベットに付いて質問し...
-
perlのflock関数でロックをかけ...
-
Perlのプログラムについて
-
INDIRECT 横に再度抽出したい
-
perlで文字の置換又は抽出に関...
-
このファイルを開く方法で困っ...
-
ファイルをディレクトリ分配の...
-
#!/usr/bin/perlで書きだしたCG...
-
Perlのエラーについてご教授く...
-
AI sisterとは、偽物の人ですか?
-
bashスクリプト
-
ファイルアイコンの左下に緑の□...
-
perlプログラミング 空白行削除
-
perlでリテラル値はメモリにど...
-
perlで2次元配列をサブルーチ...
-
perlについて
-
perlのrequireの動き方について...
-
perlの構文でカンマの意味が分...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エラー
-
XML::XPathで日本語検索するには
-
perlスクリプト s/^\\s+//; ...
-
PerlでIPアドレスを取得する方法
-
perl+shiftjisで5c文字化けの対...
-
実行時パラメータを使用するとE...
-
「CGIプログラムエラー」って何...
-
フォームから送られてきた文字...
-
正規表現でのエラー
-
何時間後を求める。
-
UTF8でperlスクリプトを書くと...
-
ActivePerl 1行入力で 'と"が...
-
メールフォームから大きめの添...
-
windowsXP上で動作する最新版の...
-
Perl 教えてください。
-
perlでactive directoryに登録
-
ローカルテストOKのPerl サー...
-
$com::VDの意味がわかりません
-
syntax OKなのに・・・
-
textareでの改行
おすすめ情報