Perlコーディング初心者質問スレ Part 39
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
04/11/27 11:35:03ID:DJwiGeFM【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。
過去ログやお勧めサイトは >>2-10
0685684
05/01/12 00:38:26ID:???半角スペース使ったせいで死。。すいません
0686nobodyさん
05/01/12 00:44:21ID:???0687nobodyさん
05/01/12 01:23:28ID:???my @list = qw/test1 test2 test3 test4 test5 test2 test6 test7/;
my %count;
@_list = grep $count{$list[$_]}++, 0 .. $#list;
print @_list;
0688nobodyさん
05/01/12 01:33:22ID:???それだと5しかでないけど、欲しい結果は1,5なんじゃない?
私ならこうする。
my %count;
foreach (0..$#array) {
push @{$count{$array[$_]}}, $_;
}
my @number = map @$_, grep @$_ >= 2, values %count;
0689nobodyさん
05/01/12 02:00:22ID:???連想配列の要素の数はどうやってもとめればいいんですか?
0691nobodyさん
05/01/12 02:04:54ID:???そうだったんか。俺ならこう。
my @list = qw/test1 test2 test3 test4 test5 test2 test6 test7/;
my %count;
$count{$_}++ for @list;
my @_list = grep $count{$list[$_]} >= 2, 0 .. $#list;
print @_list;
0692684
05/01/12 02:23:19ID:???レス有難うございます。
>>688さんの仰るように、例でいくと1, 5が欲しかったです。
それで、今>>688さんのコードを試して見たのですが・・・・・。
あっさりすぎるほどに求めていた答えがでました。私が書いた50行がたったのコレだけで
出来てしまうんですね(汗 悲しい部分もありますが、すごく感動ですね。
本当にありがとうございますm(_ _)m
ですが・・・・コードがまだ理解出来ないのがイタイです(笑
もし>>688さんに少しお時間ありましたら、ほんとにさわりだけでもいいのでコード解説とか
お願いできませんか? 解説頂いても理解出来ないかもしれませんが、人のコード使っておいて
まったく何やってるか分からないってのも困りますし、自分のためにならないぽいので。。。。
こちらはお聞きすることしか出来ませんが、もし余裕があればお願いします。
>>677さんのコードも試してみました。
こちらも重複する項目の番号が返ってきました。
こちらの説明が足らなかったので申し訳なかったです。けどパッと書けてしまうみなさんは
すごいですね。私もまだまだ頑張らないと。
>>687さん >>688さん、本当にありがとうございました
0693nobodyさん
05/01/12 09:12:09ID:SoBMVf5u携帯はキャリアごとに画像形式などが違うので完全にCGIで作っています。
PCサイトは既に作ってあり運営中なので、簡単だろうなと思ってとりあえず
見た目はある程度できました。
が、携帯はcookieが使えないとこのことorz
PCサイトではcookieに注文内容を詰め込んでいたので、ちょっと困っています。
今はURIの?以降にページIDを使ってページの移動をしてます。
今考えているのは
http://www.2ch.net/?page=index&商品番号=数量&商品番号2=数量2
等の形式で常にリンクURLの後ろに注文内容を保持していく方法です。
getの制限である255byteはそうそう超えないんで大丈夫だと思いますが・・・・
?page=index&ユニークID のようにIDを発行して注文内容はサーバ側で
管理してIDマッチングでセッションするならばバイト数なんて気になりませんが、
現状の私のスキルでは少し時間がかかりそうです^^;
もっと賢いやり方があるなら教えてくださいm(_ _)m
0694nobodyさん
05/01/12 10:00:34ID:???相手のIPで照合するとセキュリティ的にも最高品質ですよ。
なのでサーバー側にファイルを作るか、MySQLでやるかだけですね。
0696nobodyさん
05/01/12 10:52:46ID:190vuMua>http://www.2ch.net/?page=index&商品番号=数量&商品番号2=数量2
>等の形式で常にリンクURLの後ろに注文内容を保持していく方法です。
>getの制限である255byteはそうそう超えないんで大丈夫だと思いますが・・・・
どう考えても、やめた方がいいだろう。
おれは、携帯の場合、ファイルベースの簡易的なセッションを自作して使ってるけどね。
>PCサイトではcookieに注文内容を詰め込んでいたので
さらにこれも危険。
>694
携帯ってリクエスト毎にIP変わらなかったっけ?
0698nobodyさん
05/01/12 11:37:34ID:???ttp://www.rfs.jp/sitebuilder/perl/02/05.html
配列やハッシュの要素数てのは、その配列やらハッシュやらを扱う上でも基本的な
ことだから、テキストとかにも各分野の最初の方に載ってるのではないかな?
調べ方がちと足りないかも。適当にググれば出てくるヨ☆
偉そうなこと書いてしまったが、こちらも初心者故、共に頑張ろうではありませんか。
0699693
05/01/12 11:53:12ID:SoBMVf5u>どう考えても、やめた方がいいだろう。
え;どうしてでしょうか?
漏れるからですか?アクセショップなので注文内容は漏れていいですが・・・
っていうか注文内容が漏れてまずかったらお店で買物なんてできませんよね。
もしかして住所などの個人情報を懸念してるのですか?
それでしたらSSL+POSTでやっていますが。
もう少し自分で調べてみますm(_ _)m
0700nobodyさん
05/01/12 12:06:48ID:???d,e,f
g,h,i
↑のようなテキストファイルがあります。実際は数百行です。これから以下のような配列を作りたいです。
@1行目の配列※名前はaとする2行目からはb,c,d,eとする
$a[0] .. a
$a[1] .. b
$a[2] .. c
$b[0] .. d
のように。
これをループ処理でやりたいんですが、数百の配列に名前を動的に与える方法で悩んでます。
open FH,"text.txt";
@array = /a b c d e f g h i j k ........数百まで/;
$i = 0;
while (<FH>){@$array[$i]??? = split /,/;}
なんかおかしなことに。
0701nobodyさん
05/01/12 12:08:44ID:???0702nobodyさん
05/01/12 12:21:20ID:???せっかく問題を提起したのだから、解決コードも書いて置くと後学の為になるし、
コードに改善点があれば誰かが指摘してくれるよ。
0703693
05/01/12 14:07:08ID:SoBMVf5uURLに注文内容を圧縮して持たせる場合常にURl自体に注文内容が含まれてるので
購入中にトップページにブックマークした場合、いつ来てもブクマしたときの
注文内容が残ってしまいますね・・・
しかしURLにセッションIDを持たせたとしても同じことがおきますよね。
もちろんサーバ側のファイルを最終アクセスから2時間たったものは消していけば
いいですけど、古いセッションID付でブクマされると何か嫌ですよね。
みなさんはどうやって古いID付でブクマークされるのを防いでるのですか?
0704nobodyさん
05/01/12 14:49:15ID:???スレ違い
△▲ WebProg 初心者の質問 Part11 ▼▽
http://pc5.2ch.net/test/read.cgi/php/1101635909/
0706nobodyさん
05/01/12 19:39:08ID:iuHcyFLg持っているPerlの本のURLエンコードについての説明のところには、
「-」「@」「*」「.」「_」はエンコードされないと書いてあって、
エンコードのサブルーチンは
sub UrlEncode {
local($str) = @_;
$str =~ s/([^ 0-9a-zA-Z\-@\*\._])/sprintf("%%%02X", ord($1))/eg;
$str =~ s/ /+/g;
return $str;
}
…と書いてあります。
ところが別のページや他サイトでは、上のコードの3行目のところが
$str = ~s/(\W)/sprintf("%%%02X", unpack("C", $1))/eg;
となっているようです。
どちらのコードにすればいいんでしょうか?
後者の方では、\W=[^_0-9a-zA-Z]だから記号もエンコードしてしまうのではと
思うんですが…。
よく分かってなくてすいません。よろしくお願いします。
0707nobodyさん
05/01/12 20:12:34ID:???最初にアクセスしたtimeでも引っ張って一時保存ファイルでも作れば?
そっちに注文内容とか入れ込んで、一時保存ファイルの作成時間が一時間以上前のものなら消すとか
>696
>携帯ってリクエスト毎にIP変わらなかったっけ?
DoCoMoは変わる、auは変わらない、Vodaはシラネ
0709nobodyさん
05/01/12 20:28:34ID:???reserved = ";" | "/" | "?" | ":" | "@" | "&" | "=" | "+" | "$" | ","
これはエスケープする。
unreserved = alphanum | mark
mark = "-" | "_" | "." | "!" | "~" | "*" | "'" | "(" | ")"
これはエスケープしなくてもいい。しても構わない。
http://www.ietf.org/rfc/rfc2396.txt
0711だめだめ君
05/01/13 02:40:25ID:???日本語文字コードらへんで何か変わった問題とかあるんでしょうか・・・。どう対処すればいいのか分かりません…
宜しくお願いします。
0712nobodyさん
05/01/13 06:44:36ID:???DBへ格納している文字の文字コードは?
そのプログラムソースの文字コードは?
恐らく、その両者の文字コードが一致していないと思います。
0713693
05/01/13 09:14:06ID:mOXqnzCMスレ違いなのですか?
Perl特有の解決方法などがあると思いましたが、全言語共通なんですか?
とりあえず誘導ありがとうございますm(_ _)m
>>705
postでやるのは考えましたが、テキストリンクぽく見せるのが不可能ですよね。
ボタンやセレクトボックスになってしまうと違和感があるので・・・
0714nobodyさん
05/01/13 09:41:39ID:???よってスレ違い。
0715nobodyさん
05/01/13 09:44:55ID:???0716だめだめ君
05/01/13 12:18:38ID:???ありがとうございます。表示以外は全部EUCです。
ただ、文字コードの違いだったらもっと激しく全部文字化けすると思うんですが、一部の文字なんです。
他の件でPHP使ってるときにも¥が入るとかそういうのがバックスラッシュのエスケープとかであったので、
それと似たものなのかなぁと色々検索したんですが、、、、それっぽいのも見つからず…。
どうしたもんでしょうか…
0719nobodyさん
05/01/13 14:25:30ID:F0U77FE9でcp932からutf8へ変換を行っているのですが、そのあと、
文字化けを起こしている(マッピングに失敗した)文字を?とか★とかに変換
したいのですが、どのように行えばいいのでしょうか?
ごくごくまれに外字と思われるものがあるのです。
一旦dbに入れてcsvとかで出す時にそのたった1文字のためにそれ以降全部バケちゃうことがあるのです(泣)
0720nobodyさん
05/01/13 15:45:13ID:???メソッドが返す値はただの数字です。
0721nobodyさん
05/01/13 15:55:36ID:???0722nobodyさん
05/01/13 15:57:40ID:???0723nobodyさん
05/01/13 15:58:29ID:???0724nobodyさん
05/01/13 15:59:37ID:???2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
0725nobodyさん
05/01/13 16:05:37ID:???コマンドプロンプトからPerl -cでぷろぐらむのチェックをしたら
syntax okが出るにも関わらずlocalhostからブラウザでやってみると
500エラーが出るのは何故でしょうか?
こういうときはどうやってデバッグすればいんでしょうか?
何が悪いのか検討がつかずに困っています。
0728725
05/01/13 16:16:56ID:???cgi::sessionのコンスラクタ呼び出しの際に3つ目の引数にカーリーブレス?を付けておくのを
忘れてました。
しかし今回は運良く早期発見できましたが、こういうときにいいデバッグ方法あrましたら
教えてください。
0729nobodyさん
05/01/13 16:19:39ID:???0732nobodyさん
05/01/13 20:18:35ID:???http://pc5.2ch.net/test/read.cgi/php/1104624784/2
0733nobodyさん
05/01/13 20:24:29ID:???Shift_JISなら分からなくも無いけど…。
Shift_JISの「ミ」も\xD0。
# またはDBの最新バージョンで人柱状態?
>>719
0xF040から0xF9FCの外字なら、予めチェックするしかないかも。
>>731
?
0734nobodyさん
05/01/13 21:16:56ID:???うまくいきません
sub search1 {
local($dir) = $_[0];
local(@filelist, $file, $filename);
opendir(DIR, $dir);
@filelist = readdir(DIR);
closedir(DIR);
$begin = $FORM{'page'} * $hyouji;
$end = $bigin + $hyouji;
if($end > @filelist) {
$end = @filelist;
}
(続く)
0735734
05/01/13 21:17:55ID:???#foreach $file (@filelist) {
for ($a = $bigin; $a < $end; ++$a) {
if ($file eq ".") { next; }
if ($file eq "..") { next; }
$filename = "$dir/$file";
if (-d $filename) {
if ($recursive_flag) {
&search1($filename);
}
} else {
&search2($filename, $dir);
}
}
if ($end < @filelist) {
$nextpage = $FORM{'page'} + 1;
print "<a href=\"$ENV{'SCRIPT_NAME'}?page=$nextpage\">次へ</a>\n";
}
#}
}
0736734
05/01/13 21:19:50ID:???動作も正常に動いてはいないようです
どなたか知恵を貸してください
よろしくお願いします
0737nobodyさん
05/01/13 21:27:49ID:RpTwbNys$begin
$bigin
use strict
を使う癖をつけましょう。
0738734
05/01/13 21:57:15ID:???ご指摘ありがとうございます
うっかりミスです
しかし直しても動作は変わりありません
構文自体が悪いのでしょうか?
頭がテンパってきました
助けてください…
0739nobodyさん
05/01/13 22:01:32ID:RpTwbNysもうちっと、ソースを整理して晒しておくれ。
search2というのが何なのかも分からないし・・・。
0740734
05/01/13 22:21:11ID:???すみません、インデントつけます
sub search1 {
local($dir) = $_[0];
local(@filelist, $file, $filename);
opendir(DIR, $dir);
@filelist = readdir(DIR);
closedir(DIR);
$begin = $FORM{'page'} * $hyouji;
$end = $bigin + $hyouji;
if($end > @filelist) {
$end = @filelist;
}
(続く)
0741734
05/01/13 22:23:11ID:???for ($a = $bigin; $a < $end; ++$a) {
if ($file eq ".") { next; }
if ($file eq "..") { next; }
$filename = "$dir/$file";
if (-d $filename) {
if ($recursive_flag) {
&search1($filename);
}
} else {
&search2($filename, $dir);
}
}
if ($end < @filelist) {
$nextpage = $FORM{'page'} + 1;
print "<a href=\"$ENV{'SCRIPT_NAME'}?page=$nextpage\">次へ</a>\n";
}
# }
}
0742734
05/01/13 22:29:34ID:???#foreachは最初からあったやつで、コメントアウトしています
&search2はソース長いので説明すると
ループさせてファイルの中身を一文字ずつ検索させてるようです
>740の
$begin = $FORM{'page'} * $hyouji;
$end = $bigin + $hyouji;
if($end > @filelist) {
$end = @filelist;
}
この部分と
>741の
if ($end < @filelist) {
$nextpage = $FORM{'page'} + 1;
print "<a href=\"$ENV{'SCRIPT_NAME'}?page=$nextpage\">次へ</a>\n";
}
が自分で付け足した所です
0743nobodyさん
05/01/14 01:17:04ID:???別スレでやってくれ。
★三 【 スクリプト改造工房 PART 8 】 ★三
http://pc5.2ch.net/test/read.cgi/php/1077525387/ 79にテンプレあり
0744nobodyさん
05/01/14 07:32:45ID:3YybYM3/とやると$hogeは455になるのに、
$hoge=int(1.4*325);
とやると$hogeは454になってしまいます。
他の数字でも起こるようです。何故ですか?
というか、意図した通りにさせる方法はありますでしょうか。
0745720
05/01/14 08:13:20ID:???ありがとうございます。
全然誰も答えないからこのスレ、レベルが下がったのかとおもいました;
数スレ前では自分で誰かに回答してあげた覚えもあるんですが、最近の過去ログは
普通の人は見れないようで。
>>all
お前らもっと精進しろよ、な。
0746nobodyさん
05/01/14 09:27:13ID:AgX5dpSc異なる意味をもつ字を*で連結した上の文字列の中から1字を消して連結用のアスタリスクの数も
正常にする。
ということがしたい場合どういうみんなコーディングする?aとdでは処理が変わるんだよね。
しかしそれをなるべく簡潔にしたい。
0747nobodyさん
05/01/14 09:31:58ID:???慣れていないと面食らうがほとんどのプログラミング言語ではそれが標準仕様。
詳しい説明は「浮動小数点数」「精度」などで検索すれ。
防ぐ方法は幾つかある。まぁこのケースなら1が無難かな。
1. 整数同士の演算にする: 1.4*10*325 (1.4*325*10ではうまくいかないことに注意)
2. sprintfで処理する:sprintf '%f', 1.4*325
3. bignumプラグマ: use bignum;print int(1.4*325) (ただし破滅的なほど遅い)
0749nobodyさん
05/01/14 09:35:33ID:az2EqpkZこの2つの変数内の文字列を比較していって、先頭から同じ文字が続くところまで$hoge2から削除するにはどうすればいいでしょうか。
たとえば、$hoge1=a/b/c/d/,$hoge2=a/b/c/d/e/f/だったら、$hoge2=e/f/としたいのです。
0750746
05/01/14 09:37:35ID:AgX5dpSc$a =~ s/a[*]?//;
$a =~ s/[*]*$//;
0751nobodyさん
05/01/14 10:31:14ID:????
0752nobodyさん
05/01/14 10:56:17ID:???$a .= '*';
$a =~ s/a\*//;
chop $a;
$aを使うのはお勧めできないがそれは置いておこう。
0753749
05/01/14 10:58:23ID:az2EqpkZ例が適切でなかったかも知れません
$hoge1='a/b/c/d/e/f'
$hoge2='a/b/c/d/g/h/'
だったら、
$hoge2='g/h'
にしたいのです
0754nobodyさん
05/01/14 11:42:26ID:LszGQepz「Win32::OLE」は使えないのでしょうか?
もし使えないなら、代わりになるものはありますか?
0755nobodyさん
05/01/14 11:48:36ID:???my $re = '';
foreach (reverse split //, $hoge1) {
my $q = quotemeta($_);
$re = "(?:$q$re)?";
}
$hoge2 =~ s/^$re//;
0756nobodyさん
05/01/14 12:35:06ID:???sub hoge {
my $max = length $_[0];
my $pos = 0;
$pos++ while substr($_[0], $pos, 1) eq substr($_[1], $pos, 1) && $pos < $max;
# 「$hoge2='g/h'」は typo か?
substr $_[0], $pos, length substr +($_[2] ? $_[1] : $_[0]), $pos;
}
print hoge($hoge2, $hoge1), hoge($hoge2, $hoge1, 1); # g/h/g/h
0757734
05/01/14 12:52:14ID:???誘導ありがとうございます
逝ってきます
0758nobodyさん
05/01/14 15:29:10ID:AgX5dpSc現在注文管理部分の注文してくれた客に出す「確認メール」というものを作成するための
メールフォームを作っています。
docomoでは500byteまでという制限があります。
500byteなんてあっというまなので対策を考えてます。
一つ考えたのは500byteを超える場合は2通に分割するという方法です。
しかしマルチバイト文字の途中で分割すると2通目以降が悲惨なことになるので
どうにかしてそれをクリアにしたいです。
「確認メール」の内容はその時によって違うので、先に分割地点を決めるのは無理です。
メールフォームを使うのは500byteの意味を知らないパートさんで、入れ替わりなので
扱う人間に期待をするのは難しいです。
メールフォームでつくられた本文を受け取り送信する側のCGIで何とかしたいです。
日本語を綺麗に途中で分割することってできますか?簡単にできるモジュールなどありましたら
教えてください。
0760758
05/01/14 15:49:19ID:AgX5dpScここを参考にとりあえず配列に文字単位で格納して、
それから@text[0..500]などでやってみようと思います。
ただメチャクチャ重くなるような気がしてるのですが^^;
でも何かアドバイスありましたらお願いします。
0762758
05/01/14 16:20:31ID:AgX5dpScJcodeですか。調べてみます。
ところで
$a = 100/3;
のように$aに小数点が含まれる場合は切り上げをしたいんですがどうすればできますか?
切捨てはintで一発ですが、切り上げは一度小数点があるかないかを調べないとダメです如根。
0764nobodyさん
05/01/14 16:30:38ID:???0767758
05/01/14 16:59:43ID:AgX5dpSc感謝ですm(_ _)m
0768nobodyさん
05/01/14 19:11:08ID:???perlメモ風の切り上げ処理は
$tmp2 = int($tmp1) + ($tmp1 <=> int($tmp1));
かな。
>>747
ありがとうございました。整数でやってみます。
0769nobodyさん
05/01/15 13:17:48ID:X2SjZomE何通もメール送られたらユーザーも迷惑でしょ。
0770nobodyさん
05/01/15 14:59:51ID:2P0rPuHEformtest.htmっていうページからformtest.cgiにデータを送信しようと
おもったんですが。formtest.htmには入力フォームが2つあってそれぞ
れdataAとdataBです。dataAはaaaとdataBにはbbbと。それをpostで送信
しました。formtest.cgiには
#!/usr/local/bin/perl
read(STDIN,$buffer,$ENV{'QUERY_STRING'});
print"Content-type: text/html\n\n";
print"<HTML><BODY>\n";
print"$buffer";
print"</BODY></HTML>\n";
とあります。画面にはdataA=aaa&dataB=bbbと表示されるはずなんですが
でません。ちなみにgetとpostの両方で送信してみましたが、出来ません、
でも他に文字を表示させるだけのCGIがあるんですが、それはは動き
ます。
0771nobodyさん
05/01/15 15:11:38ID:???根本的に間違い。
http://www.rfs.jp/sitebuilder/perl/03/02.html
ずっと下にある「GET/POST データを読み込む」でも読みたまえ。
0772nobodyさん
05/01/16 10:58:07ID:LfCWlcLWすぐ2000行とかになっちゃうんですが、普通ですか?
長くなりすぎてちょっとした内容修正の時にも該当箇所までスクロールするのが面倒
だったりします。
みなさんはどうやっておられるのでしょうか?
HTML部分を別ファイルにしてメインプログラムから読み込むだけのような
形式にしてるのでしょうか?
0773nobodyさん
05/01/16 11:01:18ID:???0774nobodyさん
05/01/16 11:05:45ID:???・コードの行数は処理次第。各ページ2000越えるのはありえない。全体で2000行のCGIでショップ運営もありえない
・めんどくさがりすぎ。行ジャンプかインク李メンタルサーチで移動
・HTMLは当然別
0775nobodyさん
05/01/16 11:13:24ID:???ページベースの設計してるPerlCgiは今はそんなにないよ。
0776nobodyさん
05/01/16 12:01:04ID:???思ってる時点でなんかヤバイ気がするんだが
気のせい?
もちろん大量の商品があるのでみつけやすいよう
に検索や分類の機能を作りこむとかで規模増える
ことはあるだろうけれども、そういう意味で言っ
てるようには見えない。
0777nobodyさん
05/01/16 12:06:48ID:???0778772
05/01/16 12:13:57ID:LfCWlcLW多分みなさんレベルから見たらかなりマヌケなコーディングだと思います;
基本的に一つのindex.cgiで全頁のメインを書いてます。
現状ではHTMLもかいてます。それぞれわけるなら全面CGIにする必要性もあまり感じられませんし。
>>776
行数は増えていくと思います。商品の紹介文などを別にしない限りは。
多分みなさんが言うのはHTMLや商品コメント、価格その他はDBに突っ込んで
メインから読み込んで処理しろということだと思います。
現状は商品コメント以外はテキストファイルに作ってありますが、
なんとも中途半端な状態です。
かなりヒントになりました。あちがとうございます。
一つ質問ですm(_ _)m
使い終わった変数をundefしたいというか削除したいのですが、
undef $a;
これだとスカラー一つ筒しかできないのですがどうやればいいんですか?
my ($a,$b,$c,$d) = (undef)x4;
今はこうやってますが、これってほんとに
undef $a;
undef $b;
..
と同じ効果が得られているんでしょうか?一応中身は消えてるみたいですが。
0779772
05/01/16 12:19:44ID:LfCWlcLW書き間違えです。
($a,$b,$c,$d) = (undef)x4;
こっちです。
0780nobodyさん
05/01/16 12:50:22ID:???my ($a,$b,$c,$d) = (undef)x4;
foreach($a,$b,$c,$d){
printf "%sdefined", defiend $_ ?'' : 'Not';
}
0781nobodyさん
05/01/16 12:57:20ID:???アー逆スマソ。
my ($a,$b,$c,$d) = (undef) x4;
printf qq|%s -> %sdefined\r|, $_, defined $$_ ? q|Not| : q|| foreach(qw|a b c d|);
0782nobodyさん
05/01/16 15:40:03ID:???よくわからんが、HTML::Template 使うと幸せになれるとかそういう話じゃないのか
使い終った変数を undef したいというのも、なぜそんなことをしたいのかよくわからん。
巨大なメモリを喰うオブジェクトを destroy して解放したいというならわからんでもないが。
0784nobodyさん
05/01/16 16:22:42ID:???これはご存知?
http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlsub.html#Private_Variables_via_my_
> “my”は、それを囲んでいるブロック、条件文 (if/unless/elsif/else)、
> ループ(for/foreach/while/until/continue)、サブルーチン、eval、
> あるいはdo/require/useされたファイルに(lexicalに)閉じ込められる変数を定義します。
{
my ($a, $b, $c) = qw(1 2 3);
}
# 他で参照していない限り、ここで$a,$b,$cは無くなります。
print $a, $b, $c; # use strictならエラー
グローバル変数をundefするというのなら、
undefするより別の名前の新しい変数を作るべきです。
■ このスレッドは過去ログ倉庫に格納されています