perl で、途中で、全ての変数を初期化(からっぽ)にする方法はありませんか。

一つ一つ、代入する方法ではなく。
例えば、
$first = "";
$second = "";
$third = "";
ではなく。

一気に全ての変数を初期化する方法。
変数名が分からなくても全て初期化できる方法。
もしくは、代替手段など。

あれば、教えてください。お願いします。

このQ&Aに関連する最新のQ&A

A 回答 (4件)

使用が推奨されていない関数ですが、resetという関数で、一度に多数の変数の値をクリアすることが出来ます。



書式は次の通りです。
    reset EXPR

ここでEXPRは文字を列挙したもの(ハイフンによる範囲指定も可)で、ここに含まれた文字で始まる全てのスカラー変数、配列、ハッシュのを初期状態に戻します。

例えば、小文字で始まる全ての変数を初期化するには、次のようにします。
    reset 'a-z';

ただし他の方もおっしゃられている通り、PerlにはARGV,INC,ENVなど、予め値が入っている変数もあるので、
    reset 'A-Z';
はやめましょう。

また補足ですが、my変数はresetの影響を受けません。グローバル変数とlocal変数のみに有効です。
    • good
    • 0

punchan_jp さんもおっしゃっていますが、


Perl には、かなりの数の「予約変数」があり
無作為に全変数の初期化ができてしまうと、
プログラムが「全く」動かなくなります。

ので、
「プログラム中で使用している
(非予約)変数全てに NULL値を代入する」
という操作を実現するには、bagyo さんのおっしゃるように

プログラム中で使用する(非予約)変数を全て
一つの(or 管理できる範囲の個数の)連想配列で定義し、
その連想配列を初期化する。

しかないと思います。
    • good
    • 0

こんにちわ。


変数全てを初期化する方法は無かったと思います。もし、そのような方法を希望されているのであれば、連想配列を利用することで実現できると思います。(最初は、確かundefで既に初期化されていると思いました)

$DAT{"first"},$DAT{"second"},$DAT{"third"}等

初期化したい場合には、
%DAT = ();
とすることで出来ると思います。
    • good
    • 0

Perlは起動時から値の入った変数や擬似変数があり、


それらに無理に変な値を入れると動作が変わってしまいます。
というわけで、そういう機能はないと思います。

でも、なんのために?

再起動というか自分自身を exec するとかしかないと思いますが、
それでも最初から値の入った変数は別ですが。

この回答への補足

変数を全部、からっぽにした後に、再定義したいのですけど、
それ以外(再定義しない変数)については、からっぽ($hoge = "";)にしたいのです。

補足日時:2001/04/20 11:21
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QHBITMAPを初期化するとは?

CreateDIBitmap関数でfdwInit引数をCBM_INITにすると初期化し、0にすると初期化しないとありますが、これの意味がイマイチよくわかりません。

で、初期化しなかった場合、後でSetDIBits関数で初期化しるというようなことが書かれているのですが。

用は、初期化していない状態とは、ビットマップの大きさもろもろの情報のみがわかっている状態で、色情報のみ不明な状態であり、初期化するとはそれに加え色情報まで追加するということ、という考えであっていますか?

で、今の自分の考えが正しいことを前提にしての質問ですが、初期化してある状態としていない状態で、使用するメモリの量が大量に違うとか、CreateDIBitmapで初期化する作業は初期化しない作業に比べて計算時間がかなり違ってくるとかいうような大きな違いがあるのでしょうか。

それとも別になにかあるんですか?

Aベストアンサー

>初期化するとはそれに加え色情報まで追加するということ、という考えであっていますか?

それであっています。
初期化してもしなくてもDDBは作成します。この時点で新たに確保されるメモリは同じです。

DDBをDIBで初期化するという意味はわかりますか?
ディスプレイが16ビットカラーだとすると、DDBも16ビットカラーになります。DIBは8/16/24ビットなど何でもいいわけだから、結果としてフォーマットが変換されます。

SetDIBitsも含めて計算時間がかかるかどうかは重要ではありません。必要あれば呼び出すしかなくて、必要なければ呼び出さないだけの事です。

※MSDNによれば「fdwInit パラメータの CBM_CREATDIB フラグは、現在はもうサポートされていません。」とありますね・・・。

Q$wfurikae = 1 if ( &ccom::getShukujitsu( &com::tD( $wwy,$wwm,$wwd )) ne '' );がよく

$wfurikae = 1 if ( &ccom::getShukujitsu( &com::tD( $wwy,$wwm,$wwd )) ne '' );

