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

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

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん04/05/26 16:48ID:kkhhiYmo
いらっしゃーい、Perlのコーディングで困ってる人のスレです。

【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。

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

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

過去ログやお勧めサイトは >>2-10
045244004/06/23 01:16ID:???
わかんないですか?
0453nobodyさん04/06/23 01:19ID:???
↑古典的且つ模範的な教えて君登場↑
0454nobodyさん04/06/23 01:20ID:???
>>450
Net::Telnet
0455nobodyさん04/06/23 02:03ID:???
スクリプトを書きながら気になったのですが、
各サブルーチンをスクリプト内に全部記述するのと、
それぞれにライブラリファイルを作成して必要なときのみrequireで読み込むのとどっちがいいんでしょうかね?
いまいち意味不明っぽいですが、つまりは

if ($bar) {
 require "hogehoge.pl";
 &hogehoge::foo(\$bar);
}

と

if ($bar) { &foo(\$bar); }

のどっちがいいのでしょうか?

0456nobodyさん04/06/23 02:07ID:???
時と場合によるよ。たくさんプログラムを書いてる内にうまく使い分けができるようになる。
0457nobodyさん04/06/23 02:26ID:???
>456
レスありがとうございます。
使い分け、頭の片隅に置いておきます。
まだまだ常時考えながらはコード書けませんです、はい。

もう少し色んなこと考えながらコード書かないとだめだなぁ…
0458nobodyさん04/06/23 03:04ID:???
>>440>>452
445のレスを見たら誰も答えなくなるよ。
常識の無い奴はスルーされる。
0459nobodyさん04/06/23 05:27ID:???
>>426
http://pc5.2ch.net/test/read.cgi/php/1063562491/861
0460nobodyさん04/06/23 10:31ID:???
1<>い<>12:50<>
4<>あ<>20:02<>
2<>き<>08:41<>

このように並んでいるテキストを、入力された数値によってソートしたいのですが
今は
if($num==1){ };
if($num==2){ };
if($num==3){ };
みたいに書いてるのですが、もっとスマートなやり方は無いでしょうか?
0461nobodyさん04/06/23 11:41ID:???
やかましいわいヴォケ
ちゃんと説明しろ
0462nobodyさん04/06/23 11:44ID:???
$data{$num} = $line;
見たいにハッシュにぶち込んで、

foreach my $num (sort( keys %data)){
#$data{$num} の処理
}

にする
046344004/06/23 12:42ID:???
>>458
わかんないんですか?
0464nobodyさん04/06/23 18:02ID:???
うん。わかんないよ。
さあ帰った帰った。
0465nobodyさん04/06/23 18:08ID:???
>>463
すんげー難しいからわかるやつはどこにもいないよ。
じゃあバイバイ。
0466nobodyさん04/06/23 21:04ID:???
cookieを読みこんで配列にしたいんだけど、
$a = $ENV{'HTTP_COOKIE'};
@a = split /\;/,$a;
foreach(@a){
(my $a , my $b) = split /=/;
$form{$a} = $b ;
}
クッキーの中にNAME=VALUEが一つだけでも複数あっても大丈夫のようにしたいんだけど、↑ので
合ってる?一つの場合は@aの中には$aがそのまま入るから一応大丈夫だと思うけど、
ここのお墨付きをもらいにきた。
0467nobodyさん04/06/23 21:16ID:???
>>466
チェックぐらい自分でしろ。
http://www.studyinghttp.net/cookies.html
046846604/06/23 21:37ID:???
>>467
わかんないなら、答えずともよい。
0469nobodyさん04/06/23 21:39ID:???
うん。わかんないよ。
さあ帰った帰った。
0470nobodyさん04/06/23 21:40ID:???
>>468
すんげー難しいからわかるやつはどこにもいないよ。
じゃあバイバイ。
047146604/06/23 21:41ID:???
>>469-470
ここには回答者は一人しかいないのか?
とりあえず一人二役とか恥ずかしいから止めとけって。
047244004/06/23 21:44ID:???
なんかキモイですねここ。

>さあ帰った帰った。

