トップページ⇒php
1001コメント315KB

Perl コーディング初心者質問コーナー Part25

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん03/06/28 01:18ID:???
いらっしゃーい、Perlのコーディングで困ってる人のスレです。

【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。

1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:こんなエラーが出て上手く行かなかった。

最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。

関連スレ
【Perl上級者コーナーPart01】
http://pc2.2ch.net/test/read.cgi/php/1024741312/
CGI: Common Gateway Interface part 11
http://pc2.2ch.net/test/read.cgi/php/1055597189/
【Perl,CGI】参考書籍 第三版
http://pc2.2ch.net/test/read.cgi/php/1030209573/
【 スクリプト改造工房 PART 6 】
http://pc2.2ch.net/test/read.cgi/php/1047806915/

過去ログやお勧めサイトは >>2-10
0754nobodyさん03/07/18 11:38ID:???
>>751
きゅうきゅう。
0755あぼーんNGNG
あぼーん
0756nobodyさん03/07/18 12:15ID:NVnSzVH0
>>751
Generalized quote.
0757nobodyさん03/07/18 12:36ID:???
>>745
解決したのはいいんだが、
自分で考えた案の方は、何故一度空にしてから追記で改めて書き込むような
処理になっているのかが気になる。
0758nobodyさん03/07/18 12:47ID:???
>>757
確かにあの発想は不思議だな
理由を聞いてみたいものだ
0759nobodyさん03/07/18 13:20ID:???
>$fileで開いて、配列が空の場合にforeachがそのまま抜けるので
何も書き込まないから内容が前のままになると勘違いしていた、と推測してみる。

と思ったけどそれならforeachの前にprint OUT ""挟むか。
やはりわからん。

と思ったら>>746に書いてあったw
やはり↑の推測でよかったのか。


#ちなみに>$fileで開いた時点でファイルは空になる。
0760nobodyさん03/07/18 13:53ID:50GDA6Bl
そそ、開いたらからになるんだよね・
俺も、それでいろいろとまどったこともあった
076174503/07/18 18:44ID:???
ファイルに
a1
b1
c1
d1
e1
と書き込まれているとして、これを
a2
b2
c2
d2
e2
と書き直したいんです。

 if(!open(USER,">>$user_dir$FORM{'id'}.dat")){print "ユーザーファイルが開けません";}
  foreach(@user){
   $value = $_ ."\n";
   print USER $value;
  }
 close(USER);
