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

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

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2005/08/12(金) 01:26:47ID:mHnZWvqz
Perlのコーディングで困ってる人のスレです。

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

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

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

過去ログやお勧めサイトは >>2-10
0639nobodyさん2005/09/29(木) 19:45:41ID:???
だから、みんなPHPに流れたのかも。
0640nobodyさん2005/09/29(木) 20:02:55ID:???
PHPやだ、Perlが良い!
0641nobodyさん2005/09/29(木) 20:33:30ID:???
「みんな」流れたことにしたいのでつか?
p2 とか見てると、芸術的なすぱげっちーだし、

> たくさん cgi ファイルがある設計がどうかしていると思われ。

って感じだしなぁ。
06426392005/09/29(木) 21:56:36ID:???
>>641
ほらほら、いちいち噛み付かない。

「みんな」ってのは、「ダメなやつはみんな」という意味だ。
そう書けば満足かな?

もっとも、新規にダメなやつが参入してくるから、あんまり
状況は変わってないが。

> たくさん cgi ファイルがある設計がどうかしていると思われ。

うん。一つ一つは正しそうに動くのに、全体を流すとつじつまが
あわなかったりしてね。まあ、きちんと管理できるなら、小分けに
したほうがいいという考えもありだとは思うけど。
0643nobodyさん2005/09/29(木) 22:00:27ID:???
>うん。一つ一つは正しそうに動くのに、全体を流すとつじつまが
あわなかったりしてね。まあ、きちんと管理できるなら、小分けに
したほうがいいという考えもありだとは思うけど。

テキストエディターのスクロールバーがちっこくなって、
編集時のスクロールでドラッグしにくいので、
用途や動作内容に分けて分割してる。
0644nobodyさん2005/09/30(金) 00:31:42ID:???
ファイルをオープンしようとすると、ファイルがある・またはファイルを作ろうとしているのに何故かNo such file or directoryが出てくるので
手前で$!を見てみたところ、Bad file descriptorと出てきて、その原因が分からなくて困っています。

Bad file descriptorはどんな状態のときに出るのでしょうか。
色々試したところ、 require 'hoge.pl'; (hoge.plは自前のもの)を削ると上記のエラーが出なくなるのですが、
hoge.plの中身を削って行ってもエラーが消えません。
requireに制限でもあるのでしょうか。

http://e-words.jp/w/E38395E382A1E382A4E383ABE38387E382A3E382B9E382AFE383AAE38397E382BF.html
これを見てもどこで何が起こっているのか見当が付きません。よろしくお願いします。
0645nobodyさん2005/09/30(金) 00:54:07ID:EO7sC93p
PDFのファイルの印刷をActivePerlから行いたいのですが、どのように行えば良いのでしょうか?
06466442005/09/30(金) 01:20:52ID:???
No such file or directoryについては解決しました。Bad file descriptorは関係ありませんでした。
しかしBad file descriptorが出たままなので気味が悪いです。一体何が問題なのでしょうか。
0647nobodyさん2005/09/30(金) 03:16:19ID:???
携帯に対応させる為のPerlコーディングは、
一般的にどのようなコーディング方法がありますか?
0648nobodyさん2005/09/30(金) 03:56:57ID:???
優勝記念マジレス
>>647
携帯でPerlを動かすのは聞いたことがないのでCGI用途とすると、
スクリプトはサーバ側の環境に依存するから自由にコーディングできる。
あとは問題なるかも知れないHTTP(リクエスト/レスポンス)ヘッダと問題になりそうなキャリア特有のhtml(chtmlとかhdml)。
前者はPerlに限ったことじゃないし、後者は板が違うね。
0649nobodyさん2005/09/30(金) 08:41:28ID:???
>>642
> ほらほら、いちいち噛み付かない。

>>641 を噛み付ついている状態であるとみなしているくせに、
どーして、そんな噛み付いているやつに、噛み付くのだろう。

> うん。一つ一つは正しそうに動くのに、全体を流すとつじつまが
> あわなかったりしてね。まあ、きちんと管理できるなら、小分けに
> したほうがいいという考えもありだとは思うけど。

ちゃんとした設計してれば、「小分け」の状態が良いと思われ。

>>648
> 優勝記念マジレス