というスクリプトがあったのですが、

$wfurikae = 1 の後に;もいれずifがきています。

違和感があります。

どのような意味になるのでしょうか。

宜しくお願い致します。

Aベストアンサー

そのまんまだと思いますよ。
if 以下の条件が真の時 $wfurikae = 1となります。
Perlはいろいろな書き方ができますので、こういう書き方もありです。
英語の文法の並びにする書き方です。

Qcdの初期化

cdの初期化について質問です。

書き込むためのソフトにSonicStageVを使っているのですが音楽CDの作成ボタンを押すと、

「挿入されたディスクは書き込み済みです。CD-RWをご利用の場合は初期化ボタンから初期化することで書き込むことができます。」

と出てきます。
初期化しようと「初期化ボタン」探しているのですが見つかりません。

初期化ボタンとはどこにあるのでしょうか。
またこれ以外の方法で初期化することは不可能なのでしょうか。

Aベストアンサー

CD-Rはフォーマット(初期化)は出来ません、1回きりの書き込みです。
CD-RWをお使いなら、前の分は消去出来ます。
消去は書き込みソフトで出来ます、ソフトにより方法は違いがありますが、ソフトのツールバーのボタンを探して下さい。
上でもないソフトもありますが、何処かにありますので探す事です。

Qperlスクリプト s/^\s+//;  s/\s+$//;  return wantarray ? @out : $out[0]; について

自作の掲示板を作ろうと思い、perlの勉強をしている者です。人様の作ったスクリプトを解析しています。以下のスクリプトはライブラリに記述されていたものです。