とするだけだと
a1
(略
e1
a2
(略
となってしまうので、いったん空っぽにしてた訳です。(´・ω・`)ナンカ ヘン?
076274503/07/18 18:48ID:???
 if(!open(USER,">$user_dir$FORM{'id'}.dat")){print "ユーザーファイルが開けません";}
  foreach(@user){
   $value = $_ ."\n";
   print USER $value;
  }
 close(USER);

ぐはっ、これでも逝けたのか… (o_ _)o

ヽ(゚∀゚) アヒャヒャヒャヒャ ドンマイドンマイ
0763nobodyさん03/07/18 20:19ID:Y8wtPXEB
番号 歴史 世界史 合計
1   50   10    60
2   60   80    140
3   10   60    70
これを各項目別にソートしたいです。

思いついたのは

$d[0][0]→1   $d[1][0]→0:50   $d[2][0]→0:10   $d[3][0]→0:60
$d[0][1]→2   $d[1][1]→1:60   $d[2][1]→1:80   $d[3][1]→1:140
$d[0][2]→3   $d[1][2]→2:10   $d[2][2]→2:60   $d[3][2]→2:70
多次元配列に入れる


歴史の順でソートする場合
sort(@d[1])←ここは自信ないです(d[1]の中をソートしたいんです)

foreach(@d[1]){
($num,$data) = split(/:/);
print "$d[0][$num]","$_","$d[2][$num]","$d[3][$num]";
}


と言う方法です。各要素に、はじめの添え字を記録して、それをsplitで分解して、それを添え字にする、とい方法ですが、
これは、かなり無駄な気がします・・・
もうすこしきれいなのはありませんか?
0764nobodyさん03/07/18 20:29ID:Y8wtPXEB
あ、だめですね
×0:50
○50:0

こうかえないと、ソートできませんね
0765nobodyさん03/07/18 20:33ID:???
連想配列の項目別にソートしたほうが解りやすくないか?
0766nobodyさん03/07/18 20:35ID:Y8wtPXEB
>>765
えと、それだったら
バブルソート使わないとだめっぽくないですか??

というか、ハッシュがソートされると、添え字がどうなるとかわからないんですけど・・・
値を比べて、添え字と値が対でソートされるんですか?
0767nobodyさん03/07/18 20:49ID:???
大人の男だけ
0768nobodyさん03/07/18 21:02ID:???
ANHTTPD使ってますか?
0769nobodyさん03/07/18 21:31ID:bi1QsuUD
友達から聞いた話で、多分デマだとは思うのですが、
$test =~ m/$pataann/;
こんな感じで正規表現パターンを変数化することなんて
無理ですよね?
0770nobodyさん03/07/18 21:48ID:???
>>769 友達が正しい。
0771nobodyさん03/07/18 21:51ID:???
>>769
やってみりゃいいだろ。

つーか、もう余計な部分まで答えてやる。出来る。

そして$patternの中身がそのまま正規表現パターンとして使われるから注意な。
$pattern = "a.";
なら"aa"や"ab"にもヒットする。
これを文字通り"a."にヒットさせたい場合は
$pattern = "a\\.";
としてやる。

さもなくば
$pattern = quotemeta($patter);
としておくとか、
$test =~ m/\Q$pattern\E/;
などとしろ。


いいか、pataannじゃなくてpatternだぞ!
0772nobodyさん03/07/18 21:56ID:???
>>771
くそ。最後の一行言われたか!w
0773nobodyさん03/07/18 22:06ID:???
>>761
open USER, '+<' . "$user_dir$FORM{'id'}.dat"
  or error('ユーザーファイルが開けません');
my %data;
while (<USER>) {
  /^(.)(.)$/;
  $data{$1} = $2;
}

foreach my $key (keys %data) {
  $data{$key} += 1; # a1 を a2 へ
}
delete $data{'e'}; # データを元より短くする実験

seek USER, 0, 0;
print USER "$_$data{$_}\n" for sort keys %data;
truncate USER, tell USER;
close USER;
0774nobodyさん03/07/18 22:23ID:???
>>763
my %column = ('歴史' => 1, '世界史' => 2, '合計' => 3);
my @score = (
  [ 1, 50, 10, 60 ],
  [ 2, 60, 80, 140 ],
  [ 3, 10, 60, 70 ],
);

my $column = $column{'歴史'};
print join ' ',
  map $_->[0],
  sort { $b->[$column] <=> $a->[$column] }
  @score;
0775nobodyさん03/07/18 22:53ID:???
>>770-772
たしかに、できた、な、、、
俺に負けを認めろ、というのか?
ぜってーできねぇと思っていたのに





スミマセンデシタ
0776nobodyさん03/07/18 22:54ID:???

             (  )
              ( )
    /ノノ"\ヽ      ) 
    从*゚ー゚从   〜    
     /゙゙゙lll`y─┛        
    ノ. ノノ |
.    `〜rrrrー′
.      |_i|_(_

落ち着け。
0777nobodyさん03/07/18 23:11ID:???
>>763
あまり関係ないけど、おいらならこんなデータ構造にしますな。

@score = (
 1 => {
  '歴史' => 10,
  '世界史' => 50,
 },
);

合計は計算する。
0778nobodyさん03/07/19 00:22ID:???

There's more than one way to do it.
0779nobodyさん03/07/19 00:31ID:???
番号 歴史 世界史 合計
1   50   10    60
2   60   80    140
3   10   60    70


随分と成績の悪いやつばかりですね
0780nobodyさん03/07/19 00:52ID:???
番号 歴史 世界史 算数 合計
4   90   85    5   190
0781nobodyさん03/07/19 01:07ID:???
つーかさ、

「これ(・・・コードの羅列・・・)って出来るんですか?」

って聞くやつってどういう思考回路してるんだ?

俺様がわざわざ試すのは面倒だから下々の暇そうな2chの
馬鹿どもにやらせておこうって考えなのかな?
0782nobodyさん03/07/19 01:12ID:???
print "$a+$b"ってできますか?
0783nobodyさん03/07/19 01:18ID:???
>>782
無理です。パールを動かしてるインターネットが暴走してCGIがフリーズします。
0784nobodyさん03/07/19 01:39ID:???
マザーコンピュータが反乱を起こして日本列島が沈没します
0785nobodyさん03/07/19 01:43ID:???
>>782
ダメだよ!インターネットがバグるよ!
0786nobodyさん03/07/19 01:48ID:???
>>782
赤ちゃんできちゃうよ!
0787nobodyさん03/07/19 01:53ID:???
>>786
めちゃめちゃワラタ
0788nobodyさん03/07/19 02:23ID:???
燃料を補給してくれてるんだろ
0789nobodyさん03/07/19 02:39ID:xDnFfAsd
〜を含まないっていうパールって
あったら教えてください。素人質問で
申し訳ありませんが。
0790nobodyさん03/07/19 02:56ID:???
>>789
http://www.din.or.jp/~ohzaki/regex.htm
0791nobodyさん03/07/19 02:57ID:???
>>789
パールのようなもの
0792nobodyさん03/07/19 03:42ID:xDnFfAsd
>>790
有難うございました。
ただ良く理解できません。
例として、3と4は含むけど5は含まない
というのを教えていただける人がいれば、
よろしくお願いします。
0793nobodyさん03/07/19 04:01ID:???
>>792
http://www.geocities.jp/leeobasan/mokuji-kokugo.htm
0794nobodyさん03/07/19 04:09ID:xDnFfAsd
>>793
分からないなら分からないって言ってね。
0795nobodyさん03/07/19 04:11ID:???
>>794
はい。>>789も>>792もどういう質問を意図している日本語なのか全く分からないです。
0796nobodyさん03/07/19 04:18ID:???
3と4を含むが5は含まない
-> 3と4を含み、かつ5は含まない
-> 3を含み、かつ4を含み、かつ5を含まない

実際にperlで表現する方法は>>790で既出なので略。

上の仕組みが分からない時は「集合」の勉強をしちゃってください。
「論理和 論理積」でググればいっぱいヒットします。

こんだけ丁寧に書けばもう問題ないでしょう。てことで次の質問者の方どうぞ。
0797nobodyさん03/07/19 05:16ID:???
>>796
やーだからね、仮にそういう質問の意図だったとして、
それが配列の要素に対しての話なのか文字列の部分に対しての話なのか、
条件判定の話なのか、ついでにそもそもPerlSyntaxの中で話なのかどうかすら、
何が何だかさっぱり分からんでしょ。

そもそも>>789や>>792からそういう解釈を導き出すのも無理あるし。

というわけで次の質問者どうぞ。
0798nobodyさん03/07/19 09:24ID:???
こないだ、他人がつくっったプログラムの改修たのまれたんですが、
それみたら、そのスクリプト(もちperl)が、
商品を管理者画面から登録する際、
インデックスファイルみたいなものに、連番と商品名だけCSVで持たせて、
商品の詳しい内容は、
別のフォルダ「商品名」(もち日本語)っていうファイルを作らせて、
(たとえば、「ThinkPad1200特売品」とかいうファイル名)
で、「ThinkPad1200特売品」っていうファイルの中に、「<>」区切りで、
商品名の詳細がかいてあるんです・・・

自分、仕事としてperlをやりはじめたのがまだ1ヶ月だから、
わからないんだけど、こういう組み方って、アリなんですか?
それとも異常?

perlお仕事歴長いかた、教えてください。
079979803/07/19 09:25ID:???
1個typoしてますた

>別のフォルダ「商品名」(もち日本語)っていうファイルを作らせて、
じゃなく
別のフォルダの中に「商品名」(もち日本語)っていうファイルを作らせて、
0800nobodyさん03/07/19 09:33ID:???
目の前に存在してるんだから、アリだろう。
0801nobodyさん03/07/19 09:45ID:???
仕事としてperlをやりはじめて2ヶ月のやつが作ったのだろう
080279803/07/19 11:07ID:???
>>800-801
アリだけど、そいつはへたくそっていう結論でOK?
0803nobodyさん03/07/19 11:34ID:???
>>798
ネットショッピングかな?
商品登録だけじゃなくて、販売とか在庫管理まで考慮して
ファイルを設計する必要がある。
他の部分がどうなってるのか分からないけど、
商品詳細情報を個別のファイルにしておくと、
商品番号から詳細情報を表示するリクエストがあったときに
「全商品詳細情報ファイル」を読んで検索して表示するより速い。
内容に不備・誤記があったときの訂正も楽。
完売したらインデックスファイルの該当個所だけ変更すればよい。
目的に合わせてファイルを分けるのは異常ではなく当然。
Perl というよりデータベース設計の問題だと思われる。
080479803/07/19 17:38ID:???
>>803
なるほどー、そういう利点があるんですね。
それは、すごく初耳だったので、勉強になりますた。

>販売とか在庫管理まで考慮してファイルを設計する必要がある。
これをつくった人は、
そこまでは、なにも考えてないみたいです。
ショッピングカート経由で注文があったらメールがいくだけみたいな。

>完売したらインデックスファイルの該当個所だけ変更すればよい。
っていう機能を管理者画面につけてないみたいですしね。
0805nobodyさん03/07/19 19:07ID:???
>>804
将来的な機能追加を見越した設計だったのかもしれない。

メールを送るだけだからファイル管理だけで充分だけど、
単一ファイルじゃ拡張しにくくて気持ち悪いとか。
ある程度の規模や機能に達すればファイルでなくて本格的な
データベースを導入することになるんだろうけど。

>そこまでは、なにも考えてないみたいです。
在庫管理するかどうかのプログラマに決定権があったとは思いにくいなぁ。
単に初回作成時は、依頼主の予算やショッピングサイトの来客数の見込みから
簡単に済ましただけかも知れない。

実店舗がある個人商店の片手間なショッピングサイトとかなら、大枚はたいて初っ端から
大掛かりなシステムは依頼できないっしょ。
080679503/07/19 19:53ID:???
(´・ω・`)<俺、日本語が不自由なんだよ…。
0807nobodyさん03/07/19 21:46ID:???
>>806
ィ
 �`
0808nobodyさん03/07/19 21:54ID:???
ime.nuや、cgiboy.comみたいに、
http://ime.nu/pc2.2ch.net/やhttp://cgiboy.com/pc2.2ch.net/のようなアドレスで
動的にページを出力するにはどうしたらいいんでしょうか?
PATH_INFOを使用するにしても、スクリプトの名前が入ると思うのですが・・・
0809nobodyさん03/07/19 22:09ID:???
>>808
スレタイ嫁。
0810nobodyさん03/07/20 00:14ID:gCjTktSy
掲示板のcgiファイルに「ー」を記載すると
アップ出来ないみたいなんですが、
どうしても表示したいので、やり方を教えて下さい。
\で囲んだりしても駄目だったので。
例えばクーラーを表示する場合とか。
0811nobodyさん03/07/20 00:16ID:???
\Qー\E
0812nobodyさん03/07/20 02:13ID:???
アップできないわきゃーないだろう。FTP送信時にエラーでも出るの?
質問は正確にね。
0813nobodyさん03/07/20 02:43ID:???
>>810
エラー文面も載せてもらえるといいな。
FTPだとしたら取れないかな?

「クーラー perl 文字コード」でぐぐれば幸せになれるかもね。
0814nobodyさん03/07/20 09:35ID:XGlmJStz
テキストファイルtestfileで、上一桁が同じなら、最初に現れる行だけを
残した別ファイルdatabaseを作りたいのです。
具体的には、
a:xxx
b:yyy
a:zzz
から、3行目を削除して
a:xxx
b:yyy
としたいのです。
そこで、正規表現とDBMハッシュの勉強を兼ねて、次のスクリプトを作って
みました。

dbmopen(%DB, "database", 0666);
open(IN, "testfile");
while (<IN>) {
if (/(\w):(.*)/) { $DB{$1} = ":" . $2 unless exists($DB{$1}); }
}

実行すると、
AnyDBM_File doesn't define an EXISTS method
というエラーメッセージが出ます。
DBMハッシュにexists関数は使えないのでしょうか?
どなたか、ご教示ください。
(exists($DB{$1})ではなく、$DB{$1}にすれば良いのですが、
existsを使ってみたかったのです。)
0815nobodyさん03/07/20 10:11ID:???
>>814
dbmopenじゃなくtieを使えば?
0816 ◆hMJAPH9PWA 03/07/20 11:32ID:???
>>814
dbmopen()ってのは"幾つかのDBMライブラリのうち使えるものを使う"という仕様なので、
実際にどんな操作が可能かはそのDBMライブラリに実装によるんだよ。
で、困った事に大抵のUnixでのデフォルトであるNDBM_FileはEXISTSが(現時点では)実装されていないんだよね。
とりあえず、dbmopen()を使う前に、例えば"use DB_File"や、"use SDBM_FIle"などと
他のDBMモジュライブラリルを使う事を明示すればいいかな。

dbmopen()はAnyDBM_Fileをtie()するだけの関数なので、
perldoc AnyDBM_Fileとperldoc -f tieも参照されたし。
0817nobodyさん03/07/20 12:41ID:???
dbmopenは、Perl4時代の遺物。>>815の言うようにtie使え
081881403/07/20 13:18ID:XGlmJStz
>>816
「実際にどんな操作が可能かはそのDBMライブラリの実装によるんだよ。
で、困った事に大抵のUnixでのデフォルトであるNDBM_FileはEXISTSが(現時点
では)実装されていないんだよね。」
良く分かりました。どうも有り難うございます。

>>815, >>817
私は「初めてのPerl」を読み終えたばかりの初心者です。タイ変数については
これから「プログラミングPerl」で勉強します。
0819nobodyさん03/07/20 18:21ID:???

while( 1 ) {
 ・
 ・
 ・
}

…の部分はかなり大きな処理で、ループの上に戻ってくるまでに
時間がかかるスクリプトがあります。ループの上に戻ってきた時に
スクリプトの自分自身をリロードするような事ってできますか?

何故こんな事したいかと言うと、ループの上に戻って来る前に、
スクリプト修正とか入ると、一旦スクリプトを終了しないといけないので
リロードできないものかと…。因みに、 while の前後にも処理があります
0820nobodyさん03/07/20 18:28ID:???
リロードしたら最初からやるのと同じだろ
0821nobodyさん03/07/20 18:28ID:???
ループの上?
0822闇主03/07/20 18:40ID:???
>>819
スクリプトファイルを変更しても
既に動いているプロセスのコードは変わらない。
変更後のスクリプトによる別プロセスを立ち上げ直す必要がある。
0823nobodyさん03/07/20 18:46ID:???
何でそんなことがしたいのかは置いといて。

while内のコードを別ファイルにして、ループ内で毎回読み込んでevalブロックの中で
実行させるというのはどうだろう。
0824nobodyさん03/07/20 19:44ID:???
>>823
確かにそのやり方でも可能だな。
処理にもよるが重いだろうな。レンタル鯖でやるのはどんなもんだろうか。
0825nobodyさん03/07/20 20:06ID:???
>>824
while(1)の時点ですでに終わってると思うけどね・・・・
0826nobodyさん03/07/20 20:33ID:???
レンタル鯖で動かすって誰が言ってるんだ?
Perlと言えばCGIしか思いつかないのか。
0827nobodyさん03/07/20 20:51ID:???
>826
おまいさん、この板はWebProg板ですよ?
ム板と勘違いしてる?
0828nobodyさん03/07/20 20:55ID:???
鯖にもいろいろあるわけで。。
0829nobodyさん03/07/20 21:00ID:???
>>827
うひゃあ。思いっ切り勘違いしてました。スマソ
0830nobodyさん03/07/20 21:25ID:???
俺もたまにム板と勘違いするから心配すんな。
向こうで正規表現スレに誘導したの、実は俺。
0831nobodyさん03/07/20 21:28ID:???
2ちゃんねるの dat ファイル読み出しスクリプト作ったんですが、ちと、悩んでいます。何故か、gzip 転送されてこないんです。
どこがオカシイか教えてください
#!/usr/bin/perl
use LWP::UserAgent;
use Compress::Zlib;
{
$ua = LWP::UserAgent->new;
$ua->agent( "Monazilla/1.00 ( ´,_ゝ`)プッ/1.0" );
$ua->parse_head( 0 );
$req = HTTP::Request->new( GET => $ARGV[0] );
$req->protocol( 'HTTP/1.1' );
$req->header( 'Accept-Encoding' => 'gzip, deflate' );
$req->header( 'Connection' => 'keep-alive' );
print $req->as_string;
# リクエストの送信
$res = $ua->request($req);
# 出力のチェック
if ( $res->is_success ) {
print $res->headers->as_string;
if ( $res->headers->content_encoding =~ /gzip/ ) {
print "圧縮転送された\n";
$t = Compress::Zlib::memGunzip( $res->content );
}
else {
print "圧縮転送されてない\n";
$t = $res->content;
}
}
else { print "Error: " . $res->status_line . "\n"; }
}
0832nobodyさん03/07/20 21:39ID:???
>>831
Accept-Encoding:gzip
か
Accept-Encoding:x-gzip
0833nobodyさん03/07/20 21:44ID:???
>>832 今、やってみましたが、駄目でした