板が違うね。
06506472005/09/30(金) 10:13:27ID:???
ありがとうございました。
0651nobodyさん2005/09/30(金) 10:18:00ID:???
真面目につっこむと

理想的に「小分け」された状態ってのは
「cgi」がたくさん小分けに作られるという意味ではないよね?
0652nobodyさん2005/09/30(金) 14:09:04ID:???
テラワロス
0653nobodyさん2005/09/30(金) 14:54:58ID:???
>>651
フレームワーク厨が暴れる前の発言では、

小分け == cgi たくさん

が成り立ってるっぽいので、何とも言えないのでは?
0654nobodyさん2005/09/30(金) 15:29:51ID:???
>>653
いやいや、>>651は>>649への突っこみと読むべきだろう。
0655nobodyさん2005/09/30(金) 17:05:31ID:kGP+cAoI
>>649
いちいち噛み付かない。
0656nobodyさん2005/09/30(金) 17:12:02ID:???
>>651
ちゃんとした設計をしているなんて前提条件なかったじゃん。
後出しジャンケンっぽくて、ちょっとイヤーンだぞ。

そもそも、

> ちゃんとした設計してれば、

という前置きがつけば、何でも正当化できる。

『ちゃんとした設計をしていれば、○○の状態がよい』は、
無敵であるがゆえに、何も語っていないのと同じ。
0657nobodyさん2005/09/30(金) 20:15:08ID:???
> 無敵であるがゆえに、何も語っていないのと同じ。

異なる性質のものを同じにしたいのですか?
0658nobodyさん2005/09/30(金) 20:19:04ID:???
> > ちゃんとした設計してれば、
>
> という前置きがつけば、何でも正当化できる。

ほう、何でも正当化できるんですか。それはすごい言葉ですね。
今回の小泉タン違憲問題も「ちゃんとした設計してれば、」をつけて
正当化の程よろしくおながいします。
0659nobodyさん2005/09/30(金) 20:37:17ID:???
藻前ら共食いやめろ。
0660nobodyさん2005/09/30(金) 20:42:25ID:ue8bjOg5
ここは話題を逸らしてどれだけ釣れるかを競うスレですね
0661nobodyさん2005/09/30(金) 21:04:35ID:???
> Perlのコーディングで困ってる人のスレです。
0662nobodyさん2005/09/30(金) 22:49:26ID:???
面白い話があるからおまいら聞いてくれ。

彼女が医療関係の学校に通ってるんだが、実習か何かで精神
障害者の施設へ行ったそうなんだ。それが終わって会った時に、
単なる会話として「大変だった?」とか訊いてたら、「あなたと同じ
本を読んでる患者がいた」って言うんだよ。隠してあったエロ本が
見つかったのかと動揺してたら、「あれだよ、表紙に動物の絵が
書いてあるコンピュータの」って言うから、オライリーのを順番に
見せていったら「それそれ! ラクダのやつ」だって。

施設の人が言うには、その患者は絶対にその本を手放さないし、
取り上げると錯乱するからずっと持たせてあるんだってさ。
0663nobodyさん2005/09/30(金) 23:10:31ID:???
で?
0664nobodyさん2005/09/30(金) 23:23:25ID:???
ラクダ本がどうかしたか?
0665nobodyさん2005/09/30(金) 23:43:37ID:???
他スレの終わったネタを持ち込むなよ。
0666nobodyさん2005/10/01(土) 00:06:13ID:tjNKkKzJ
perl でCGIに挑戦中の者です。
何日考えても歯が立たない問題にぶち当たったので、詳しい人の知識をお借りしたいです!!

私がやりたいことは、textファイルのある一行を、別のデータで上書きするということをしたいです。
現在、削除する行を探すためにforeachを使っています。

私の望むイメージはこのような感じです。
-------aaaa.txtのファイル------
あいうえお
かきくけこ
さしすせそ
たちつてと
なにぬねの
-------------------------
↑を
---------------------------
あいうえお
かきくけこ
さしすせそ
なにぬねの
------------------------

削除したい行を特定する部分は自分でなんとかできたのですが、肝心の削除方法が理解不足でどのようにすればいいのか分かりません。
ご教授お願いします。
0667nobodyさん2005/10/01(土) 00:10:24ID:tjNKkKzJ
何を言ってるのか良くわかんなくなってました。ごめんなさい。