sub tttt {
my @out = @_;
for (@out) {
s/^\s+//;
s/\s+$//;
}
return wantarray ? @out : $out[0];


このスクリプトなんですが、 s/^\s+//; の部分の「+」と s/\s+$//; の部分の「+$」、 また「return wantarray~」 の三つの部分のスクリプトが、どういった働きをしているの分かりません。専門書やウェブ上のリファレンスも色々調べたのですが・・。

分かる方いらっしゃいましたらご教授下さると幸いです。よろしくお願いします。

Aベストアンサー

まず前2つの「+」は,正規表現における,「直前の表現を一回以上繰り返し」をあらわします.
「\s」は空白文字一文字を表す正規表現ですので,「\s+」は,「一文字以上の空白文字」になります.
次に,最初の「^」と2番目の「$」は,その正規表現がどこに現れるかを示す記号です.それぞれ,先頭と最後尾にあることを示します.
したがって,「^\s+」は,「最初に空白が一文字以上ある文字列」に,
「\s+$」は「行末に空白が一文字以上ある文字列」にヒットします.
置換構文sはご存知なんですかね.すなわち,この2文で,行の最初と最後の空白を消しているんです.

次に, wantarray ですが,
http://www2u.biglobe.ne.jp/~MAS/perl/ref/wantarray.html
によると,このサブルーチンttttを呼び出すときに,何を返り値にしているかで真偽が決まる関数です.
呼び出す時に配列を希望していたら @out 全体を,変数を希望していたら $out[0]だけを返します.

QWii u について初期化の質問です

説明書をなくし、そして求められる質問及び回答がネットに存在していなかったので質問させていただきます。
Wii u の初期化ですが本体の初期化しかありません。
個体ソフトの初期化は可能でしょうか?そしてもし本体初期化をする場合でないと初期化ができない時は、インターネットで設定したIDとパスがあるんですが、それも消えてしまいますか?

Aベストアンサー

Wii uのメニューの本体設定を開き、データ管理というものの中にセーブデータが入っています。
あとは画面に案内が出ていると思うので省略します。

Q$yerr = "$year (Y)"; と記述していいでしょうか?

「" "」の中で、かっこ「( )」を使っても問題ないですか?
エスケープが必要でしょうか?

Aベストアンサー

> $yerr = "$year (Y)";
のような、単なる文字列の文字としてカッコを使う分には、エスケープの必要はありません。
エスケープしなければならないのは、「$ 自身」と「@ 自身」くらいでしょう。
(これらは "~" の中では変数展開されてしまうので、エスケープする必要があります。)

Qパソコンを初期化する質問煮について

パソコンを初期化すると良く質問されてますが人間がするなら好きな事出来るのでその初期化で良いのですが問題は量産タイプのPCご購入時に戻る訳でして初期化という意味ではないと思います。
何処の時点が初期化なのか解る人居れば、例えば組み立てただけの時点なのかOS入れた時点なのか?解る人居れば教えて頂ければ幸いです、お願い申し上げます、初期化の意味を?

Aベストアンサー

メーカーパソコンはOSとサービスソフトが何十本も入っているので

起動ディスクを使ってリカバリーディスク1枚~2枚と必要です。

起動ディスクを使っていたのはWindows 95~98のときで

今はリカバリーディスクとアプリケーションディスクが2枚~3枚です。


今は現在はDVDが有りますので自作PCはリカバリではなく

OSWindows 7のDVDを使ってOSのインストールも初期化も

OSWindows 7のDVD1枚で両方をまかなうことが出来ます。

Q$postflag=1とか$flag=1とかってなにを意味しているの?

CGIでperlを勉強してます。

アンケートフォームや掲示板などのデコード処理の中によく、$postflag=1;とか$flag=0;とか出てくるんですけど、この変数はなにを意味しているのですか?

Aベストアンサー

勉強を始めたばかりの方とお見受けします。
小難しい説明だと理解しづらいですよね。

コーディングの暗黙的ルールとして
flag(フラグ)というものは1か0です。(またはtrue/false、真/偽、on/off、などなど。。。)
つまり2者択一をする場合の判定条件に使われる変数だと思ってください。

例えば性別を選ばせるアンケートフォームがあるとします。
で、女性と回答された場合のみ割引サービスの画面を見せたいって場合などに
フラグを利用します。$seibetsu_flagとでもしましょう。
基本は$seibetsu_flag=0ですが"女性"と選択された場合のみ$seibetsu_flag=1となるよう
プログラムを組んでおけば、後の処理で、


if ($seibetsu_flag=1) {

  ★女性なのでサービス画面表示する処理

}
else {

  ★男性なので通常処理

}


こんな感じで判定することができますよね。
$postflagは名前から察するにNo.3さんの回答の用途だと思いますよ。

勉強を始めたばかりの方とお見受けします。
小難しい説明だと理解しづらいですよね。

コーディングの暗黙的ルールとして
flag(フラグ)というものは1か0です。(またはtrue/false、真/偽、on/off、などなど。。。)
つまり2者択一をする場合の判定条件に使われる変数だと思ってください。

例えば性別を選ばせるアンケートフォームがあるとします。
で、女性と回答された場合のみ割引サービスの画面を見せたいって場合などに
フラグを利用します。$seibetsu_flagとでもしましょう。
基本は$seibets...続きを読む

Qインスタンスフィールドの初期化方法

クラスのインスタンスフィールドを初期化する場合、次の3つが考えられますが、どれが一番スマートなんでしょうか。


クラスQ1はインスタンス変数int xを持つとします。

1.コンストラクタ内で初期化
e.g. Q1() {this.x = 1;}

2.宣言時に初期化
e.g. int x = 1;

3.インスタンス初期化子内で初期化
e.g.
{
x = 1;
}
Q1(){}

Aベストアンサー

スマート、という表現が主観的なので正解はなさそうに思います。強いて言えば、一つのプログラム内で意味もなく複数のやり方を混ぜて使うのはスマートじゃないだろうな、というくらいです。

参考までに、私は基本的にコンストラクタ内で初期化しています。staticな定数なら宣言時に初期化。インスタンス初期化子は使ったことがありませんし、人のプログラムでも見たことがありません。

Q$hts =~ s/##([^#]+)##/$FORM{$1}/g の意味を教えてください!

お世話になります。
perl素人なのですが必要に迫られてWEBで調べながら
ソースを解析していますが、次のコードで完全に止まってしまいました。

$hts =~ s/##([^#]+)##/$FORM{$1}/g

この場合、
#hts から ##([^#]+)## を探して $FORM{$1} に全て置き換えようとしていると思うのですが、以下2点が理解できず困っています。

1.##([^#]+)## の意味
$htsに##で囲まれた文字列が複数あるのでそれら全てを探すということでしょうか?

2.$FORM{$1} の意味
$1は1.で検索した結果だと思いますが、$FORM{ }は一体なんでしょうか?

素人がいきなり解析するのは無謀なのは承知の上ですが、
どうしても業務で必要なので、お知恵をお貸し下さい。
よろしくお願いいたします。

Aベストアンサー

1.
perlを基準に「正規表現」で調べてごらん

2.
同じくperlでHTMLのformデータを受け取る方法を調べてごらん


人気Q&Aランキング

おすすめ情報