$req->header( 'Accept-Encoding' => '*' );

にしても、駄目でした。
0834nobodyさん03/07/20 22:00ID:???
>>827
cgiは書いたことないが、web用のperlスクリプトは
いっぱい書いてるぞ
0835nobodyさん03/07/20 22:01ID:???
>>831
subject.txt以外は今はgzip転送してないのでは?
0836nobodyさん03/07/20 22:05ID:???
>>835
subject.txt も gzip 転送されてないようです
0837nobodyさん03/07/20 22:35ID:???
そうだっけ。少し前に調べた結果だから変わってるかも。
0838nobodyさん03/07/20 22:39ID:???
monazillaスレあたりを読んできたほうが
0839nobodyさん03/07/20 22:57ID:ucM2tzJ9
簡単な暗号っぽいやつをやっているのですが
例えば $hoge = "\x53\x54\x2d\69" なら
\x69\x2d\x54\53 と逆転させてたいのですが
どうやってやるのがスマートなのでしょうか?

一応初心者ながら 1バイトずつ配列に読み込んでreverseでやるのを考えてみたんですが・・・
0840あぼーんNGNG
あぼーん
0841あぼーんNGNG
あぼーん
0842nobodyさん03/07/20 23:22ID:???
>>839
スカラコンテキストでそのままreverseに入れれば、反転した文字列が得られる。
perldoc -f reverse もしくは「perl reverse」でぐぐる。
084363403/07/20 23:40ID:???
>>831
$req->header('ACCEPT_ENCODING'=>'gzip');
で試してみそ・・・
0844nobodyさん03/07/21 00:44ID:???
perl2exeで配布できるようにしたperlのプログラムって
ソフトウェアと呼んでもいいの?
0845nobodyさん03/07/21 01:05ID:???
少なくともハードウェアではない
0846nobodyさん03/07/21 01:13ID:???
>>844
ソフトです
0847nobodyさん03/07/21 01:57ID:???
>>838
一応、読んで見てきましたが、該当するような記述は見当たりませんでした。