私が知りたいのは、削除するためにはどのようにすればいいのか、です。
0668nobodyさん2005/10/01(土) 00:18:13ID:???
こう考えよう。

・今あるデータを配列に読み込む
・新しく作るデータを入れる配列を用意する
・消したい行だけを新しい配列に入れない
・新しい配列をファイルに書き込む
0669nobodyさん2005/10/01(土) 00:25:11ID:???
この際だから書いちまうか

open (TXT, "<aaaa.txt");
flock (TXT, 1);
@data = <TXT>;
close TXT;
@new = ();
foreach (@data) {
 if ($_ ne "たちつてと\n") {
  push (@new, $_);
  }
 }
open (TXT, ">aaaa.txt");
flock (TXT, 2);
print TXT @new;
close TXT;
0670nobodyさん2005/10/01(土) 00:36:22ID:???
文字の置き換えについて教えてください!

$okikae =~ s/文字/変更後の文字/g;

までは分かりましたが、
チルダやスラッシュを含む文字を置き換えるときはどうすればよいのでしょうか?
例として/~id/aaa/aaa/を/bbb/に置き換えるには??
教えてください。
0671nobodyさん2005/10/01(土) 00:44:17ID:???
メタ文字
エスケープ
などの言葉で検索すると幸せになれるかもしれない
0672nobodyさん2005/10/01(土) 07:28:28ID:???
> 幸せになれるかもしれない

なんてどこの老人が使い始めた言葉なのか知らないけど、
見るたびに気持悪くなる・・・。
0673nobodyさん2005/10/01(土) 08:58:47ID:???
うぐぅ、ぎもじわるぃ…
0674nobodyさん2005/10/01(土) 10:35:57ID:???
幸せになれるかもしれないとか見るたびに気持ち悪いとか言い出したのは誰なのかしら
0675nobodyさん2005/10/01(土) 11:27:36ID:???
>>672->>674

>>660
0676nobodyさん2005/10/01(土) 12:54:48ID:???
m9プギャ
0677nobodyさん2005/10/01(土) 14:07:37ID:3dTdip7r
MIMEについての質問です。

以下のようにMIMEを使ってメールを受信して本文を取得するプログラムを作っています。

#!/usr/bin/perl

use File::Basename;
use MIME::Parser;


my $parser = MIME::Parser->new;


#ファイルの一時保存場所を指定
$parser->output_dir('/tmp');


#標準入力からメールを取得
my $entity = $parser->parse(\*STDIN);
my $body_entity = ($entity->is_multipart) ? $entity->parts(0) : $entity;
my $body = $body_entity->bodyhandle;

open(FILE, ">> /log");
print FILE "Test\n";
print FILE $body->as_string."\n";
close(FILE);

ですが、何故か$body->as_stringの時点で本文が拾えず空文字列になります。
ちなみにheadなどのメソッドや、ファイル添付時のis_multipart、partsなどは正常な値を返します。

どういった理由が考えられるのでしょうか?
0678nobodyさん2005/10/01(土) 14:34:03ID:???
MIME::Explode とかが使いやすかった気がするけど。
0679nobodyさん2005/10/01(土) 23:13:02ID:???
>>646
遅レスだが、$!(errno)はシステムコールやライブラリ呼び出しが
失敗したときは値がそれに応じて設定されるけど、成功したときは
未定義なので、何になっているかはわからない。

perldoc perlvarの$!の説明をよく嫁。

0680nobodyさん2005/10/02(日) 04:48:22ID:???
すみません。
http://internet.watch.impress.co.jp/www/article/1999/1122/special.htm
でフォームからメールがおくれたのですが、確認画面を表示させたいのですが、
どのように書いていけばよいのでしょうか。
よろしくお願いします。
0681nobodyさん2005/10/02(日) 09:19:04ID:???
どのようにって・・・
まさか手取り足取り一から十まで順を追って説明しろなんて
ふざけた要求してるわけじゃないよな?

ここの説明を参考にやったんなら、
確認画面の表示の有るフォームメールcgiをいくつかダウンロードして
スクリプトを眺めてみればいいんじゃない?
0682nobodyさん2005/10/02(日) 10:23:03ID:???
スカラーコンテキストの演算子に
文字列の一部を正規表現でキャプチャし一発で渡したい時にはどうすればいいでしょうか?
一応 op ${\("STR" =~ /REGEX/g)}; でできるのですが冗長ですよね。
0683nobodyさん2005/10/02(日) 11:42:59ID:???
>>682
そういうのは一行で書く必然性が無ければ
二行に分けた方が読み解き易く美しい。

