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

Perlコーディング初心者質問スレ Part 42

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2005/05/25(水) 06:36:28ID:PVpWgcdf
Perlのコーディングで困ってる人のスレです。

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

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

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

過去ログやお勧めサイトは >>2-10
0362nobodyさん2005/06/14(火) 01:24:46ID:???
ローカルファイルを直接開くときはさすがに無理だが
Apache なら AddCharset しておくのが正しい姿だろうな
0363nobodyさん2005/06/14(火) 01:34:09ID:???
>>345
たぶんこれでできるから

foreach my $str($in =~ /(\x1B.*\x1B..)|([^\x1B]+)/g){
if($str=~/^[^\x1B]/){
$str =~ s/&/&/g;
$str =~ s/</</g;
$str =~ s/>/>/g;
$str =~ s/"/"/g;
}
$out .= $str;
}
0364nobodyさん2005/06/14(火) 01:34:48ID:???
>>361
metaでいい
0365nobodyさん2005/06/14(火) 01:36:56ID:???
>>363
すまん、間違い。

foreach my $str($in =~ /(\x1B.*\x1B..)|([^\x1B]+)/g){

は

foreach my $str($in =~ /(\x1B.*?\x1B..)|([^\x1B]+)/g){

ね。
0366nobodyさん2005/06/14(火) 12:33:58ID:TLKadJIJ
初歩的な質問かもしれませんが、

$text[$ii] = "<tr><td>上の段</td></tr>\n";
$text[$ii] =. "<tr><td>下の段</td></tr>\n";

と書き
$text[$ii]に"<tr><td>上の段</td></tr>\n<tr><td>下の段</td></tr>\n"が格納されるように、
コーディングしたつもりなのですが、エラーが発生してしまいます。
$text[$ii]に"<tr><td>上の段</td></tr>\n"に後から追加で"<tr><td>下の段</td></tr>\n"が、
格納されるようにするにはどのように変えたらよいですか?
0367nobodyさん2005/06/14(火) 12:38:42ID:???
×=.
○.=
0368nobodyさん2005/06/14(火) 12:48:08ID:TLKadJIJ
ありが�d!
0369 ◆sMFKtEQF46 2005/06/14(火) 17:39:32ID:???
$text の中には下のような配列になっています。
成田 船橋 , 八王子 町田 立川 国分寺 , 所沢 川越 秩父


これを最終的に下のような二次元配列にするために
kanto[0][0] = "成田"
kanto[0][1] = "船橋"
kanto[1][0] = "八王子"
・・・
kanto[1][3] = "秩父"


下のようなプログラム文を書いたのですが、

for $ii (0..$#text) {
 @kanto1 = split /,/,$text[$ii];# ←ここはうまくいく
 foreach $kk (@kanto1) {
  @kanto[$kk][] = split / /,$kanto1[$kk];# ←ここでエラー
 }
}

@kanto[$kk][]のところでエラーになってしまいます。
どのようにしたら、うまく@kantoに二次元配列を作成することが出来るでしょうか
0370nobodyさん2005/06/14(火) 18:03:21ID:???
とりあえず
foreach $kk (@kanto1) じゃなくて foreach $kk (0 . $#kanto1) だろ。
0371nobodyさん2005/06/14(火) 18:10:58ID:???
>>369
@kanto = map { [split / /] } split /,/, $text;
0372nobodyさん2005/06/14(火) 18:28:00ID:???
369の書き方でなら
@{$kanto[$kk]} = split / /,$kanto1[$kk];
0373 ◆sMFKtEQF46 2005/06/14(火) 18:44:58ID:???
>>370-371
ありがとうございました!
0374nobodyさん2005/06/14(火) 19:17:35ID:yq1owU75
UDPSocketを使って、

「Clientから何らかのパケットが届く"たび"に何らかの処理」
を行いたいのですが、recvイベントのようなものはキャッチできないでしょうか。
0375nobodyさん2005/06/14(火) 19:50:50ID:???
単純な質問で申し訳ないのですが

@hogehoge[][];
$len = scalar(@hogehoge);
print "要素数= $len ";

この時の$lenに格納されているものは何でしょうか?

$len = scalar(@hogehoge[1]);

最初の[]の要素数を調べるにはどのようにしたら良いのでしょうか?
0376nobodyさん2005/06/14(火) 20:00:55ID:???
すいません、投稿しなおしです。

単純な質問で申し訳ないのですが

@hogehoge[][];
$len = scalar(@hogehoge);
print "要素数= $len ";

この時の$lenに格納されているものは何でしょうか?


@hogehogeの最初の[]の要素数を調べるには、どのような関数を使ったら良いのでしょうか?


0377nobodyさん2005/06/14(火) 20:33:05ID:???
>最初の[]の要素数
意味不明
0378nobodyさん2005/06/14(火) 21:20:23ID:???
もちょっと "リファレンス" というのを勉強したらいいと思うぞ。
高次元配列っていうのも、単にリファレンスのネスト、と解釈すれば結構容易に理解できる。
0379nobodyさん2005/06/15(水) 01:53:31ID:???
open (TEST, 'hoge.txt');
my $fg = \*TEST;

こんなことをしたとき、

close ($fg); でも

my $fh = *{$fg}{IO};
close ($fh); でも

どっちでもできるんだけど、どっちがいい、とか、どっちかが支障がでる、とかあるのかな?
とりあえず stat (〜) は上で言えば $fg でしかできなかったんだけども。
0380nobodyさん2005/06/15(水) 03:40:50ID:???
>>379
引数にグロブ(グロブのリファレンス)を受け取るPerlのネイティブ関数には
ファイルハンドルのリファレンスを渡しても無理だから上の方がいいかと。

ただ、下のは、ブロック内でグロブをローカル化すればシンボルに依存しない
ファイルハンドルのリファレンスが得られる。

でも、シンボルに依存しないファイルハンドルが欲しければ

open ($fh, 'hoge.txt');

てやれば 、無名のグロブリファレンスが得られるから、こっちがいいかもよ。
0381nobodyさん2005/06/15(水) 09:23:19ID:???
>>379
それ@niftyだとできないんだよね。。
なので全部eval使ってる。

my $id = "FILE";
eval 'open(' . $id . ', "+>>$path$file")'
〜
eval "seek($id, 0, 2)";
eval "truncate($id, 0);seek($id, 0, 0)";
〜
eval 'print ' . $id . ' $tmp';
〜
eval '@tmp = <' . $id . '>';
〜
eval "close($id)";
0382nobodyさん2005/06/15(水) 10:05:30ID:???
>>381
単にstrict refsなだけなんじゃ?

Can't use string ("FILE") as a symbol ref while "strict refs" in use at 〜

ってなエラーじゃない?

わざわざ$idに"FILE"なんて入れないで380の言うように空のまま(=undef)に
しとけば、openするときに無名のリファレンスを入れてもらえるので問題ない
と思うが。
0383nobodyさん2005/06/15(水) 10:24:44ID:???
えと、一応ファイル扱う為の汎用パッケージのつもりで作った中身です<<381
pfile::open(FILE, writemode)
read(FILE)
write(FILE)
close(FILE)
見たいな感じで、同時に複数開けるように作りました。


あと、@niftyはエラーlogは見れないようになってるらしくて、
内容は分からないんです。。
どっかで配布してた、エラー内容返すcgiも走らないので…

use strict(綴り適当)も、宣言しただけでエラーが出ます。
@niftyは特殊らしい。。でも鯖を選ばず動くscript書きたいので。。

@niftyでエラーメッセージを見る方法ってあるんでしょうか?
誰か使ってる方いましたらご教授お願いします。
0384nobodyさん2005/06/15(水) 10:41:24ID:???
>>383
特定環境の話をここで続けていいものかわからんが、@nifty は
プラグマも含めて全てのモジュールが故意に削除されている。
use strict; すると strict.pm が見つからないのでコケる。

別にモジュール「が」使えないわけではないので、必要な
モジュール一式を任意のディレクトリに入れて、スクリプトの
頭で BEGIN { push @INC, '/your/lib/dir' } すれば動く。
0385nobodyさん2005/06/15(水) 11:03:08ID:???
>>384
全部消すとは…CGI利用可能にしてるくせに、珍しいですよね。。

@niftyは負荷に対するチェック基準?も厳しいらしく、
自分で作ったfilelockのテストも(n回読み込み→書き込みを繰り返すスクリプトを2つ同時に走らせる)、
nを100回で指定して走らせたら鯖でタイムアウトになりました。
isWebだと300でも軽快に動いたんですが。(それ以上は迷惑になるっぽいので試してません)

確かにちとスレ違いっぽいので以後控えますね。
色々情報ありがとうございました!
0386nobodyさん2005/06/15(水) 11:21:53ID:pMiUaalZ
とあるPerlの参考書にこういうコードがありました。

$file_name = "./text.txt"
open(HANDLE, "$file_name");

ファイルオープンの行の第二引数にダブルクォーテーションがついてるんですが、これは何故なんでしょうか?
これがなくても大丈夫みたいですが。。
0387nobodyさん2005/06/15(水) 11:31:50ID:???
「"」 = 変数を解釈し、展開する。文字列は文字列として解釈する。
「'」 = 全て文字列として解釈する。

my $a = 10;

print "ねむいよー$a";
 →ねむいよー10

print 'かたがいたい$a';
 →かたがいたい$a
0388nobodyさん2005/06/15(水) 11:38:55ID:???
>>387
引用符の違いではなく、変数だけのときにわざわざ二重引用符をつける意味を聞いているのだが
my $a = 10;

print "$a";

print $a;
0389nobodyさん2005/06/15(水) 11:44:11ID:EGr0DnSI
# パスワード
$pass = '○○○○';

# パスワード確認
if ($in{'pass'} eq "$pass") {
print"パスワードが合ってます";
}
else {
print"パスワードが違います";
}

パスワード認証なら上記でも良いのではないでしょうか?
複雑にする必要性ありそうなのだけど教えてください。
0390nobodyさん2005/06/15(水) 12:13:11ID:???
>>389
KENTとかそうやってるね
ソース見られたときにパスワードがモロばれだけどね
普通はDESとかMD5で暗号化する
03913862005/06/15(水) 12:38:11ID:???
>>388
そうなんです。
そっちがわからないんですが・・・。
まあどっちでも動くみたいなんで今のところ気にしないことにしますね^^
失礼しました。
0392nobodyさん2005/06/15(水) 12:47:04ID:???
>>391
明示的に宣言したり、デフォルトの読み書き方法で無いときは"がいるから使い回してるだけじゃない?
0393nobodyさん2005/06/15(水) 12:59:31ID:???
>>392
どゆいみ?
03943892005/06/15(水) 13:32:19ID:EGr0DnSI
>>390
早々有難うございます。
暗号化するというのは、こんな事をするのでしょうか?

my @SALT = ('a'..'z', 'A'..'Z', '0'..'9', '.', '/');

$in{pwd} = crypt($in{pass}, $SALT[int(rand(64))] . $SALT[int(rand(64))]);
0395nobodyさん2005/06/15(水) 13:56:02ID:???
なんでキーを rand するんだろ?
そのままじゃ暗号化されたパスの先頭にキーがついたままだから、substrとかしないと意味ないし、
取ったら取ったで、キーがわからないとどうやってパスワードチェックしたらいいのかわかんねくね?
0396nobodyさん2005/06/15(水) 14:18:53ID:???
>>380
>>379だけど、サンクス!参考になった。
今回はシンボルの文字列自体に意味があるので、グロブにさせてもらうよ。

そういや nifty も知らんけど、まだ perl-5.005 以前を使ってる鯖ってあるのかな?
AAA! が 5.005 だったが。 ってスレ違いか。
とにかくなるべく新しいのにして欲しいな。 いろいろ動かなくて困るw
0397nobodyさん2005/06/15(水) 14:29:05ID:???
>>395
パスワードの暗号化ってのはパスワードをプレーンテキストで
保管せず、暗号化したデータを保管するってこと。

登録時には下記$pwdをサーバに保存。
$pwd = crypt($input_pwd, $salt);

認証時には保存された$pwdでチェック。
if (crypt($input_pwd, $pwd) eq $pwd) { # 認証OK
0398nobodyさん2005/06/15(水) 15:20:04ID:???
>>397
それはわかるけど、 >>395 でさ、>>397で言う $salt を rand させる意味はなくね? って話。

暗号化した $pwd の先頭2文字に $salt の値が含まれるわけだから、
rand させようがさせまいが、 $pwd を見られたら $salt わかるわけじゃん?

だったら $salt は rand させても、最初から"xy"とかに固定してても、そんなに変わらない気がするのだよ。
0399nobodyさん2005/06/15(水) 15:24:17ID:???
>>397
横レスだけど、それってチェック時はなにやってるの?

登録時には下記@indb_pwd($pwd及び$salt)をサーバに保存。
@indb_pwd = (crypt($input_pwd, $salt), $salt);

認証時には保存された$saltを使用して、$pwdでチェック。
if ($indb_pwd[0] eq crypt($in{pwd}, $indbpwd[1])) { # 認証OK

これだったら意味分かるけど…。
0400nobodyさん2005/06/15(水) 15:25:45ID:???
ああああ

>>397-398
>暗号化した $pwd の先頭2文字に $salt の値が含まれるわけだから、

知らなかった…
失礼しましたorz
0401nobodyさん2005/06/15(水) 15:57:46ID:???
でもどっかの誰かさんのスクリプトはrandしてるね。
0402nobodyさん2005/06/15(水) 16:01:20ID:???
誰誰?
0403nobodyさん2005/06/15(水) 16:08:10ID:???
>>382
遅レスですが、なんか勘違いしてたかも。
@niftyだと>>379のような、「ファイルハンドルを変数に入れる」ということ自体が出来ないんです。
多分perlのバージョンのせいだと思うんですが。

んでしょうがないので、ハンドルをあらわす文字列自体を動的に扱う為にevalを使ってるという感じです。
$id = "FILE"というのはファイルハンドルを変数に入れようとしているわけではなく、展開してevalに渡すためです。
0404nobodyさん2005/06/15(水) 16:10:54ID:???
>>402
とほほの人じゃね?
0405nobodyさん2005/06/15(水) 16:11:19ID:???
>>403 @nifty のPerlのバージョンっていくつ? print $]; ってやってみてくれ。
0406nobodyさん2005/06/15(水) 16:14:42ID:???
>>405
5.00502でした。
0407nobodyさん2005/06/15(水) 16:28:32ID:???
>>398
例えば複数のパスがあるとして、クラックするときsaltが全部同じだったら探索効率が良い希ガス。
0408nobodyさん2005/06/15(水) 17:22:07ID:???
>>407
そゆこと。 rand しとけば 4096 倍掛かる。
04093892005/06/15(水) 17:31:01ID:EGr0DnSI
>>399
有難うございます。
意味わかりました。
>>401
randがついてるので、rand関数により暗号化してるのかと思ったのです。
0410nobodyさん2005/06/15(水) 17:43:51ID:???
「パスワードの暗号化」と言うけど、
crypt() のやってることは厳密には「暗号化」ではないからね。

などと言って混乱させてみるテスト。
0411nobodyさん2005/06/15(水) 17:44:40ID:???
万が一同じパスワードが複数与えられた場合に、暗号化後 (厳密には暗号化じゃないんだが) の
文字列がかぶらないようにするため
04124112005/06/15(水) 17:49:12ID:???
部分的にカブタ
0413nobodyさん2005/06/15(水) 17:59:40ID:???
>>411
それはちょっと無理があるようなw
aaaaaaってパスワードがたくさん登録されれば 1/4096でかぶるわけだし、
そもそもパスワードがかぶっても普通は問題ないし。
0414nobodyさん2005/06/15(水) 18:05:59ID:???
>>408
それは 4096個 salt があった場合の話だがな。
違う salt の pwd が2個なら2倍かかる、ってだけ。
0415nobodyさん2005/06/15(水) 18:17:02ID:???
>>414
あぁ、すまん。 >>394 の DES crypt() の場合のことしか考えてなかった。
0416nobodyさん2005/06/15(水) 18:24:04ID:???
saltをに日本語を使おうぜ。

$p = 'password';
($s) = ('∀');
$c = crypt $p, $s;

とかやればコード中に顔文字が出てきて和めるぞ。
0417nobodyさん2005/06/15(水) 18:25:58ID:???
∀は別に日本語というわけではなかった罠。
0418nobodyさん2005/06/15(水) 18:28:26ID:???
なにこの流れ('∀')
0419nobodyさん2005/06/15(水) 18:41:12ID:???
>>406
v 5.00503 の AAA!cafe だと

× my $fh = undef; open ($fh, '>test.txt');
○ my $fh = \*FILE; open ($fh, '>test.txt');

試しに↓のコードで動かしてみ

#!/usr/bin/perl -w
use strict;
local *FILE;
my $fh = \*FILE;
if ($fh) {
    open ($fh, '>test.txt'); print {$fh} 'hogehoge'; close ($fh);
}
print "Content-type: text/html\n\nOK? // $$fh // $fh";exit;
0420nobodyさん2005/06/15(水) 18:42:52ID:???
>>416
split('-');
とかもアリ?
0421nobodyさん2005/06/15(水) 18:59:46ID:???
>>416
ちなみに、最近のモダンな crypt() は、 salt の文字種によって、
暗号化の方式 (ていうかハッシュ関数) を切り替えてくれちゃったりするので、
あんまりへんてこりんな文字列を salt に許すと portable じゃなくなったりする罠。
0422考えて半年2005/06/15(水) 19:50:20ID:biXgIpFa
Perlコーディング初心者から抜け出す方法ないの。
ていうか、Perlでチャットとか掲示板とか、画像をうpするとか機能を追加した
ゼロからプログラミング作れるようになるには、どうすればよいのでしょう?
10日で覚える、とほほ、独習、リャマ本、らくだ本、リファレンスなど
よんでも、いまだに初心者です。漏れがbakaなの?
0423nobodyさん2005/06/15(水) 20:04:08ID:???
一冊読めばだいたいある程度のものは作れるようになるから、結論としてはb・・(ry

つーか、このスレのタイトルを変える相談かと思ったw

半年もかじれば、シンプルなカウンターや掲示板くらいならできない?
本を閉じて、試しに作ってみればいい。 分からないときに本を見る。
参考書が一冊もなくても、ネットのあちこちで転がってるし、
生半可な本より充分な内容の perl.doc もある。

とにかく、芸術分野みたいなもんで 「自分で造る」 「自分で調べる」 のが大切。
・・・なんてな。
0424nobodyさん2005/06/15(水) 20:12:28ID:???
読むだけでは上達するのは頭の良いひとだけだと思う。
凡人プログラマなら、とにかくいっぱい作りまくって練習するしかないかと。
0425nobodyさん2005/06/15(水) 20:25:54ID:???
なにこの釣りスレ
0426考えて半年2005/06/15(水) 20:26:41ID:biXgIpFa
>422です。例えば
foreach $lines (@lines) {
($tm,$cnt,$scnt,$ip) = split(/<>/, $lines);
if($ipc==2){&get_;if($cook){ $flag=2; last;}}
if($date eq "$tm") {
if($ipc==1){if ($addr eq "$ip") { $flag=2; last; }}
$flag=1;
$cnt++;
$scnt++;
$lines = "$tm<>$cnt<>$scnt<>$addr<>\n";
}

foreach { から } までを繰り返すコードであることは理解できる。
しかし、{ } の中身が理解できない。
だから、どうしてよいのかわからない。
0427nobodyさん2005/06/15(水) 20:30:07ID:???
>>426
よくそれでラクダとか読めたなw
読んだって文字を目で追っただけだろ
0428考えて半年2005/06/15(水) 20:32:45ID:biXgIpFa
「ちゃんと本読めばすべて書いてある」ってことですか?
0429nobodyさん2005/06/15(水) 20:33:03ID:???
ああ釣りスレだな
0430nobodyさん2005/06/15(水) 20:37:40ID:???
きっぱりあきらめるのも手かと。
混乱しちゃって、今は何を言われてもポカーンじゃないかな。こんな感じ。
@ @
  △
0431nobodyさん2005/06/15(水) 20:38:07ID:qXBtGg7k
↓下のようなデータを「,」区切りで分け、空の時はテーブルを二列連結させるプログラムを作りたいと思いますが、
 空のデータがある時のやり方がどうしても出来ません。

埼玉,東京,群馬
大阪,,奈良


空のデータがある場合はcolspanを使い↓のように連結させる


<table>
<tr><td>埼玉</td><td>東京</td><td>群馬</td></tr>
<tr><td colspan=2>大阪</td><td>奈良</td></tr>
</table>


このようにするにはどうしたらよろしいすか?
サンプル等をご存知でしたら教えていただければ助かります。
0432nobodyさん2005/06/15(水) 20:40:19ID:???
>>431
先に普通にテーブル作ってから
<td>([^<]+)</td><td></td>を
<td colspan=2>$1</td>に置き換えるとか
0433nobodyさん2005/06/15(水) 21:43:22ID:???
>>431
最初がカンマの場合は全部一番後ろに押し付けてみた。

while (<DATA>) {
 chomp;
 my $data = $_;
 $data =~ s/^(,+)//;
 $data .= ',' x (1+length $1);

 my @pref = split /,+/, $data;
 my @count;
 while ($data =~ s/(,+)//) {
  push @count, length $1;
 }

 print qq{<tr>};
 my $n = 0;
 foreach my $span (@count) {
  print $span > 1 ?
   qq{<td colspan="$span">$pref[$n]</td>}:
   qq{<td>$pref[$n]</td>};
  $n++;
 }
 print qq{</tr>\n};
}
0434nobodyさん2005/06/15(水) 23:46:03ID:???
>>419
以下で問題なく動きました…orz
ありがとうございます。
>>9のページではハンドルのリファレンスじゃなくてグロブそのものを入れようとしてるんですが、
そちらだと出来ませんでした。。

#!/usr/local/bin/perl -w
local *FILE;
my $fh = \*FILE;
if ($fh) {
#? エラー
#? エラー
 open ($fh, '>./data/test.txt');
 print {$fh} 'hogehoge';
 close ($fh);
}
print "Content-type: text/html\n\nOK? // $$fh // $fh";exit;
0435nobodyさん2005/06/15(水) 23:51:02ID:???
>>428
ランダきちんと読めばこの世にある殆どのPerlコードは理解できる。
0436nobodyさん2005/06/16(木) 00:15:51ID:???
個々の部分が何をやってるかはわかるようになるとは思うが
全体として何をやってるか理解するのは難しいのもあると
思うよ。

このコード結局なにがやりたいんだよみたいな(笑)
0437nobodyさん2005/06/16(木) 00:43:45ID:???
perl の文法を学ぶ前にアルゴリズムというものが理解できてないと
いろいろと難しいかもしれんですな
0438nobodyさん2005/06/16(木) 01:07:20ID:???
>>434
SMART はわかりやすいんだけど、ちょっとね。

まあ 5.005のファイルハンドルなら、↓読めば結構理解いいかも。
http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlfaq5.html#How_can_I_make_a_filehandle_loca
0439nobodyさん2005/06/16(木) 21:22:02ID:???
>>438
ありがとうございます!
週末にでもゆっくり読みながら、>>381>>383の改造でもしてみます。
0440nobodyさん2005/06/17(金) 00:42:38ID:FGf+BXAB
>437様へ。
アルゴリズムって何ですか?perlの文法わかるのに、掲示板とかチャット
とかプログラム作成しようと思うとイマイチ、わかりません。
どうすればよいの?アルゴリズムがわからないから、プログラム作成でき
ないのでしょうか?
0441nobodyさん2005/06/17(金) 00:48:21ID:???
以下のものを自分で一から作ってみては?
既にあるものを参考にしない事(詰まったときにヒントとしてみるのはあり)ってルール作って。

hallo world表示
↓
フォームの入力内容表示
↓
ファイルの内容を読み込んで表示
↓
フォームの内容をファイルに書き込み
↓
カウンタの作成
↓
一行掲示板の作成
↓
eコマースサイトの作成
0442nobodyさん2005/06/17(金) 00:55:30ID:FGf+BXAB
hello world表示
#! c:\perl\bin\perl
print "Hello Perl\n";
0443nobodyさん2005/06/17(金) 00:56:02ID:???
それってコーディングの問題じゃないんじゃないだろか。設計じゃない?
0444nobodyさん2005/06/17(金) 01:00:22ID:FGf+BXAB
フォームの入力内容表示、内容読み込み表示
#! c:\perl\bin\perl
print "Enter Word : ";
$word = <STDIN>;
chomp($word);
print "$word\n";
0445nobodyさん2005/06/17(金) 01:00:53ID:???
Σ(゜Д゜)ハッ!! 数ヶ月いるのに、ずっと "コーティング(coating)初心者質問スレ" って読んでた・・・。 orz
0446nobodyさん2005/06/17(金) 01:14:19ID:???
>>444
それフォームじゃなくてシェル。
0447nobodyさん2005/06/17(金) 01:15:33ID:???
最近
#!perl
でも動くことを知った(ActivePerl)
0448nobodyさん2005/06/17(金) 01:21:15ID:???
ああ…なるほど
0449nobodyさん2005/06/17(金) 01:25:54ID:FGf+BXAB
フォームの表示わかんないんです。
0450nobodyさん2005/06/17(金) 01:31:45ID:???
winでパス通ってりゃ、何もつけなくても動く罠
0451nobodyさん2005/06/17(金) 01:37:28ID:???
>>449
わからないポイントが明確になって良かったじゃないか。
html周りって事なら
ttp://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/pe_kj01.htm
とか見てみれば?
0452nobodyさん2005/06/17(金) 01:41:58ID:???
はは、よく釣れてるw
0453nobodyさん2005/06/17(金) 01:44:09ID:???
暇だしねー
0454nobodyさん2005/06/17(金) 02:08:23ID:???
これは、なにするCGIですか?

%in=map{s/\+/ /g;s/%([\da-fA-F]{2})/chr hex$1/eg;$_}map{split/=/,$_,2}split/&/,$ENV{QUERY_STRING};
print<<HTML;
Content-Type: text/html

<form action=$ENV{SCRIPT_NAME}><textarea name=text rows=20 cols=40>$in{text}</textarea>
<input type=submit></form><hr>
HTML
eval$in{text},$@&&print"<pre>$@</pre>";
0455nobodyさん2005/06/17(金) 02:48:58ID:???
GET 受取処理
0456nobodyさん2005/06/17(金) 02:53:14ID:???
まともに答えられとるw
0457nobodyさん2005/06/17(金) 07:32:45ID:???
ハッシュ同士を合体させてくれるような、格好いいモジュールってありますか?

もし自分でコードを書くとしたら、テンポラリなハッシュにforeachでキーと値をいちいちぶち込むことになるんでしょうか。
0458nobodyさん2005/06/17(金) 07:56:09ID:???
モジュール使わんでも・・・
%y = (%x , %y);
↑の書き方じゃ不満?


my %x = qw(a 1 b 2 c 3 d 4 e 5 f 6 g 7);
my %y = qw(e 01 f 02 g 03 h 04 i 05 j 06 k 07);

print join (', ', map { $_ .'=>'. $x{$_} } sort keys %x), "\n";
print join (', ', map { $_ .'=>'. $y{$_} } sort keys %y), "\n";

%y = (%x , %y);

print join (', ', map { $_ .'=>'. $y{$_} } sort keys %y), "\n";
0459nobodyさん2005/06/17(金) 08:30:05ID:???
@y{ keys %x } = values %x;
0460nobodyさん2005/06/17(金) 08:46:08ID:???
あれ? keys と values の値の出てくる順番って、両方同じ順番で確からしいんだ?
0461nobodyさん2005/06/17(金) 11:14:38ID:???
>>460
keys, values, eachはハッシュを変更しない間は同じ順番になることが
保証されている。keysのマニュアルなど参照。

あと、ハッシュをリストコンテキストで評価したときに返るリストも
同じ順番になりそうなもんだが、そういう記述は見つけられなかった。
これはどうなんすかね?

■ このスレッドは過去ログ倉庫に格納されています