>>843
それをやっても、駄目でした。LWP は何故か

Accept-Encoding: gzip

と、勝手に変更しますね。


まぁ、2ちゃんねる側の仕様が変わったのカナ?
0848nobodyさん03/07/21 10:23ID:???
OOPでスクリプトを書こうと思い、せっせとスクリプトを書いているのですが、OOPで書く利点がぜんぜん見当たりません。
強いて言うならば「今風」ってだけです。

いま作っているモジュールが特定のスクリプト専用に作っている為、そういう風に思うのかもしれません。
それとも根本的に考え方が間違ってるのかもしれません。
それすらわからなくなってきてしまって。

OOPで書く利点をお教え頂ければ嬉しいです。
宜しくお願いします。
0849ともちゃん03/07/21 11:44ID:O4IhS66K
クッキーを取得して、なければ違うページに移動するスクリプトを試しています。
うまくいかなくて最後の3行、$$cook{$key} = $value;}}の最後の所がsyntax errorだと表示されます。
]か}のミスなのだそうです(by CGIROOM・エラーチェック)。
でも、[や{の数とも合っているし、わたしは変だと思わないのです。
どこがどう変なのか分かりますか?
お願いします。

#!/usr/bin/perl
use strict; &main; exit;
sub main{
my $id = "abc
my %cook = ();
getcookie("abc",\%cook);
unless($ENV{'HTTP_COOKIE'} = ~/%cook/){
print "Location: http://aaa/cookie.html\n";}
sub getcookie{
my ($id,$cook) = @_;
my %cook = ();
my $cookie = $ENV{"HTTP_COOKIE"};
$cookie =~ tr/+/ /;
$cookie =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack('H2',$1)/eg;
foreach my $x (split ";",$cookie){
my ($key,$value) = split "=",$x,2;
$key =~ tr/ //d; $cook{$key} = $value;}
foreach my $x (split ",",$cook{$id}){
my ($key,$value) = split ":",$x,2;
$$cook{$key} = $value;}}
0850nobodyさん03/07/21 11:46ID:???
>>848
君には必要ないと。
0851nobodyさん03/07/21 12:10ID:???
>>849
my $id = "abc

なんか閉じてないけど。
085284803/07/21 12:20ID:???
>>850
それはある意味正解なのですが、それを言っちゃうと・・・
でもOOPで書きたいんです。

>>849
どうがんばってみても「}」が一個足りません。
気のせいでしょうか?
0853ともちゃん03/07/21 12:31ID:O4IhS66K
851番さんありがとうございます。
書き写す時のミスでmy $id = "abc";となっていました。<(_ _)>

852番さんありがとうございます。
わたし、下の行ばかり見ていました。わたし馬鹿ですね。
もっと上の行になかったの気が着かなかったです。(^^ゞ
直したらエラーの表示はなくなりましたが、全然動いていないみたいなんです。(;_;)
■ このスレッドは過去ログ倉庫に格納されています