"STR" =~ /(REGEX)/;
op $1;

> ${\("STR" =~ /REGEX/g)};
REGEX にマッチした部分文字列の*リスト*を返した上で
無理矢理一つだけを利用しているのが無駄と混乱を招く。
どうしても /g を使いたければ

op +("STR" =~ /REGEX/g)[0];

とでもした方がいいだろう。
0684nobodyさん2005/10/02(日) 11:53:28ID:???
>>682
おそらく /g を付けているのは問題回避のためだろうから、
値1つを取れればいいなら

op +("STR" =~ /REGEX/)[0];
06856822005/10/02(日) 12:38:08ID:???
>>683 >>684
ありがとうございます。確認しました。
/gはラクダ本(日3版175P)に「リストコンテキストでm//gを使って…」とあったので両方必須なのだと勘違いしていました。
実際のコーディングは2文でやってみようと思います。
0686nobodyさん2005/10/02(日) 14:19:35ID:???
URLでよくtest.pl?line=ABC&line2=DEF
みたいに引数を渡す場合がありますがコマンドラインからこのような
引数を渡すにはどうしたらよいでしょうか?
#>perl test.pl 「ここの部分?」
0687nobodyさん2005/10/02(日) 14:35:59ID:???
perl test.pl line=ABC line2=DEF

