新・元地方の中規模印刷会社で苦悩するWebデザイナー改めWebディレクターの日記

自由な20代、窮屈な30代を経て、遂に40代になっちまったWebディレクター&パソコン講師の覚書と思う言(こと)。略称【ちほちゅう】

*

「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);

Perlでのグローバル変数宣言 – 燈明日記

our $bbb = “222”;

2つの方法が見つかったが簡単なほうで「our」を使ってみることに。
さらに、各変数の前に「our」を付けていくのが面倒、且つ、間違えそうだったので、変数宣言をする前に一気にour宣言をしてしまうことにしました。
つまり、cgiの先頭部分に「use strict」と一緒に全変数分our宣言してしまうという暴挙にでたのです。

#!/usr/local/bin/perl
use strict;
our ($aaa,$bbb,$ccc,$ddd,@aaa,@bbb);

↑こんな感じ
で、これが見事にハマり、簡単に「use strict」に対応させることができました。

まとめます。

1.頭に「$」や「@」のついている変数を書き出す。
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)CGI&Perlポケットリファレンス (Pocket reference)
著者:藤田 郁
販売元:技術評論社
発売日:1999-03
おすすめ度:4.0
レビューを見る

 - プログラミング, 覚え書き

アドセンス広告メイン

Comment

  1. DQNEO より:

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

  2. 春夏最新 より:

    送料無料激安通販通販

Message

メールアドレスが公開されることはありません。

  関連記事

ブレスト(ブレーンストーミング)の極意、他人を肯定しつつ自分の意見もしっかりいうための5つのコツ

1年以上前の記事です。内容が古い可能性があります。ブレーンストーミングという言葉 …

インバウンドマーケティングとはどんなこと?

1年以上前の記事です。内容が古い可能性があります。あるところで、インバウンドマー …

電車遅延で復旧予定時刻が出ている時は無料の新幹線振替輸送はしない

1年以上前の記事です。内容が古い可能性があります。自分の住んでいる街、熊谷市は新 …

湘南新宿ライン(赤羽⇔池袋間)は埼京線と並行して走っていない。山手線と並行して走ってた

1年以上前の記事です。内容が古い可能性があります。最近ダイヤ改正して上野東京ライ …

Googleアカウントの作り方(取得方法)スマホ(スマートフォン)編

1年以上前の記事です。内容が古い可能性があります。以前、パソコンで解説をしたGo …

「引用」と「転載」と「無断転載」の違い

1年以上前の記事です。内容が古い可能性があります。以前、引用と転載の違いをまとめ …

「開く」ダイアログボックスからデスクトップが消えた!復活させる(元に戻す)方法

1年以上前の記事です。内容が古い可能性があります。「開く」ダイアログボックスや「 …

プロキシはもう古い。「TOR(トーア)」とは何のこと?

1年以上前の記事です。内容が古い可能性があります。さてさて、2ちゃんねるでの個人 …

Photoshop CC(2014)で「◯◯ツールを使用できません。プログラムエラーです。」が出た時の対処法

1年以上前の記事です。内容が古い可能性があります。知り合いのデザイナーさんのパソ …

地震でガスが止まったときの復旧方法

1年以上前の記事です。内容が古い可能性があります。大きな被害を生んだ今回の「東北 …

血液型オヤジ