「use strict」に対応させる簡単な改造方法【perl】
1年以上前の記事です。内容が古い可能性があります。
色々なところでperlのプログラムはuse strictを使うようにという記事を見かける。
□Perlで必須の記述 use strict と use warnings – Sakura scope
□404 Blog Not Found:perl – use strict; # and be happy
そこで、いつも使っている送信フォーム用のcgiプログラムにuse strictを単純につけて動かしてみる。
多分動かないだろうなぁと思ったら案の定。
そもそも、「use strict」を書くと何が変わってくるのか?
□Perl/CGIに必ず登場するuse strictの解説(初心者向け) – DQN起業日記
use strictを使うと、変数を宣言するとき(=ある変数を最初に使うとき)にmyを付けるのが必須になります。
とのことで、バグが少なくなるというのが導入する理由らしい。なるほど。
そこで、とりあえず全変数を書き出してみる。
英文字の前に「$」または「@」がついていれば変数と思って間違いない。
(今回のプログラムには「%」のついたハッシュ(連想配列)はありませんでした。ハッシュ(連想配列)も変数の一種なので、同様に宣言する必要があると思います)
で、その前に「my」を付ければちゃんと動くはずだが、ここでひとつ疑問が生じた。
「my」ってのは、変数を局所化する命令。つまり、ローカル変数を指定する宣言だったはず。
ということは、use strictを入れる前は「グローバル変数」だった変数が「ローカル変数」になってしまうのでは?
逆に元々perlで変数宣言なしに作った変数は「グローバル変数」になっているはず。
だったら全部グローバル変数にしてしまったほうが楽なんじゃないか?
そこで、use strictを導入してグローバル変数を使う方法を探してみる。
□use vars – use strict内でグローバル変数を使用するには
use vars qw($dbh);
our $bbb = “222”;
2つの方法が見つかったが簡単なほうで「our」を使ってみることに。
さらに、各変数の前に「our」を付けていくのが面倒、且つ、間違えそうだったので、変数宣言をする前に一気にour宣言をしてしまうことにしました。
つまり、cgiの先頭部分に「use strict」と一緒に全変数分our宣言してしまうという暴挙にでたのです。
use strict;
our ($aaa,$bbb,$ccc,$ddd,@aaa,@bbb);
↑こんな感じ
で、これが見事にハマり、簡単に「use strict」に対応させることができました。
まとめます。
2.「use strict」の後に「our」宣言で全変数がグローバル変数であることを宣言する。
以上を間違えなくやっておけば、おそらく今までのプログラムでも「use strict」に対応させることができます。
さらに、ついでだったので「use warnings」もつけました。
□404 Blog Not Found:perl – use warnings; # -w でなくて
というわけで、今後スクリプトを書く時には、
use strict;
use warnings;をお忘れなきよう。
こちらは、何も改造しなくても問題なかったようなので特に対処しておりません。
※おまけ
なぜかしらんのですが、うちの環境だと、上記の方法でourをmyにしても動いとります。
参考書見てみると「プライベート変数」ってのが出てきているのですが、これは「ローカル変数」とはまた違うものなんでしょうか?
後日、調べてみます。
↓お世話になってます
CGI&Perlポケットリファレンス (Pocket reference)
著者:藤田 郁
販売元:技術評論社
発売日:1999-03
おすすめ度:![]()
レビューを見る
アドセンス広告メイン
関連記事
-
-
YouTubeの「オーディオ入れ替え」機能に助けられた
1年以上前の記事です。内容が古い可能性があります。うっかりしていたのですが「動画 …
-
-
ブログに「つぶくま」バナーを入れる方法(各ブログフリーエリアの編集方法)
1年以上前の記事です。内容が古い可能性があります。ある方から、チラシだけじゃなく …
-
-
さくらのレンタルサーバー+ラピッドSSLを使ってWordPressをhttps化するときの注意点
1年以上前の記事です。内容が古い可能性があります。さくらインターネットで非常に安 …
-
-
「Flash CS6」で編集したファイルは「Flash CS4」では編集できない
1年以上前の記事です。内容が古い可能性があります。盲点でした。 訓練校でFlas …
-
-
docomo(ドコモ)のスマホ(スマートフォン)で余計なサービスを削除(解約)する方法
1年以上前の記事です。内容が古い可能性があります。最近は、大型量販店(イオン等) …
-
-
給与未払い問題。「労基(労働基準監督署)」でだめなら次は「法テラス」へGO!!
1年以上前の記事です。内容が古い可能性があります。さて、労基さんが匙を投げた給与 …
-
-
iPhoneの連絡先をAndroidの連絡先に転送する方法(GmailにCSVをインポート)
1年以上前の記事です。内容が古い可能性があります。ケータイ(スマートフォン)の機 …
-
-
「Ctrl+S」は「Save」、「Ctrl+C」は「Copy」、では「Ctrl+X」は何の略?
1年以上前の記事です。内容が古い可能性があります。またまた、パソコン教室の生徒さ …
-
-
Yahoo!ブログにYoutube動画を埋め込む方法【改訂版】
1年以上前の記事です。内容が古い可能性があります。YouTubeの埋め込みリンク …
-
-
Google日本語入力で快適フリック入力。「ああ」を「い」にしない設定
1年以上前の記事です。内容が古い可能性があります。どういう意味かというと、初期設 …
- PREV
- 人形町のおいしいお店
- NEXT
- 「ホリエモン」真実を語る(予定)








Comment
>use strictを入れる前は「グローバル変数」だった変数が「ローカル変数」になってしまう
myをつけると、「ローカル変数」ではなくて「レキシカルスコープ変数」になるそうです。
送料無料激安通販通販
中古 安い