値は @ARGV に入る。
06886862005/10/02(日) 15:14:12ID:???
>>687
サンクス。
if($#ARGV >= 0){ $buffer = join'&',@ARGV; }
デコードに付け加えて何とかなりますた。
0689nobodyさん2005/10/02(日) 15:16:12ID:???
>>688
if ($#ARGV >= 0)
より
if (@ARGV)
の方が好き。
06906862005/10/02(日) 15:19:46ID:???
>>689
アチャー。確かにそちらの方がいいですね。何か遠回りしてる漏れ。
0691nobodyさん2005/10/02(日) 16:49:19ID:???
if (scalar @ARGV) って書いちゃうなあ。
0692nobodyさん2005/10/02(日) 17:19:24ID:???
そもそも直で値を代入してしまう。
0693ヽ(´ー`)ノ ◆.ogCuANUcE 2005/10/02(日) 17:35:02ID:???
if 文使わなくても $buffer = join('&', @ARGV); だけで良くね?
@ARGV が空リストなら $buffer は空文字になるわけだし。

使うんなら $buffer = join('&', @ARGV) if @ARGV; かな。
0694nobodyさん2005/10/02(日) 17:51:48ID:???
前やったベンチでは@ARRAYより$#ARRAYの方が速かった
06956802005/10/03(月) 01:39:26ID:???
>>681さん、あれから自分でやってみてできました。
別に確認画面を作成してそのでーたをメールを送るCGIに渡すようにしました。
ありがとうございました。
0696もな2005/10/03(月) 02:21:03ID:???
掲示板をいちから作っているのですが、どうしてもdatファイルに文字を書き込めません。
書き込みボタンを押すとエラーが出るわけでもなく画面が遷移して、また再表示というふうにはなるのですが・・・。
どうかご教授願います。datファイルには何も書き込まれていない状態です・・

以下ソースです↓

#!/usr/bin/perl

require 'cgi-lib.pl';
&print_header(); #ヘッダを表示する

if(open(CHK,"bbs.dat")){
if(&get_data == 0){
if ($name eq '') {
&show_error('名前が記入されていません');
} elsif ($title eq '') {
&show_error('タイトルが記入されていません');
} elsif ($message eq '') {
&show_error('内容が記入されていません');
}
&write_to_file();
}
&read_file(); #ファイルからデータを読み出してリストに格納
&print_top(); #トップを表示する
}else{
&show_error('データファイルがオープンできません');
}

続く
0697もな2005/10/03(月) 02:22:02ID:???
sub print_header(){
$haikei_img ="back.jpg"; #背景画像の指定
print "Content-type: text/html\n\n";
print "<META HTTP-EQUIV=Content-Type CONTENT=\"text/html;CHARSET=Shit_JIS\">";
print "<html>\n";
print "<head><title>Simple BBS</title></head>\n";
print "<body style=\"background-image : url($haikei_img);background-repeat : no-repeat;background-attachment : fixed;\" text=#000000>\n";
}

sub print_top(){
print "<center<table width=600><tr><td>\n";
print "<br><br><center><h2>掲示板</h2>\n";
print "<hr> [ <a href=http://www.yahoo.co.jp>;Back To Homepage</a> ] <hr></center>\n";
print "<form method=post action=\"bbs1.cgi\">\n" ;
print "<table border=0>\n" ;
print "<tr><td align=right>名前 :</td><td><input type=text size=20 name=name></td></tr>\n" ;
print "<tr><td align=right>E-mail:</td><td><input type=text size=40 name=mail></td></tr>\n" ;
print "<tr><td align=right>URL :</td><td><input type=text size=40 value=http:// name=url></td></tr>\n" ;
print "<tr><td align=right>タイトル:</td><td><input type=text size=40 name=title></td></tr>\n" ;
print "<tr><td align=right>内容 :</td><td><textarea cols=50 rows=5 wrap=hard name=message></textarea></td></tr>\n" ;
print "<tr><td colspan=2 nowrap align=right><input type=submit value=送信><input type=reset value=書き直し></td></tr>\n" ;
print "</table>\n" ;
print "</form>\n" ;
}
0698もな2005/10/03(月) 02:23:21ID:???
sub get_data{
&ReadParse(*FORM_DATA);
if($FORM_DATA{'action'} eq 'reqist') {
&get_time(); #時刻の取得
$name = $FORM_DATA{'name'};
$message = $FORM_DATA{'message'};
$title = $FORM_DATA{'title'};
$mail = $FORM_DATA{'mail'};
$url = $FORM_DATA{'url'};
$action = $FORM_DATA{'action'};

    return 0;
}else{
return 1;
}

}

#========================================================
# 日付の取得と整形
#========================================================
sub get_time(){
($sec,$min,$hour,$mday,$mon,$year,$wday) = localtime;
@weekday = ('日','月','火','水','木','金','土');
$week=$weekday[$wday];
$mon++;
$year = 1900+$year;
$date="$year年$mon月$mday日($week) $hour時 $min分 $sec秒";
}


0699もな2005/10/03(月) 02:24:43ID:???
sub write_to_file(){
open(WRITE,">>bbs.dat");
print WRITE"$name\t$mail\t$url\t$date\t$title\t$message\n";
close(WRITE);
}
sub read_file(){
open(READ,"bbs.dat");
@data_set = <READ>;
close(READ);
}
sub show_error(){
print "<h2>エラー発生</h2><hr><br>";
print "エラー内容: $_[0]";
print "<br>WebブラウザのBackボタンで戻ってください";
exit();
}
_END_
0700もな2005/10/03(月) 02:25:24ID:???
以上ですm(__)m
0701nobodyさん2005/10/03(月) 02:34:33ID:???
まるまる張るんだったらどこかにうpしる。
0702nobodyさん2005/10/03(月) 02:46:02ID:hN7oOpvn
perlのバージョンが3以下なんじゃないの???
それだとオブジェクト指向サポートしてないから書き込めないよ
0703nobodyさん2005/10/03(月) 02:51:30ID:???
ヒント:オープンモード
0704もな2005/10/03(月) 02:51:39ID:???
ttp://www.error.to/~marty/ss2_bbs/ss2_bbs_img/8_1.txt

です。おねがいしますm(__)m
0705nobodyさん2005/10/03(月) 02:51:47ID:???
>>698
> if($FORM_DATA{'action'} eq 'reqist') {
                    ↑
0706もな2005/10/03(月) 03:04:26ID:???
>>703

オープンモードですか?
+>や>>などですか。調べてみましたが、もはやどうにも;;


>>705

初歩的なミスですね、ありがとうございます。

その部分を registと書き直しましたが
改善しません。
0707nobodyさん2005/10/03(月) 03:33:27ID:???
>>704
入力画面の表示の部分に
<input type="hidden" name="action" value="request">
が抜けている。

そしてなにより、@data_setにいれたログを表示する部分が、ない。
0708もな2005/10/03(月) 03:44:44ID:???

>入力画面の表示の部分に
><input type="hidden" name="action" value="request">
>が抜けている。

今自分で発見しました。ごもっともです・・・。これが原因でした。

>そしてなにより、@data_setにいれたログを表示する部分が、ない。
これはこれから実装予定です。
いまはとりあえずbbs.datに書き込めればいいので。

ありがとうございましたm(__)m
0709nobodyさん2005/10/03(月) 05:25:36ID:AwkrNdbs
神様、お願いします。
CGIの改造を考えていますが、この内容が素人に出来そうでしょうか?
パールの解説のHPを見つけたのと、大昔、BASICをやっていました。

「掲示板に親記事を投稿した人間以外にレスを付けれなくする。」
1、親記事の入力フォームに記事ロックの選択肢を追加。ログデータに
この項目を追加。
2、ロックマーク表示。
3、レス投稿時に親記事番号のログデータを読み込んで、ロックであれ
ばパスワード判定。パスワードは投稿時の物を使用、判定はそのサブル
ーチン流用。
4、エラー処理。(サブルーチンから流用)。
0710nobodyさん2005/10/03(月) 05:36:42ID:???
根性があればできんじゃない?
0711nobodyさん2005/10/03(月) 05:40:27ID:???
>>709
既存のスクリプトは読めてるみたいだしいけると思うよ
0712nobodyさん2005/10/03(月) 18:47:13ID:???
>>710-711
神キター
07137092005/10/03(月) 22:58:15ID:y4rbqtg0
ありがとうございます。頑張ってみます。

ログファイルの読み込み、書き込みが強敵です。なにせ、BASICには無い
概念なので。あとは、他の部分からの流用、小改造でなんとかなりそうなんで
すが。
0714nobodyさん2005/10/03(月) 23:16:50ID:???
やってもらいたいなら、最初からそう書くべきだと思うけど。
07157092005/10/03(月) 23:55:41ID:YGt8QF/s
そういうスレがあるのは知っています。ただ、できたらいいな、ぐらい
なものなので。

とりあえず、ログデータを定義している部分をチェックしたので、そこ
からスタートです!!
0716nobodyさん2005/10/04(火) 11:53:28ID:ibcAkGb+
質問させてください。

@list1 = (1,3,5,7,9,11,13,15,17,19,21,23,25,27,29)
@list2 = (1,4,7,10,13,16,19,22,25,28,30)

と入っています。
ここで
・リスト2の中のものがリスト1にある場合はその値を@list3に、
・リスト2の中のものがリスト1にない場合はその値を@list4に、
それぞれ入れて行きたいと思うのですが、その方法がわかりません。

最終的には
@list3 = (1,7,13,19,25,30)
@list4 = (4,10,16,22,28)
にしたいのです。

@list1〜@list4は便宜上数値にしていますが、実際に入るのは文字列(URL)で、@list1の要素は100以上になる場合があります。@list2はせいぜい5個くらい。
0717nobodyさん2005/10/04(火) 12:19:46ID:???
>>716
ハッシュにいれて調べるのが常套手段。

@list3 = (1,7,13,19,25,30)
@list4 = (4,10,16,22,28)

じゃなくて

@list3=(1,7,13,19,25)
@list4=(4,10,16,22,28,30)

でよければ

@list1{@list1} = ();

@list3 = grep {exists $list1{$_}} @list2;
@list4 = grep {!exists $list1{$_}} @list2;

でいけるけど、30が@list4じゃなくて@list3に入るようにするのは難しいな。
0718nobodyさん2005/10/04(火) 14:23:03ID:???
なんかすげー。

> @list1{@list1} = ();

こんな書き方あるのか。
0719nobodyさん2005/10/04(火) 15:06:23ID:???
>>718
原理としては @hash{'foo', 'bar', 'baz'} と同じなんだが。
07207162005/10/04(火) 15:10:49ID:ibcAkGb+
>>717

30は@list4の間違いです。申し訳ありません。

ハッシュを使うのですね。
ありがとうございました!!
0721nobodyさん2005/10/04(火) 15:12:11ID:???
素人スマソ、生理的に嫌かもしれませんが

$dummy = '/^';
$dummy .= join'$/ || /^',@list2;
$dummy .= '$/';
@list3 = grep(eval $dummy,@list1);
@list4 = grep(!eval $dummy,@list1);
07227212005/10/04(火) 15:16:47ID:???
間違ったので読み飛ばしてください。(鬱
0723nobodyさん2005/10/04(火) 15:21:32ID:???
>>718
スライスはやりすぎのような気がするので、

$list1{$_} = 1 foreach @list1;

ぐらいの方が見やすいんじゃないかねぇ。これだと値が1だから
exists使わずに

@list3 = grep {$list1{$_}} @list2;

みたいに書けるし。
0724nobodyさん2005/10/04(火) 15:45:08ID:???
それならこう書くかな。
my %flag = map { $_ => 1 } @list1;
07257092005/10/04(火) 15:46:59ID:16WUnnwb
第一夜。
まずは入力フォームを追加して、ログデータの項目を追加。
掲示板に投稿して入力値が入っているかテスト。・・・FTPで開いて
みるが、入っていない。試行錯誤するがダメ。もう止めようと思う。

第一夜続き。お風呂でぶくぶくしていると、使っていないname値を流用すれ
ば全部済むことに気がつく。
俺って天才!! さっそく試す。ダメ。

0726nobodyさん2005/10/04(火) 15:47:19ID:???
どうでもいいが >>721 は /^(?:a|b|c)$/ とういうような書き方を知らないのか
0727nobodyさん2005/10/04(火) 15:49:41ID:???
>>709 オツカレw
07287092005/10/04(火) 15:50:20ID:16WUnnwb
第二夜。
よ〜〜〜く見たら、formのnameに「"」がついてないことに気がつく。
再度、投稿してFTPでファイルを開く。

入ってる〜〜〜〜〜!!!!!

新たにログデータの項目を追加した状態で試す。

入ってる〜〜〜〜〜!!!!!
0729nobodyさん2005/10/04(火) 16:38:19ID:???
>>728
ローカルでテストしましょうね。
0730nobodyさん2005/10/04(火) 16:56:19ID:???
とりあえずオメ
07317092005/10/04(火) 17:13:56ID:0ZPYmA+s
ありがとうございます!! 
ところでローカルということは、サーバーに上げなくてもCGIは動く
のですか?

第二夜続き。
過去ログの処理が入っているので、安全を考えてname値の流用の方に決
定。とりあえずクッキーを外したいので、そこだけ消去。動作確認。

レスロック判定をしてロックなら投稿記事にマークを出す。ログデータ
はもともと読み込まれているので、if文を書いてみる。
原文から「!」が逆の判定になるのだろうと推測。

if ((!$reno)&&($sub_color eq "1")) {
 print "[ロック] ";
 }

出た〜〜〜〜〜!!!!
0732nobodyさん2005/10/04(火) 17:47:20ID:???
>>731
プログラムだから動くよ〜。
0733nobodyさん2005/10/04(火) 18:20:23ID:???
>>731
> ローカルサーバ
あの KENT-WEB にさえ 「自宅マシンWWWサーバ化計画」 とやらがあるんだし、いろいろぐぐってみそ
0734nobodyさん2005/10/04(火) 18:31:14ID:???
機種依存文字のチェックルーチンを作っててはまった事実。

---------- ソース(EUC) ----------
use Jcode;
$char = '(1)'; # 機種依存文字の丸1だと思ってください。
print qq(${char}\n);
Jcode::convert( \$char, 'euc' );
print qq(${char}\n);
exit;

---------- 出力(EUC) ----------
(1)
?

文字コード同じでもJcodeかますと機種依存文字が「?」になるんですね…
なんでだろ。
0735nobodyさん2005/10/04(火) 19:35:46ID:???
>>731
ここで日記書く前にCGIの基礎を勉強して来い
つか質問無いなら書くな
0736nobodyさん2005/10/04(火) 19:40:27ID:???
>>734
ウチではそのソースでも「?」にはならないけど
07377342005/10/04(火) 19:49:55ID:???
>>736

まじですか?
ちなみに環境は、

・FedoraCore 3
・Perl 5.8.5
・内部エンコードUTF8(あまり関係ない気がするけど)

です。
0738nobodyさん2005/10/04(火) 19:54:18ID:???
Jcode.pm の ユニコ←→EUC 変換テーブルにない文字なだけじゃね?
■ このスレッドは過去ログ倉庫に格納されています