ってまるで、ここがあなたの居場所みたいな言い方ですけど、
ここがあなたの居場所なんですか?
0473nobodyさん04/06/23 21:44ID:???
(´-`).。oO(恥ずかしい質問をしてる奴がよく言うよ・・・)
0474nobodyさん04/06/23 21:46ID:???
>>471-472
一人二役とか恥ずかしいから止めとけって。
047546604/06/23 21:46ID:???
誰かまともな人いたら>>466お願いね。
まともな人のお墨付きが欲しいんだ。
0476nobodyさん04/06/23 21:46ID:???
>>472
まあ、お前の居ていい場所ではないな。
0477nobodyさん04/06/23 21:47ID:???
ここは香ばしいインターネッツですね
047844004/06/23 21:48ID:???
>>473
私に言ってるのですか?
ところでこのスレがあなたの居場所なんですか?
0479nobodyさん04/06/23 21:49ID:???
>>475
オッケーオッケー完璧です
0480nobodyさん04/06/23 21:50ID:???
お前ら幼稚な争いはやめれ。
ここは質問スレなんだから、喧嘩はよそでやってくれ。
0481nobodyさん04/06/23 21:52ID:???
>>480
お前らって言うより440=466
048246604/06/23 21:54ID:???
>>479
おまいは>>469-470だろ?でもまあ俺は単純だから、俺より詳しそうなおまいに
okを出してもらえば、それで安心だよ。ありがとね。

>>467でくれたサイトもいいとこみたいだから見に行くよ。それじゃ。ごめんね。
048348004/06/23 21:56ID:???
>>481
俺にはここに俺ともう二人しかいないようにしか思えないんだが・・・・
そして俺以外の二人に向けて言ったんだけど、まあとりあえず早く正常に戻そうよ。

それでは次の質問どぞ↓
048444004/06/23 21:57ID:???
ところでこのスレがあなたの居場所なんですか?

いつになったら答えてくれるんですか?恥ずかしくて答えられませんか?
0485nobodyさん04/06/23 22:10ID:???
----- 終了 -----
0486nobodyさん04/06/23 22:20ID:???
>>440
ここに解説がある。
http://www2.strangeworld.org/uedakana/perl_tips105.txt
0487nobodyさん04/06/23 22:22ID:???
一連の流れを読んでみて思った。
質問者も悪いが、すぐムキになる回答者もどうかと。
っていうかこのスレの回答者は特有だね。
母親に向かってすぐ「くそババァ!」って連呼するタイプの人間だな。内弁慶っていうかな。
0488nobodyさん04/06/23 22:27ID:???
>>487
>>1
良い回答は良い質問から。
^^^^^^^^^^^^^^^^^^^^^^
0489nobodyさん04/06/23 22:38ID:???
>>488
そうやっていつでも相手のせいにする辺りもどうかと。どちらかが大人になるしかないでしょ。
0490nobodyさん04/06/23 22:53ID:???
ロクでもない質問はいっさいレスをせずに無視しとくか
0491nobodyさん04/06/23 23:08ID:???
>>486
俺がくらったじゃねえかよ!マジで鬱・・・・何のウイルス?
色々探したが見つからなかった・・・・ウイルス対策なしの俺がここのURLを見に行くなんて
しくじった。
perl_tipsっていかにも正当な名前なのに。マジで直し方教えてくれ。
0492nobodyさん04/06/23 23:33ID:???
http://www.symantec.com/region/jp/sarcj/data/j/js.trojan.windowbomb.html
0493nobodyさん04/06/24 00:03ID:???
>>491
どんくせえやつだな、ったく
049449104/06/24 00:04ID:???
>>492
ありがとう・・・・スキャンかけたいけど、っていうか対策ソフトいれたいけど、c:\が残り
50MBしかないから・・・・

とりあえず、ブラクラ系みたいなのでほっとしてる。変な症状もないし、スタートアップにも
新しい奴なかったからほっとく。

それにしても何故にこのスレでトロイの木馬が貼られてるんだよ・・・・・そんなに憎悪を抱いたのか?
049549104/06/24 00:05ID:???
>>493
そんなこと言うなよ・・・・・既に鬱なんだから、追い撃ちかけるのは止めて・・・・
0496nobodyさん04/06/24 01:29ID:???
>491
ソース見てみたが、ウィルスではないと思うぞ。
<meta http-equiv="Refresh" content="0">と、
コンコンクラッシャーとメールストーム。
ただし、
<img src="http:// www. raus. de/ crashme/">
の部分が完全一致でをウィルスとして認定するらしい。 
(全角スペースを空けて反応しないようにしてある)
049749104/06/24 02:23ID:???
>>496
ありがと。その優しさに軽く感動;;
俺実は2回踏んだのね。一度目はセキュリティ中のままで行ったらいきなり画面が真っ青になって
例外なんとかってやつが出て再起動して、レジストリ修復してセーフであげてscandiskとかした後、
普通に立ち上げたらとくには問題ないみたいだった。

2回目はそのソースをブラクラチェッカにかけてみたけど、そのチェッカの使い方がわからずに、セキュリティを
最高に挙げて愚直にトライ。結果同じ症状で再起動した後、同じ事やって今の状況・・・・・・

俺の場合ウイルスのとこに行く前に、例外発生画面になった気がする。クリック1秒未満で画面が何も変化
ないまま次の画面は青い例外発生画面だったから。

ほんと優しくしてくれてありがと。癒されたぽ
049849104/06/24 03:13ID:???
http://www.trendmicro.co.jp/vinfo/virusencyclo/default5.asp?VName=HTML_SUAR.A

これだったみたい。一応オンラインのウイルススキャンかけてみたら
このウイルスがテンポラリファイルから4つ検出された。とりあえず危険なものではなくて「ほっ」・・・・
0499nobodyさん04/06/24 10:36ID:???
おまいらスレ違いすぎ。

- - - - - Perl コーディング初心者質問コーナー Part35 - - - - -
0500nobodyさん04/06/24 18:54ID:???
ブラウザの「進む」とか「戻る」でcgiのページに移動すると、
警告:ページの有効期限切れ
というメッセージが出るのですが、それが出ないサイトもあるみたいですが、
それはどういう方法を使ってるのですか?PERLでのやりかたが知りたいので教えて下さい。
0501nobodyさん04/06/24 18:59ID:???
htmlのノーキャッシュじゃねーの?
0502nobodyさん04/06/24 19:10ID:???
厳密にはhtmlとは限らない罠
0503nobodyさん04/06/24 20:00ID:???
>>500
formのmethodをgetにする。
050450004/06/24 20:31ID:???
>>501
キャッシュの制御を<meta>で変えればいいのですか?

>>502
HTTPのヘッダーの辺りということでしょうか?

>>503
getだとできるんですね!getの時はブラウザの戻る、進むでクエリ付きURLだから
そのまま処理をしてくれるということみたいですね。
postの場合は標準入力から読みこむ。それで、postで送ったフォームデータは
セキュリティ上の都合でブラウザ?のデフォルト設定が自動再送信しないようになって
いるんですよね?HTTPのヘッダに何かを追加すると、その設定が変えられるというわけでしょうか?

0505nobodyさん04/06/24 20:37ID:???
Expires:
0506nobodyさん04/06/24 20:38ID:???
俺も昔気になったときにメソッドによるのかな?と思ったが、
結局違うくて、ノーキャッシュだったと思うんだがなぁ

兎に角何でもかんでも1から10まで全部他人に頼ろうと思わず、
与えられた情報を自分で試す努力しろっての
0507nobodyさん04/06/24 20:41ID:???
それ以前にスレ違い
0508nobodyさん04/06/24 21:30ID:???
>>504
一応header関連だった気がするが、cgiの出力をキャッシュさせるかどうかは
pragma
expires
cache-control
他にもなんかあった気がするけど、HTTPサーバによっては-nphで自分で一からheader
を設定しないと、勝手にno-cacheを吐き出すよ。たしかね。

どうだったっけかな。思い出せない。
050950004/06/24 21:56ID:???
ありがとうございます!今ローカル環境で試してますがなかなかできません。

print "Content-type:text/html\n";
print "Expires:Sun, 06 Nov 2005 08:49:37 GMT"."\n\n";

このようにしてみましたが、効果なしでした。かなり高度なテクニックなんですかね?
0510nobodyさん04/06/24 22:11ID:???
この手のはブラウザ依存すると思うので、セッションを持たせて、セッションデータから毎回ページを作リ直す、って方向でやった方がいいと思う。
0511nobodyさん04/06/24 22:13ID:???
>>509
おまいには悪いが、誰もわからない悪寒・・・・・・・
ついでに>>507のいうようにスレ違いぽ
まあ一応
PERLでどうコーディングしたら出力がUAにキャッシュされるか
という質問みたいだからあながち的ハズレなスレ選びではないが。
どっちにしろ様子をみてる限りではわかる人は今のとこ、まだ来てないんじゃないか?
結局自力で調べるしかない。ガンガレ
051250004/06/24 22:19ID:???
>>510
シェア90%を誇るIEだけクリアできれば満足なんですが、やはり難しいんですね。
cgiの使い勝手のよさを上げようと思っただけなので、無理でも一応機能的には影響はないです。

>>511
応援ありがとうございます。頑張ります!
0513nobodyさん04/06/24 22:48ID:???
http://www.mnot.net/cache_docs/
いいページ見つけた。俺も後で読んでみるよ。
0514nobodyさん04/06/24 23:03ID:???
>>513
またウイルスだったりして・・・・とりあえず関係ない俺は踏まないでおこう。
0515nobodyさん04/06/24 23:10ID:???
http://www.google.co.jp/search?sourceid=navclient&hl=ja&ie=UTF-8&oe=UTF-8&q=http%3A%2F%2Fwww%2Emnot%2Enet%2Fcache%5Fdocs%2F
心配なときは、一旦グーグルに入れればいいのだ。
0516nobodyさん04/06/25 02:44ID:???
ActivePerlをwin98に入れてPERLのテストしてるんだけど、-cを使った文法チェックが
うまくいかない。

コマンドプロンプトで
d:\perl\bin>perl -c ファイルへの絶対パス
でやってるけど、useがないものならうまくいくけどuseがあると何故かuseしてる行数に
エラーがあるって出力される。

実際にhttpdで表示させると問題なくできるやつだから、何が悪いのかわかんない・・・・

もしかしてActivePerlの文法チェク機能ってuseでモジュール読みこんでるとしくじるの?
ちなみにモジュールは自前のPERLだけで書いた簡単なやつ。

誰か何か知ってたら教えて下さい。
0517nobodyさん04/06/25 04:06ID:???
>>516
>>1より抜粋

3: こんなエラーが出て上手く行かなかった。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

最低でも1と3が無いと誰も答えられないよ。
0518nobodyさん04/06/25 09:58ID:???
>>516
何をuseしてるのかは書かないのか。
0519nobodyさん04/06/25 10:07ID:???
use >>516の頭;
0520nobodyさん04/06/25 11:04ID:???
syntax error at >>519 line 1, near "use>>516の頭" Execution of >>519 aborted due to compilation errors.
0521nobodyさん04/06/25 13:49ID:???
範囲演算子って、小さい値〜大きい値の範囲じゃないと動かないんだね…

@Time = gmtime( time + 60 * 60 * 9 );
$Time[5] += 1900;
$Time[4] += 1;

ってしたときに、
sprintf( "%04d/%02d/%02d", @Time[5..3] );

がやりたかったんだけど。。
こういう場合って羅列するしかないんですかね?
052251604/06/25 14:04ID:???
どうゆこと?
useしてるものは自作のモジュールって書いたし。
エラーはuseが書いてある行数のとこで出てるって書いたけど、エラーの内容も出力されてるはずだから
それを出せってことかな?

ごめん。今からエラー文そのままあげます。
0523nobodyさん04/06/25 14:20ID:???
>>522
俺は今日初カキコだが、>>517と同じことを思ったよ。
>useしてるものは自作のモジュールって書いたし。
ってあるけど、最後におまけのように書いてあるだけじゃん。普通に見落とすよ。
要するに質問の仕方がド下手糞ってことだ。

あるスクリプトを-cオプションでチェックするとエラーがでます。
環境は、Win98 + ActivePerl version○○です。

↓のようなスクリプトで、
---hoge.pl---
1: #!/usr/bin/perl
2: use mymodule; # 自作モジュール(簡単なPurePerlライブラリ)
------------

C:\>perl -c hoge.pl

とすると、

○○○ at hoge.pl line 2.

と出ます。

でも、CGIとしてhttpdに実行させると問題なく動きます。
もしかしてActivePerlの-cオプションはuseでモジュール読みこんでると失敗するのですか?
まず何を調べるべきでしょうか?
0524nobodyさん04/06/25 14:28ID:???
>>521

sprintf( "%04d/%02d/%02d", reverse(@Time[3..5]) );
0525nobodyさん04/06/25 14:46ID:???
@INC
052651604/06/25 14:57ID:???
>>523
ごめん。
D:\Perl\bin>perl -c C:\WINDOWS\デスクトップ\HTTPD1~1\CGI-BIN\TEST\B.CGI
これをやったら↓のエラーがでた。
Can't locate Test1.pm in @INC (@INC contains: D:/Perl/lib D:/Perl/site/lib .) at
C:\WINDOWS\デスクトップ\HTTPD1~1\CGI-BIN\TEST\B.CGI line 3.
BEGIN failed--compilation aborted at C:\WINDOWS\デスクトップ\HTTPD1~1\CGI-BIN\TEST\B
.CGI line 3.

b.cgiの中身は↓
#!/usr/local/bin/perl
push( @INC, 'C:\WINDOWS\デスクトップ\httpd142k\cgi-bin\test\Test1.pm' );
use Test1;
print "Content-type:text/html\n\n";
print "aiueoi";

useしているTest1.pmの中身は↓
package Test1;
#京
sub new{
my $self = shift;
my $obj = {a => 1 , b => 2};
bless $obj,$self;
}
1;

モジュールだけ-cに書けるとエラーはでないのでモジュール側には問題なしかと。
052751604/06/25 15:51ID:???
#!/usr/local/bin/perl

b.cgiを書き換えてみたけど、

package main;

BEGIN {
push( @INC, '/Test1.pm' );
}

use Test1;
print "Content-type:text/html\n\n";
print "aiueoi";

まだエラーだった。
Can't locate Test1.pm in @INC (@INC contains: D:/Perl/lib D:/Perl/site/lib . /Te
st1.pm) at C:\WINDOWS\デスクトップ\HTTPD1~1\CGI-BIN\TEST\B.CGI line 9.
BEGIN failed--compilation aborted at C:\WINDOWS\デスクトップ\HTTPD1~1\CGI-BIN\TEST\B
.CGI line 9.

@INCへの追加が失敗していて、読みこむファイルのパスが見つからないってことだよね?
0528nobodyさん04/06/25 16:18ID:???
>>527
ああなるほど、こりゃ確かに >>516 の質問の仕方が悪い。

どうすればいいかを教えるのは簡単だが、その前に一つ質問に答えてくれ。

なんでまた、
「@INC に push しさえすればサーチパスを追加できる」
なんてことを考えたんだ?
0529nobodyさん04/06/25 17:01ID:???
use libしろ。または、ちゃんとプログラムが置いてある所まで移動してやれ。
か、Perl/libに入れるとか
053051604/06/25 17:25ID:???
>>528
http://www.rfs.jp/sitebuilder/perl/
ここの@INCの説明にpushすればいいて書いてあったんだけど、意味を勘違いして受け取ったのかも;
それで
http://nonki.net/technical/perl/library/
ここの
>@INCに手動で追加する
っていうところ読んで、BEGINしてみたけどそれも間違ってたのかも;

>>529
use lib;
の一行を足してみたけど、駄目だった。それでプログラムが置いてあるフォルダに移動して
C:\WINDOWS\デスクトップ\httpd142k\cgi-bin\test>perl -c C:\WINDOWS\デスクトップ\HTTPD1~1\
CGI-BIN\TEST\B.CGI
をやったら
C:\WINDOWS\デスクトップ\HTTPD1~1\CGI-BIN\TEST\B.CGI syntax OK
成功した!感激!

Perl/libに入れるというのはプログラムをそのフォルダに入れとくって事?やってみたら
同じエラーがでた。

本当は@INCにどうやって追加すればいいんでしょうか?beginもうまくいかないし;
後、文法チェックでは>>526で書いたプログラムはエラーだけど、httpdで
http://localhost/cgi-bin/test/b.cgi
でやると問題なく動作するけど、サーバではエラーになるんですか?
まだサーバと契約してないから、試せない。
0531田舎者 ◆BNNnMrNVbI 04/06/25 17:26ID:???
おお!すごいなぁ。
0532田舎者 ◆o0/tSn5Zoc 04/06/25 17:27ID:???
最高ですね!
0533nobodyさん04/06/25 17:34ID:???
初心者は perl をインタプリタ言語だと捉えがちで、確かに見た目はそう見えるが、
内部的にはコンパイル言語であり、そう認識しないと往々にして罠にはまる。

その罠の一つが use によるライブラリの読み込み。
use で指定したライブラリは、実行時ではなく、コンパイル時に読み込まれる。
たまに if($a==1){ use Foo::Bar;} なんてことをやる人がいるが、
この Foo::Bar はif条件に関係なく必ず読み込まれる。

同様に、初心者は push(@INC,'/hoge/fuga'); use Foo::Bar; と書くことで
@INC にパスを追加してから Foo::Bar を読み込んでくれる、と考えがちだが、
実際には コンパイル→Foo::Bar読み込み→実行→push の順で処理されるので、
Foo::Bar 読み込み時にはまだ @INC にパスが追加されておらず、エラーになる。
このような場合には、push ではなく、use lib を使う。
use lib '/hoge/fuga' と書いておくと、これがコンパイル時に処理されるので、
この時点で @INC に /hoge/fuga が追加され、そこから Foo::Bar を読んでくれる。
053451604/06/25 17:49ID:???
>>533
ありがとうございます!今
use lib "C:\WINDOWS\デスクトップ\httpd142k\cgi-bin\test";
を初めに追加してエラーだったので、
use lib 'C:\WINDOWS\デスクトップ\httpd142k\cgi-bin\test';
にしたら成功しました!シングルクォーテーションじゃないといけないんですね。

lib.pmがBEGINもやってくれてるんですね。
ところで、文法チェックの時以外でもlibを使って自作のモジュールを読みこむ必要が
あるんでしょうか?
モジュールを読みこむとそれだけ処理にかかる時間が増えますよね。なるべく軽くしたいのですが、
やはり自作モジュールをuseするプログラムには初めにlibでやっておいたほうがいいですか?

053551604/06/25 17:52ID:???
今シングルクォートならうまく行くことをしって、
BEGIN {
push @INC,'C:\WINDOWS\デスクトップ\httpd142k\cgi-bin\test';
}
をlibの変わりに書いたら、エラーがでないで文法チェックokでした!

どちらでも好きな方でやればいいってことですよね。
053650004/06/25 18:45ID:???
>>513
レス遅くなりました。
英語のサイトなんですね;nifty翻訳にでも書けてみます。
0537nobodyさん04/06/25 19:54ID:???
>>534
ダブルクォーテーションは \ を特別に扱う話を聞いたことはないか?
print "\n"で何が出力される?
print '\n'で何が出力される?
053851604/06/25 20:14ID:???
>>537
初歩的なことを忘れてました;すいません。

ありがとうございました!
0539nobodyさん04/06/25 21:02ID:QWdt1cCh
掲示板の文字色を選ぶラジオボックスをクッキー対応にしたいのですがどのようにやればよろしいでしょうか。
ラジオボタンは
<INPUT name="color" type="radio" value="#758CEA">
<FONT color="#758cea">■</FONT>
のようになっておりcheckedを入れることができればOKなわけですよね。
関係演算子を使ってもcheckedを入れるような方法が思いつきません。
どなたかアドバイスお願いします。
0540nobodyさん04/06/25 21:06ID:???
>>539
そんな一部分だけ出されても答えようがない。
0541nobodyさん04/06/25 21:14ID:QWdt1cCh
>>540
ココ以外には思いつかないのですが、どの辺を出せばよろしいでしょうか?
複数のラジオボタンからクッキーにあった一個を選ぶと言うものですが。
クッキーから前回使った色の読み込みはできます。
0542nobodyさん04/06/25 21:44ID:???
>>541
お前、ここはPerlスレだぞ。
お前が貼り付けたのはどう見たって、HTMLにしか見えない。
054351604/06/25 21:53ID:???
>>541
俺ならそのラジオボタンの部分を全部PERLで動的に作成するかな。
$ENV{'HTTP_COOKIE'}の中身を条件文にかけて、$taguの中に何を入れるか決める。
それでできるよ。

例)
$cook = \$ENV{'HTTP_COOKIE'};
if ($cook eq "758cea" ) {
$tagu = qq|<INPUT name="color" type="radio" value="#758CEA" checked>|.
     qq|<INPUT name="color" type="radio" value="#000000">|;
}elsif($cook eq "000000"){
〜
}else{〜}

とか。ちょっとブサイクなコーディングだけど、後は自分でもう少し処理を軽くするといいよ。
054451604/06/25 21:54ID:???
ごめん。$cookをifの条件文で使うときは$$cookとかでデリファレンスしてね。
054551604/06/25 22:03ID:???
なんかクッキーの読みこみ後に=以前を切るの忘れてた。
修正も兼ねてもっと簡単に。
if ( $ENV{'HTTP_COOKIE'} eq "hogehoge" ) {$c1 = "checked";}
elsif(〜){$c2 = "checked";}else{〜}
それで
<INPUT name="color" type="radio" value="#758CEA" $c1>
<INPUT name="color" type="radio" value="#758CEA" $c2>
でいいね。
0546nobodyさん04/06/25 22:12ID:???
>>545
もし$c1にcheckedが入った場合$2には何が入るの?
0とかでもタグに不都合はないのかな…
0547nobodyさん04/06/25 22:15ID:???
my @Color_key = qw/
758CEA
000000
:
:
:
/; # 必要数並べる。

my %Color;
# $Color{'758CEA'} = ' checked';
# $Color{'000000'} = ''; のように成るように久喜をパージングしる。

foreach (@Color_key){
printf qq|<INPUT name="color" type="radio" value="#%s"%s>|, $_, $Color{$_};
printf qq|<span style="background: transparent; color:#%s">■</span>|, $_;
}
0548nobodyさん04/06/25 22:28ID:???
>>546
まあほとんどの場合は undef が空文字列として展開されると期待されるだろう

漏れなら Template Kit 使うけど
054951604/06/25 22:30ID:???
>>546
初めに
$c1 = "";
$c2 = "";
をしておく。
if文とかの制御構文はある程度勉強しておくといいよ。ちなみに>>545の場合
真がでてそのブロック処理をした時点でそれ以降の処理はおこなわれない。
0550nobodyさん04/06/25 23:03ID:???
こんなんとかってダメなん?

%COLOR_NUM = (1 => "#000000", 2 => "#FF0000", 3 => "#008040", 4 => "#0000FF", 5 => "#C100C1", 6 => "#FF80C0", 7 => "#FF8040");
print <<"EOF";
<TD>Color:</TD><TD><SELECT name="color" style="width : 40px;">
EOF
foreach (sort keys %COLOR_NUM) {
    if ($COOKIE{"color"} eq $COLOR_NUM{$_}) {
        $selected = " selected";
    } else {
        $selected = "";
    }
    print "<OPTION value=\"$COLOR_NUM{\"$_\"}\" style=\"color : $COLOR_NUM{\"$_\"};\"$selected>■</OPTION>\n";
}
print <<"EOF";
</SELECT></TD>
EOF
0551nobodyさん04/06/25 23:19ID:???
しばらくして気付いたけど、ラジオボタンだったんか・・・
まぁ似てるからいいか。
0552nobodyさん04/06/26 04:58ID:???
すごく初歩的な質問ですみませんが、連想配列のkeyの名前は通常何文字くらいが理想ですか?

$hash{abcde}
今はこのように長くても5文字位に抑えてますが、できるだけわかりやすい名前をつけたいので
多少長く10文字くらいになってしまいそうになるのですが、重くなったりしそうで不安です。

みなさんはハッシュのキーを何文字くらいに収めようとしていますか?
■ このスレッドは過去ログ倉庫に格納されています