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

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

レス数が1000を超えています。これ以上書き込みはできません。
0001nobodyさん2005/10/17(月) 00:47:17ID:???
Perlのコーディングで困ってる人のスレです。

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

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

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

過去ログやお勧めサイトは >>2-10
0002nobodyさん2005/10/17(月) 00:47:57ID:???
関連スレ
CGI: Common Gateway Interface part 13
http://pc8.2ch.net/test/read.cgi/php/1126436361/

【Perl,CGI】参考書籍 第三版
http://pc8.2ch.net/test/read.cgi/php/1030209573/

【Perl】ファイルロック(排他処理)について語ろう
http://pc8.2ch.net/test/read.cgi/php/1024795138/

★負荷軽減対策委員会(Perl、PHP)★
http://pc8.2ch.net/test/read.cgi/php/1034645635/

Perlモジュールについて
http://pc8.2ch.net/test/read.cgi/php/997829243/

CGIに依存しないPerlの話題一般/Part2
http://pc8.2ch.net/test/read.cgi/php/1030548610/

★三 【 スクリプト改造工房 PART 8 】 ★三
http://pc8.2ch.net/test/read.cgi/php/1077525387/

【 スクリプト改造依頼スレ 】(丸投げ) part4
http://pc8.2ch.net/test/read.cgi/php/1127916965/
0003nobodyさん2005/10/17(月) 00:48:29ID:???
[過去ログ] 1 of 4

Part1 http://tako.2ch.net/test/read.cgi?bbs=perl&key=957208980 参照不能
 DAT: http://tako.2ch.net/perl/dat/957208980.dat
Part2 http://tako.2ch.net/test/read.cgi?bbs=perl&key=971817087 参照不能
 DAT: http://tako.2ch.net/perl/dat/971817087.dat
Part3 http://tako.2ch.net/test/read.cgi?bbs=perl&key=979894521 参照不能
 DAT: http://tako.2ch.net/perl/dat/979894521.dat
Part4 http://tako.2ch.net/test/read.cgi?bbs=perl&key=984430156 参照不能
 DAT: http://tako.2ch.net/perl/dat/979894521.dat
Part5 http://pc.2ch.net/php/kako/988/988728069.html
Part6 http://pc.2ch.net/php/kako/996/996075607.html
Part7 http://pc.2ch.net/php/kako/1000/10002/1000267444.html
Part8 http://pc.2ch.net/php/kako/1003/10039/1003900311.html
Part9 http://pc.2ch.net/php/kako/1009/10095/1009549309.html
Part10 http://pc.2ch.net/php/kako/1014/10145/1014556702.html
0004nobodyさん2005/10/17(月) 00:49:52ID:???
[過去ログ] 2 of 4

Part11 http://pc.2ch.net/php/kako/1017/10172/1017201229.html
Part12 http://pc.2ch.net/php/kako/1019/10199/1019917048.html
Part13 http://pc.2ch.net/php/kako/1022/10227/1022731565.html
Part14 http://pc.2ch.net/php/kako/1026/10269/1026977659.html
Part15 http://pc.2ch.net/php/kako/1028/10288/1028816385.html
Part16 http://pc.2ch.net/php/kako/1032/10320/1032070299.html
part17 http://pc.2ch.net/php/kako/1034/10345/1034583844.html
part18 http://pc.2ch.net/php/kako/1037/10377/1037797479.html
part19 http://pc.2ch.net/php/kako/1042/10422/1042260745.html
part20 http://pc2.2ch.net/php/kako/1044/10447/1044717887.html (タイトルに19と誤記)
0005nobodyさん2005/10/17(月) 00:50:39ID:???
[過去ログ] 3 of 4

part21 http://pc2.2ch.net/php/kako/1047/10479/1047980851.html
part22 http://pc2.2ch.net/php/kako/1050/10503/1050369328.html
part23 http://pc2.2ch.net/php/kako/1053/10530/1053051519.html
part24 http://pc2.2ch.net/php/kako/1054/10549/1054992610.html
part25 http://pc2.2ch.net/php/kako/1056/10567/1056730690.html
part26 http://pc5.2ch.net/php/kako/1059/10590/1059043704.html
part27 http://pc5.2ch.net/php/kako/1060/10608/1060808783.html
part28 http://pc5.2ch.net/php/kako/1063/10635/1063562491.html
part29 http://pc5.2ch.net/php/kako/1066/10662/1066286828.html
part30 http://pc5.2ch.net/test/read.cgi/php/1069846177/
0006nobodyさん2005/10/17(月) 00:51:22ID:???
[過去ログ] 4 of 4
part31 http://pc5.2ch.net/test/read.cgi/php/1072896288/
part32 http://pc5.2ch.net/test/read.cgi/php/1075545279/ (タイトルに31と誤記)
part33 http://pc5.2ch.net/test/read.cgi/php/1078076768/
part34 http://pc5.2ch.net/test/read.cgi/php/1081148490/
part35 http://pc5.2ch.net/test/read.cgi/php/1085557731/
part36 http://pc5.2ch.net/test/read.cgi/php/1089779036/
part37 http://pc5.2ch.net/test/read.cgi/php/1093106507/
part38 http://pc5.2ch.net/test/read.cgi/php/1097158988/
part39 http://pc5.2ch.net/test/read.cgi/php/1101522903/
part40 http://pc5.2ch.net/test/read.cgi/php/1106816922/

part41 http://pc8.2ch.net/test/read.cgi/php/1110383236/
part42 http://pc8.2ch.net/test/read.cgi/php/1116970588/
part43 http://pc8.2ch.net/test/read.cgi/php/1123777607/ (前スレ)
0007nobodyさん2005/10/17(月) 00:52:36ID:???
ム板Perlスレより 1 of 2

[プログラミング自体の経験が無い奴はまずココを読め]
Perlプログラミング講座: http://www.site-cooler.com/kwl/perl/

[本]
リャマ: http://www.oreilly.co.jp/books/4873111269/
駱駝: http://www.oreilly.co.jp/books/4873110963/
Effective Perl: http://www.ascii.co.jp/books/detail/4-7561/4-7561-3057-7.html
クックブック: http://www.oreilly.co.jp/books/4873110378/

[オンラインマニュアル] (追加)
最新のドキュメント: http://search.cpan.org/~nwclark/perl-5.8.7/
perl5.8.xのドキュメント(一部): http://www.kt.rim.or.jp/~kbk/perl-5.8/
perl5.005_03 のドキュメント: http://www.kt.rim.or.jp/~kbk/perl5.005/
日本語ドキュメント検索: http://search.cpan.jp/
perldoc.jp: http://www.perldoc.jp/
Perldoc.com: http://www.perldoc.com/
0008nobodyさん2005/10/17(月) 00:53:16ID:???
ム板Perlスレより 2 of 2

[モジュール]
CPAN.com: http://search.cpan.org/
河馬屋二千年堂: http://homepage3.nifty.com/hippo2000/

[テクニック]
Perlメモ: http://www.din.or.jp/~ohzaki/perl.htm
Perlのページ: http://homepage1.nifty.com/nomenclator/perl/
Perlの小技: http://homepage3.nifty.com/hippo2000/perltips/index.htm

[Perl5.8Unicodeメモ]
http://www.pure.ne.jp/~learner/program/Perl_unicode.html
http://www.namazu.org/~tsuchiya/perl/perl-5.8.html
http://www.lr.pi.titech.ac.jp/~abekawa/perl/perl_unicode.html

関連スレ

正規表現道場@2ch Part4
http://pc8.2ch.net/test/read.cgi/php/1105930285/
00097662005/10/17(月) 00:55:59ID:???
>>997
すいません。。ほんとに。おいらが悪いんです。ごめんなさいです。
0010nobodyさん2005/10/17(月) 01:08:17ID:???
前スレ999ワラタ
0011nobodyさん2005/10/17(月) 01:42:22ID:???
全然勉強してないうえ仕事でわかんなくて悩むんだったら、
誰か (ちゃんとしたスクリプトを書いてくれるとこ) に依頼した方が会社もお前もいい判断だろうに。
1〜2週間やそこら悩んでできないくらいだったらそのほうがはるかにコストパフォーマンスがよいハズ。
つかそんなことで雇ってもらえてるのが、何ていうか、うらやましい。
0012nobodyさん2005/10/17(月) 01:48:57ID:???
同じく、前スレ999ワラタ
00137662005/10/17(月) 01:57:00ID:???
>>11

おっしゃるとおりです。おいらもできるってゆっちゃったのがいけなかったんです。ほんとに前スレの999ですね。。。情けないです。
00147662005/10/17(月) 01:59:05ID:???
色々調べて何回もいろんなソース試したりしてここまでやったんですが、、もうだめぽ。。泣

今回だけマジで助けてほしい。。お願いします。
0015nobodyさんNGNG
めずらしくこのスレ盛り上がってるじゃん。 うれしいよ。。
0016nobodyさん2005/10/17(月) 02:20:21ID:???
まだ766はいるのかな?
まだ出来てないなら要点まとめて頂戴。

まずは、送信したフォームの情報が正しく所得できているのか。

POSTでなく、GETで値をみられるようにする。

データを保存する方法はわかっているのか。

変数に入れた文字が保存できたのか調べる。
0017nobodyさん2005/10/17(月) 02:43:10ID:???
すみません、教えていただきたいのですが。
買い物などのWEBで、検索や完了まで時間がかかるとき、「ただいま検索(登録)中です」のような一時的画面を表示させたいのですが、
perlではどのような方法があるでしょうか?
一定時間(例えば1分とか)は、特定の一時ページを表示して、
完了した時に完了ページを表示するものをイメージしています。
javaなどでは時々このようなページを使っているとこがあるのですが。。。。

一応、小枝とかその他有名なサイトは見たんですが、
こういう点での会報がわからなくて。。。。
00187662005/10/17(月) 02:50:52ID:???
>>16

すいません。ありがとうございますです。

・送信したフォームの情報はexcelで開いたとき、名前が文字化け(EUCでやってるからだと思いますが、解決策わからず。。)

・変数にいれた文字(回答番号 1とか2とか)はcsvに数字で保存できています。

【お手上げ】

・前スレ >>981 に書いたような並びでexcelに保存ができなし。。
・名前をいれてなかったらエラー(送信できない)ようにしたい。

です。何卒ご指導お願いいたします。。まじですいません。
0019162005/10/17(月) 03:04:21ID:???
まず、先にこれだけいっておきます。
「エクセルは関係ない」。
エクセルで読める表示形式で保存したいって言うのは最後の手段で、今はそこまでいってないので頭から忘れてください。

送信する

データを受け取る

ファイルに保存する

第一段階でHTMLのメソッドをgetに・・・

って現段階のコード、どっかにアップしてもらったほうが早そうね。
もうちょっと常駐しとく。
0020162005/10/17(月) 03:21:03ID:???
納期遅れのいいわけ考えながら寝ちゃったのかな?
0021nobodyさん2005/10/17(月) 03:41:01ID:???
>>19
現段階のコードは前スレに。
参考にやり取りを列挙すると
前スレ http://pc8.2ch.net/test/read.cgi/php/1123777607/
Q >>922-925
A >>931,932
Q >>936-938
A >>950
Q >>954-956
A >>958
Q >>981,982-986 (現状の全ソース)

その要件を実装するのはすぐにできるけれど、
完成物を渡してしまっても766のためにはならないしな…
0022nobodyさん2005/10/17(月) 03:51:17ID:???
というかまず766は出来ないことは「できない」と言う事を学ぶべきだと思う
じゃないとまた同じ事繰り返す羽目になる
0023162005/10/17(月) 04:19:43ID:???
暇でネタもないので、とりあえず作ってみてる。
0024nobodyさん2005/10/17(月) 04:40:35ID:???
>>23
おまい、いいやつだな
00257662005/10/17(月) 04:40:42ID:???
>>21

レス有難うございます。
ヒントだけでも結構です。。後はもちろん自分でなんとか完成させるつもりです。

何卒宜しくお願いいたします。
0026nobodyさん2005/10/17(月) 04:45:09ID:???
>>17
それ、perlとは関係ないだろう。
meta refresh か JavaScript 使いなされ。
00277662005/10/17(月) 04:54:56ID:???
現状のソースをアップしますた。

http://www.nextftp.com/sentobeat/

皆さんに頼りっぱなしなのもわかっております。
ヒントだけでもいただければもちろん自分でもなんとかするようにします。

なんとか宜しくお願いいたします。。マジ泣
0028162005/10/17(月) 05:03:25ID:???
最初のファイルを編集してるので。
希望動作は最初のとおりでいいのよね?
0029162005/10/17(月) 05:12:34ID:???
アプロダの指定よろ
00307662005/10/17(月) 05:13:39ID:???
>>28

まじですか ほんとに有難うございます。。

はい。希望動作は >>18 に書いたものです。

今なんとか自分でもとりあえずエラー機能をつけようと思って
#入力チェック
if ($in{name} eq '') { &error('名前を入力してください',''); }

を頭につけてみたんですが、動きませんでした。。orz

何卒宜しくお願いいたします。
00317662005/10/17(月) 05:16:11ID:???
>>29

ありがとうございます。

http://other.free-uploader.com/up/ 

でお願いしますです。
0032162005/10/17(月) 05:30:28ID:???
とりあえずあぷ
ソース汚いままだけど保存はちゃんとされるはず。
読みにくかったfont size=2はスタイルに勝手に変えちゃったままですが。
0033162005/10/17(月) 05:32:40ID:???
やばっ、フォントの閉じたぐ全部消しちゃってるw
0034162005/10/17(月) 05:41:52ID:???
Lintで怒られまくったので、最低限もとのHTMLになるように戻しておきますた。
00357662005/10/17(月) 05:42:40ID:???
>>16

有難うございますです。マジで感謝です。

今試してみたんでうが、動かない。。泣
パーミッションもなおしますた。

はじめのはquestion_1.inc っていうふぁいると連動してたんですが、
作っていただいたものは関係ありますか?

question_1.cgiにいきなりアクセスですよね?
0036162005/10/17(月) 05:44:24ID:???
あ、1行目戻してないです。
usestrictでエラー追いやすいように一つにまとめました。
00377662005/10/17(月) 05:53:08ID:???
>>16

!!!!

でけてるー!!! 感謝です!

こんな朝方まで付き合ってくださって本当にありがとうございます。大泣
ソースみたらやっぱり全然違いますた。。


これは質問をquestion_1.tsvから読み込まなくても、index.html → post でquestion.cgiでももしかしていけますか?
0038162005/10/17(月) 05:57:15ID:???
質問を表示したソースをHTMLとして保存すれば出来ます。
perlの中の変数はかなり弄ったけど、フォームの部分は触ってません。
00397662005/10/17(月) 06:04:44ID:???
>>16

わかりましたです!やってみますです。
本当に有難うございます。

あと名前をcsvに書き出したいんですが、$in{name}で書き出せるのでしょうか?(配列は自力でやりますです。)

あとその名前が入っていなかったら、エラーにしたいんですが、さっき入れた if ($in{name} eq '') { &error('名前を入力してください',''); } じゃだめでしょうか?

これで最後の質問です。。ご指導おねがいできませんでしょうか?
00407662005/10/17(月) 06:16:25ID:???
>>16

すませんです。。せっかく作っていただいたのですが、

1人目の名前: name1
その人の1〜3問目の回答番号: hoge1, hoge2, hoge3,
1〜3問目の正解番号: anser1,anser2,anser3

2人目の名前: name2

とすると

name1、hoge1, hoge2, hoge3,(改行)
”空欄”,anser1,anser2,anser3(改行)
name2、hoge1, hoge2, hoge3,(改行)
”空欄”,anser1,anser2,anser3(改行)

になってませんでした。。。泣

hoge1,anser1(改行)
hoge2,anser2(改行)


になってました。。もう一度みてもらえませんでしょうか、、再度大泣
0041162005/10/17(月) 06:23:47ID:???
40をみてないときの39への回答
いつのまにか名前入力とか増えてたのね。

>あと名前をcsvに書き出したいんですが、$in{name}で書き出せるのでしょうか?(配列は自力でやりますです。)
フォームで<input type="text" name="name" value="">としていれば$in{name}に入る。

>あとその名前が入っていなかったら、エラーにしたいんですが、さっき入れた if ($in{name} eq '') { &error('名前を入力してください',''); } じゃだめでしょうか?
cgi-lib.plでのエラー表示用はCgiDie。CgiErrorでもいいけどどっちがいいとかは忘れた。
unless ($in{name}) { &CgiDie('名前を入力してください');}

とりあえず、ヒキなおいらに頼るような仕事は今後受けないようしましょうね。
昔、友達に頼まれたCGIが、これによく似てたから作ってみただけですので。
↑これも、ただ働きだったけど。
00427662005/10/17(月) 06:36:14ID:???
>>16さん

レス有難うございます。やってみますです。
はいです。今後出来ない仕事は請けないです。(絶対)

>>40 の内容をいただいたソースもとにいじってみたんですけど
やぱりエラーでした。。

# CSVへの書き出し
open (CSV , '>>file.csv');
flock (CSV,2);
print CSV join(',', $in{name}, $in{'Q'.$i}), "\n";
print CSV join(',', '', $array[1]), "\n";
flock (CSV,8);
close (CSV);


0043162005/10/17(月) 06:36:39ID:???
>>40
こゆこと?

my$data;
my@q1;
my@q2;
for (my$i = 1; $i <= @question; $i ++) {
my@array = split("\t", $question[$i - 1]);
push(@q1, $in{'Q'.$i});
push(@q2, $array[1]);
}
$data = $in{name}.','.join(',', @q1)."\n".','.join(',', @q2)."\n";

正解を保存する理由もよく分からないままなんですが。

あと、選択する問題が4つ目とか増えるなら36行めを
for (my$s = 1; $s <= (@array - 2); $s ++) {
にしないとだめです。
00447662005/10/17(月) 06:46:20ID:???
>>43

はっ!! できてる!
有難うございますー!! (泣きっぱなし)

名前は今EUCなので、excel開けたときに文字化けすてるんですが、
こいつをcsvに書き出すときに直すソースってありますでしょうか?
(ほんとにこれで最後でございます。。)
00457662005/10/17(月) 06:53:52ID:???
unless ($in{name}) { &CgiDie('名前を入力してください');}

をrequire "cgi-lib.pl";の後に挿入したら、名前しれているのに
でっかく 名前を入力してください て出ます。。

いれるとこ間違ってるのかな?
0046162005/10/17(月) 06:56:07ID:???
CSV 【カンマ区切り】
読み方 : シーエスブイ
フルスペル : Comma Separated Values
別名 : コンマ区切り

データの保存形式のこと。文字コードの指定はない。
エクセルはShift_jis限定だっけ?
メモ帳じゃないテキストエディターで変換保存すれば読めるはず。
保存時からShift_jisにしたいのならコード変換の処理が必要。

というか、ラジオボタンで値が数字だけだからいらなかったのに、テキストフォームつけるなら、Jcodeとか必要よ?

>>45
&ReadParse;の後
00477662005/10/17(月) 07:08:46ID:???
>>46

jcode.pl 入れますた。

下のコードをどっかにいれたりしたらokだったりしますか?


# jcode.plを用いたコード変換
require 'jcode.pl';

open READ, '<sjis.txt';
open WRITE, '>euc.txt';
while(my $data = <READ>){
jcode::convert(*data, 'euc');
print WRITE $data; }
close WRITE; close READ; exit;
0048162005/10/17(月) 07:17:18ID:???
なんかもう設計とかあってないようなので、
先頭で
require 'jcode.pl';

さっき変えたところで
$data = $in{name}.','.join(',', @q1)."\n".','.join(',', @q2)."\n";
jcode::convert(\$data、'sjis');
# CSVへの書き出し

というかエクセルは文字コード固定なの?
OOoしか使ってないからエクセルのことは知らないよ。
0049nobodyさん2005/10/17(月) 07:31:39ID:???
なんていうか…
2ch外でやってもらえません?
00507662005/10/17(月) 07:49:53ID:???
>>16さん

長い間ほんとにお手数おかけしました。
無事完成いたしましたです。

本当に感謝です。たすけていただいて本当にうれしくて泣きそうでした。

有難うございました。

これから教えていただいたことを無駄にしないように自分で勉強かさねていきますです。



>>49

すいませんでしたです。
0051nobodyさんNGNG
めずらしくスレ進行が速いから、荒らしかと思いきや、、、、ある意味荒らしだった。。
0052162005/10/17(月) 07:53:59ID:???
お疲れさん。

次の質問どぞー
0053nobodyさん2005/10/17(月) 08:09:02ID:???
766と16のおんぱれ・・・初めてこんな個人スレ見ました。
0054nobodyさん2005/10/17(月) 08:39:52ID:???
結局766って仕事がどーとか言うより何一つ知らない上に検索すら出来ない池沼じゃねぇか
0055nobodyさん2005/10/17(月) 09:18:14ID:???
次の仕事がきたらまた愛の交換日記がはじまるんだろうか...
0056nobodyさん2005/10/17(月) 10:19:11ID:???
丸投げスレかと思った。
0057nobodyさん2005/10/17(月) 10:41:45ID:???
>>16は乙だが、正直放置して欲しかった
今後766みたいなのが増えると思うとウンザリする
0058nobodyさん2005/10/17(月) 13:09:39ID:???
>766だけでなく>16もウザ。
二度と来ないでくれ。
0059nobodyさん2005/10/17(月) 17:49:53ID:???
戦いは終わった……だが…それは勝利ではなかった……
0060nobodyさん2005/10/17(月) 18:40:37ID:???
「仕事請負スレ」でも作って、766みたいなのは
そこに誘導(隔離?)するのがいいかもね。
0061nobodyさん2005/10/17(月) 19:11:36ID:???
■こんなCGI作ってください■
http://pc8.2ch.net/test/read.cgi/php/1102980903/

ここに誘導しとけばよかったね
0062nobodyさん2005/10/18(火) 00:10:47ID:aW0OtyWy
質問です。現在FreeBSD上で、マニュアルページをHTMLに変換するCGIを書いていて、文字化けに困っています。
プログラム名は test.cgi です。手元で、% ./test.cgi > log として、出力されたログを見ると、きちんと
EUC-JPで出力されているのですが、ブラウザでアクセスしたり、fetch コマンドでアクセスしたり、telnet で
直接WebServerと話したり、とにかくApache を通すと、日本語の部分が、&xxx; と、文字実体参照の形に
なってしまいます。どうすれば文字化けを無くせるでしょうか。

(余計な部分を切り詰めた)プログラムを貼ります。

#! /usr/local/bin/perl -w
binmode(STDOUT, ":encoding(euc-jp)");
$filename= "/usr/local/man/ja/man3/strlen.3.gz";
$command = "gzcat $filename | /usr/local/bin/groff -man -Thtml -dlang=ja_JP.eucJP";
open(PIPE, "-|:encoding(euc-jp)", "$command") or die;
@html = <PIPE>;
close(PIPE);
print "Content-type: text/html; charset=euc-jp\n\n";
for $text (@html) {
  print $text;
}
0063622005/10/18(火) 00:12:05ID:aW0OtyWy
>>62 の続き。

コマンドライン上で ./test.cgi > log とした時の、ファイル log の中の一部分。
<a href="#名称">名称</a><br>

WebServer にCGIを起動させて結果を得た場合の、上と同じ部分。(アンド記号はわざと全角にした。)
<a href="#&Igrave;&frac34;&frac34;&Icirc;">&Igrave;&frac34;&frac34;&Icirc;</a><br>

環境。
OS: FreeBSD 5.4-RELEASE i386
WebServer: Server version: Apache/1.3.33 (Unix)
Perl: This is perl, v5.8.7 built for i386-freebsd-64int
0064nobodyさんNGNG
http://www.jp.freebsd.org/QandA/HTML/1544.html
0065nobodyさん2005/10/18(火) 00:27:48ID:aW0OtyWy
>>64
HTMLにするのはあきらめて、Plain text で我慢しろ、っていう意味ですか?
0066nobodyさん2005/10/18(火) 03:27:49ID:???
>>65
ちゃんと読めよ。
0067nobodyさん2005/10/18(火) 03:43:48ID:???
>>62
いちいちCGIで出力するより、htmlで吐いてアップした方が良いとは思うが・・・。

コマンドラインとApacheで動作が異なる場合はまず環境変数を疑う。
とりあえず2行目あたりに

$ENV{'LANG'} = 'ja_JP.eucJP';

を挿入。これで大丈夫だと思う。確かめてないけど。
0068672005/10/18(火) 03:47:18ID:???
>>65の件は今回の場合関係ない。
groffが吐いてる時点で実態参照になってると思われ。
0069nobodyさん2005/10/18(火) 13:57:42ID:???
PealでCGIのちょっとした掲示板を作っているんですが、
フォルダの中身を全て消す処理というのはどうすれば良いのでしょうか?
ファイルの場合は @Test=''; これだけで消せますが、
フォルダの中身全てを消去する方法が判らず製作が滞っています。
何方かお知恵をお貸し下さい。お願いします。
0070nobodyさん2005/10/18(火) 14:03:18ID:???
Pealで掲示板は作れまい
0071nobodyさん2005/10/18(火) 14:18:33ID:???
>>69
フォルダにあるファイル一覧を取得して消すとか、
シェルコマンド使うとかいろいろあるお。
0072nobodyさん2005/10/18(火) 14:29:41ID:???
> ファイルの場合は @Test=''; これだけで消せますが、

ここにツッコミを入れる奴はおらんのか?(笑)
0073nobodyさん2005/10/18(火) 14:48:42ID:???
フォルダを消すときは
@Test = `del c:\*.*`;
とするんじゃなかったっけ?
0074nobodyさん2005/10/18(火) 15:15:57ID:???
うーん・・・・・  何からツッコンでいいのかわからん
0075nobodyさん2005/10/18(火) 15:41:11ID:???
質問の内容からして、>>69が掲示板スクリプトを作れるとは思えん。
また>>16が降臨して、>>69の掲示板スクリプトを全部作ってやればいい。
但し、↓のスレでやってほしい。

■こんなCGI作ってください■
http://pc8.2ch.net/test/read.cgi/php/1102980903/
0076nobodyさん2005/10/18(火) 17:06:06ID:???
とりあえず rm -rf / でもしとけ。
0077nobodyさん2005/10/18(火) 17:11:13ID:???
Web サーバの権限だと初手からコケそうだが。
0078nobodyさん2005/10/18(火) 21:16:25ID:???
>>67 さん。
> とりあえず2行目あたりに
> $ENV{'LANG'} = 'ja_JP.eucJP';
> を挿入。

で、うまく行きました。

%gzcat /usr/local/man/ja/man3/strlen.3.gz \
  | env -i /usr/local/bin/groff -man -Thtml -dlang=ja_JP.eucJP

と、環境変数無しで実行すると、groff が実体参照を吐くことも確認できました。
ありがとうございました。
0079nobodyさん2005/10/18(火) 22:15:08ID:???
レンタル鯖がaaacafeでmySQLは使えるのですが、鯖にDBIがないようなのです。
レンタル鯖のCGIで接続したい場合、どういった方法を取ればいいのでしょうか。
CGI自体はローカル起動、ローカルのMySQL、ローカル起動、レンタル鯖のMySQLで正しく動くので、スクリプト上のエラーではないと思います。
0080nobodyさん2005/10/18(火) 22:25:23ID:???
PerlのCGIで、非常に簡単なコメント保存CGIをつくろうとしてます。

htmlの方で、

<form method="post" action="****.cgi">
コメント<Input Type="text" Name="com" Size="**" Maxlength="**">
<INPUT TYPE="image" SRC="img/send.jpg" align=right>
<form>

としておいてテキストを書込み、SENDボタンを押すと、CGIが動作しコメントがログに書込される、というものです。

でperlのCGIの方で(既存のCGIを自分で修正)

#!/usr/bin/perl -w
use CGI;
変数宣言
$form = new CGI;
$com = $form->param('com');
open (TEXTFILE,">>./log.txt")
print TEXTFILE $com;
print TEXTFILE "\n";
close (TEXTFILE);

としてるのですが、どうにもうまくいきません。
どうすればうまくいくかヒントでもいただけませんでしょうか?


0081nobodyさん2005/10/18(火) 22:27:43ID:???
>>80
「変数宣言」がコメントになってないとか
あと、何がうまくいかないのか不明。
500エラーなのかファイルに保存されないのか、詳しく書くように。
0082802005/10/18(火) 22:32:41ID:???
>81
すみません。
インターナルサーバエラーを起こして動かないという状況です。

ちなみに変数宣言は
my ($form, $com);
としています。
0083nobodyさん2005/10/18(火) 22:41:45ID:???
>80
ヒント:Content-type(たぶん)
0084792005/10/18(火) 23:10:34ID:???
すいません、ム板のほうがよさげなので移動します。
0085nobodyさん2005/10/18(火) 23:16:01ID:???
>>84
早速マルチポストかよ。

来ないで下さい。
0086nobodyさん2005/10/18(火) 23:42:22ID:???
マルチポストの意味ちげーよ
0087nobodyさん2005/10/19(水) 00:31:56ID:???
>>80
use CGI::Carp qw(fatalsToBrowser);
おまじないで二行目に貼って。
0088nobodyさん2005/10/19(水) 00:35:04ID:???
>>69

unlink(glob("dir/*"));

多分ね。
0089nobodyさん2005/10/19(水) 00:52:35ID:???
それより「ちょっとした掲示板」で「フォルダの中全消し」という仕様が
何に使われるのかが非常に気になるのだが・・・
0090nobodyさん2005/10/19(水) 01:16:52ID:???
>>89
スレまたはレス別にログファイルが分かれていて、ログのリセットとかじゃなかろうか
0091nobodyさん2005/10/19(水) 17:01:02ID:mMzWKjOm
先生質問です。
指定したディレクトリ内にある、ファイルとディレクトリの名前、
そしてそれらのパーミッションを取得して表示させるCGIを作成してます。
stat でファイルのパーミッションは上手く取得できるのですが、
ディレクトリのパーミッションは 000 が返ってきます。
どうやったらディレクトリのパーミッションも取得できますか?

該当部分の今のソースはこんな感じです。
$dir ="cgi-bin";

opendir(DIR, $dir);
while (defined($uhaha = readdir(DIR))) {
if ($uhaha ne '.' && $uhaha ne '..') {
@st = stat "$permis";
$per = substr((sprintf "%03o", $st[2]), -3);
print "$uha:$per<br>\n";
}
}
closedir(DIR);
0092nobodyさん2005/10/19(水) 17:13:00ID:mMzWKjOm
う、ソース訂正です。

opendir(DIR, $dir);
while (defined($uhaha = readdir(DIR))) {
if ($uhaha ne '.' && $uhaha ne '..') {
@st = stat "$uhaha";
$per = substr((sprintf "%03o", $st[2]), -3);
print "$uhaha:$per<br>\n";
}
}
closedir(DIR);
0093nobodyさん2005/10/19(水) 17:18:56ID:???
>>91-92
こちらの環境ではちゃんと表示されるよ
問題は他のところにあると思う

関係ないけれど、
> $per = substr((sprintf "%03o", $st[2]), -3);
ここは
$per = sprintf "%03o", $st[2] & 0700;
の方が良いんじゃないかと思ったり
0094932005/10/19(水) 17:20:55ID:???
うわ、全角スペースとマスクの値の二重ミスした・・・スマソ。正しくは
$per = sprintf "%03o", $st[2] & 0777;
0095nobodyさん2005/10/19(水) 17:36:12ID:???
>>91
パーミッションを000にすることは普通ないだろうから、
statに失敗している可能性があるな。

opendir(DIR, $dir);
while (defined($uhaha = readdir(DIR))) {
if ($uhaha ne '.' && $uhaha ne '..') {
@st = stat "$uhaha";
if (@st > 0) {
$per = substr((sprintf "%03o", $st[2]), -3);
print "$uhaha:$per<br>\n";
} else {
print "$uhaha:stat失敗($!)\n";
}
}
}
closedir(DIR);

とでもして試してみたらどうだろうか。
0096nobodyさん2005/10/19(水) 17:57:17ID:???
あれ、よく読んだらreaddirで返ってくるのはパスじゃなくてファイル名だから・・・
stat "$dir$uhaha"
じゃなかろうかカレントディレクトリでテストしちゃったから気づかなかった
0097912005/10/19(水) 17:57:31ID:mMzWKjOm
>>93-94
ありがとうございます。
後述しますが、こちらの環境のせいかもしれません.....
あと、$per = sprintf "%03o", $st[2] & 0777; の方が何故良いのか、
パッと見てまだわからないので、後で調べてみます。

>>95
やってみました。
全部「stat失敗(No such file or directory)」でした。

そして、なんらかの原因でうまく情報を取得できていないみたいだったんで、
情報を取得したいディレクトリの中に、このスクリプトを放り込んで実行した所、
完璧に表示されました。
上位でも下位でも、階層が違うディレクトリを指定すると、
上手く情報が取得出来ないようです。
なんでだ...
0098912005/10/19(水) 18:00:40ID:mMzWKjOm
>>96
全て謎がとけましたw
その通りですね。
テンパってるとダメですね.....ありがとうございました!
0099nobodyさん2005/10/19(水) 23:56:03ID:???
# ID,NAME,ADDRESS,TEL
0,yamada,A32,333
1,tanaka,B22,555

上記のようなCSVファイルから1行ずつ読み込んでハッシュに入れたいのですがどのように
すればいいのでしょうか。問題点がCSVの一行目をカンマごとにばらしたのをハッシュのキー名
にして2行目からをそれぞれの値として入れなくてはいけないのです。
モジュールも使えないのでよりどうしたらいいのかわかりません。
$filename="test.csv";
%arr2 = &COUNT($filename);
foreach $value (values %arr2) {
print "$value\n";
}
sub COUNT{
open (IN, $filename)or die "$!";
while(<IN>){
$buff = $_;
chomp($buff);
@buff = split(/,/, $buff);
%arr2 =();
$arr2[] = @buff[];
$arr2[] = @buff[];
$arr2[] = @buff[];
close IN;
return %arr2;
}
}
whileの前に先に一行だけ読み込んでキーを作ってしまうべき何でしょうか。
ずっと堂々巡りで悩んでしまいました。
0100nobodyさん2005/10/20(木) 00:29:03ID:???
>>99
>whileの前に先に一行だけ読み込んでキーを作ってしまうべき何でしょうか。

それが一番ラクだと思うけど。むしろ何故ソレを実行しないのかわからん。
0101nobodyさん2005/10/20(木) 00:32:14ID:???
俺は

@buff = split(/,/, $buff);
%arr2 =();
$arr2[] = @buff[];
$arr2[] = @buff[];
$arr2[] = @buff[];

の意味が分からん。俺の知識不足。つまり

@buff = split(/,/, $buff);
%arr2 =();
$arr2[0] = @buff[0];
$arr2[1] = @buff[1];
$arr2[2] = @buff[2];

ってことなの?
0102nobodyさん2005/10/20(木) 00:36:48ID:???
いや、普通は

$arr2[0] = shift(@buff);
$arr2[1] = shift(@buff);
...

だろうな。そもそもハッシュ使いたいっぽいからこれでも違うけど。
てか今はどうしていいかわからなくなってる状態だと思われ。
0103nobodyさん2005/10/20(木) 00:36:51ID:???
>>99
これでいいのか分からんが。

count('test.csv' => \%data) or die 'Failed to count';
print "$_: ", join(' / ', @{$data{$_}}), "\n" for sort keys %data;

sub count {
  -f (my $file = shift) or warn('No such file'), return;
  open IN, '<' . $file or warn($!), return;

  my $hash = shift;
  my @key = <IN> =~ /\w+/g;

  while (<IN>) {
    chomp;
    my $i = 0;
    push @{ $hash->{$key[$i++]} }, $_ for split /,/;
  }

  close IN;
}
0104992005/10/20(木) 00:47:28ID:???
一行だけ先に読み込む案は書いてる途中で思いついたからです。
この次の段階としてCSVファイルの任意の部分だけを読み込み、書き換えよう
にしなくてはいけないので、できるだけ汎用性を持たせた関数を作るよう心がけるように
との事なので、悩んでいました。

配列のところはそのようにするつもりです。whileでまわして配列をハッシュに移すのに
途惑っていて流れが整理できなくなっていました。

家の環境ではすぐに試せないのですが皆さんいろいろアドバイスありがとうございます。
0105nobodyさん2005/10/20(木) 00:53:29ID:???
>>104
そんな時にはActivePerl+AnHTTPDのPerlCGI再現セットがお勧め。
0106992005/10/20(木) 01:20:15ID:???
ぐぐって試してみます。情報どうもです。
0107nobodyさん2005/10/20(木) 01:46:11ID:???
>>99
my @data;

open(IN, $file) or die $!;

(my $key = <IN>) =~ s/^#\s*|\n//g;
my @keys = split(/,/, $key);

for (<IN>) {
  chomp;
  local %_;
  @_{@keys} = split(/,/);
  push( @data, { %_ } );
}

close(IN);

---
結果、以下のように代入される。

@data = (
  { 'ID' => '0', 'NAME' => 'yamada', 'TEL' => '333', 'ADDRESS' => 'A32' },
  { 'ID' => '1', 'NAME' => 'tanaka', 'TEL' => '555', 'ADDRESS' => 'B22' }
);

アクセスは、
print $data[0]{NAME}; # yamada
print $data[1]{TEL}; # 555
0108nobodyさん2005/10/20(木) 02:51:02ID:???
> モジュールも使えないのでよりどうしたらいいのかわかりません。
と書いてあるのは分かってるが、あえてCPAN モジュール版を。CSVって、
カンマで区切ってるだけと思ってる人も多いけど、泥くさいフォーマットだよ。

use strict;
use warnings;

use IO::File;
use Text::CSV;

my $parser = Text::CSV->new();

my $in = IO::File->new('test.csv', 'r')
or die('test.csv: ' . $!);

(my $field_names_line = <$in>) =~ s/^#\s*//;
$parser->parse($field_names_line)
or die('field keys are not found');
my @field_names = $parser->fields();

my @list = ();

while (1) {
my $row = $parser->getline($in);
last unless 0 < @$row;

my %hash = ();
@hash{@field_names} = @$row;

push(@list, \%hash);
}
@list = (...>>107 と同じ内容...);
0109nobodyさん2005/10/20(木) 17:31:51ID:jR9yJZEc
質問です。
linuxサーバでパスワードの変更の際(passwdコマンド)に、
推測されやすいと判断をした場合、再入力を求めるようにするプログラムをperlで作る事は可能でしょうか?
可能な場合はどのような設置をすればよいのでしょうか?
0110nobodyさん2005/10/20(木) 19:47:09ID:???
>>109
単なる興味で聞くが、推測されやすいかどうかという判断を、どんな内容にする予定なの?
0111nobodyさん2005/10/20(木) 19:53:12ID:???
>>109
passwdコマンドにそのチェックをする機能を追加した
ようなものをperlで書いてもとのpasswdコマンドを
置き換えてしまうのが一番楽じゃないかと思われ。
0112nobodyさん2005/10/20(木) 20:01:43ID:???
>>111
そのようなものを >>109 が書けるか甚だ疑問な件。
0113nobodyさん2005/10/20(木) 20:31:40ID:???
>>109
可能。だが、その質問をしている時点で現在の>>109には敷居が高いだろう。

また、いくらシステム側で対処しても、
その手の脆弱性の根本部分はユーザーのセキュリティー意識にある。
「推測されにくいパスワードを使う」ことと教えてあげる方がよい。
0114nobodyさん2005/10/20(木) 20:45:15ID:jR9yJZEc
>>110
例えば、4桁未満は駄目とか、数字のみは駄目等です

>>112
それはpasswdコマンドを書き換えるのはどこを操作すればよいのでしょうか?
また、perlで無くてもっと簡単にかける方法は無いものでしょうか
(どのファイルをどのように書き換えたらよいか等)

>>113
全くその通りなんですけど、自分の今後の為にと思いまして。
01151102005/10/20(木) 20:59:52ID:???
>>114
> 例えば、4桁未満は駄目とか、数字のみは駄目等です

これって既に、生の passwd コマンドが実装している機能では?
同じ機能を Perl で再実装したいって思うのは自由だけどね。

とりあえず、passwd のマニュアルページとソースコードを読んでみることをお勧めします。
0116nobodyさん2005/10/20(木) 21:03:16ID:???
関係ないけど、 getpass() が欲しいことがよくある。
0117nobodyさん2005/10/20(木) 22:05:06ID:???
>>114
その質問レベルを見る限りではpasswdコマンドをどうこうしようとか
思う前に基本を勉強した方がよさそうだな...
0118nobodyさん2005/10/20(木) 22:29:24ID:???
>>117
同感
rootで動くためにはパーミッションに細工した上で実行時にIDを変えてやる必要があるが、
この方法を知らないようなレベルで作ろうとしてもセキュリティホールを作ってしまう危険の方が高いと思う…
0119992005/10/21(金) 00:50:33ID:???
質問なのですが>>107さんのソースを実行してみたところ
4つめのキーの部分が出てこないのはどうしてでしょうか?
少しソースを変えていますが、
スカラーで確かめてみるとハッシュのキーは4つ確保されているのにADDRESSの項目だけが
表示されません。よろしくお願いします。
0120nobodyさん2005/10/21(金) 01:18:14ID:???
>>119
>ハッシュのキーは4つ確保されているのに
じゃあそのキー名出してみ
01211192005/10/21(金) 01:28:01ID:???
表示は
print $data[3]->{ID};
print $data[3]->{NAME};
print $data[3]->{TEL};
print $data[3]->{ADDRESS};
のようにやっています。

4つ目のキーがうまくついていないのでしょうか。
0122nobodyさん2005/10/21(金) 01:35:25ID:???
>>121
たぶん改行コード。shift_jisで書いてない?
0123nobodyさん2005/10/21(金) 01:41:21ID:???
>>116
http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlfaq8.html#How_do_I_ask_the_user_for_a_pass

>>119-122
改行コードが原因なら

- (my $key = <IN>) =~ s/^#\s*|\n//g;
+ (my $key = <IN>) =~ s/^#\s*|\s*\z//g;

ASCII 互換なら文字コードは関係無い。
0124nobodyさん2005/10/21(金) 01:47:44ID:???
>>107のコードは>>99には難し過ぎやしないか?
結果を出すことよりも動作を理解するほうが先だと思うのだが。
0125nobodyさん2005/10/21(金) 01:59:13ID:???
いろいろありがとうございます。
改行コードかも知れません。最初の読み込みではずしてしまっているみたいなので。
いろいろ試してみます。
これとは別なcsvなのですがこちらの値は"yamada" のように"とタブでで区切っていていてこれを
=~ s/" //g;
ではずそうといろいろいじてるうちになってしまったみたいです。
こちらは今何とか自分で試行錯誤しています。
ありがとうございました。
0126nobodyさん2005/10/21(金) 02:39:27ID:???
>>123
修正サンクス。

あと、細かいけどこっちの方がよかった。展開が減るので。

-  push( @data, { %_ } );
+  push( @data, \%_ );

>>125
改行の取り扱い不足でした。sorry。

> これとは別なcsvなのですがこちらの値は"yamada" のように"とタブでで区切っていていてこれを
> =~ s/" //g;

tab 文字も \s でマッチするので

s/"\s*//g;

がおすすめ。
0127nobodyさん2005/10/21(金) 04:21:29ID:???
>>126
\%_ にするんだったら local %_; じゃないほうがよいのでわ。
Excelなら、クオーテーションは Perlメモ の CSV の項を読むといいと思う。
0128nobodyさん2005/10/21(金) 04:30:43ID:???
>>127
local $_ は単に global な %_ を壊さないようにしている
のだけど(このコードだと不要だけど)、
それ以外にデメリットってあります?
0129nobodyさん2005/10/21(金) 04:32:11ID:???
正:local %_ は
01301282005/10/21(金) 04:40:25ID:???
というか、>>107 の場合、local をつけないと、以前 push した
値を上書きしまいますね。


まぎらわしいので my 変数の方がいいのでは、ってことですね。
0131nobodyさん2005/10/21(金) 15:03:57ID:???
sousou
0132nobodyさん2005/10/21(金) 15:24:58ID:???
local %_ って名前を考えるのが面倒だっただけだろ?
0133nobodyさん2005/10/21(金) 17:35:12ID:???
しつもんです。
アンケイートをつくっているのですが、

【hoge.html1】
<FORM ACTION="hoge1.cgi" METHOD="post">→送信→log1
【hoge.html2】
<FORM ACTION="hoge2.cgi" METHOD="post">→送信→log2


【hoge.html1】
<FORM ACTION="hoge.cgi" METHOD="post">→次へ→この分をまずlog3へ
【hoge.html2】
<FORM ACTION="hoge.cgi" METHOD="post">→送信→log3→おわり

てしたいんだけど、(2つのフォームの内容繋げて一気に送ってlog残したい)
どんなソース書けばいいですか?




0134nobodyさん2005/10/21(金) 17:38:17ID:???
そこはかとなくスレ違いのような気がするがいかがか?

javascript でも勉強したら?
0135nobodyさん2005/10/21(金) 20:29:51ID:???
>>133
一意のIDをcookieか何かで発行する、いわゆる「セッション」を使うのが普通だが、
htmlで、と言われると困る。mod_rewriteでも使って誤魔化すか。
で、言語は何よ?
0136nobodyさん2005/10/21(金) 20:33:21ID:???
ああ、ここにいるからperlに決まってるのかorz 最後の一文はスルーしておいて
0137nobodyさん2005/10/21(金) 20:49:56ID:???

=~s/\Eアンケ(イ|ー)ト\Q/アンケ$1ト/g;
0138nobodyさん2005/10/21(金) 20:55:34ID:???
QとE逆だろw
0139nobodyさん2005/10/21(金) 21:01:40ID:???
それ以前にマッチしないじゃんw

>>133
元のhoge1.cgiとhoge2.cgiはコピーして2つにしただけでしょ?
1のクエリはすぐに処理せず
2のフォームのhiddenにでも入れておいたら?
0140nobodyさん2005/10/21(金) 21:03:44ID:???
たしか JSスレの最近の過去スレにあったぞ
0141nobodyさん2005/10/22(土) 15:11:53ID:m3HcshJv

フォームで入力後、WEBに以下のような感じでフィルに書き出すんですが


if(open(FILE,">>hogehoge.log")) {

$record .= $in{'name'}."\t";
$record .= $in{'kana'}."\t";

                     jcode::convert(\$record,'sjis');

print OFILE $record;
close(OFILE);

 

 name が空白でないかを書き込み前にチェックしたいのですが、うまく動きません。

以下の記述を入れるかと思いますが、どの行に入れたら動作するでしょう?

if ($FORM{'name'} eq "") { &errexit("お名前は必ず入力してください"); }

以下のエラーが出ます。

Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.
Please contact the server administrator, [no address given] and inform them of the time the error occurred, and anything you might have done that may have caused the error.

More information about this error may be available in the server error log.

よろしくお願いします。<(_ _)>
0142nobodyさん2005/10/22(土) 15:15:32ID:???
>>141
>>87
0143nobodyさん2005/10/22(土) 15:27:16ID:G1Q0Ugqh
OFILE なのか FILE なのかはっきりさせよう。
0144nobodyさん2005/10/22(土) 15:33:15ID:m3HcshJv
>>142

エラー行が表示されました。ありがとうございます。<(_ _)>

>>143

OFILE と FILE の違いがよくわかっておりません。 ご教授下さい <(_ _)>
0145nobodyさん2005/10/22(土) 15:35:19ID:m3HcshJv
>>142

Undefined subroutine &main::errexit called at /virtual/hogehoge.cgi line 18.


追記した↓この行があかんみたいです 
if ($FORM{'name'} eq "") { &errexit("お名前は必ず入力してください"); }


0146nobodyさん2005/10/22(土) 15:43:00ID:???
perlによるプログラミングを始めたところです。
知識レベルとしては、Cで普通にプログラムは書けますが、
perlは本当に始めたばかりです。

<質問事項>
基本の基本ということで以下のコードを書いたのですが
画面上に何も表示されません。(エラー等も表示されません)
printは画面(標準出力)に文字列を表示させると思っています。
コードもしくは認識に誤りがあるのでしょうか?

<コード>
■test.cgi
#!/usr/bin/perl

print "Program start\n";
print "Program end\n";

■実行方法
./test.cgi
■ファイルの属性
-rwxrwxrwx 1 root www 129 10月 22 15:37 test.cgi
■whichの結果
which perl
/usr/bin/perl
0147nobodyさん2005/10/22(土) 15:54:11ID:???
> 知識レベルとしては、Cで普通にプログラムは書けますが、
・・・
0148nobodyさん2005/10/22(土) 15:55:01ID:???
>>145
3行目に以下を追加。

sub errexit { print "\n", @_; exit; }
0149nobodyさん2005/10/22(土) 15:55:58ID:???
>>146
CGIでの Hello World レベルくらい調べろよ。
0150nobodyさん2005/10/22(土) 15:56:02ID:???
>>146
2行目に以下を追加。

print "\n";
0151nobodyさん2005/10/22(土) 16:01:09ID:???
>>146
/usr/bin/perl ←これがすぐに終了して何も返さないスクリプトに入れ替えられてる
0152nobodyさん2005/10/22(土) 16:04:32ID:m3HcshJv
>>148

ご指導ありがとうございます。

文字列が入ってても以下のメッセージが表示されます。

「お名前は必ず入力してください。」
0153nobodyさん2005/10/22(土) 16:10:34ID:???
>>152
問題が再現する最短のコードを載せるべし。
0154nobodyさん2005/10/22(土) 16:14:10ID:m3HcshJv
>>153 すいません。

#!/usr/bin/perl
use CGI::Carp qw(fatalsToBrowser);
sub errexit { print "\n", @_; exit; }

require "cgi-lib.pl";
require "jcode.pl";

if ($FORM{'name'} eq "") { &errexit("お名前は必ず入力してください。"); }

if(open(OFILE,">>hogehoge.log")) {

$record .= $in{'name'}."\t";
print OFILE $record;
close(OFILE);

#フォームの表示

print "Content-type: text/html\n\n";
print qq!
<HTML>
<HEAD>



0155nobodyさん2005/10/22(土) 16:17:36ID:JX8EwRu8
perlで質問です、よろしくお願いします。

「AAA AAAA」と「BBBBBBB」というデータを保存する際にスペースで区切ったために
「AAA\ AAAA BBBBBBB」のようにデータ上のスペースの前には\を置いて保存されています、
またデータ上の\は\\で保存されています。
これを読み出すための簡約化された手順がありましたら教えてください。
とりあえずデータ上で9文字目が区切りであることを検出できればいいです。

それとも、フォーマットについてもっとこうするべきだというものありましたら
いまからでも変更の余地がありますので提案お願いします。
0156nobodyさん2005/10/22(土) 16:20:06ID:m3HcshJv
>>153

if ($FORM{'name'} eq "") { &errexit("お名前は必ず入力してください。"); }

↑この行を省くと動作するのですが、空白でも post してしまいますので。
0157nobodyさん2005/10/22(土) 16:22:39ID:???
>9文字目が区切りである

固定長なら \ でエスケープする必要ないんじゃ?
0158nobodyさん2005/10/22(土) 16:28:45ID:???
>>154
$in{"name"}
$FORM{"name"}
これはどこで取得してるんだ?
0159nobodyさん2005/10/22(土) 16:34:17ID:m3HcshJv
>>158 すいません。

<HTML>以下のフォームにて取得してます。

<FORM ACTION="hogehoge1.cgi" METHOD="post" name="FORM" id="FORM">



<td colspan="2" nowrap><font size="3">ご氏名</font></td>
<td height="25"><input type="text" name="name" style="ime-mode: auto;" size="30">
</td> </tr>

0160nobodyさん2005/10/22(土) 16:35:29ID:???
>>159
それは渡す方だろ。
受け取る方の話。
0161nobodyさん2005/10/22(土) 16:41:24ID:m3HcshJv
>>160 すいません。

FORM ACTION で name に入力された文字が代入されて

$record .= $in{'name'}."\t";

のところで タブ入りで record に渡されて

hogehoge.log ファイルに書き込むのと違うのですか?
0162nobodyさん2005/10/22(土) 16:44:35ID:JX8EwRu8
>>157
9文字の固定長ではありません。
サンプルに対して取得したいデータが9であるという、あくまでも例です。

やはり自分で1文字ずつ検証して作るしかないでしょうか?
0163nobodyさん2005/10/22(土) 16:47:54ID:???
>>161
えーっとだ。
>>152でHTMLから送信してもエラーが出ちゃうと言う問題だろ?
書き込むとかどうでもよい。
受け取りができてないのよ。
cgi-lib.pl使ってるみたいだから↓読んで。
http://www.futomi.com/lecture/form/cgilib.html
0164nobodyさん2005/10/22(土) 16:48:31ID:???
>>162
区切り文字変えるのが早い。
0165nobodyさん2005/10/22(土) 17:05:01ID:m3HcshJv
>>163 参照URL迄、すいません。

以下の感じでよろしいんでしょうか?


my %input;
&ReadParse(\%input);

$YourName = $input{'name'};

if ($FORM{'YourName'} eq "") { &errexit("お名前は必ず入力してください。"); }
0166nobodyさん2005/10/22(土) 17:05:32ID:???
>>154 の頭の中では $FORM{'name'} と $in{'name'}. が同じなのかな。
0167nobodyさん2005/10/22(土) 17:06:19ID:???
>>165
こいつすげえ・・・。
0168nobodyさん2005/10/22(土) 17:09:47ID:???
>>165
違う。

my %input;
&ReadParse(\%input);
if ($input{'name'} eq "") { &errexit("お名前は必ず入力してください。"); }
--以下保存処理

あと、試してから聞きなさい。
0169nobodyさん2005/10/22(土) 17:25:59ID:???
そろそろ釣り宣言
0170nobodyさん2005/10/22(土) 17:30:16ID:m3HcshJv
>>168 ありがとうございます。

入力文字があっても 以下のメッセが表示されます。(・_・、)

"お名前は必ず入力してください。"
0171nobodyさん2005/10/22(土) 17:38:30ID:???
>>170
変数に何が入ってるかわからんのなら、printしてみようね。
あと、めんどいからどっかにCGIプログラムとHTMLのソースうpしる。
0172nobodyさん2005/10/22(土) 17:47:29ID:???
一度ReadParseしないで書いてみては。勉強になるし。
0173nobodyさん2005/10/22(土) 18:02:37ID:m3HcshJv
>>171 すいません、よろしくお願いします。

http://other.free-uploader.com/up/

hoge_1.cgi です。
0174nobodyさん2005/10/22(土) 18:07:29ID:???
>>173
Passがかかってて落とせません。
0175nobodyさん2005/10/22(土) 18:14:20ID:m3HcshJv
>>174

たびたび、すいません。

0123
0176nobodyさん2005/10/22(土) 18:18:44ID:???
&ReadParse;
if (!$in{'name'}) { &errexit("お名前は必ず入力してください。"); }
0177nobodyさん2005/10/22(土) 18:19:41ID:???
&ReadParse 呼ぶのは1度だけ
0178nobodyさん2005/10/22(土) 18:27:02ID:vPMo38wN
これftpソフトで落としたいんですけど、user名とpassのところには何を入力すればいいんですか?
http://allabout.co.jp/career/cgiperl/closeup/CU20040805A/index4.htm
0179nobodyさん2005/10/22(土) 18:30:55ID:???
>>178
anonymous と きみのメルアド
0180nobodyさん2005/10/22(土) 18:36:12ID:m3HcshJv
>>177 解析ありがとうございます。

ひとつを消したんですが、結果は

>>170 と同じです。 (×_×)
01811782005/10/22(土) 18:39:17ID:???
http://lavender.system.nitech.ac.jp/comp/pea/pea-004.htm見ていくらやってもうまくいかなかったんですが、
うまくいきました
ありがとうございました
0182nobodyさん2005/10/22(土) 18:41:13ID:???
member_1.cgi と hoge_1.cgi は別もの?おなじもの?
hoge.tmpl も見当たらないし。

in っていう名前の hash と input っていう名前の hash が存在してるようだけど、
タイプミスかな?意味があって別な変数名にしてるのかな?

0183nobodyさん2005/10/22(土) 18:42:05ID:???
>>180

my %input;
&ReadParse(\%input);
if ($input{'name'} eq "") { &errexit("お名前は必ず入力してください。!"); }



if ($in{'name'} eq "") { &errexit("お名前は必ず入力してください。!"); }
0184nobodyさん2005/10/22(土) 18:43:36ID:???
つか 最初の &ReadParse; の後に↑を書け。
open FILE の中だと、ファイルが開いたまま終わることになるぞ。今はいいとしても。
0185nobodyさん2005/10/22(土) 18:46:02ID:???
あと
print qq!
 ソース
!;

じゃなくてヒアドキュメントを使え。

print <<__EOT__;
 ソース中に ! をひとつでも書いたらそこで終了しちゃうだろ危うすぎ。
__EOT__
0186nobodyさん2005/10/22(土) 19:27:42ID:???
>>183
おいおい
0187nobodyさん2005/10/22(土) 19:31:38ID:m3HcshJv
>>186

すいません、レスが遅れまして

うまくいったと思って、 名前以外に電話番号とメールもチェックをして・・・
って やったら、
お名前は必ず入力してください。!

になりました。(・_・、)
0188nobodyさん2005/10/22(土) 19:55:02ID:???
そうですか。
0189nobodyさん2005/10/22(土) 20:00:34ID:???
釣り相手にいくつのレスを使うつもりだおまいら
0190nobodyさん2005/10/22(土) 20:06:29ID:m3HcshJv
>>188  ほんとうにすいません。

結局うまく、行きません。

別ファイルでもいいので、他に良い方法ないでしょうか?
0191nobodyさん2005/10/22(土) 20:14:21ID:???
> 他に良い方法
いちからべんきょうしなおす
0192nobodyさん2005/10/22(土) 20:28:02ID:???
>>191 今まで、レスして頂いた 神様、

解決いたしました。

&ReadParse;
のすぐ下ではなくて、if(open(OFILE," の前の行に
貼り付けたら、いけました。

スレ汚し、すんませんでした。 <(_ _)>
0193nobodyさん2005/10/22(土) 20:44:35ID:???
たとえば大文字と小文字が混雑している・・・
---test<DIR>----
AfIlE
bFiLe
----------------
というファイルがあるディレクトリがあるとき、
$file = "afile";
open(IN,$file);
〜〜略〜〜
というような形で、大文字小文字関係なくファイルを指定したいのですがどのような方法を使えばよいでしょうか?
0194nobodyさん2005/10/22(土) 20:55:29ID:???
readdir とか glob とかでファイル読んでから正規表現でマッチさせて正しいファイル名を出すとか。
0195nobodyさん2005/10/22(土) 20:56:04ID:???
%files = map {lc($_) => $_} glob '*';
open(IN,$files{'afile'});
ハッシュを使ってこんな感じとか。
0196nobodyさん2005/10/23(日) 03:47:54ID:???
>>193
ファイル名が case sensitive なシステムでは AfIlE と aFiLe が
混在可能なので、afile と指定した時にどちらを指すのか判別
できない。よって正しく AfIlE と指定するか、実際のファイル名の
方を小文字に正規化した方が余計なハマり処を減らす事ができる。

ファイル名が case insensitive なシステムでは AfIlE と afile が
同じファイルを指すので、AfIlE を open する時でも afile と指定
できる。よってプログラム側では正確なファイル名を気にせず
全部小文字で指定してもよい。

それでも尚「大文字小文字関係なくファイルを指定したい」なら、
>>195 のように実際のファイル名と正規化したファイル名の
対応表を作る事になる。
0197nobodyさん2005/10/23(日) 11:32:59ID:???
>>194-196
了解しました。ファイル名のシステムはよく分かっていないため、>>195さんのような方法をとることにします。
ありがとうございました。
0198nobodyさん2005/10/23(日) 15:14:57ID:DuuvQiFd
Perl初心者です。
Perlでファイルを読み込む場合は open を使うと思うのですが
外部のファイルを読み込む(http経由)ときはどうすればよいですか?

例えばlinuxでいうと wget なんかは、外部ファイル(実行結果)を取得するのには最適ですよね。

perlだと 内部のindex.cgiをopenするとプログラム内容までもってきちゃいます。あたりまえですがね。

index.cgiの実行結果のみ持ってきたいので、http経由でopenできればとか思っているのですが。

wget http://www.yahoo.co.jp/

と同じようなことが出来るコマンドありませんか。
わかりにくい説明で申し訳ないんですが、要は実行結果部分のみ読み込みたいです。
ちなみにsystemコマンドでwgetという方法はなしで。
0199nobodyさん2005/10/23(日) 15:29:28ID:???
>>198
LWPでググって見れ
0200nobodyさん2005/10/23(日) 15:29:44ID:???
>>198
おれの勘ではモジュールを使うとできる。
0201nobodyさん2005/10/23(日) 16:49:13ID:???
>>198
http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlfaq9.html#How_do_I_fetch_an_HTML_file_
0202nobodyさん2005/10/23(日) 17:54:02ID:GDjLAzvg
>>198
wgetを使って、そのまま内容を得ることもできる。
02032022005/10/23(日) 17:57:42ID:???
↑みすった。wget使わないでね。
socketでやるとモジュール無しでもいける。ヒント↓
socket(S, 2, 1, 0);
connect(S, $name);
binmode(S);
select(S); $| = 1;
select(STDOUT); $| = 1;
print S "GET $dir HTTP/1.0\r\n";
print S "Host: $host\r\n";
print S "\r\n";
while(<S>){}
close(S);
0204nobodyさん2005/10/24(月) 09:55:17ID:???
LWP使えよ...
0205nobodyさん2005/10/24(月) 10:32:04ID:???
>>202-203
こういう奴らが糞みたいな CGI を量産するんですね。
0206nobodyさん2005/10/24(月) 13:18:15ID:???
>>205
おまいもマシなコードを量産しろ。
0207nobodyさん2005/10/24(月) 13:46:58ID:???
(HTMLを取得するときにUAをLWPやらなんちゃらUSERAGENTモジュールを使って指定したくても何故かエラーがでて方法が分からない俺。)
0208nobodyさん2005/10/24(月) 15:28:55ID:???
たまに、>>203みたいにエラーチェックを全くしない人がいるんだけど、
どういう理由でエラーチェックしないの?
0209nobodyさん2005/10/24(月) 16:19:03ID:???
サンプルコードで、エラーチェックを入れるとポイントがわかりづらくなるときとか。
0210mona2005/10/24(月) 16:40:28ID:???
かなり悩んでいます。どうかご教授くださいm(__)m 当方、CGIで掲示板を組んでおりまして

◎ファイル構造
・main.cgi(掲示板のトップページ、フォームあり)
・confirm.cgi(書き込み内容確認)
・regist.cgi(書き込み専用 HTMLによる出力はなし)
・finish.cgi(書き込み完了ページ)
・value.pl(独自に作成した変数、サブルーチンのセット)
・jcode.pl
・cgi-lib.pl
・log.cgi(ログファイル)

@main.cgi→ main.cgiのフォームに入力した後、送信ボタン(submit)でPOST送信
Aconfirm.cgi→ main.cgiから$ENV{'CONTENT_LENGTH'}で値を受け取ってsplitで各変数にばらし、
 [この内容で書き込みボタン]が押されたら、それをまたPOST送信でhiddenで1つずつ送信。
Bregist.cgi→ confirmからきた値をAと同じように$ENV{'CONTENT_LENGTH'}で受け取って
 splitでばらし、各変数に値を格納、時刻の取得、トリップ処理、フィルタリング処理(\n\r→<br>など)をした後、
 ログファイルからデータを読みこんで(それまでのデータを読み込んで、すべてを上書きする形を
とっていますので・・)ログファイル書き込み。そのあと、すぐにfinish.cgiへロケーションヘッダで飛ばす。
Cfinish.cgi→ 書き込み完了しました画面が出るので、掲示板へ戻るリンクをクリック。
Dmain.cgi 最初の掲示板に戻ってきます。

という流れなのですが、不明な点が2つありまして、

続く
0211mona2005/10/24(月) 16:41:31ID:???
まず1つ目は
例えば、@で改行を含む、本文を

あいうえお
かきくけこ

と、フォームに入力して送信した場合に、
confirm.cgiの内容確認で同様に

あいうえお
かきくけこ

と、改行して表示してほしいのですが、うまくいきません。confirm.cgiで画面出力する前に、&data_filter($message); などとすると
書き込むリンクのとなりへ

  かきくけこ
>

などと出力されてしまうのです。そしてそれを書き込んでmain,cgiで見た結果は

無題  New!
名前: 名無し 投稿日: 2005/10/24 (月) 16:15:11

あいうえお<br

です。もちろん改行はされていませんorz

つづく
0212mona2005/10/24(月) 16:42:35ID:???
データの受け渡しに問題があると思うのですが、うまく改行する方法をご教授ください;

2つ目は、トリップ機能を使って

名前欄に モナー#1234と入力した場合に、 名前: モナー「。tr.t4dJfuU のように文字化けを起こしてしまうのです。
トリップ部分はきちんと10桁 表示されているので、#の部分で不具合が起きているのだとは思いますが・・。

ちなみに、mona-#1234 などと、アルファベットで入力すると、きちんとmona-◆tr.t4dJfuU のように
出力されます。でもひらがな、カタカナ、アルファベット、どの場合の入力でも
◆を◇には置換してくれません。。この機能、ちゃんと動いたんですが…(1つのCGIで入力&出力してたときは)
なので、この#の文字化け&◆→◇の処理がうまくいかない理由を、教えてくださいorz

以下、ソースです。

main.cgi
ttp://imbbs1.net4u.org/1/sr3_bbss/4874isimin/65_1.txt
confirm.cgi
ttp://imbbs1.net4u.org/1/sr3_bbss/4874isimin/66_1.txt
regist.cgi
ttp://imbbs1.net4u.org/1/sr3_bbss/4874isimin/67_1.txt
finish.cgi
ttp://imbbs1.net4u.org/1/sr3_bbss/4874isimin/68_1.txt
value.pl
ttp://imbbs1.net4u.org/1/sr3_bbss/4874isimin/69_1.txt
0213nobodyさん2005/10/24(月) 17:05:43ID:???
>>208
長くなるんで必要なところだけ出したんですけど・・・
0214nobodyさん2005/10/24(月) 17:11:26ID:???
>>205
では、socket使ったまともなコードを要約して教えて下せー。
0215nobodyさん2005/10/24(月) 18:31:56ID:???
>>212
ソースを見たところ、日本語を扱うにあたって、注意を払っている
形跡が何も見当たらない。ここでも読んで、勉強してください。その上で
解らないことを質問するといいでしょう。

http://www.lr.pi.titech.ac.jp/~abekawa/perl/perl_unicode.html
0216mona2005/10/24(月) 19:34:09ID:???
>>215

ありがとうございます。

ちょっと勉強しますorz
0217nobodyさん2005/10/24(月) 19:55:08ID:???
mona さんへ。

form から post されてくるデータを、&で split するとか、
それをさらに = でsplit するという処理を自分で書いてるけど、
それをやってもらうために cgi-lib.pl を require してるんじゃないのかい?

あ、ReadParse を使ってるところもあるね。。うーん、混乱してる。w
0218nobodyさん2005/10/24(月) 20:05:43ID:???
>>213-214
エラーチェックも「必要なところ」だという意識の欠落を
指摘されているんだと思うよ。

LWP を使わず自前で HTTP を喋るにしても、最低でも
Socket.pm を使って定数のハードコーディングを避けるべきだろう。
それ以上は趣味の世界で人に勧めるものじゃないよ。
http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlipc.html#Internet_TCP_Clients_and_Servers

Socket.pm すら用意されていないような環境に対応する必要は無い。
それは管理者がやってほしくなくて故意に削除してあるのだから。

>>217
>>55
0219nobodyさん2005/10/24(月) 20:32:46ID:???
ハードコーディングな方が多いこと・・・もっとファジーに生きましょう。
0220nobodyさん2005/10/24(月) 21:37:24ID:t9lvkN6w
すいませんどなたか助けて下さい
ダイス機能のついてるCGIとして
KENTWEBさんのPONNY CHATを再配布されてるサイトさんから
DLさせてもらって、ちょっとチャットを作りたいのですが

↓スクリプトをいただいてきたところ
http://www.big.or.jp/~t-shun/trpg/trpg_cgi/dicechat/dchat03.html』

↓自分で作りかけのチャット
http://firemind.maxs.jp/reidai/index.html

↓dicechat.cgiの中身(メモ帳にコピーしたもの)
http://firemind.maxs.jp/reidai/1.txt

よくメールアドレス欄を改造してPBCとかだとキャラクターのプロフィールを入れたり
普通のチャットだと今日の気分とかを入力したりするようにしたいのですが
初心者系のネット講座を見てもいまいち理解できませんでした
似たようなスクリプトを配布しているところがあったので応用できないかと思ったのですが
やはりエラーが出てしまいました
もしよろしければアドバイスをお願いします、
そうでなければ良いアドバイスのサイト、もしくは書籍を教えて下さい
素人の書き込みですいません
0221nobodyさん2005/10/24(月) 21:46:06ID:???
[ ]で囲まれた単語をURLエンコードするには
どう書けばよいでしょうか。初歩的ですいません
0222nobodyさん2005/10/24(月) 22:18:02ID:???
>>221

use CGI::Enurl;

$string =~ s/\[((.)+?)\]/[enurl($1)]/eg;

これでどう?
確認してないけど。
0223nobodyさん2005/10/24(月) 22:19:54ID:???
>>221
ごめん間違えた。

use CGI::Enurl;

$string =~ s/\[((.)+?)\]/"[".enurl($1)."]"/eg;


print $string;
02242202005/10/24(月) 22:28:03ID:???
すいません、スクリプト改造スレを見つけました
板違な事を書き込みまして申し訳ありませんでしたスルーして下さい(平伏)
0225992005/10/24(月) 23:45:35ID:???
たびたびで申し訳ないですが、以前教えていただいたCSVからのハッシュへの読み出しですが、
ハッシュに入れたものを指定した値を書き換えて別なCSVに出力するにはどうしたらいいのでしょうか。

CSVの中身
ID,NAME,ADDRESS,TEL
0,yamada,A32,333
1,tanaka,B22,555

sub write{
@arr;
open (IN, "+<$file")or die "$!";
#キー作成
(my $key = <IN>) =~ s/^\s*|\s*\z//g;
my @keys = split(/\t/,$key);
#ハッシュ代入
for(my %hash = <IN>){
chomp %hash;
chop;
@hash{@keys} = split(/\t/);
push( @arr, {%hash});
}
でprint $arr[13]->{ID};  print $arr[1]->{NAME};
のように関連付けて扱えるようになったのですが
$arr[2]->{ID} =~ s/$arr[2]->{ID}/5/;
で置き換えをしたものをCSVに入れることが出来ません。
foreach my $buff(@arr){
  print OUT "$buff\t";
}
では無理でこんがらがってしまいました。
アドバイスをお願いします。
0226nobodyさん2005/10/25(火) 00:03:26ID:???
> たびたびで申し訳ないですが、
そう思うんだったらちょっとは自分で考えろよ。
基本的なアルゴリズムも分からないんだったら出直してこい。
0227nobodyさん2005/10/25(火) 00:36:09ID:???
Perlコーティングは無関係ですが無償でexe化する方法(コンパイラ)は存在しますか?
0228nobodyさん2005/10/25(火) 00:38:46ID:???
>>227
perlcc
0229nobodyさん2005/10/25(火) 02:36:58ID:???
>>225
前から思ってたんだけど、それ宿題か何か?
0230mona2005/10/25(火) 09:26:27ID:???
>>217

そうです、今まではすべて、cgi-libのReadParseで事を、済ませていたのですが
ReadParse使わなくてもできるようにしておいたほうがいいかなということで
処理を自分で書いています。まだ残ってるReadParseは、その名残です。。
書き換え忘れというか・・・orz

にしても、いまだ正常に動きません…。
02312252005/10/25(火) 09:37:32ID:???
はいそうです。課題なんですが、どんどん機能を追加していくので。
ロジックが詰まってどうしたら良いのか進まなくなってしまいます。
発想の転換がうまくできないもので。
すいません
0232nobodyさん2005/10/25(火) 09:56:41ID:???
>>231
答えを聞いてばかりでは勉強にならないよ。
テキスト読むなり、自分で調べるべし。
0233nobodyさん2005/10/25(火) 10:21:14ID:???

会員認証ごとの認証をおこなった後にその認証情報に基づいたページを作る場合、クッキーを利用する方法と、都度HIDDENで情報をひっぱる方法のどちらが良いのでしょうか?
ちなみに、携帯でもアクセスする可能性が大なサイトを作ろうと思っています。
やっぱりHIDDENの方が無難なのでしょうか?
0234nobodyさん2005/10/25(火) 10:59:58ID:???
>>233
携帯だとそもそもクッキーをサポートしてない方が多かったと思う。
0235nobodyさん2005/10/25(火) 12:12:56ID:???
>>231
課題は自分でやれ。
ここ自助努力をサポートする場所であって、お前の家庭教師じゃないよ。

>>233
携帯は Cookie 使えん機種が多いので NG。セッション管理を Web アプリ側で
行なって、セッション ID を Cookie ではなく type="hidden" で引っ張るのが吉。
0236nobodyさん2005/10/25(火) 15:43:33ID:???
すみません。引数でhtmlのファイル名を指定し、そのhtmlを読み込んで表示する、
というCGIを作ろうとして、下記のようなものを作ってみました。

#!/usr/bin/perl -w
use CGI;
use CGI::Carp qw(fatalsToBrowser);
my ($form, $ht, $datafile, $data_line, $dir);
$dir = './test';
$form = new CGI;
print "Content-Type: text/plain; charset = shift_jis\n\n";
$ht = $form->param('ht');
$datafile = $dir."/".$ht."html";
open(FH, $datafile);
@list = <FH>;
foreach $data_line( @list ) {
print $data_line;
}
close (FH);

これを実行してhtmlを表示しようとしたのですが、うまく表示されません。
できましたら修正のヒントを教えてもらえますでしょうか?
0237nobodyさん2005/10/25(火) 15:53:37ID:???
>>236
>>1
0238nobodyさん2005/10/25(火) 15:56:07ID:???
>>236
せっかく fatalsToBrowser 使ってるんだから、せめて
openのエラーはチェックしろよ。

open(FH, $datafile) or die "cannot open $datafile: $!";

ぐらいでいいからさ。
02392362005/10/25(火) 16:16:12ID:???
>>238
openのエラーチェックしたら、見事にミスってました。

$datafile = $dir."/".$ht."html";

のところで拡張子のピリオド付け忘れてました_| ̄|○

修正したら無事表示されました。

ありがとうございました。
0240nobodyさん2005/10/25(火) 18:33:41ID:???
>>239
http://www.ipa.go.jp/security/awareness/vendor/programming/a04_01.html
0241nobodyさん2005/10/25(火) 20:18:09ID:acj/FLSv
以下は、プログラムの内容をcat して、プログラムに読ませるデータファイルをhexdump して、
実際にプログラム test.pl を実行している様子です。
なぜ、ファイル data の最後の行が表示されてしまうのでしょうか。
最後の行の末尾には改行文字がないので、最後の行(内容は一文字のゼロ)を $line に読み込んだ直後に、
while を抜けるはずだと予測したのですが。

%cat test.pl
#! /usr/local/bin/perl
while ($line = <>) {
print $line;
}
%hexdump -C data
00000000 33 0a 32 0a 31 0a 30 |3.2.1.0|
00000007
%./test.pl < data
3
2
1
0

# 最後の行に改行文字を持たないファイルは、truncate コマンドを使って作成しました。
0242nobodyさん2005/10/25(火) 20:43:30ID:???
>>241
perldoc perlop を見るとわかると思うけど、
while ($line = <>) { } は while (defined($line = <>)) { } と等価なので。
0243nobodyさん2005/10/26(水) 03:47:32ID:WCtFX3bD
画像掲示板を作ろうとしているのですが、
一度アップした画像を、最大記事件数を超えた時点で削除する
プログラムを書いていたのですが、どうしてもうまくいきません。

一個一個の記事に、画像のアドレスが$file_nameとして入っていて、
if($file_name ne ''){ push (@img_dels , "./img/$file_name"); }
で、最大記事件数を超えた分の記事に付いている画像のアドレスを配列に入れて、
unlink @img_dels;
としても、きちんと画像が削除されません。

if(-e )を使って調べてみると、
./img/$file_nameでは、存在しないことになっており、
一方、./img/2005001.jpgというように、具体的な値をプログラム内に入れれば
問題なく削除できるのです。

つまり、変数$file_nameを使っているとうまく作動せず、
その変数の部分を、何か具体的なファイル名を入れてみると、
きちんと動作するのです。

なので、パーミッションの問題ではないかと思うのですが、
他にどういった点が怪しいのでしょうか?

以上、よろしくお願いいたします。
0244殿ツーNGNG
導入法がわからんとです
どなたかお力添えくださればうれしいとです
まずなにをインストールすればいいとですか??
0245nobodyさん2005/10/26(水) 04:58:25ID:???
>>243
$file_name にファイル名以外の文字が入ってたりとか足り無かったりとかくらいしか思いつかないな。
0246nobodyさん2005/10/26(水) 07:33:22ID:???
どうせ改行コードとか入ってるんだろ?
0247nobodyさん2005/10/26(水) 10:42:10ID:???
>>244
>>7
http://www.site-cooler.com/kwl/perl/environment.htm
0248nobodyさん2005/10/26(水) 11:59:37ID:???
>>243
おかしいと思う部分の変数をprintしてみる。
基本でしょ。
0249nobodyさん2005/10/26(水) 14:39:04ID:???
元データは
1<>あああ<>
2<>いいい<>
3<>ううう<>

@testに上記データの読込
$hikakuに比較する変数
$bbb_newは$aaaが合致した場合に入れる

foreach (@test) {
    ($aaa,$bbb) = split(/<>/);
    if ($hikaku eq $aaa){
        push(@test_new,"$aaa,$bbb_new");
    } else {
        push(@test_new,"$aaa,$bbb");
    }
}

全上書きで@test_newをデータ書き込み

こんな感じで、要はデータ修正用のものを組んでみたのですがなぜかこれを走らせる都度先頭に半角スペースが入ってしまいます。

1<>あああ<>
 2<>いいい<>
 3<>ううう<>

なぜなんでしょうか?
0250nobodyさん2005/10/26(水) 15:01:26ID:???
>>249
もしかして出力処理で
print "@test_new"
とかダブルクォーテーションで括ったりしてない?
0251nobodyさん2005/10/26(水) 15:03:54ID:???
改行コード間違えてんじゃね?
走らせるって@test_newをprintするとってことか?

そもそも

push(@test_new,"$aaa,$bbb_new");



push(@test_new,"$aaa<>$bbb_new");

にしたいんじゃないかと
02522492005/10/26(水) 15:11:27ID:???
>>250
>>251
すいません。カキコ時ミスでした。
そうです。
push(@test_new,"$aaa<>$bbb_new<>\n");
です。

保存時は
&Memory2($dataname,"@test_new");

…とし、保存時流用のため、サブに飛ばしています。
そのサブは以下のようにしています。

sub Memory2 {
    local ($param) = @_[0];
    local (@param2) = @_[1];

    open(OUT, "> $param");
    print(OUT @param2);
    close(OUT);
    chmod(0666,$param);
}
0253nobodyさん2005/10/26(水) 15:13:11ID:???
…お前何の本見ながら勉強してんの?
0254nobodyさん2005/10/26(水) 15:28:49ID:???
>>252
> &Memory2($dataname,"@test_new");
                ~~~~~~~~~~~~~
しっかり括ってるじゃないか・・・原因はこれ
ダブルクォーテーションで括った場合の配列変数の展開は以下と同等
join(@array, $")
$"のデフォルト値は半角スペースだからこういうことになる。

&Memory2($dataname,@test_new);
とすればよい
02552542005/10/26(水) 15:30:08ID:???
うへ、joinの引数順間違えた
join($", @array)
が正解
02562492005/10/26(水) 16:01:49ID:???
>>254
&Memory2($dataname,@test_new);
…とすると1行目の変数しか書き込まなかったので、ダブルクォーテーションを付けていました。

サブに飛ばさず、
open(OUT, "> $dataname");
print(OUT @test_new);
close(OUT);
…とすれば、半角スペース問題が解決しました。

本当にありがとうございました!!
0257nobodyさん2005/10/26(水) 16:12:14ID:???
>>256
ああ、スマソサブルーチンのほうをよく読んでなかった。こっちも間違ってるな
local ($param) = shift @_;
local (@param2) = @_;
とか
local ($param) = @_[0];
local (@param2) = @_[1..$#_];
とかにしないと。
でも、いまさらlocalは古いと思うが・・・
Perl4にも対応しなくてはならないということでなければmyを使うのがお勧め
my $param = shift;
my @param2 = @_;
02582492005/10/26(水) 16:22:44ID:???
>>257
ほんと、重ね重ねありがとうございます。
無事、サブルーチンに渡してもうまくいくようになりました!!
0259nobodyさん2005/10/26(水) 18:29:58ID:???
ファイルから探さずに、ディレクトリ読めばいいだけじゃないの?
0260nobodyさん2005/10/27(木) 18:26:04ID:MmBYG7yb
すいません。
@flagの中に一つでも1があったら
1を返したいのですがよい方法があったら教えていただけないでしょうか?
今の所
if(@flag == 1 && $flag[0] == 1){
return 1;
}elsif(@flag == 2 && $flag[0] == 1&& $flag[1] == 1){
return 1;
}elsif(@flag == 3 && $flag[0] == 1&& $flag[1] == 1&& $flag[2] == 1){
return 1;
}elsif(@flag == 4 && $flag[0] == 1&& $flag[1] == 1&& $flag[2] == 1&& $flag[3] == 1){
return 1;
}elsif(@flag == 5 && $flag[0] == 1&& $flag[1] == 1&& $flag[2] == 1&& $flag[3] == 1&& $flag[4] == 1){
return 1;
}else{
return 0;
}
とやっているのですが不恰好なので。
0261260 2005/10/27(木) 18:29:10ID:MmBYG7yb
あ、、、すいません。
>@flagの中に一つでも1があったら
じゃなくて@flagの中全部1だったらです。
0262nobodyさん2005/10/27(木) 18:44:52ID:???
>>260-261
http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlfaq4.html#How_can_I_tell_whether_an_list_o

sub check {
  $_ == 1 || return 0 for @_;
  1;
}

print check(@flag) ? 'OK' : 'NG';
0263nobodyさん2005/10/27(木) 19:43:10ID:???
return @flag == grep($_ == 1, @flag) ? 1 : 0;
0264nobodyさん2005/10/27(木) 19:50:18ID:???
>>263
それも思い付いたけど、@flag が (1, 1, 1, ..., 1) とかだと遅い。
0265nobodyさん2005/10/28(金) 01:41:57ID:bf2gwUIh
foreach (@flag) {
 /(^0^)/;
 /(f^_^)/;
}
0266nobodyさん2005/10/28(金) 01:54:14ID:???
orz=3;
0267nobodyさん2005/10/28(金) 06:37:45ID:OMxdiAJ2
>>260
foreach (@flag){
 if($_ == 1){ return 1; }
}
じゃ駄目?

>>257
my($param, @param2) = @_;
ってやっちゃ駄目ですか?
自分のスクリプトではこうやって渡しちゃってるんですが・・・
0268nobodyさん2005/10/28(金) 06:48:30ID:zLDMG+JK
>261
sub flagcheck{
  my(@flag) = @_;
  foreach (@flag){ if(!$_){ return 0; }}
  return 1;
}
0269nobodyさん2005/10/28(金) 06:49:19ID:zLDMG+JK
sub flagcheck{
  foreach (@_){ if(!$_){ return 0; }}
  return 1;
}
これでよかったか
0270nobodyさん2005/10/28(金) 07:01:39ID:???
超好みの問題だけども
if(!$_){ return 0;
より
return 0 unless $_;
の方が……どうでもいいか。
それより、0と1しか入っていないことは保障されてる?
0271nobodyさん2005/10/28(金) 07:11:26ID:zLDMG+JK
>>270
書きながらそれは思ったけど、質問の段階で 0 と 1 しか出てこなかったので ^^;
1 以外が入ってれば … も考えるなら
if($_ != 1){ return $_; }
かな?
0272nobodyさん2005/10/28(金) 07:20:20ID:???
unless ($_) { return 0; } または return 0 unless $_;
次の行に return $_;
個人的にだけど、否定だけで分岐する場合にはunlessが見やすいと思う。
0273nobodyさん2005/10/28(金) 07:33:02ID:FKANG7gP
use strictを使うように心がけようと思い、ここ最近ののソースには書いているのですが、
requireしたファイルの中でグローバルを宣言するにはどうしたらいいのでしょうか?
requireしたソース中でmy宣言したらその中でしか見えず、エラーが出てしまいました
0274nobodyさん2005/10/28(金) 07:52:12ID:???
>requireしたファイルの中でグローバルを宣言するにはどうしたらいいのでしょうか?
kentのように、1つの変数をずっと使うような設計は止めたほうがいい。

>requireしたソース中でmy宣言したらその中でしか見えず、エラーが出てしまいました
ソースのmyというか、スコープをもう一度勉強して。

むりやりstrictでエラーを出させないようにするなら、qw($hoge);
0275nobodyさん2005/10/28(金) 09:05:27ID:???
>>273
274の言うように可能なら変数を見せなくてすむように設計を見直した方が
いい場合が多いが、どうしてもやりたいのならモジュールにしてimport/export
するのがいいんじゃないかね。
0276nobodyさん2005/10/28(金) 09:15:21ID:FKANG7gP
レスありがとです。
requireした先でのグローバル確保したいってのは止めた方がいいというのは分かってはいるのですが・・・

やっぱ面倒くさがりはじめるとエラーが多くなるんでしょうかね。
出来る限り引数、戻り値を設定して呼ぶようソース見直します。

ありがとうございました。
0277nobodyさん2005/10/28(金) 09:23:34ID:???
悪い癖を覚えないうちにアドバイス。
コーディングはファイルサイズ増えても、半角スペースとタブをうまく使うようにするといいよ。
あと、コメントも適度にあるといいね。
0278nobodyさん2005/10/28(金) 10:43:47ID:???
>>273
参照/設定専用のサブルーチンを作ってそれでアクセスするようにすればいい。
オブジェクト指向で言うところのアクセサってやつ。
0279nobodyさん2005/10/28(金) 10:59:28ID:???
my(@flag) = @_;
といったカッコをつけたコードはどういう意味があるのでしょうか?
0280nobodyさん2005/10/28(金) 11:10:09ID:???
>>279
リスト。

http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perldata.html#List_value_constructors
0281nobodyさん2005/10/28(金) 11:14:37ID:???
多分こういうことを聞きたかったのかとエスパーしてみた。

myをまとめて指定する場合()でくくる必要がある。
別にmy @flag = @_;でも可
my ($hoge,@flag) = @_; としていて、$hogeを消した名残かもしれない。

my (@flag) = @_;
my ($foo, $bar);
my (@age, @sage); と連続して書く場合、見た目の為?に括弧くくりしてあるのも見かける。
0282nobodyさん2005/10/28(金) 11:26:27ID:3fcMXuGT
my($a, $b);
ってする時に括弧をつけるので、見た目統一のために1つのみの宣言でも括弧を付けてます。
02832792005/10/28(金) 12:31:13ID:???
すみません281さんの通りです。
右辺のコンテキストを変えた、もしくはmyの適用範囲を指定したコーディングでもないのに
カッコを付けるのが紛らわしく感じたのです。
0284nobodyさん2005/10/28(金) 13:18:53ID:???
>>267
> my($param, @param2) = @_;
> ってやっちゃ駄目ですか?
もちろん構わない
shiftを使って引数を取り出すかリストコンテキストで一気に代入するかは好みが現れる所だろうな

しかし、自分でも書いた後、説明とはいえ
> local ($param) = @_[0];
> local (@param2) = @_[1..$#_];
こんな回りくどいやり方は無いなと思った…しかも上間違えてるし$_[0]
0285nobodyさん2005/10/28(金) 13:36:59ID:???
>>277
それ激しく同感。上手くタブとスペースを使い分けて書かれてるソースってめったに見られないよな

よくあるのがこういうインデントだけど、タブ幅が変わると悲惨なことになる
if (expression) {
____for (range) {
[_TAB__]{ #Some blocks
[_TAB__]____function(multiline,
[_TAB__][_TAB__]_____arguments)
[_TAB__]}
____}
}

漏れの思う理想形はこんな感じ。これならタブ幅がいくら変わっても適切なインデントで見られる
if (expression) {
[TAB]for (range) {
[TAB][TAB]{ #Some blocks
[TAB][TAB][TAB]function(multiline,
[TAB][TAB][TAB]_________arguments)
[TAB][TAB]}
[TAB]}
}
0286nobodyさん2005/10/28(金) 15:23:43ID:???
>>285
上の例、ひどすぎないか?
tab size を 8 にして、indent size を 4 にしているということ?

> よくあるのがこういうインデントだけど、

よくあるのか・・・?
0287nobodyさん2005/10/28(金) 15:30:15ID:???
>>286
そういうこと
Perlの標準モジュールとか見てみれ 大半がこんなだよつд`)
CGI.pmとかMemoize.pmとか
0288nobodyさん2005/10/28(金) 15:36:36ID:???
>>286
同じソースを複数人で弄っていて、コーディング規約も何もない場合
tab と space が混在してもっとひどいことに・・・。
0289nobodyさん2005/10/28(金) 15:58:45ID:???
>>286
Emacs のデフォルトがそんなんだったような。
漏れの思う理想形は、タブは一切使わず SPACE のみでインデント。
Emacs なら (setq-default indent-tabs-mode nil) しると。
0290nobodyさん2005/10/28(金) 16:52:13ID:???
>>289
スペースのみか、それも良いな
でも、漏れが読むときは全部タブに置換することが度々
スペースで固定しちゃうと、その人の好みのインデント幅に合わせて
読めないというのがあるんだよなぁ…
# 個人的に、使い慣れてるエディタ上でのタブを表す→を、
# インデントとしてみるように目が慣れちゃってるのもあるのかも

まあ好みは人それぞれ分かれるから、他人のソースを読むときは
PerlTidyを通すのを習慣付けろってことか、これは
0291nobodyさん2005/10/28(金) 17:03:56ID:???
インデントはタブ、関数など括弧の前後は半角スペースで統一してます。
0292nobodyさん2005/10/28(金) 17:37:38ID:???
>>287
CGI.pm見たけどタブは使わずスペースのみだった。
0293nobodyさん2005/10/28(金) 17:43:28ID:???
>>292
何かの間違いじゃ・・・
ttp://search.cpan.org/src/LDS/CGI.pm-3.11/CGI.pm
こことか。133行目付近
unless ($OS) {
unless ($OS = $^O) {
require Config;
$OS = $Config::Config{'osname'};
}
}
0294nobodyさん2005/10/30(日) 20:33:55ID:???
お願いします。
ファイルハンドルを局所化することは可能でしょうか。
再帰したサブルーチンの中で毎回違うファイルを扱いたいのです。
0295nobodyさん2005/10/30(日) 20:49:09ID:???
すみません、何も考えずに質問したわけではないのですが、書いた後に
ファイルハンドルへのリファレンスだか型グロブだか(よく理解していない)を
局所化した変数に入れておけば解決できるのではと思いつきました。
その方向で調べてみますが、方向性が間違っていましたら教えてください。
0296nobodyさん2005/10/30(日) 20:51:31ID:???
オープン、処理、クローズまで一連の動作をするサブルーチンなら、難しいこと考えなくてもいいのでは。
引数にファイルを指定するぐらいかな?
0297nobodyさん2005/10/30(日) 21:05:36ID:???
ちょっと込み入ったことになってまして、
オープン、処理、クローズの、処理の部分でもう一度再帰的に自分自身を呼び出しているので、
クローズする前に同じハンドルで別ファイルをオープンしてしまってるんです。
0298nobodyさん2005/10/30(日) 21:14:33ID:???
>>297
http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlfaq5.html#How_can_I_make_a_filehandle_loca
0299nobodyさん2005/10/30(日) 21:59:42ID:???
>>298
ありがとうございます!!そのままずばりの質問でしかもFAQということで
まことに恐縮です。おかげさまで解決しました。
0300nobodyさん2005/10/30(日) 22:45:36ID:???
>>299
FAQに書いて無いようなので補足
モジュールが使える環境ならIO::Fileを使うことをお勧めする
0301nobodyさん2005/10/30(日) 23:02:00ID:ZWocYOMF
初心者です。
意味を教えて、と言うものです。ごめんなさい。
既存のソースを使って勉強中に、フォームをデコードしたい部分で

read(*******略*******);
undef(%in);

というものが出てきました。
undef とはどういう関数なのでしょうか。
リファレンスで探してみたのですが、名前付き単項演算子として列記されているだけで、
解説が載っていませんでした(初心者向けだから?)
ぐぐってみたものの、他の項目の解説用のソースばかり出てきてしまい、
undef の解説が見つけられず、困っています。よろしくお願いします。
0302nobodyさん2005/10/30(日) 23:06:21ID:???
見つからないわけねーだろ。
どういう調べ方してんだ。
0303nobodyさん2005/10/30(日) 23:09:40ID:ZWocYOMF
pear undef
で検索してみたのですが…
何か手がかりがあれば教えていただきたいのですが。お願いします。
0304nobodyさん2005/10/30(日) 23:11:28ID:???
>>302
まあまあ

>>301
Perlの組み込み関数は
perldoc -f 関数名
でマニュアルが見られる。ただし英語だけど。
日本語訳は
http://perldoc.jp/docs/perl/5.6.1/perlfunc.pod
http://www.att.or.jp/perl/man/perlfunc.1.html
このへん

で、undefがどういうものかというと、その変数の値を未定義にする関数。
まあ、その例ならば%inを空にすると考えてもらっても良いと思うよ
0305nobodyさん2005/10/30(日) 23:12:17ID:???
>>303
ってpearじゃなくてper「l」だヾ(゚Д゚#)ノ゙ゴルァ
0306nobodyさん2005/10/30(日) 23:20:17ID:ZWocYOMF
ありがとうございます。
(つづりまちがいは、ここに書いたときだけでした;)

ソースに undef(%in); と出てくるものの、 %in は後にも先にもここ一つなのですが…、
どこにも出てこない変数をクリアすることに意味はあるんでしょうか?
(もしかして、悪いモノを見本にしてしまったのでしょうか)
(呼び出しているプログラムは jcode.plのみです)
0307nobodyさん2005/10/30(日) 23:44:37ID:???
>>306
多分、%in は使っていないけど、$in{.......}
は使っているというオチだろうな。
0308nobodyさん2005/10/30(日) 23:46:23ID:???
>>306
%inじゃなくて$in{...}の形ででてきてるかもね。

しかし%inをundefして使いまわそうとしている
あたりあまり筋がよさそうではないので、手本に
はしないほうがいいんじゃないかなー。
0309nobodyさん2005/10/30(日) 23:48:12ID:???
>>306
> (もしかして、悪いモノを見本にしてしまったのでしょうか)
模範的といえるような綺麗なPerlスクリプトって正直なかなか無いからねぇ。
現状良い見本を見て育った人のほうが少ない気もする
0310nobodyさん2005/10/30(日) 23:51:26ID:???
駱駝本買っとけ
0311nobodyさん2005/10/30(日) 23:52:59ID:???
>>308
myで宣言してスコープアウトで自動で破棄させるべき、かな
03123012005/10/31(月) 00:25:50ID:8r5lDkYL
本屋で買った、初心者用CGIの本を頼りにやっていたので
載っていないことが多かったのですが、
教えていただいたリファレンスとかも読んで、わかってきました。

これまでに、COBOLしかやったことがなかったので、
勘違いしていることもありました(汗

ありがとうございました。
0313nobodyさん2005/10/31(月) 00:27:31ID:???
%inはcgi-lib.plからreadparseしてる予感!
0314nobodyさん2005/10/31(月) 00:33:54ID:???
[TAB]ってなんですか?
0315nobodyさん2005/10/31(月) 00:37:35ID:???
正規表現で使う「\t」の代替文字のことかな?
phpとかrubyでは良くみるけどperlで使えたっけ?
03163012005/10/31(月) 00:50:00ID:8r5lDkYL
>>313
cgi-lib.plは使ってないんです。

コボラーとしては、宣言もなしに変数がイキナリ使われていることに慣れません…
0317nobodyさん2005/10/31(月) 00:58:02ID:???
>>316
use strict;してないのはそんなのばっかりですよ。
大手よりも細々とやってるとこの方が、意外としっかりしたコードかいてることが多いです。
kentのはジンマシン出るかもしれないので注意してください。
0318nobodyさん2005/10/31(月) 01:00:04ID:???
>>316
英語アレルギーじゃないならCPANにあるソースでも読んでみると良いかもよ
http://www.cpan.org/scripts/index.html
03193012005/10/31(月) 01:17:17ID:???
use strict ってなんですか?
てか、[安全ではないコンストラクトを制限]と言われても
具体的にピンと来ないのですが・・・

自分で全部ソース書くよりも、
便利なモジュール使ったほうが間違いがない…ってことですかね。

Kent-webのCGIは、そのまま(改造とかナシで)使ったことがあります。
見た感じでは、ダラダラ〜っと大きいルーチンが書いてあって
読みづらいと思ったのですが(だからあんまり見てない)
見本にするには不向きってことですか?<ジンマシン
0320nobodyさん2005/10/31(月) 01:40:06ID:???
>>319
use strictは一言で言えば安全にプログラミングするためのプラグマだが…
とりあえず、一番のご利益は宣言の強制かな
my宣言をせずにいきなり変数を使おうとすると
エラーにするなどの機能を有効にする。というようなのがuse strict 'vars';
my $hoge = 'hogehoge';
print $hage; # use strict;すれば$hageは宣言されて無いのでエラー
見たいなミスを予防したりできる。

Kentは・・・まあ見本にはお勧めしないとだけ言っておこうか
0321nobodyさん2005/10/31(月) 02:43:49ID:???
KENTは悪い見本。最悪レベル。
いい見本は、コアモジュールのコードを読めばいいと思う。あと高いけど駱駝本
0322nobodyさん2005/10/31(月) 02:55:53ID:???
駱駝本は長い目で見れば高くはないさ。
0323nobodyさん2005/10/31(月) 03:03:40ID:???
>>321
良いにくいことをはっきり言うね…まあ同感なわけだけど
0324名無し募集中。。。2005/10/31(月) 03:15:06ID:s3JdPwyc
ラクダ本見辛いって思うのは私だけ?
03253012005/10/31(月) 03:24:24ID:???
>>302
ありがとうございます。
VBで言うところの、Option Explicit みたいな役割ってことでしょうか。

またまた質問なんですが、グローバル変数の宣言は、
$hensu;
だけでOKなんですか?
my とか local に相当する言葉はナシで良いのでしょうか。
(my と localについての解説しか見当たらないので)
検索していて our というのも見つかりましたが…
0326nobodyさん2005/10/31(月) 03:42:25ID:???
>>324
見るんじゃない、感じるんだ。

>>325
文法を 1 から 10 まで習うつもりか?
入門書か、perlsyn と strict.pm の perldoc ぐらい読んでから来いよ。
03273212005/10/31(月) 10:23:36ID:???
>>323
ま、ああいう言いにくいことは、自分のblogで書けないからね
ここでなら言っちゃってもいいかなーって思ってぶっちゃけたw
0328nobodyさん2005/10/31(月) 14:02:09ID:???
かと言って初心者がC-Board見ても仕方無いだろうなあ
0329nobodyさん2005/10/31(月) 16:26:16ID:mS98tkDz
文字列中の、<div id="aaa">から、それに対応する</div>までを消すにはどのように表せばいいんでしょうか?
<div id="aaa">から</div>までの間には、<div id="bbb">〜</div>とか<div id="cc">〜</div>とかがいっぱい入ってるんですが。。。
0330nobodyさん2005/10/31(月) 17:16:04ID:???
divの数を数えればいいじゃん。
開きが見つかれば+1
閉じが見つかれば-1
0の時点で閉じがあれば、そこで終了。
0331ヽ(´ー`)ノ ◆.ogCuANUcE 2005/10/31(月) 17:17:06ID:???
use strict;
use warnings;

use HTML::TreeBuilder;


my $doc = HTML::TreeBuilder->new_from_file('test.html');

map { $_->delete() } $doc->look_down('_tag' => 'div', 'id' => 'aaa');

print $doc->as_HTML();

こんでいいかね。
0332nobodyさん2005/10/31(月) 17:34:43ID:???
>>331
<q cite="http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlstyle.html">
戻り値をただ単に捨ててしまうような void 文脈で、grep() や map()、
`backticks` (訳注: `ls`のようにバッククォートで括った実行文のこと) を
使うことは避けましょう。そういった関数はすべて戻り値を持っているの
ですから、それを使うべきです。戻り値に用がないのであれば、代わりに
foreach() を使ったループか system() 関数を使いましょう。
</q>
0333ヽ(´ー`)ノ ◆.ogCuANUcE 2005/10/31(月) 18:42:21ID:???
>>332
あぁ、そうね。スマンカッタ。

$_->delete() for $doc->look_down('_tag' => 'div', 'id' => 'aaa');
0334nobodyさん2005/10/31(月) 22:40:16ID:???
if($test == $sample){
print"OK!!\n";
}
$test =1, $sample =1,
の時変数が数字なのか文字列なのかそれとも両方混じっているのか分からない時の
演算子はどうしたら言いのでしょうか。
eqで事足りると思うのですが、文字列と数字は分けなくて演算子をつかわなくてはいけないそうなのです。

すごく初心者的な質問ですいません。
0335nobodyさん2005/10/31(月) 22:50:00ID:???
>>334
たぶん宿題かなんかなんだろうが、お前はperlの前に
まず日本語を勉強しろ。何が言いたいのかさっぱり
わからん。
0336nobodyさん2005/10/31(月) 22:56:00ID:???
>>334
使わなくてはいけない、ではなくて自分がその中身をどう扱いたいか。
数値として扱いたいなら==を使えば良いし、文字列として扱いたいならeqを使えば良い。
数値として扱うというのは、"1.0"と"001"みたいなのも同じ1とする。
文字列として扱うというのは、これらを別のものとして扱うということだ。
03373362005/10/31(月) 23:01:33ID:???
>>334 質問にちゃんと答えてなかったかな。補足。
数値として扱えない文字が入っているのに数値として扱おうとする場合、
それ以降は無視される(1q3 => 1)
数値が入っているか文字列が入っているかわからないときに比較したいということは、
1q3と1axが同じ、と判断されちゃまずいということだよな。なら文字列として扱えば良い
03383342005/10/31(月) 23:43:09ID:???
レスありがとうございます。
演算子で数字と文字列同じように使えるeqの方が便利だからと言う理由でeqを多く使っていたのですが、
計算するわけでもないので、無理して==を使う必要がなく、「いけないではなくどう扱いたいか」で
凄く納得がいきました。
解りやすく説明していただきありがとうございます。
0339nobodyさん2005/11/01(火) 00:15:10ID:???
>>334
$hoge = "abc";
$hoge++;

一応こんなのも学んでおくといいかも
03403342005/11/01(火) 01:06:49ID:???
いろいろもう一度最初から見なおして見ます。
基礎的過ぎて詳しく説明しているところがあまりなかったので。
ありがとうございました。
0341nobodyさん2005/11/02(水) 15:33:18ID:lpDOmIjl
2台のサーバーにCSVテキストデータとCGIを別々において
CGIからCSVを読み込むにはどのようにすればよいでしょうか?
お願いします。
0342nobodyさん2005/11/02(水) 16:22:11ID:???
2台のサーバを統合する。
Socketモジュール系を使う
ftp.plライブラリを使う
0343nobodyさん2005/11/02(水) 16:27:42ID:???
>>341
nfs, ssh, http, ftp あたりでデータのやりとりすればOK。
03443412005/11/02(水) 16:38:32ID:lpDOmIjl
>>342-343
返信ありがとうございます。
ftp.plライブラリはどのようにして使うんでしょうか?
また、テキストファイルを定期的に更新したいんですが
どのようにすればよいでしょうか?
お願いします。
0345nobodyさん2005/11/02(水) 16:41:06ID:???
>>344
定期的な更新はcronコマンド。
ftp.plの使い方はググルのが吉。
03463452005/11/02(水) 16:42:13ID:???
↑我ながら「グルル」は良くないとおもた。
「ぐぐる」か「ググる」方が的確かl。
0347nobodyさん2005/11/02(水) 16:45:10ID:???
さすがにグルルはだめでしょう
グルルは
0348nobodyさん2005/11/02(水) 17:19:18ID:???
>>344
も少し詳しく書かないと分からないよ。

> また、テキストファイルを定期的に更新したいんですが
> どのようにすればよいでしょうか?

環境は? win? unix?
また、CGIスクリプトから更新したいの? 他のプログラムから?
0349nobodyさん2005/11/03(木) 17:31:58ID:???
CGI.pmを使って,スクリプトの状態をファイルに書き出しています.

if($cgi -> param(save)){
open(OUT,"> ./test.dat") || die;
$cgi -> save(OUT);
close(OUT);
}

このように,テキストエリアとチェックボックスのフォームデータを保存して,
別のcgiファイルで,読み込みをしています.

#フォームデータの読み込み
$file = "./test.dat";
open(IN,$file) if (-f $file);
$cgi = new CGI(IN);
close(IN);

テキストエリアはきちんと保存値が表示されたのですが,
チェックボックスが全て未チェックの状態になってしまいます.

なにかチェックボックスでは処理が必要なのでしょうか?
0350nobodyさん2005/11/03(木) 17:50:23ID:???
>>349
<input type="checkbox" name="hoge" value="hage" checked>
0351nobodyさん2005/11/03(木) 17:51:21ID:???
>>349
チェックボックスをチェックOn状態にするにはchecked属性が必要というのは理解してる?HTMLの話。
CGI側はvalueを複数受け取るけどね。
0352nobodyさん2005/11/03(木) 17:54:36ID:???
分かんないかも知れないから書き換え

pirnt $保存値 eq '保存値'
  ? qq|<input type="checkbox" name="hoge" value="hage" checked>
  : qq|<input type="checkbox" name="hoge" value="hage">|
 ;|
0353nobodyさん2005/11/03(木) 17:56:14ID:???
>>352
事故レスorz

pirnt $保存値 eq '保存値'
  ? qq|<input type="checkbox" name="hoge" value="hage" checked>|
  : qq|<input type="checkbox" name="hoge" value="hage">|
 ;
0354nobodyさん2005/11/03(木) 18:50:59ID:???
ファイルのオープンエラーをdieで終わらすのか・・
0355nobodyさん2005/11/03(木) 21:48:20ID:???
チェックボックスのチェックをいれるには,checkedが必要だということは認識しています.
そうやって,デフォルト値を操作して,チェックを入れた状態で表示するのではなく,

$cgi = new CGI (IN);

こうやって,ファイルを渡してあげて,保存値を反映したいのです.
テキストエリアではこの方法が上手く使えたのですが,
チェックボックスでは保存値が反映されなかったのです.
どうにかして,チェックボックスに保存値を反映したいのですが,どうすれば良いのでしょうか?
という趣旨でした.混乱させてもうしわけありませんでした.
0356nobodyさん2005/11/03(木) 23:42:33ID:???
>>355
ドキュメントを熟読して問題を切り分けよう。
http://perldoc.jp/docs/modules/CGI.pm-2.89/CGI.pod

1. フォームから送られてくるデータはプログラムに渡される時点で
コントロールの種別に関係なく name=value の形になっているので、
テキストエリアなら受け取れるがチェックボックスでは受け取れない
という事が起こるならそれはフォームの書き方かブラウザがおかしい。

2. save メソッドはドキュメントにあるように human readable な形で
書き出してくれるので、まず全てのデータが正常に受け取れ、且つ
書き出せているかを確認。更にファイルハンドルを渡して生成した
CGI オブジェクトが全ての保存値を読み込めているかを Vars メソッド
等で確認。ちなみに >>349 の読み込みコードはファイルの読込権限
が無いと open に失敗するのでエラーチェックになっていない。

3. 読み込んだデータは 1. と同じく名前と値のペアの集合でしかない
ので、保存値を反映したフォームを出力したいなら、それらを適切な
要素に当てはめ直す作業が必要。→ >>350-353
0357nobodyさん2005/11/04(金) 01:23:13ID:???
詳細なアドバイスありがとうございます.
順を追って確認してみます.
特にVarsの使い方を教えていただき感謝いたします.
0358nobodyさん2005/11/04(金) 10:40:02ID:???
解決しました!
保存値はちゃんと渡せていましたが,チェックボックスの生成方法がオブジェクトを介さずに
CGI::checkbox と行っていたためでした.

みなさんほんとうに有り難うございました.
0359nobodyさん2005/11/04(金) 18:07:49ID:???
use utf8で文字列内やヒアドキュメント内で変数展開をすると
変数の後ろの文字列も含めて変数と解釈されてしまいます。

"${str}文字列"
"$str\文字列"
$str . "文字列"

などのようにエスケープなり逐一処理するしかないのでしょうか?
0360nobodyさん2005/11/04(金) 18:56:28ID:???
>>359
そりゃそうだ。

個人的にはソースに直接マルチバイトな文字リテラルを入れるのがそもそも
イカンと思うがね。
0361nobodyさん2005/11/04(金) 22:23:15ID:???
勉強厨房でサーバー駆動に挑戦してますが
CPAN のエラーが出てモジュールを入れられなくてコマってます。

--01:20:02-- ftp://ftp.perl.org/pub/CPAN/authors/id/M/MS/MSCHWERN/CHECKSUMS.gz
(試行:18) => `-'
ftp.perl.org[163.143.1.21]:21 に接続しています... 接続しました。
anonymous としてログインしています...
サーバの応答にエラーがあるので、接続を終了します。
再試行しています。

こんなのがでて、ずっと先へ勧めません。
いった移動してよいやらこまってます。
FTPへ手動での接続はできているんですけど・・・
  Convert::UUlib
  Convert::TNEF
あたりも、みんな ftp/perl.org への接続で失敗してるようです。
どなたかお知恵を拝借できればと思います。
よろしくおねがいします。
0362nobodyさん2005/11/04(金) 22:45:51ID:???
>>361
http://www.ss.iij4u.or.jp/~somali/web/_ppm.html
0363nobodyさん2005/11/05(土) 03:57:34ID:???
すいません、質問です。

文字列$commentがあって、
while($comment=~m//g){}を使って<tag>または</tag>を順々にマッチさせたいのです。

んでマッチしてから<tag>と</tag>のどちらがマッチ…

あ、わかった…$&で判定できるんですね…
鬱だ死のう
0364nobodyさん2005/11/05(土) 04:13:08ID:???
(゚д゚)ポカーン
0365nobodyさん2005/11/05(土) 04:14:32ID:???
$&使うもよし、()でキャプチャして$1で読むもよし
foreach( $comment =~ /<.*?>/g ){ print "tag = $_\n"; }
みたいに先にリストに展開するもよし
0366nobodyさん2005/11/05(土) 23:49:03ID:???
たびたびの質問をお許し下さい.CGI.pmを使ってCGIを作成しています.

#保存ボタンが押されたらデータをファイルに保存する
if(($cgi -> param(add)) && ($cgi -> param(yomi)) && ($cgi -> param(kanji))){
open(OUT,">> $file") or die;
$kanji = $cgi -> param(kanji);
$yomi = $cgi -> param(yomi);
$data = "$kanji\t$yomi\n";
$cgi -> delete_all();
print OUT $data;
close(OUT);
}

param(add)には,submitボタンの値,yomiとkanjiにはテキストフィールドの値が入っています.
保存ボタンが押されるとちゃんと,ファイルにデータが追加されるのですが,
保存ボタンを押して,リロード(F5を押す)を行うと,データが繰り返し追加されてしまいます.
delete_all()して,Varsでもパラメータは消去されているのを確かめたのですが,
リロードすると,やはり値が繰り返し追加されてしまいます.
0367nobodyさん2005/11/05(土) 23:53:00ID:???
途中で送信してしまいました,申し訳ありません.

続き…

delete_allを行ったにもかかわらず,値が追加されるということは,どこかに値が保存されている
ということだと思いますが,それはどこにあるのでしょうか?

よろしくお願いします.
0368nobodyさん2005/11/05(土) 23:56:09ID:???
ブラウザが覚えてるからリロードするとそうなる
解決策はググルとたぶん見つかる
どっかで見た
0369nobodyさん2005/11/06(日) 04:41:46ID:???
うん、二重投稿をエラーにすればいい
0370nobodyさん2005/11/06(日) 14:09:39ID:???
コメントからタグだけを削除したいのですが

$comment =~ s/<.*?>//gs;

これだけでは何か穴がありますか?
0371nobodyさん2005/11/06(日) 15:24:52ID:???
>>370
モジュール使えば?
03723662005/11/06(日) 20:09:02ID:???
ブラウザの機能だったんですね.てっきり自分のコードにミスがあるかと思っていました.
以前のログを参照して,同じ投稿がないかチェックするようにして,二重投稿を防ぐようにして解決しました.

みなさんありがとうございました.
0373nobodyさん2005/11/07(月) 11:47:17ID:92Mo7mCM
DBI初心者なのですが、Perl+PostgreSQLでWebアプリを作っています。
DBI::Pg使用し、1度の接続で下記要件を満たすSQL文を教えて下さい。
SQLではなく、Perl+DBIのプログラミング方法で可能であれば、その方法を教えて下さい。

顧客テーブルと購入履歴テーブルがあります。
顧客一覧を出力する時に、顧客ごとに購入件数も表示したいです。

顧客一覧をwhile($hash= $sth->fetchrow_hashref){}で取得し、
whileの中でさらに、$hash->{hoge_no}から購入履歴をSELECTしたのですが、
うまくいきません。お願いします。
0374nobodyさん2005/11/07(月) 12:30:03ID:???
>>373
>>1

Perl::DBI
http://pc8.2ch.net/test/read.cgi/php/1015943725/
0375nobodyさん2005/11/07(月) 12:36:56ID:???
http://pc8.2ch.net/db/

それよりこっちでしょ。SQL文一つでできるし。
0376nobodyさん2005/11/07(月) 13:21:51ID:???
SQLでコケてるのか、ハッシュを見る段階でコケてるのか、切り分けができてない。
Data::Dumperモジュールなどを使ってハッシュ内容をダンプしてみれ。
0377nobodyさん2005/11/07(月) 21:52:51ID:ErqtfEJb
1:
画像の「横幅」を判別して設定値以上なら縮小
設定値以下ならそのまま表示というのをしたいです。

2:
if文で何とかなると思い、扱えるように勉強しましたが、
「画像の横幅を判別する」というのはどうやってやったらいいのか・・・。

ヒントだけでも構いません。宜しくおながいします。
0378nobodyさん2005/11/07(月) 21:57:05ID:???
>>377
>>1
0379nobodyさん2005/11/07(月) 21:59:49ID:ErqtfEJb
>>378
即レスどうも
と言うことはできるんですね。
勉強してきます。
0380nobodyさん2005/11/07(月) 22:07:40ID:???
ImageMagic ってすごいよね?
0381nobodyさん2005/11/07(月) 22:16:16ID:???
鯖負担すごいね
0382nobodyさん2005/11/07(月) 22:22:21ID:???
GIFは先頭から7,8バイト目が横幅。BMPなら19〜22バイト目。PNGなら17〜20バイト目。JPGはちょいと面倒だから割愛。
横幅取得くらいなら自前コーディングで十分。
0383nobodyさん2005/11/07(月) 23:54:29ID:???
GDに比べてGIFが遅すぎ
0384nobodyさん2005/11/08(火) 01:03:07ID:???
>>383
GIF てw
0385nobodyさん2005/11/08(火) 02:46:44ID:???
>>377
サイズだけ取得するのならImage::Sizeでも。
0386nobodyさん2005/11/08(火) 07:56:18ID:???
>>384
DoCoMo用にGIFで吐かなきゃならんのだ。
0387nobodyさん2005/11/09(水) 07:29:42ID:???
質問です。
すごい久し振りにCGIをうPしたら、まったく忘れていたらしくエラーが出てしまいます。
しょうがないので、初心に返ってhello perlを出力しようとしたら、これもエラーです。
むかついたので、別に契約してあるプロバイダにCGIチェッカがついてるので
うPして何がおかしいか調べたら、

ファイルの先頭が

#!/bin/perl
#!/usr/bin/perl
#!/usr/local/bin/perl
でないか、CGI プログラムが ASCII モードで転送されていません

だそうです。????

ちなみにソースは
#!/usr/bin/perl
# HTML表示
print "Content-Type: text/html\n\n";
print "<HTML><HEAD>\n";
print "<BODY>\n";
print "Hello Perl World!\n";
print "</BODY>\n";
print "</HTML>\n";

ASCII モードになってないんですかね?
秀丸でファイル名:hoge.cgi ファイルの種類:その他 文字コード:自動選択
で保存したものです。何年ぶりかなので何か忘れてるのかもしれません。
ど素人で済みませんがお願いします。
03883872005/11/09(水) 07:30:43ID:VFhSh5VA
ああ、sageてました。ageときます。
0389nobodyさん2005/11/09(水) 07:47:21ID:???
>>387
文字コードを euc にしてみ。
03903872005/11/09(水) 08:05:29ID:5otQfz0T
EUCで改行LFでもCR+LFでもダメでした。
03913872005/11/09(水) 08:16:09ID:5otQfz0T
とおもったら、>>389で元のロリポではできました。
wakwakの解析が逝かれてるのですかね?
0392nobodyさん2005/11/09(水) 08:53:46ID:???
ひとのせいにする前に勉強しろ
0393nobodyさん2005/11/09(水) 09:06:00ID:BFWlWPsi
@imglist=grep *.jpg, readdir DIR;
がエラーです。
多分正規表現の指定がおかしいと思います。
0394nobodyさん2005/11/09(水) 09:29:22ID:???
>>393
正規表現なら
@imglist = grep /\.jpg$/, readdir DIR;

ワイルドカード使おうとしてるところを見るとこのへんと混同してるのかも
@imglist = glob("*.jpg");
@imglist = <*.jpg>;
0395nobodyさん2005/11/09(水) 11:29:02ID:???
>>387
ちゃんとASCIIモードで転送しているのか?
ファイルの先頭に変なバイナリが付いていないかバイナリエディタ等で確認したのか?(UTF-8保存とかね)
0396nobodyさん2005/11/09(水) 11:51:52ID:???
>>387
> ファイルの先頭が
> #!/bin/perl
> #!/usr/bin/perl
> #!/usr/local/bin/perl
> でないか、

このメッセージは、列挙された3つの行のうち好きなものを書けば
いい、という意味ではなく、サーバに対して指定された、何れか一つの行を
書かなきゃだめ、ということだと思うが。
#!/usr/bin/perl
は本当に正しいのかな?
0397nobodyさん2005/11/09(水) 18:03:19ID:???
ちゃんと確認しようよ。
ttp://www.wakwak.com/info/connection-setup/ftp/custom-cgi.html
0398nobodyさん2005/11/09(水) 18:24:22ID:???
>>387
ASCIIモードかどうかは、文字コードとかの問題じゃなくて
FTP転送の問題ジャマイカ?

ていうかここまで来るともはやスレ違い。
0399nobodyさん2005/11/09(水) 22:36:27ID:???
どうでもいいのだけど >>387 に一言言いたい。
ヒアドキュメント使え。
0400nobodyさん2005/11/10(木) 00:00:36ID:???
niku.2ch.netみたいなDNSBLに登録されているか調べるモジュールは何ですか?
PHPでNet_DNSBLを使っていて、PerlでもDNSBLチェックをしたいです。
0401nobodyさん2005/11/10(木) 01:43:05ID:???
調べてみた。
こんなんとか。

http://search.cpan.org/~tjmather/Net-DNSBLLookup-0.03/lib/Net/DNSBLLookup.pm
0402nobodyさん2005/11/10(木) 03:41:03ID:???
ありがとうございます!
入れました
04033872005/11/10(木) 06:37:47ID:XPue5Djf
おお、まんまり反応ないし>>392もあるんであきらめてたけど
色々ありがとう。

とりあえず
>>389で、ロリポは動きました。
で、>>395御指摘のutf-8でwakwakも逝けました。
解決できました。

>>396
>サーバに対して指定された、何れか一つの行を
>書かなきゃだめ、ということだと思うが。
そうみたいですね。
#!/usr/bin/perlはダメで、#!/usr/local/bin/perlはいけました。
>>397のリンクで
>スクリプト先頭行には #!/usr/local/bin/perl と記述して下さい。
と書いてありました。
でもあの書き方ではわかんないですよ。僕だけですかね・・・
>FTP転送の問題
でなくてよかったです。

とにかく、supecial thnxです。
0404nobodyさん2005/11/10(木) 06:43:00ID:???
>>403
>でもあの書き方ではわかんないですよ。僕だけですかね・・・

おまいだけ。あと「supecial thnx」は恥ずかしいからやめておけ。
0405nobodyさん2005/11/10(木) 09:39:09ID:???
>>403
真性ですね。
0406nobodyさん2005/11/10(木) 10:11:45ID:???
釣られるなよ
0407nobodyさん2005/11/10(木) 10:52:53ID:CqV/pVhD
perlの開発ソフトってないですか?
ビルダーとかみたいな
0408nobodyさん2005/11/10(木) 11:38:03ID:???
>>407
Perl書くのにどんなエディタ使ってる?
http://pc8.2ch.net/test/read.cgi/php/1014357485/
0409nobodyさん2005/11/10(木) 22:41:58ID:???
質問です。
現在フォームメールを作っているのですが、どうもうまくいきません。
スクリプトの流れとしては、

(サブルーチンA)フォームデータの取り込み、デコード、データをハッシュ(%FORM)に代入。
           ハッシュのデータをソートしてメールボディー用の変数($body。もちろんグローバル変数)へ代入。

(メインルーチン)送信ボタンが押されたかチェック。
           押されたら送信用のサブルーチンへ。

(サブルーチンB)確認ページの表示。ハッシュのデータをソートして表示。

なのですが、確認ページで送信ボタン(キー名はsubmit)を押すとハッシュの中身はsubmitだけになってしまうし、$bodyはどこかへ消えてしまうし、どうにもさっぱりです。
どなたか導いてください。宜しくお願いします。
0410nobodyさん2005/11/10(木) 22:44:24ID:???
とりあえずソースを全部、どこかのアップローダに上げろ
0411nobodyさん2005/11/10(木) 23:19:21ID:???
>>409
送信ボタンが押されたかのチェックなんてPerlの範疇じゃないと思うが
0412nobodyさん2005/11/10(木) 23:53:03ID:???
cgi.pm使ってdumpしてみりゃ
0413nobodyさん2005/11/11(金) 00:15:11ID:???
そもそもやりたいことがよくわからんのだが。
サブルーチンとか言ってるけど、ページの遷移はないってこと?
0414nobodyさん2005/11/11(金) 04:45:03ID:???
>>409-413
>>61
0415nobodyさん2005/11/11(金) 08:59:41ID:???
フリーのできるだけシンプルなフォームメール見て勉強するといいよ
0416nobodyさん2005/11/11(金) 18:22:32ID:???
質問です。

Perlでテキストファイルから1行ずつ読み込んで処理する時には
while(<>){}
で済みますが、
既に変数に入っているテキストを1行ずつ処理する場合、どうしたらよいのでしょうか?
0417nobodyさん2005/11/11(金) 19:03:57ID:???
改行をsplitでもすればぁ
0418nobodyさん2005/11/11(金) 19:15:49ID:???
Perl の標準で一行ずつ巡回する方法 (メソッド) って無いんだっけ?

テキストの内容がでかいとでかい配列ができちゃうのがイヤだけど、

foreach my $line (split(/^/, $txt)) {
# $line に何かする
}
0419nobodyさん2005/11/11(金) 19:18:47ID:???
>>417,418
レスありがとうございます。

>>418
すいません。splitの/^/というのは??
この場合の^は行頭を表す^ですか?
04204182005/11/11(金) 19:22:14ID:???
>>419
そうです。
0421nobodyさん2005/11/11(金) 19:26:56ID:???
>>420
それで改行で切れるんですね。知りませんでした。
ありがとうございます。
0422nobodyさん2005/11/11(金) 20:30:27ID:???
while (/^(.*)$/smg) { 処理($1) }

とかでも
04234182005/11/11(金) 20:51:55ID:???
>>422
うお、そっちの方が無駄な配列生成しない分スマートじゃんね。吊ってくるわ・・・
0424nobodyさん2005/11/11(金) 22:14:13ID:???
>>422
ありがとうございます。
だいたいどんな事をやっているのか理解するのに
しばらくかかりました。^^;

オプションを使いこなせると便利になりそうですね。
0425nobodyさん2005/11/11(金) 23:15:24ID:???
WindowsXP、Perl5.8.7でPPMからDBD-SQLiteをインストールしましたが、connectやdisconnectは出来る(ファイルも生成される)ものの、prepareやdoメソッドを呼ぶとPerlインタープリタが強制終了してしまいます。
原因は何でしょうか?
0426nobodyさん2005/11/11(金) 23:23:21ID:???
よくある
0427nobodyさん2005/11/13(日) 16:57:21ID:???
$ua->credentials($netloc, $realm, $uname, $pass):
これを使ってBasic認証通過させたいんですが
鯖側の$realmが日本語になってるせい?なのか失敗します
アドバイスお願いします。。
0428nobodyさん2005/11/13(日) 18:56:49ID:???
>>427
文字コード合わせればええやん
0429nobodyさん2005/11/13(日) 22:03:50ID:???
>>427
文字コードがわからなければLWP::UserAgentのget_basic_credentialsを再定義して
$realmになに渡ってきてるのか調べてあわせてやればいいと思うよ。
0430nobodyさん2005/11/14(月) 09:03:21ID:???
>>428-429
通過出来ました。ありがとうございました。
0431nobodyさん2005/11/14(月) 11:00:01ID:W63Ukjvm
ReadParse()を使用してフォームから取得した変数を
open関数を使用して、UTF-8でテキストファイルに出力したいのですが
その方法がよくわからず困っています。

フォームから取得した変数はSHIFT_JISなので、
そのままopen関数で出力すると、テキストファイルの文字コードは
SHIFT_JISになってしまいます。

どなたか知っておられる方がいましたら、よろしくお願いします。
0432nobodyさん2005/11/14(月) 11:25:42ID:???
>>431
UTF-8だから
Jcode.pmを使えばいいのかなーとか思ったけど
0433nobodyさん2005/11/14(月) 17:51:10ID:WMignAMj
PHPでいうところのshuffleにあたる関数ってありますか?
つまり、やりたいことは、配列をランダムに並び替えることです。
0434nobodyさん2005/11/14(月) 18:03:25ID:???
>>433
http://boobar.hp.infoseek.co.jp/bench/randlist.txt
0435nobodyさん2005/11/14(月) 18:12:42ID:???
List::Util::shuffle がいいと思う。
パフォーマンスなんて問題になってから考えれば良い。
気になるならそもそも Perl なんか使わんし。
0436nobodyさん2005/11/14(月) 18:39:21ID:3zfzQPqE
ttp://other.free-uploader.com/up/download/1131960567298904.t6lFKb
DLPass:1234

windowsでActivePerl5.8を使っています。

IO::Socketを使い、コンソールでのチャットを作ろうと思っています。
現在は、サーバー側はechoserverのプログラムを、
クライアント側にはプロセスを受信・送信に分けたものを使おうと思っています。

実行すると文字は入力できるのですが、うまくserver側にデータが行かないようです。
たぶん原因はclient側なんですが・・。

煮詰まってしまいました。。ヒントお願いします(つд⊂)
0437nobodyさん2005/11/14(月) 19:04:07ID:???
>>436
■こんなCGI作ってください■
http://pc8.2ch.net/test/read.cgi/php/1102980903/
04384362005/11/14(月) 21:57:56ID:3zfzQPqE
ActivePerlでIO::Socketやプロセスについて勉強するには
どんな本やwebページがオススメですか?
0439nobodyさん2005/11/14(月) 22:07:01ID:???
>>438
とりあえずIO::Socketでググれ
0440nobodyさん2005/11/14(月) 22:09:16ID:???
perldoc
0441nobodyさん2005/11/14(月) 22:12:01ID:???
>>438
>>7-8
04424362005/11/14(月) 22:23:16ID:3zfzQPqE
もしかしてTCP/IPつかったconsoleチャットって難しい?^^;

ラクダもドキュメントも読んだけどよくわかんね^^;

神はー神はいないのかー>w<;
0443nobodyさん2005/11/14(月) 22:33:57ID:???
とんでもねぇ、あたしゃ神様だよ
04444362005/11/14(月) 22:59:47ID:3zfzQPqE
神様がだめなら妖精さんでもいいから降臨たのむ・・・
0445nobodyさん2005/11/14(月) 23:09:56ID:???
>>442
ラクダもドキュメントも読んだのに分からないのなら、Socket や
ターミナルを扱う為の基本的な知識が君には欠けている。
そしてその解説はこのスレの範疇ではない。
04464362005/11/14(月) 23:20:04ID:3zfzQPqE
初心者質問という言葉に甘えすぎました。
出直してきます。
0447nobodyさん2005/11/15(火) 00:24:28ID:???
つか何がわかんねーのかわからん状態の奴に何を答えりゃいいんだ
0448nobodyさん2005/11/15(火) 13:35:44ID:???
お前を、殺す!
0449nobodyさん2005/11/15(火) 14:05:37ID:???
通報、しますた!
0450nobodyさん2005/11/15(火) 15:28:57ID:???
ソケットを使うならこの辺りかしらん。

Programming UNIX Socket FAQ in Japanese
http://www.kt.rim.or.jp/~ksk/sock-faq/indexj.html

UNIXネットワークプログラミング〈Vol.1〉ネットワークAPI:ソケットとXTI
http://www.amazon.co.jp/exec/obidos/ASIN/4894712059/

どちらもCを読めること。
0451nobodyさん2005/11/15(火) 18:19:07ID:5cRd32ic
WEBページのアクセス数が多くなってきたため、ロードバランサを用いて負荷を分散しようと思います。

現行
インターネット--------WEBサーバ(DBなど含む)

現行↑の単純な構成を
↓の構成(WEBサーバ3台、DBサーバとにしたいのですが、

イメージ
                       WEBサーバ1
インターネット--------ロードバランサ----WEBサーバ2--------Perlプログラム&DBサーバ
                       WEBサーバ3


この時にPerlのプログラム等に関して注意事項、不具合予測等はありますか?
0452nobodyさん2005/11/15(火) 18:20:22ID:???
>>451
Perlが関わる部分なんて無いよ
大丈夫かおいw
0453nobodyさん2005/11/15(火) 18:20:45ID:5cRd32ic
WEBページのアクセス数が多くなってきたため、ロードバランサを用いて負荷を分散しようと思います。

現行
インターネット--------WEBサーバ(DBなど含む)

現行↑の単純な構成をロードバランサーを加えて
↓の構成(WEBサーバ3台、Perlプログラム&DBサーバ)にしたいのですが、

イメージ
                          WEBサーバ1
インターネット--------ロードバランサ----WEBサーバ2--------Perlプログラム&DBサーバ
                          WEBサーバ3
0454nobodyさん2005/11/15(火) 18:25:47ID:???
>>451>>453
板違い。使ってるOSがなにか知らんがUNIX板かLinux板逝け
04554532005/11/15(火) 18:26:44ID:???
失礼つかまった。
退散します
0456nobodyさん2005/11/16(水) 00:22:50ID:F5yPWKpZ
ひろゆきさん、おめっとー
0457nobodyさんNGNG
手軽にワイルドカードDNSにしとけ
0458nobodyさん2005/11/16(水) 01:49:10ID:???
すみません、誘導されて来ました。

画像掲示板をCGI-Perlで作ったんですが、
アドレス先に画像が存在しているかどうかを判別する事は可能でしょうか?
0459nobodyさん2005/11/16(水) 02:07:22ID:???
>>458
アドレス先って何のこと?
ローカル? リモート?
0460nobodyさん2005/11/16(水) 02:26:25ID:???
ローカルだったら訊いてこねえだろw
0461nobodyさん2005/11/16(水) 03:50:28ID:???
いや、わからんぞw
0462nobodyさん2005/11/16(水) 11:27:12ID:???
>458
マルチすんな
0463nobodyさん2005/11/16(水) 13:37:18ID:???
>>462
誘導されて来た、ってんだからマルチじゃないんじゃないの?そゆことじゃなくて?

>>458
リモートのサーバにある画像なら、HTTP でアクセスして存在確認する必要があるかと。
LWP とか使って HTTP で HEAD とか GET することになると思うけど、
具体的なやり方はまずぐぐって調べてみれ。
04646592005/11/16(水) 19:05:42ID:nAWFz8ua
DBI::Pgを使用してPostgreSQL7.3を使用しています。
ページャー機能(ページ送り)を加えたいんどえすが、
DBI::Pagerがレンタルサーバに入っていないため、
簡単は方法はないかと探してます。何か方法はありませんか?
pure perlなモジュールがあれば一番良いのですが。

0465nobodyさん2005/11/17(木) 14:07:26ID:AgumOSx0
簡単なデータベースのようなCGIを作ろうとしています。
更新記録CGIと検索CGIを別々に見つけてそれを合わせて実現させようとしています。

この中で「○円以内のもの」を抽出するというのをしたいんです。
ドロップダウンリストに
〜100円
101円〜200円
201円〜300円
〜〜
1,000円〜
という設定をしておいて、リストからその価格帯だけを表示させるという物です。

ドロップダウンリストに
<option value="1">〜100円</option>
<option value="2">101円〜200円</option>
<option value="3">201円〜300円</option>
として、普通にif文で

if($FORM{'data'} eq '1'){
if($data =< 100){ ; } else { next; }
}
elseif($FORM{'data'} eq '2'){
if($data => 101 && $data =< 200 ){ ; } else { next; }
}
〜〜
とすればOKなのでしょうか?(データには桁区切りのカンマが入ると思います。)
ほかによい方法がありますか?または、参考となるCGIがあれば同時に教えてもらえるとありがたいです。
0466nobodyさん2005/11/17(木) 14:27:44ID:???
>>465
>>1
>>7-8

【CGI】こんなCGI探してますver.18
http://pc8.2ch.net/test/read.cgi/hp/1123833110/

■こんなCGI作ってください■
http://pc8.2ch.net/test/read.cgi/php/1102980903/
0467nobodyさん2005/11/17(木) 14:32:54ID:AgumOSx0
>>466
回答ありがとうございます。

自分で改造を考えているので、他のCGIを利用するとかすべてを作ってもらうわけでもないのですが、
ここじゃだめなんでしょうか?
0468nobodyさん2005/11/17(木) 14:59:14ID:???
>>467
>>1 を読めと。未来の話をせず、実際に躓いてから >>7-8
調べた上で質問しろと。

> 更新記録CGIと検索CGIを別々に見つけて
については >>466

> 自分で改造を考えている
については

★三 【 スクリプト改造工房 PART 8 】 ★三
http://pc8.2ch.net/test/read.cgi/php/1077525387/

自作の部分に関してはココ。
0469nobodyさん2005/11/17(木) 15:01:10ID:???
>>465 >>467

データを array か hash に入れておき、grep 等で取り出せば OK。

ex.

my @data = (
  { name => 'a', price => 100, },
  { name => 'b', price => 200, },
  ...
};

...

my $lower = 100;  # 実際は form から入力された値を検査し、代入。
my $upper = 200;

my @out = @data;
@out = grep { $_{price} >= $lower } @out if $lower;
@out = grep { $_{price} <= $upper } @out if $upper;

...

for (@out) {
  print "$_{name}: $_{price}\n";
}
0470nobodyさん2005/11/17(木) 16:35:00ID:???
>>469
スレ違いに構わないように。
0471nobodyさん2005/11/17(木) 17:05:22ID:vCe+doXk
NFSでは使用できないflockの代わりに、lockfという関数があるみたいだけど、
lockfって実際どれくらいの実績があるのでしょう?
バージョンはいくつから使えるのでしょうか?
0472nobodyさん2005/11/17(木) 17:37:43ID:???
>>471
lockf という組込関数は perl に存在しない。
http://search.cpan.org/~nwclark/perl-5.8.7/pod/perlfunc.pod

perl の組込関数である処の flock() は標準 C ライブラリに用意
されている flock(2) か fcntl(2) か lockf(3) で実装されていて、
これらの関数が環境によっては NFS 越しのロック処理に対応
していない。なのでどんな環境で走らせるか決め打ちできない
場合は、システムコールレベルではなくスクリプトレベルでの
排他処理機構を用意する必要がある。

http://search.cpan.org/modlist/File_Name_System_Locking
http://www.din.or.jp/~ohzaki/perl.htm#File_Lock

【Perl】ファイルロック(排他処理)について語ろう
http://pc8.2ch.net/test/read.cgi/php/1024795138/
0473nobodyさん2005/11/17(木) 18:11:47ID:+ypcUw74
すみません。失礼します。行き詰ったので質問させていただきます。
PHPの「setcookie($cookie,$setword,$expire);」で発行したCookieは、
CGI等で読み込めないのでしょうか?
0474nobodyさん2005/11/17(木) 18:32:19ID:???
>>473
ここは CGI スレではなく Perl のスレです。

△▲ WebProg 初心者の質問 Part12 ▼▽
http://pc8.2ch.net/test/read.cgi/php/1125215604/

CGI: Common Gateway Interface part 13
http://pc8.2ch.net/test/read.cgi/php/1126436361/
0475nobodyさん2005/11/17(木) 19:10:47ID:vCe+doXk
>>472
ありがと
0476nobodyさん2005/11/17(木) 21:47:27ID:7TvwAtma
http://perl.toshinari.net/cgi/bbs/new2ch/
この2ch型掲示板に表示されるIDを環境変数REMOTE_USERに一致させたいのですが
どうしたらよいでしょうか

sub id {
my($id,$sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst,$month,$date,$identify);
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
$identify = substr($ENV{'REMOTE_ADDR'},-2).substr(crypt($ENV{'REMOTE_ADDR'},$year-$mon*100),2);
$id = crypt($identify,$mday."L");
$id = substr($id,-10);
return $id;


$id = $ENV{'REMOTE_USER'};
if ($id eq '') { $id = ":"; }

にしてみたりしたのですがよくわかりません。。
0477nobodyさん2005/11/17(木) 21:55:58ID:???
>>476
質問がよく分からん。
また、

> にしてみたりしたのですがよくわかりません。。

の、何がよくわからんのかよく分からん。
0478nobodyさん2005/11/17(木) 22:02:17ID:???
>>476
★三 【 スクリプト改造工房 PART 8 】 ★三
http://pc8.2ch.net/test/read.cgi/php/1077525387/
0479nobodyさん2005/11/17(木) 23:05:58ID:???
こんばんは。
携帯用のフォームを作ってるんですけど
フォームから送信したデータって
当然、携帯のメモリ内にあるわけですよね?
あるフォームから送信、その先にもフォームがあり
そこからさらに今受け取ったデータも含めて新たなデータ送信と
要はどんどん送信するデータ増えていくわけですが
こういうのは問題ないのでしょうか?
どなたか教えてください。
よろしくお願いします。
0480nobodyさん2005/11/17(木) 23:12:26ID:???
>>479
△▲ WebProg 初心者の質問 Part12 ▼▽
http://pc8.2ch.net/test/read.cgi/php/1125215604/
0481nobodyさん2005/11/17(木) 23:20:50ID:???
ありがとう。移動します。
0482nobodyさん2005/11/18(金) 03:21:21ID:???
スレ違いのカスどもが多すぎるwwwww
0483nobodyさん2005/11/18(金) 03:52:36ID:b/mBx1Hf
連想配列に

%hash = (
  'audio' => "オーディオ",
  'video' => "ビデオ",
  'cd' => "CD-ROM",
  'dvd' => "DVD",
  'bench' => "ベンチマーク",
  'text' => "テキスト",
  'bin' => "バイナリ"
);
の様に値をセットして
  while(($k, $v) = each(%hash)){ print "$k = $v\n"; }
とか
  foreach (keys(%hash)){ print "$_ = $hash{$_}\n"; }
ってやっても
  'audio', 'video', 'cd', 'dvd' => "DVD", 'bench', 'text', 'bin'
の順番 (代入した順番) で出力してくれないんですけど、代入順での出力を
希望するなら
  @list = ('audio', 'video', 'cd', 'dvd' => "DVD", 'bench', 'text', 'bin');
の様に“順番”を別で保持しておくしか無いんでしょか?

ちなみに上記のコードだと
audio
cd
bin
dvd
video
text
bench
の順番で出力されます。
0484nobodyさん2005/11/18(金) 04:13:14ID:???
>>483
そういうモジュールがある。
名前は忘れた。
0485nobodyさん2005/11/18(金) 04:13:25ID:???
>>483
標準モジュールじゃないからサーバで使えるかは疑問だけどFAQにこういうのがある
http://www.kt.rim.or.jp/~kbk/perl-5.8/perlfaq4.html#how_can_i_make_my_hash_remember_the_order_i_put_elements_into_it

これが使えないならデータ構造の工夫次第だろうな。
まあ、キーの順番を覚えておくのが一番簡単かと思う。
もしハッシュである必要性が無いなら…つまり$hash{$key}の形で使うことが無いなら、
こういう構造が考えられるね。
@list = (
['audio' => "DVD"],
['video' => "ビデオ"],
...
);

04864852005/11/18(金) 04:24:50ID:???
>>483
補足
確認してみたらTie::IxHashはPure Perlだった。
そのままディレクトリ下にTie/IxHash.pmとして配置すれば動くよ

http://search.cpan.org/~gsar/Tie-IxHash-1.21/lib/Tie/IxHash.pm
ここのSourceからダウンロードね
0487nobodyさん2005/11/18(金) 04:25:30ID:???
>>483
tie を使って自分でそういう hash を作ることも可能。
0488nobodyさん2005/11/18(金) 07:56:03ID:???
%hash = (
  'audio' => {index=>0, value=>"オーディオ",},
  'video' => {index=>1, value=>"ビデオ",},
  'cd' => {index=>2, value=>"CD-ROM",},
);

オレはこれでやってる。。
0489nobodyさん2005/11/18(金) 10:58:48ID:???
eachの戻り値をキーと値のリストで受け取ってる奴が多いが、
キーだけ受け取って値はハッシュから取った方が効率がいい。
0490nobodyさん2005/11/18(金) 11:09:40ID:???
>>489
普通に考えるとeachがせっかく返す値を捨てて値をハッシュから
とったらハッシュをひく手間がかかる分損しそうなものだが...
foreach (keys ...)でまわせって意味かな? それならわかる。

とりあえず論よりベンチ。

use Benchmark;
my %h = (1..2000);

timethese(undef, {
foreach => sub {
foreach my $k (keys %h) {
my $v = $h{$k};
}
},
each => sub {
while(my($k, $v) = each %h) {
}
},
each_key => sub {
while(my($k) = each %h) {
my $v = $h{$k};
}
},
});

Benchmark: running each, each_key, foreach for at least 3 CPU seconds...
each: 3 wallclock secs ( 3.18 usr + 0.00 sys = 3.18 CPU) @ 594.34/s (n=1890)
each_key: 3 wallclock secs ( 3.24 usr + 0.00 sys = 3.24 CPU) @ 470.68/s (n=1525)
foreach: 3 wallclock secs ( 3.21 usr + 0.00 sys = 3.21 CPU) @ 686.60/s (n=2204)
0491nobodyさん2005/11/18(金) 11:32:55ID:???
ベンチとるときは、できるだけ同じ条件でやらないと

timethese(undef, {
foreach => sub {
foreach $k (keys %h) {
$h{$k};
}},
each => sub {
while(($k, $v) = each %h) {
$v;
}},
each_key => sub {
while(($k) = each %h) {
$h{$k};
}},
undef => sub {
while(($k,undef) = each %h) {
$h{$k};
}},
});
0492nobodyさん2005/11/18(金) 12:18:06ID:???
>>490-491
http://perldoc.jp/docs/perl/5.6.1/perlfunc.pod#item_each_HASH

my($k) = each %h も ($k) = each %h もリストコンテキスト。
my $k = each %h なり $k = each %h として計らないと意味無し。
0493nobodyさん2005/11/18(金) 12:38:34ID:???
面白い結果が出た
OS : Windows XP
Ver: Active Perl 5.8.7 build 815
CPU: Athlon 1.6GHz -> 1.0GHzにクロックダウン
Mem: 256MB

ベンチマーク部>>491のものに>>492の修正を加えて使用
my %h = (1 .. $data_count*2);

データ数 2^2
Benchmark: running each, each_key, foreach, undef for at least 3 CPU seconds...
each: 4 wallclock secs ( 3.01 usr + 0.00 sys = 3.01 CPU) @ 142105.46/s(n=427169)
each_key: 2 wallclock secs ( 3.11 usr + 0.02 sys = 3.13 CPU) @ 138342.29/s(n=432458)
foreach: 2 wallclock secs ( 3.17 usr + 0.00 sys = 3.17 CPU) @ 118013.55/s(n=374575)
undef: 4 wallclock secs ( 3.13 usr + 0.01 sys = 3.14 CPU) @ 124147.58/s(n=390320)

データ数 2^4
Benchmark: running each, each_key, foreach, undef for at least 3 CPU seconds...
each: 2 wallclock secs ( 3.18 usr + 0.00 sys = 3.18 CPU) @ 42106.14/s (n=133687)
each_key: 3 wallclock secs ( 3.00 usr + 0.01 sys = 3.01 CPU) @ 40220.63/s (n=120863)
foreach: 4 wallclock secs ( 3.30 usr + 0.00 sys = 3.30 CPU) @ 48033.28/s (n=158750)
undef: 3 wallclock secs ( 3.10 usr + 0.00 sys = 3.10 CPU) @ 35960.05/s (n=111620)

データがごく少ない場合においてはeachでまわしたほうが若干速い。
でも2^3個程度までの話だしkeysをforeachで回したほうが良さそうだな
0494nobodyさん2005/11/18(金) 15:29:22ID:???
うちじゃ逆だな。キー数が少ないうちはforeach+keysが速いが、
多くなるに連れて遅くなり7000個あたりでeach系に抜かれた。
list eachとscalar eachでは微妙にscalar eachのが速いが、
ループ内で値をたくさん使うならlist eachのがよさそう。
0495nobodyさん2005/11/18(金) 15:42:17ID:???
>>489-494
追試とまとめ。
http://boobar.hp.infoseek.co.jp/bench/hash.txt
04964932005/11/18(金) 16:18:46ID:???
>>494
データ数1024よりも多くして実験してなかった・・・こちらでは2050付近で抜かれた

>>495
詳しい検証乙

データ数が増えるとkeysの戻り値の配列の大きさがネックになるわけか
0497nobodyさん2005/11/18(金) 16:44:41ID:???
>>495
乙。勉強になりますた。
0498nobodyさん2005/11/18(金) 16:49:18ID:???
CGI::Liteも5.8x系の標準モジュールにしてほしいんだけど、
こういうのはどこで言えばいいんだろ(´・ω・`)
0499nobodyさん2005/11/18(金) 17:03:10ID:b/mBx1Hf
>>485
@list = (['key' => 'val'], ...);
これで値をセットしたときってどうやって取り出すんでしょうか?
for(my($i) = 0; $i < $#list; $i += 2){
  my($key, $val)= ($list[$i], $list[$i + 1]);
  〜処理〜
}
って感じですか?


>>485, 486
ちょっと使い方を覚えてみようかな


>>488
そうやって値をセットしたときの取り出しはどうやるんでしょか?

0500nobodyさん2005/11/18(金) 17:07:32ID:???
>>498
その要求が通るとは到底思えないが、弾の人にでもメールしてみたらぁ?

>>499
http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perldsc.html
0501nobodyさん2005/11/18(金) 17:25:13ID:b/mBx1Hf
にゃるほろ2次元配列ってゆう考え方でしたか。
慣れるまでに時間かかりそうですが、ありがとうございました m(_ _)m
0502nobodyさん2005/11/18(金) 17:35:46ID:b/mBx1Hf
教えてもらった事を比較的自分に分かり易い様にしようと弄ってたらこんな感じになりました。

@list2 = (
{'audio' => "オーディオ"},
{'video' => "ビデオ"},
{'cd' => "CD-ROM"},
{'dvd' => "DVD"},
{'bench' => "ベンチマーク"},
{'text' => "テキスト"},
{'bin' => "バイナリ"}
);

foreach (@list2){
  my($key, $val) = each(%$_);
  print "$key => $val\n";
}

順番を保持しなくちゃならないときはこんな感じでいこうかなって思います。
0503nobodyさん2005/11/18(金) 17:40:35ID:???
>>502

ちなみに
>>485 みたいに配列使うなら
foreach my $elem (@list) {
 my($key, $val) = @$elem;
}
で行ける。

>>502 のやり方だと要素が1つだけのハッシュがいくつか出来てしまうので
少しだけ空間効率が悪い。
まぁ、小さいから気にならないだろうけど。
0504nobodyさん2005/11/18(金) 17:45:08ID:b/mBx1Hf
>>503
おぉ〜、そのやり方のほうがスマートな気がする。

いやはや勉強になります。
0505nobodyさん2005/11/18(金) 18:15:21ID:???
>>499
「ハッシュはリストである」ということを知っていれば、簡単にわかる。

@foo = (1,10,2,20,3,30);
%bar = @foo;
print "$_ -> $bar{$_}\n" foreach keys %bar;
0506nobodyさん2005/11/18(金) 18:15:31ID:lIGSV4IR
これ↓はどういう意味でしょうか?

【5.1登場】PHP時代到来 他言語終了【Perl即死】
http://pc8.2ch.net/test/read.cgi/php/1129715894/842

842 名前:nobodyさん[sage] 投稿日:2005/11/18(金) 18:05:46 ID:???
PerlはKE★Tの糞コードのせいで全てが終わった

0507nobodyさん2005/11/18(金) 18:29:06ID:???
>>506
続きはこっちでやって
http://pc8.2ch.net/test/read.cgi/php/1078991985/l50

いちいち解説してられないから
0508nobodyさん2005/11/18(金) 18:30:58ID:???
>>506
要約すれば「保守性の高い、美しいコードを書く術を学び、書きましょう」ということです。
0509nobodyさん2005/11/18(金) 18:32:14ID:EJTafLuM
Perl版の新月(P2Pを用いた掲示板)をデバッグしたいのですがPerlでP2Pアプリを作成するチュートリアルのようなものをご存じの方いらっしゃいませんか?
ぐぐっても九行で書かれたP2Pしか出てこなくてorz
0510nobodyさん2005/11/18(金) 18:53:23ID:???
>>509
デバッグに必要なのは「P2Pアプリを作成するチュートリアル」ではなくて
Perl のマニュアルではないのか? >>7-8
0511nobodyさん2005/11/18(金) 19:03:33ID:???
>>510
すいません。やりたいことの整理が出来てませんでした。
新月作者がPerl版の開発を放棄してるので、余分な機能を付与しない掲示板だけのP2Pソフトを作りたいんです。
ただP2Pアプリを弄ったことがないものでどうしたものかなと。
ソース読んで改造するのがてっとりばやいにしても概念が分からないので・・
0512nobodyさん2005/11/18(金) 19:09:55ID:???
nyの技術
pdfで流れてる
0513nobodyさん2005/11/18(金) 19:27:01ID:???
>>512
ソースコード載ってないぞあれw
0514nobodyさん2005/11/18(金) 19:28:27ID:???
>>511
概念や基本的な設計に関してはスレ違いだし、Google さんにでも
尋ねた方が早そう。具体的に Perl でのやり方となると改造ベース
が転がってるんだからソース読みながら学んだ方が効率いいわな。
コレだよね?
http://prdownloads.sourceforge.net/shingetsu/shingetsu-0.5b5.tar.gz

あと CPAN にはこういうのがあるね。
http://search.cpan.org/~klimkin/P2P-pDonkey-0.05/
0515nobodyさん2005/11/18(金) 20:00:31ID:???
>>507
>>508
サンクス。
0516nobodyさん2005/11/19(土) 22:11:13ID:???
丸一日質問がない
0517nobodyさん2005/11/19(土) 23:26:30ID:???
そう言う時はageて見ようぜ
0518nobodyさん2005/11/20(日) 00:14:24ID:???
すみません、パールインストールしたんですけれど、動かないです
インストール成功したかの確認方法ってありますか?
0519nobodyさん2005/11/20(日) 00:16:02ID:???
>>518
コマンドプロンプトから「perl -v」

ていうか情報が何もかも足り無ぇ出直して来い
0520nobodyさん2005/11/20(日) 00:16:49ID:???
>>517が上げるから変なのが沸いたんだろ
0521nobodyさん2005/11/20(日) 00:20:29ID:???
この流れほのぼのしててイイ
0522nobodyさん2005/11/20(日) 00:47:10ID:???
WebProg板らしくていい
0523nobodyさん2005/11/20(日) 01:29:36ID:q2W9WK5M
ああん?
0524nobodyさん2005/11/20(日) 01:54:09ID:???
(・∀・)ニヤニヤ
0525nobodyさん2005/11/20(日) 02:34:35ID:???
すみません、postのチェックボックスのステータスを大量に変数に格納したいのですが、
変数名をループで作り出すにはどうすればいいのでしょうか?

my $chk0 = param('chk0');
↑の数字をforループでインクリメントして宣言するにはどうしたらいいでしょうか?
0526nobodyさん2005/11/20(日) 02:40:49ID:???
>>525
配列を使えといいたいが

foreach(0 .. 9){
${'chk'.$_} = 適当;
}
0527nobodyさん2005/11/20(日) 19:45:49ID:???
名前1->得点1 名前2->得点2 っていうような配列があり、得点でソートする事までは出来た。
で、得点順に順位をつけるんだが、同点の場合同じ順位にし、次の順位は飛ばすって事ができなくて詰まっている。
現在は配列をforループし、$iをインクリメントして順位としている。
何かいい方法は無いだろうか。
0528nobodyさん2005/11/20(日) 19:47:27ID:???
>>527
>>1
0529nobodyさん2005/11/20(日) 20:20:46ID:???
>>528
素直にわかりませんって言えないんですか?
0530nobodyさん2005/11/20(日) 20:30:19ID:???
>>529
既に回答を用意してる漏れがはっきり言ってやろう
> 名前1->得点1 名前2->得点2 っていうような配列があり
ここが意味不明。
以下に漏れが適していると考えたデータ構造とそのソースを貼ったるから
これで満足できないならちゃんと伝わるように説明汁

my %name2score = (hoge => 100, fuga => 90, hage => 100);

my %score2name;
foreach my $name (keys(%name2score)) {
push @{$score2name{ $name2score{$name} }}, $name;
}
my $rank = 1;
foreach my $score (sort {$b <=> $a} keys(%score2name)) {
foreach my $name (@{$score2name{$score}}) {
printf "%2d: %s(%3dpt)\n", $rank, $name, $score;
}
$rank += @{$score2name{$score}};
}
0531nobodyさん2005/11/20(日) 20:35:37ID:???
最近質問者の態度が悪過ぎ
05325272005/11/20(日) 20:46:03ID:???
>>530
thx
考え方さえわかれば後は自分で弄れると思いましたので、データ構造を適当に書いてしまいました。
申し訳ありませんでした。

あ、>>529は自分ではありませんので、念のため。
0533nobodyさん2005/11/20(日) 20:47:07ID:???
だな
>>527←こんな口の聞き方も知らない奴に教えなくていいよ
小学校高学年ぐらいの子供だろけど。
0534nobodyさん2005/11/20(日) 20:49:33ID:???
>>532
ク、クマー 釣られたか。すまんかった
いつの間にか煽り耐性なくなってしまっとるな・・・気をつけなければ
0535nobodyさん2005/11/20(日) 20:51:17ID:???
>>531 >>533
気に食わないならこんなボランティアさっさとやめな
0536nobodyさん2005/11/20(日) 21:01:02ID:???
( ´,_ゝ`)プッ
0537nobodyさん2005/11/20(日) 21:23:44ID:???
WebProg板らしいじゃないか
0538nobodyさん2005/11/20(日) 21:32:49ID:???
ほんと厨房が多いな
さっさと強制IDにしろよこの板
0539nobodyさん2005/11/20(日) 21:33:46ID:???
質問者は age ればいいんでないか
0540nobodyさん2005/11/20(日) 21:35:51ID:???
スレの雰囲気悪くすると自分の首を締める事になるよ >厨房
0541nobodyさん2005/11/20(日) 21:37:37ID:???
>>535
嫌だ。
私はお前みたいなガキを眺めてるのが好きなのだ。
0542nobodyさん2005/11/20(日) 21:39:20ID:???
レン鯖板も、インターネット板も、WebProg板も…
0543 ◆BDFCNV1.to 2005/11/20(日) 21:39:37ID:???
ああまた騙りかウゼェな。トリップ付けるから。
0544nobodyさん2005/11/20(日) 21:41:55ID:???
レン鯖とネットは元からだろw
それよりム板も・・
0545nobodyさん2005/11/20(日) 21:42:34ID:sql5orzi
厨房スレage
0546nobodyさん2005/11/20(日) 21:44:40ID:???
>>545
IDがSQLにorzなんて素晴らしいですね
0547nobodyさん2005/11/20(日) 22:45:33ID:Va/OuDM7
SUGEEEEEEEEEE!
0548nobodyさん2005/11/21(月) 01:50:14ID:???
次スレのテンプレには「質問者はトリップ推奨」といれよう。
0549nobodyさん2005/11/21(月) 02:08:53ID:???
釣られた人も必死だなー
0550nobodyさん2005/11/21(月) 02:12:55ID:???
0551nobodyさん2005/11/21(月) 03:36:00ID:m9z0lXWM
>>527
純粋に順位を加えていく変数($i)と、状況に応じて順位を加えていく変数($j)の2つをつくる。
$iはループ中でひたすらインクリメントのみ。
$jは直前の人の点数と異なれば$iを採用する。 同じであれば$jをそのまま採用。

で出来ないかな?
0552nobodyさん2005/11/21(月) 07:40:49ID:HZcu4vs3
はじめまして。
質問があります。

perlで$ENV{'PATH_INFO'}を取得しようとしていますが、
なぜか取得してくれません。

これはサーバー側の設定が影響しているのでしょうか。
ちなみに、他の環境変数については、正常に取得しています。

よろしくお願いします。
0553nobodyさん2005/11/21(月) 07:49:40ID:???
>>552
それだけじゃ分からん。
取得する辺りのコードと、設置する鯖晒す。
05545522005/11/21(月) 09:10:44ID:HZcu4vs3
お返事ありがとうございます。
今やりたいことは、稼動中の掲示板の改造です。
$ENV{'QUERY_STRING'}からGETで取得している値を、
$ENV{'PATH_INFO'}から取得したいと思っています。

◆サーバー:ロリポップです。
◆コード
値を確かめるために、下のようなコードだけを記述したファイルを
アップし、適当な引数を付けてテストしていました。

print"Content-type: text/html\n\n";
print qq(
<HTML><HEAD><meta http-equiv=Content-Type content=text/html; charset=shift-jis>
</HEAD>
<BODY>
$ENV{'PATH_INFO'}
</BODY>
</HTML>
);
exit;

よろしくお願いいたします。
0555nobodyさん2005/11/21(月) 09:19:28ID:???
>>554
PATH_INFOを勘違いしてるって事は無いよね
テストに使ったURLはどういう形式?実在じゃなくていいから
0556nobodyさん2005/11/21(月) 09:26:41ID:HZcu4vs3
早速ありがとうございます。

このような形式です。
http://ドメイン/bbs/index.cgi?room=1

よろしくお願いいたします。

0557nobodyさん2005/11/21(月) 09:30:28ID:???
path_infoって、文字のままでpath情報だけでは?
getメソッドの取得はquery_stringのままでいいと思うけど、変更しないといけない理由は?
0558ヽ(´ー`)ノ ◆.ogCuANUcE 2005/11/21(月) 09:39:19ID:???
>>556
それ、PATH_INFO 含まれてないし。とりあえず CGI.pm のドキュメント嫁。

OBTAINING THE SCRIPT'S URL と FETCHING ENVIRONMENT VARIABLES の path_info() のところ。
多分探せば日本語訳もある。
0559nobodyさん2005/11/21(月) 10:31:19ID:HZcu4vs3
ありがとうございます。

何か私が勘違いをしているのでしょうかね。
ドキュメントを読んで見ます。
0560nobodyさん2005/11/21(月) 11:37:26ID:5KZiaClr
@abc=split(/\,/,@aaa[0]);
if(@abc[1] eq $name){&error}

@abc=split(/\,/,@aaa[1]);
if(@abc[1] eq $name){&error}

@abc=split(/\,/,@aaa[2]);if(@abc[1] eq $name){&error}

これを一行にしたくて@abc=split(/\,/,@aaa[0,1,2]);
if(@abc[1] eq $name){&error}
にしたんですけど機能しません
どこを直したらよいのでしょうか?
0561nobodyさん2005/11/21(月) 11:44:26ID:???
>>560
splitは配列を受けられない
見たところその処理はチェックのみで代入は不要?
(split(/\,/, $_))[1] eq $name && &error foreach @aaa[0,1,2];
こんな感じでどうだろ
0562nobodyさん2005/11/21(月) 11:52:25ID:5KZiaClr
>>561
レスありがとうございます
実際にはサブルーチンで代入します
すみません

使用目的は連続投稿を防ぐためで、ログファイルに同一内容があるのかチェックをしたいのです
0563nobodyさん2005/11/21(月) 12:02:55ID:???
>>562
@abc=split(/\,/,@aaa[0,1,2]);
のsplit(/\,/,@aaa[0,1,2]);の部分がサブルーチンの戻り値ということかな
期待する内容は(0の名前, 1の名前, 2の名前)という配列ということでOK?
それなら
map { +(split /,/, $_)[1] } @aaa[0,1,2];
とか。
でも、それは構造を考え直したほうが良いかも・・・
0564nobodyさん2005/11/21(月) 12:23:57ID:???
>>563
もう一度考え直してみます
ありがとうございました
0565nobodyさん2005/11/21(月) 12:29:45ID:???
>>564
この辺参考にどぞー
http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perldsc.html
0566nobodyさん2005/11/21(月) 15:57:20ID:???
掲示板のログ検索を導入したのですが、検索対象文字に\を入れるとエラーが出ます。

$ascii = '[\x00-\x7F]';
$twoBytes = '[\x8E\xA1-\xFE][\xA1-\xFE]';
$threeBytes = '\x8F[\xA1-\xFE][\xA1-\xFE]';
open (DATA, "<$log");
flock (DATA, 1);
@line = <DATA>;
close (DATA);
# $wordはフォームから受け取った検索対象文字列です
# 検索対象文字列はスペース区切りで複数設定可能にしてあります
$word =~ s/ | /\t/g;
&jcode::convert (\$word, "euc", "sjis");
@words = split (/\t/, $word);
  foreach (@line) {
    &jcode::convert (\$_, "euc", "sjis");
      # ログはタブ区切りです
      @data = split (/\t/, $_);
      foreach (0 .. $#words) {
# &error ($words[$_]);   # ※1
        # $data[6]が記事の本文です
        if ($data[6] =~ /^(?:$ascii|$twoBytes|$threeBytes)*?(?:$words[$_])/) {
# &error ($words[$_]);   # ※2

検索文字に\を入れて※1の部分でエラーを出そうとすると正常にエラー画面に\が表示されるのですが、
※2で出そうとしても、その前にCGIエラーで落ちてしまいます。
下から2行目のif文内の$words[$_]に\が入った時点で落ちると思うのですが、
どのようにしたら正常に検索処理を行なえるでしょうか。
0567nobodyさん2005/11/21(月) 16:06:06ID:???
quotemeta とか \Q\E とかでエスケープしてないの?
最低限そうしないと、いろいろ死ぬぜ?
05685662005/11/21(月) 16:19:18ID:???
>>567
レスありがとうございます。
以下のように修正することで解決できました。
- @words = split (/\t/, $word);
+ @words = split (/\t/, quotemeta ($word));
0569nobodyさん2005/11/22(火) 16:26:52ID:???
Win+Apacheのローカルサーバで,Perlスクリプトを組んでから,
オンラインのレンタルスペースにアップロードして稼動させようとしています.

ローカルできちんと動くスクリプトを組むまではOKだったのですが,
レンタルスペースで動かそうとすると,様々なエラーがでてしまいます.

レンタルスペースの仕様書を見て,使えないモジュールのチェックなどはもちろんですが,
ファイル名の大文字や小文字の判定など,他に気をつけることはありますでしょうか?
0570nobodyさん2005/11/22(火) 16:36:17ID:???
レンタルスペースの仕様書通りの、shebangが書かれていない。
0571nobodyさん2005/11/22(火) 17:10:04ID:???
1行目!
0572nobodyさん2005/11/22(火) 17:18:46ID:???
さすがに !#/usr/bin/perl はちゃんと記述してあります.
質問が少し漠然すぎたかもしれませんので,具体的な質問に変更します.

$year=2005,$month=11;
@allfiles=(haman200511,Amuro200511);
@persons=(Amuro,Quess,Char);

#指定された年月かつ,存在する人物のファイル名を取得
for my $file (@allfiles) {
for my $person (@persons) {
if($file eq "$person$year$month.dat"){
push(@files,$file);
}
}
}
0573nobodyさん2005/11/22(火) 17:19:42ID:???
これ↓のPerl版サンプルがXREAで動かないのですが、どこを修正すればいいのでしょうか?

SAJAX
http://www.modernmethod.com/sajax/
0574nobodyさん2005/11/22(火) 17:21:11ID:???
結果
ローカル @files=(Amuro200511.dat);
レンタル @files=();

この箇所の挙動がレンタルとローカルで異なっています.
ローカルのPerlのVerは5.8で,レンタルのほうは5.6なのですが,
Verによる挙動の違いというようなものがあるのでしょうか?

訂正
@allfiles=(haman200511.dat,Amuro200511.dat);
0575nobodyさん2005/11/22(火) 17:30:48ID:???
>>574
@allfilesの要素をクォートで括ってないからじゃないの?
0576nobodyさん2005/11/22(火) 17:31:04ID:???
>>574
「use warnings」を有効にしてから「きちんと動く」と言ってくれ。
0577nobodyさん2005/11/22(火) 17:31:51ID:???
>>573
CGI設置について質問 【Part2】
http://pc8.2ch.net/test/read.cgi/php/1104624784/
0578nobodyさん2005/11/22(火) 17:49:44ID:???
>>577
サンクス
0579nobodyさん2005/11/22(火) 17:53:28ID:eRlqTFqT
$year=2005,$month=11;
@allfiles=(haman200511,Amuro200511);
@persons=(Amuro,Quess,Char);

my($year, $month) = (2005, 11);
my(@allfiles) = ("haman200511", "Amuro200511");
my(@persons) = ("Amuro", "Quess", "Char");
0580nobodyさん2005/11/22(火) 17:55:35ID:???
>>579
qw 使えよ。
0581nobodyさん2005/11/22(火) 18:08:43ID:???
TMTOWTDI :-P
0582nobodyさん2005/11/22(火) 19:46:43ID:???
タイミング系のデバッグはどうやってやってますか?
0583nobodyさん2005/11/22(火) 20:01:32ID:???
タイミング系って何のこと言ってますか?
0584nobodyさん2005/11/22(火) 20:08:08ID:???
まったく同じタイミングのアクセスを意図的にやるにはどうやったらいいでしょうか?
0585nobodyさん2005/11/22(火) 20:22:48ID:???
>>576
use warningしてみましたが,状況は進展しませんでした.

>>579
実際のスクリプトではクォートしています.
抄写するにあたり,変数の中身を示しておこうと思い,
記述したときの手抜かりで,クオートし忘れました,申し訳ありません.
0586nobodyさん2005/11/22(火) 20:32:03ID:???
>>585
で、クォートしたらウチでは動くんだけど、そっちでは動かないの?
0587nobodyさん2005/11/22(火) 20:35:50ID:???
> さすがに !#/usr/bin/perl はちゃんと記述してあります.
なんで誰も突っ込まないw
0588nobodyさん2005/11/22(火) 21:08:47ID:???
>>586
WInXp&Apacheのローカル環境だと大丈夫なのですが,レンタルスペースだとダメなんです.
ローカルとサーバの違いというものがよく判らなくて,デバッグに四苦八苦という状態です.

>>587
#!/usr/bin/perl ですね.すみません.


もう少し自分で頑張ってみてダメなようでしたら,また質問するかもしれませんが,
そのときはよろしくお願いします.
0589nobodyさん2005/11/22(火) 21:15:52ID:???
>>588
ローカルがWinってのは先に言おうな。話が全然違ってくるからな。
で、俺が言ってるのは>>572にクォート入れても動かないのか、なんだが。

もういいや。
0590nobodyさん2005/11/22(火) 21:25:32ID:???
>>569
無駄なやりとりが増えるから落ち着いてから出直してきなさい。

OSが異なれば改行の扱いが変わったりもするし、
スクリプトやデータファイルの文字コードに起因しているかもしれんし、
マルチバイトなファイル名/ディレクトリ名なんて脱力ものな原因かもしれんし、
FTP転送がまずいだけかもしれん。

 typo
 様々なエラーがでてしまいます。
 挙動がレンタルとローカルで異なっています。
・・・神かエスパーじゃなきゃわからんよ。
0591nobodyさん2005/11/22(火) 22:02:19ID:???
デバッグに関するテンプレ欲しいな。
0592nobodyさん2005/11/22(火) 22:08:49ID:???
>>569
"Hello World"を表示するような単純なスクリプトを動かしてみれ。
まずはそこから。
05939742005/11/22(火) 23:14:39ID:???
借りている鯖がFreeBSDだって事は知っていたんだけど
文字コードなんか気にせずに秀丸で文字コードをshift_jisに設定して書いて
マスタ、所が全角英数字を半角英数字にしようとしたら、プログラム自体は
jcode::tr(\$arg_[$i], '0-9A-Za-z', '0-9A-Za-z');
たったのこれっぽっちなんだけど、これって文字コードがEUC-JPじゃないと
正確に変換出来ないんだよね、やっぱり皆さんもperlのプログラム書くときの
文字コードはEUC-JPデツカ?
0594nobodyさん2005/11/22(火) 23:18:40ID:???
どこの誤爆?
0595nobodyさん2005/11/22(火) 23:21:51ID:???
974デツ誤爆スマソ
0596nobodyさん2005/11/23(水) 04:24:57ID:fNvsPnqm
はじめまして
本のサンプルコードで理解できないところがあるんで教えてください。
$Value =~ /(\w+)\.(\w+)$/;
なんて書くときの、最後の、
$/
って何を表すんですか?
ファイル名を取り出すようなところで使われてるんだけど…。

これなに?
下の例だと$っていらない気がするんだが…。
こんな感じ
例:
if($FileName =~ /(\w+)\.(\w+)$/){
$FileName = "$1\.$2";
}
0597nobodyさん2005/11/23(水) 04:32:09ID:???
>>596
http://x-web.pobox.ne.jp/fcgi/fcgi_20.html
05985962005/11/23(水) 04:38:15ID:fNvsPnqm
>>597
ネ申!!
ありがとうございます。
ちゅーか、大喜びするほどじゃない…。基礎ネタ?
修行していつか還元します…。
0599nobodyさん2005/11/23(水) 08:50:52ID:???
File::Spec や File::Basename を使ってないスクリプトは例外なく糞。
0600nobodyさん2005/11/23(水) 08:56:54ID:???
んなこたーない
0601nobodyさん2005/11/23(水) 10:33:48ID:???
File::Spec や File::Basename を使わないとスクリプトを書けない奴は例外なく糞。
0602nobodyさん2005/11/23(水) 11:30:00ID:???
>>601
あぁ、ここ WebProg 板だったね(わらい
0603nobodyさん2005/11/23(水) 16:24:36ID:???
File::SpecやFile::BasenameはFile::SpecやFile::Basenameを使って
書かれているんだろうか?
0604nobodyさん2005/11/23(水) 16:45:50ID:???
目的の処理ができるかどうか。。  ただそれだけだ。
コストが折り合えば使えるものはなんでも柔軟に使い、使えないものは使わない。
これを使わなきゃダメなんて・・・ やり方がいくらでもある以上、口が裂けても言えん
0605nobodyさん2005/11/23(水) 16:52:23ID:???
そうやって、カスみたいなCGIが量産されていくのですね。
0606nobodyさん2005/11/23(水) 16:57:40ID:JssfbXnp
ここまで何も作れないカスの妬みレスでした^^
0607nobodyさん2005/11/23(水) 16:59:58ID:???
>>599=>>602=>>605
異常な執念深さだな。 File::Spec と File::Basename に何かコンプレックスでもあるのか?
0608nobodyさん2005/11/23(水) 17:11:23ID:???
>>607
>>599>>602は俺じゃないけど。
標準で付いてくるモジュールぐらい、ちゃんと使ったらどうよ。
(不完全な)車輪の再発明を見てると馬鹿かと思う。
0609nobodyさん2005/11/23(水) 17:20:16ID:???
>>608
ほほう。
元質問が「本のサンプルコード」に関する質問だっていうのに、
File::Spec や File::Basename を持ち出すのが適切だとでも?
0610nobodyさん2005/11/23(水) 17:30:15ID:QqvL0TVY
 半角カタカナを化けずに表示させたかったので、jcodeg.plというものがあると知り、それを使ってみたのですが、
やはり化けてしまいます。原因として何が考えられるでしょうか?
0611nobodyさん2005/11/23(水) 17:32:10ID:???
半角カタカナだと、文字コード判別(getcode)で誤判別をしてしまう。
0612nobodyさん2005/11/23(水) 17:34:05ID:???
>>610
Shift-Jisをやめればいいと思います
0613nobodyさん2005/11/23(水) 17:40:21ID:???
モジュールは確かに便利なんだけど、infoseekで使うときに困るんだよな。
0614nobodyさん2005/11/23(水) 17:49:16ID:???
>>610
どうやって使ったのか言うてみい。
0615nobodyさん2005/11/23(水) 18:22:04ID:???
>>609
糞な本が糞なプログラマを養う。
0616nobodyさん2005/11/23(水) 18:34:04ID:???
泥の中に蓮の花を開く
0617nobodyさん2005/11/23(水) 19:20:27ID:???
kent見本にしたコードはひどいよな。
0618nobodyさん2005/11/23(水) 20:04:36ID:???
>>617
はいはいKENTを超えてから言ってね
0619nobodyさん2005/11/23(水) 20:09:38ID:???
それはギャグて言っているのか?(AA略
0620nobodyさん2005/11/23(水) 20:10:39ID:???
妬み乙
0621nobodyさん2005/11/23(水) 20:21:18ID:???
ちょっと調べものをするのに設置したのですが
良かったらどうぞです

http://user.ftth100.com/mirrorhenkan/perl/
0622nobodyさん2005/11/23(水) 20:57:03ID:???
>>608
俺様専用スクリプトだって、Unix環境専用スクリプトだってアリなんだし、
必ず使えってことも無いでしょ。

必要要件を満たさないものを自作するよりは、
素直に使った方がいいけどさ。
0623nobodyさん2005/11/23(水) 22:28:38ID:5cxNyXSu
質問させて下さい。
windowsXPSP2
ActivePerl-5.8.7.813-MSWin32-x86-148120.msi

を使っています。
plファイル自体の文字コード EUC
内部で扱う文字コード EUC
標準出力 Shift-JIS
標準入力 EUC

POSTデータ等で受け取ったデータはshift-jisであれば内部処理用にEUCに変換する。

という構成でプログラムを書きたく、検索した結果、下記の他いろいろ試してみた
のですがうまくいきません。
文字化けで出力されたり、
"\x{fffd}" does not map to shiftjis at〜〜
と出力されたりします。

#STDIN と STDOUT を別々にコード変換する
use encoding 'euc-jp', STDOUT=>'shift_jis';

どうかお力添えをして頂けないでしょうか。
よろしくお願い致します。
0624nobodyさん2005/11/23(水) 22:34:46ID:???
>>623
いろいろやったんなら試したこと全部書かないと
レスしても 「それはやってみましたがダメでしたとかいわれて」殴ってやりたくなるからな〜
レスつきにくいぞ

とりあえず jcode.pl でも使っとけ


0625nobodyさん2005/11/23(水) 22:48:30ID:???
utf8フラグ
0626nobodyさん2005/11/23(水) 23:04:32ID:???
標準出力をEUCにすればええがな。
携帯?
0627nobodyさん2005/11/23(水) 23:07:42ID:???
>>623
>>8 の [Perl5.8Unicodeメモ] のページを読むべし。
06286232005/11/23(水) 23:46:19ID:???
>>624
>>625
>>626
>>627
みなさんアドバイスありがとうございます。

携帯からの入出力を想定しているためこのような仕様で書きたいと思いました。
Perl5.8Unicodeメモのページを読み、記載されてあった
簡単なところから
まず、
use encoding "euc-jp";
print "こんにちわ\n";
としてDOSで実行してみたのですが
「、ウ、、ヒ、チ、・」
と表示されてしまいます。

自分なりに
use encoding "euc-jp";
use Encode qw/ encode decode /;
use Encode qw(from_to);

print from_to("あああ", "shift_jis", "euc-jp");
ともしてみたのですが、
Wide character in subroutine entry at C:/Perl/lib/Encode.pm line 186.
と出てしまいます。
おそらくこれはutf8フラグを切り落としていないからだと
思いますが、euc-jpでソースを書いて出力する際には
一つ一つ文字コードを変換していかないといけないのでしょうか?

0629nobodyさん2005/11/24(木) 00:02:56ID:???
>>628
> 「、ウ、、ヒ、チ、・」 と表示されてしまいます。
君が自分で EUC-JP の文字列を Shift_JIS のコンソールへ
出力しているのだから化けて当然。
http://www.kt.rim.or.jp/~kbk/perl-5.8/encoding.html

> 自分なりに(略)ともしてみたのですが、
from_to() の使い方を間違えている。
http://www.kt.rim.or.jp/~kbk/perl-5.8/encode.html
0630nobodyさん2005/11/24(木) 00:46:53ID:???
>>628
>>623に書かれている
> use encoding 'euc-jp', STDOUT=>'shift_jis';
これでだめなん?
0631nobodyさん2005/11/24(木) 04:22:56ID:QV+2W1Ju
$hogeを加工;
&sub1;
sub sub1{$hogeをさらに加工;&sub2;return}
sub sub2{$hogeをさらにさらに加工;return}

というようなことをしたいんですが、sub2になるとせっかく加工した$hogeが初期化されてしまってるようなんですが、どう対処すればいいでしょうか?
0632nobodyさん2005/11/24(木) 04:35:08ID:???
>>631
my宣言でもしてない限り、その書き方なら$hogeは初期化されないけど。
何か間違ってない? つかuse strictやれと小一時間(ry
0633nobodyさん2005/11/24(木) 04:57:27ID:QV+2W1Ju
ありがとうございます。
よく見てみたら意味もわからずmy宣言してました。
これをとったらうまくうごきました。
これからも御鞭撻のほど宜しくお願いします。
0634nobodyさん2005/11/24(木) 09:21:02ID:???
>>633
グローバルの$hogeをそのまま複数のサブルーチンからいじるのは一般的にいうとあまり行儀のいい
プログラムではないな。変な癖をつけると大きいプログラム書くようになると苦労するよ。
0635nobodyさん2005/11/24(木) 10:41:05ID:???
要するに値を渡したり戻したりが全然わかってないと。
0636nobodyさん2005/11/24(木) 11:40:57ID:???
今期のテーマ:脱KENT"2005"冬の陣
0637nobodyさん2005/11/24(木) 20:39:28ID:???
変数のアドレスを渡すのら
0638nobodyさん2005/11/24(木) 21:50:23ID:EJIyCJlG
戻り値を受け取るのら!
0639nobodyさん2005/11/24(木) 22:02:42ID:???
$hoge = ¥$hoge;
0640nobodyさん2005/11/25(金) 00:36:53ID:???
sendmail串万歳
0641nobodyさん2005/11/25(金) 06:48:37ID:s5kWftCO
use strict;
my %data = check('hoge');
if(%data) {print "OK";} else {print "NG";}
exit;
sub check
{
 my ($text)=@_;
 if($text ne 'hoge') {my %data={'text'=>$text}; return %data;}
 return undef;
}
2行目の位置で正常なハッシュ返ってくればエラーが出ないのですが、
undefが返ってくると「Odd number of elements in hash assignment」と
出てしまいます。
こういう、正常ならハッシュ値、異常ならundefみたいな事をしたい
場合には、どういう感じでコーディングすれば良いのでしょうか?
0642nobodyさん2005/11/25(金) 06:53:16ID:???
>>641
my %data = check('hoge') or ();
0643nobodyさん2005/11/25(金) 07:18:43ID:???
>>642
ありがとうございます。
それでやってみたのですが、やはり
「Odd number of elements in hash assignment」と
出てしまいます。

「return undef;」の所を「my %data; return %data」にしたら
エラーが出なくなったのですが、なんか書き方が
すっきりしないような気もします…。
0644nobodyさん2005/11/25(金) 07:22:13ID:???
「my %data = check('hoge') || ();」で解決しました。
'or'と'||'で違うんですね。勉強になりました。
0645nobodyさん2005/11/25(金) 07:34:50ID:???
>>644
あ、ほんとだ。|| でなければダメだった。
or だと評価が遅すぎたね。
06466412005/11/25(金) 07:57:32ID:s5kWftCO
…と思ったら、「my %data = check('hoge') || ();」だと
正常なハッシュ値が返ってきた時に
「Odd number of elements in hash assignment」と
出てしまいます。

もう、何が何だかわからなくなってきました…onz
0647ヽ(´ー`)ノ ◆.ogCuANUcE 2005/11/25(金) 08:25:17ID:???
先に結論だけ書いておくけど、入門書か何かでリストやハッシュについて
理解を深めた方がいいかもしれない。

my %data={'text'=>$text};
↓ こう
my %data=('text'=>$text);

return undef;
↓ こう
return ();
0648nobodyさん2005/11/25(金) 08:35:56ID:???
>>647
>return undef;
>↓ こう
>return ();
これで解決しました。

>my %data={'text'=>$text};
>↓ こう
>my %data=('text'=>$text);
これについては、最初は()の方で書いていたのですが
http://pc8.2ch.net/test/read.cgi/tech/1131286411/223
ここで、正しくは{}と掲示されたのですが…。
どちらにしても、リストやハッシュについて、理解を深めようと思います。
ありがとうございました。
0649nobodyさん2005/11/25(金) 11:39:19ID:???
>>648
http://www.kt.rim.or.jp/~kbk/perl5.005/perlref.html
0650nobodyさん2005/11/25(金) 13:21:18ID:???
>>648
それはスカラ変数に無名ハッシュとしてリファレンスを代入する時だけ
0651nobodyさん2005/11/25(金) 15:44:43ID:63zT9z2i
よろしくオナガイシマス
半角英数字、英字は大文字、小文字も含めて
10桁の乱数を生成しようと思い以下のプログラムを書いてみたのですが
数字の乱数しか生成出来ません、どこを直したらいいでしょうか、ご指摘お願いします。@array = (0..9,'A'..'Z','a'..'z');
foreach (1..10) {
my $bar = (rand scalar(@array));
print qq|"$bar"\n|;
}
0652nobodyさん2005/11/25(金) 15:46:10ID:63zT9z2i
651です改行を間違えてました
@array = (0..9,'A'..'Z','a'..'z');
foreach (1..10) {
my $bar = (rand scalar(@array));
print qq|"$bar"\n|;
}
ご勘弁です
0653nobodyさん2005/11/25(金) 15:56:15ID:???
my $bar = (rand scalar(@array));
        ↑  ↑

scalar(@array)の戻り値は@arrayの要素数
randの引数にそれを渡してるんだから、当然数値しか戻ってこない罠
0654ヽ(´ー`)ノ ◆.ogCuANUcE 2005/11/25(金) 15:56:26ID:???
- my $bar = (rand scalar(@array));
+ my $bar = $array[rand scalar(@array)];
0655nobodyさん2005/11/25(金) 16:24:41ID:???
↑分かっててintを略してる?
0656nobodyさん2005/11/25(金) 16:35:51ID:1cmYWuzn
質問、Encode 使ってUTF8→EUCにすると
「〜」が「?」になるんですが何とかならないでしょうか
0657nobodyさん2005/11/25(金) 16:39:31ID:???

あなたが無知なだけですね
0658ヽ(´ー`)ノ ◆.ogCuANUcE 2005/11/25(金) 16:52:52ID:???
>>655
略してるも何も、必要ないじゃん。わざわざ int() しろと?
0659nobodyさん2005/11/25(金) 16:54:46ID:???
654
652です
デキマスタ、ありがとう
0660nobodyさん2005/11/25(金) 17:26:20ID:???
>>656
この辺の絡みなので個別対処。
http://www.opengroup.or.jp/jvc/cde/ucs-conv.html

>>658
じゃあ scalar も外せよ、半端君。
0661nobodyさん2005/11/25(金) 18:02:46ID:???
>>660
そのまま $array[] 足しただけだろ。
なんでそんなに必死なんだ。
0662nobodyさん2005/11/25(金) 18:10:22ID:1cmYWuzn
>>660
有難うございますー
これを参考になんとかやってみますです。
0663nobodyさん2005/11/25(金) 18:15:31ID:???
>>641
>>647

>return undef;
>↓ こう
>return ();

つまり return; だよね

search.cpan.org: Perl::Critic::Policy::Subroutines::ProhibitExplicitReturnUndef
http://search.cpan.org/~thaljef/Perl-Critic-0.13/lib/Perl/Critic/Policy/Subroutines/ProhibitExplicitReturnUndef.pm
0664nobodyさん2005/11/25(金) 18:45:52ID:???
use strictのメリットって何ですか?
スクリプトが速くなったりするんでしょうか
0665nobodyさん2005/11/25(金) 18:51:59ID:ykRqgxjm
すいません
asciiファイルに\r\nが含まれることはあっても
バイナリファイルに\rのない\nが含まれていることはありえない、
と考えてバイナリファイルを選別していくやり方は問題ありますか?
0666age2005/11/25(金) 18:55:49ID:PaUDYDn8
>>665
バイナリーファイルは何でもありだからだめだよ
0667nobodyさん2005/11/25(金) 19:09:11ID:???
>>664
http://perldoc.jp/docs/perl/5.8.0/strict.pod
http://perldoc.jp/docs/perl/5.8.0/perlstyle.pod
0668nobodyさん2005/11/25(金) 19:18:35ID:???
>>665
> バイナリファイルに\rのない\nが含まれていることはありえない、

扱うバイナリファイルがその前提なら、
その方法でもいいと思うよ。
0669nobodyさん2005/11/25(金) 19:49:39ID:???
バイナリかアスキーかなんて、拡張子で判断すればいいんでないの
0670nobodyさん2005/11/25(金) 19:54:43ID:???
なぜファイルテスト演算子を使わないのかと
0671nobodyさん2005/11/25(金) 19:55:27ID:???
(´・д・)エー
0672nobodyさん2005/11/25(金) 20:19:10ID:???
ファイルテスト演算子って\0が含まれてるかどうかだけじゃなかったっけ?
0673nobodyさん2005/11/25(金) 20:21:34ID:???
すまん、違ったようだ。
0674nobodyさん2005/11/25(金) 20:51:44ID:???
x0D x0Aで改行ってのはWindows限定だから他のOSじゃ通用しないよ。
自前でチェックするならx00のあり/なしだな。手抜きの場合は。
0675nobodyさん2005/11/25(金) 20:55:26ID:???
>>664
使用者感想

use strictで肩こりが解消しました。(茨城県 I.・Y様)
もうuse strict無しではコーヒーは飲めません。(北海道 H・N様)
use strictのお陰で宝くじが当り、彼女もできました。(東京都 A・J様)
0676nobodyさん2005/11/25(金) 21:22:52ID:???
>>664
>>675みたいなおちゃらけじゃなくマジレス

use strictでkentの呪縛から逃れることが出来ますた。(京都府 M・N)
0677nobodyさん2005/11/25(金) 21:31:13ID:???
問い)xxxのCGIを改造したいのですが。
答え)use strict;の一文を削除してからどうぞ。
0678nobodyさん2005/11/25(金) 21:32:34ID:???
>>664
残尿感もなく、スッキリです!(東京都 W・C)
0679nobodyさん2005/11/25(金) 21:41:37ID:???
ヒント:グローバル変数
0680nobodyさん2005/11/25(金) 21:47:22ID:???
ヒント:グローバル経済
0681nobodyさん2005/11/25(金) 21:48:38ID:???
バイナリかどうかのチェックとはちょっと違うかも知れないけど File::MMagic とか。
0682nobodyさん2005/11/26(土) 00:24:41ID:???
>>664
use strictを使う理由は、use strict 'vars';が一番大きいかな。
完全に修飾されてない、宣言の無い変数を使うとエラーになる。
つまり、タイプミスなどで間違った変数名を使うとエラーで教えてくれる。
0683nobodyさん2005/11/26(土) 02:02:52ID:???
でも use strict; 使っておいて、一番上に my $変数; をずら〜って書いてるひともいるけど、それは文法上 strict だけど、本質的に strict じゃないんじゃないかなー、って思う。
0684nobodyさん2005/11/26(土) 02:32:09ID:???
strictって名前だけど、機能を若干制限するだけで、
スタイルを強制するわけじゃないからね。
0685nobodyさん2005/11/26(土) 08:54:19ID:???
>>683
いるいる
その人おっさんじゃない?
0686nobodyさん2005/11/26(土) 09:02:53ID:???
でも、解って使っていればOKかなと思う。
例えば、上のほうに設定系の変数をわかりやすくまとめておいて、ここまでが
設定ですよ〜、、、みたいな。。
0687nobodyさん2005/11/26(土) 09:07:23ID:???
極力そんな変数は減らすべきだよ
0688ゆーき2005/11/26(土) 09:27:08ID:yGTXOsFB
print "Location: mailto:〜でメーラーを開いて、本文に改行交じりの文字を入れることが出来ません。なぜでしょうか? 
print "Location: mailto:aaa\@aaa.com?subject=件名\&body=1行目%0D%0A2行目\n\n";
「%0D%0A」を入れてみましたがだめでした。文字コードや、URLエンコード関係が原因なんでしょうか???
ちなみにPERLのスクリプト自体はShift-jisで書いています。
0689愛とゆーきだけが友達さ2005/11/26(土) 09:33:48ID:???
もっとスマートなやり方でできないのか?
bodyなんてメーラー依存度が高いわけだし。。
0690ゆーき2005/11/26(土) 09:42:03ID:yGTXOsFB
メルマガを一斉配信する前に、一旦Outlook Expressでプレビューしたいわけなんですが、他にいい方法ご存知ですか?
0691nobodyさん2005/11/26(土) 11:46:44ID:???
>>690
一度、自分だけに同じ内容のメールを送ってみる。
0692ゆーき2005/11/26(土) 11:51:53ID:yGTXOsFB
>>691
それも、最終手段としては考えていますが、
ユーザのひと手間が増えますので、なるべく他の方法を使いたいと思っているのですが...
0693nobodyさん2005/11/26(土) 12:00:07ID:???
>>692
Outlook を使ってない人、プレビューしたく無い人もいるわけだけど、
そういう人の手間が増えたり、ウザいと感じるのはいいわけ?
0694Perl初心者2005/11/26(土) 12:13:53ID:???
>>688
”%”の前に”\”がいるとか
0695ゆーき2005/11/26(土) 12:29:09ID:yGTXOsFB
>>693
今回は、1人のクライアント専用に作っていまして、こちらの要望なんです。
0696ゆーき2005/11/26(土) 12:49:51ID:yGTXOsFB
>>694
print "Location: mailto:aaa\@aaa.com?subject=件名\&body=1行目\%0D\%0A2行目\n\n";
としてみましたが、だめでした。
0697nobodyさん2005/11/26(土) 13:18:09ID:???
<head>
<meta http-equiv="refresh" content="0; url=mailto:aaa@aaa.com?subject=件名&body=1行目%0d%0a21行目">
</head>

HTMLタグで飛ばしてやるのはだめなの?
0698nobodyさん2005/11/26(土) 13:49:44ID:???
Perlコーディング
0699ゆーき2005/11/26(土) 13:51:51ID:yGTXOsFB
>>697
完璧です!!!(^^)!
上手くいきました!ありがとうございましたm(_ _)m。
とても丁寧にアドバイス頂きまして、本当にありがとうございました。
おかげさまでクライアントにも顔がたちます。感謝!感謝!感謝!感謝!感謝!
07002892005/11/26(土) 14:52:54ID:EqqUKm3R
perl5.8、FreeBSDの環境です。
連想配列をファイルやDBのカラムに保存したいのですが、
可能でしょうか?
可能であれば方法をご教授お願いいたします。
0701nobodyさん2005/11/26(土) 15:26:01ID:???
>>700
もちろん可能だけどどのあたりがわからないの?
連想配列にどんなキーがあるのか知る方法がわからないとか→keys, each
ファイルへの記録方法がわからないとか→open, print, close
PerlからDBを使う方法がわからないとか→http://search.cpan.org/modlist/Database_Interfaces
それを連想配列に戻す方法がわからないとか→それぞれのキーに対して値を代入
0702nobodyさん2005/11/26(土) 15:35:34ID:???
そういうモジュールを探してるって事じゃない蟹
0703nobodyさん2005/11/26(土) 16:18:41ID:???
シリアライズして放り込めば…と思ったけど、
ハッシュをそのままDBのテーブルにマッピングしたいってこと?
0704nobodyさん2005/11/26(土) 16:33:28ID:???
ああ、一つのカラムの中に連想配列を丸ごと押し込みたい、とも取れるのか…
それならStorableだよな
07057002005/11/26(土) 17:02:03ID:EqqUKm3R
>>703
>>704
そういう事です。説明足りなくてすいません。
普通に連想配列をファイルやカラムにinsertしても
読み取りにに失敗したので(当然)。
Storableとはなんでしょうか?ググってみます。
0706nobodyさん2005/11/26(土) 20:35:13ID:zmLMleB6
Javaのプロパティファイルと同じことをperlでもやりたいのですが、できますか?
2chのSETTING.TXTみたいなのです。
2chってどうやってるんだろう・・・。
0707nobodyさん2005/11/26(土) 20:38:46ID:???
出来ます
と言うか物凄く初歩です
0708nobodyさん2005/11/26(土) 20:42:51ID:???
現在CGI経由で画像を表示させる簡単なCGIスクリプトをテストしています。
こんな感じで・・・

open IMAGE, "<:raw", "img.gif";
print "Content-type: image/gif\n\n";
print <IMAGE>;
close IMAGE;

しかしこれを実際にテストしてみると、ブラウザには
画像がシュレッダかけられたみたいなへんてこりんな
画像で、しかも縦の長さが押しつぶされてしまった
感じの画像が表示されます。要は、正しく表示されません。
jpeg画像にしてやってみると、今度はバッテンのアイコンが
でてしまいます。

なぜうまく表示できないのでしょうか?
0709nobodyさん2005/11/26(土) 20:49:30ID:???
binmode
0710nobodyさん2005/11/26(土) 20:51:22ID:???
>709
:rawだから違うんじゃね?
07117102005/11/26(土) 20:52:06ID:???
何アホなこと言ってんだオレ…
STDOUTに対してbinmodeか
0712nobodyさん2005/11/26(土) 21:15:24ID:???
>>708
まぁ、違うと思うけど
ASCIIモードでFTPうpしたとか
07137082005/11/26(土) 21:19:39ID:???
レスどうもです。
一応raw指定でbinmodeのつもりです。
あと自鯖でやってます。Apache2です。
07147082005/11/26(土) 21:29:15ID:???
あ、たしかにbinmode STDOUTでうまくいきました。
逆にIMAGEに対してはbinmodeにしなくてもいいようですね。
ありがとうございました。
0715nobodyさん2005/11/26(土) 21:29:21ID:???
>>713
binmodeは2箇所ってこと
0716nobodyさん2005/11/26(土) 21:37:16ID:zmLMleB6
>707
そんじゃおしえてください
0717nobodyさん2005/11/26(土) 21:41:42ID:???
ex.

open(FH, 'SETTING.TXT');
while (<FH>) {
chomp;
my($key, $val) = split(/=/, $_, 2);
$set{$key} = $val;
}
close(FH);

print $set{'BBS_TITLE'};
0718nobodyさん2005/11/26(土) 21:47:02ID:???
>>706
この程度のテキスト処理はどんな Perl の本でも最初の方でやるじゃんよ。
勉強不足なんじゃね?
07197082005/11/26(土) 21:47:53ID:???
>>715
それがですね、読み出し元ファイル(IMAGE)に対してはbinmodeにしなくても
いいようなんです。書き出し先ファイル(STDOUT)に対してはやらねば
ならないようです。
それと、1つサンプルコードを見つけたのですが、これは読み出し元ファイルに
しかbinmodeやってないですね。
http://www.aimix.jp/cgi/syohoimgview.html
この辺があやふやというか・・・。
0720nobodyさん2005/11/26(土) 21:55:55ID:???
Windowsの特徴
07217082005/11/26(土) 22:10:24ID:???
いろいろやってみましたが、原因わからずじまいです。
>>720ということで、結論付けてしまいたい気分です。
やってられんです。
ようはI/O両方バイナリにしとけば確実ってことですね。
0722nobodyさん2005/11/26(土) 22:10:48ID:???
"<:raw" ってしてるから binmode になってんじゃなくて?
07237202005/11/26(土) 22:12:35ID:???
"ということ"っていうかそういう仕様なんだけど

ttp://www.sixnine.net/cygwin/translation/cygwin-ug-net/using-textbinary.html
07247152005/11/26(土) 22:12:44ID:???
>>719
・テキストモード入力時の変換:0D 0A → 0A
・テキストモード出力時の変換:0A → 0D 0A
・たまたま画像に0D 0Aが無かった
・サイトが間違ってる # コピペして試してみな
07257082005/11/26(土) 22:16:09ID:???
なるへそ。
画像ファイルに<CR><LF>がなければ、読み込みでは変換されず
しかし<LF>があれば、書き出しで変換されるという寸法ですかね。
0726nobodyさん2005/11/27(日) 06:03:43ID:PNI5NdX4
すいません、質問させてください。


unless($codeflag){ &error("不正投稿の可能\性があります。リロードして再投稿して下さい。");}
if ($allow_submit && !$letout_ip) {
if (($cc_time - $last_ctime) { &error("アクセスしてから投稿するまでは$noprx_stime秒以上開けて下さい。");}
}
elsif (($cc_time - $last_ctime) { &error("アクセスしてから投稿するまでは$submit_time秒以上開けて下さい。");}


で構文エラーがでます。

Perlのエラー出力は

syntax error at tmp.pl line 749, near ";}"
syntax error at tmp.pl line 751, near "elsif"
tmp.pl had compilation errors.

でした。

ちょっと原因がわからないんで、おしえてください。
0727nobodyさん2005/11/27(日) 06:22:19ID:???
  , ‐、     , ─‐ 、 , ‐ 、 ,r─── 、 r───‐ 、 , ───‐、
  |   |(_)(_)l    .l |   | ,'        |│      | |      │
  l  └─‐、 `ー─ ' l  レ   ,'=コ   |└─‐┐   ! `ー─┐   !
  |     ノ     /  lゝ-'ゝ、   l     l   |     /   〈
  l   l ̄ ̄  r─‐ ´  / r─‐´   / ┌─‐┘   ! r─‐´   ヽ
  |   !    │     , r'  l     , r'   |      |│     ,r、  ,!
  └‐┘   └─ ' ´   └─ ''´   └───‐' └─ ' ´ `ー'
                                  /\___/ヽ
    (.`ヽ(`> 、                      /''''''   '''''':::::\
     `'<`ゝr'フ\                 +  |(●),   、(●)、.:| +
  ⊂コ二Lフ^´  ノ, /⌒)                 |  ,,,ノ(、_, )ヽ、,, .::::|
  ⊂l二L7_ / -ゝ-')´                .+ |   `-=ニ=- ' .::::::| + .
       \_  、__,.イ\           +     \   `ニニ´  .:::/    +
        (T__ノ   Tヽ        , -r'⌒! ̄ `":::7ヽ.`- 、   ./|  .
         ヽ¬.   / ノ`ー-、ヘ<ー1´|  ヽ | :::::::::::::ト、 \ (  ./ヽ
          \l__,./       i l.ヽ! |   .| ::::::::::::::l ヽ   `7ー.、‐'´ |\-、
     _,∩_         _,∩_           _,∩_
    (_____)ゝ、     (_____)    y     (_____)
    / :: :: :: ヽ 〉     /-‐:: ::‐-ヽ /       / :: :: :: ヽ
   _./ (・ )ll(・ ) ∨     _/  0) i! 0) ∨      _/ ( ・)i!(・ ) ゙、_
 // :: :: ∈ゝ :: ::ヽ   // ::  ‐-‐ :: ヽ    //  :: ー一 :: ヽ\
0728nobodyさん2005/11/27(日) 06:26:12ID:C29mLJPM
どこが 749 行目だ?
こちとらエスパーじゃねぇんだ
0729nobodyさん2005/11/27(日) 06:28:08ID:C29mLJPM
if (($cc_time - $last_ctime) { &e 〜 以下略
elsif (($cc_time - $last_ctime) { &e 〜 以下略

とりあえず文法を学んでみよか?
0730nobodyさん2005/11/27(日) 07:00:10ID:???
対応するカッコの数くらい数えられんものだろうか
0731nobodyさん2005/11/27(日) 07:59:17ID:???
まぁなんだ、茶でも飲んで一服するこった。
0732nobodyさん2005/11/27(日) 14:40:13ID:???
>>726
$cc_timeの左の ( が余分、2箇所
0733nobodyさん2005/11/27(日) 16:58:11ID:???
いくらなんでもネタだろ
0734nobodyさん2005/11/27(日) 17:21:56ID:6lDMwL/x
初歩的な質問で申し訳ないのですが、よろしくお願いします。

print "Content-type: text/html; charset=Shift_JIS\n";
print "set-Cookie: $COOKIE_NAME=$value; expires=$date\n\n";

と書いてクッキーを出力しているのですが、画面に

  Content-type: text/html; charset=Shift_JIS

の1行が表示されてしまいます。どうしてですか?一応クッキーは作成されています。
0735nobodyさん2005/11/27(日) 18:01:28ID:???
print "Content-type: text/html; charset=Shift_JIS\n";
print "set-Cookie: $COOKIE_NAME=$value; expires=$date\n\n";

この2行のあとにさらに Content-type〜 をprintしてるからでしょ。
0736nobodyさん2005/11/27(日) 18:43:40ID:???
>>734
実行環境を書け。話はそれからだ。
0737nobodyさん2005/11/27(日) 20:48:09ID:???
>>734
「画面」とは? 標準出力? ブラウザ?
0738nobodyさん2005/11/28(月) 13:58:44ID:MRaDdba7
>>737
cookieのこと言ってんなら>>734はブラウザのことなんじゃねーの?
0739nobodyさん2005/11/28(月) 17:59:22ID:cDaON9yM
松島
秩父
hogehoge 癒し系
松本

↓上のテキストを処理後、下のようにしたい↓

松島
秩父→hogehoge 癒し系
松本

処理の1つ先回りをして、対象の1つ前の行の先頭に「hogehoge」がある場合、対象の列とhogehogeが先頭に存在する列に対して指定の処理するようにしたいのですが、

for my $ii (0..$#text) {
if("hogehoge" eq substr($text[$tn+1],0,8)){
$text1 .= "$text[$ii]→$textall[$ii+1]\n";
$ii++;
}else{$text1 .= "$textall[$ii]\n";}
}
↑のように組んで実行したところ

松島
秩父→hogehoge 癒し系
hogehoge 癒し系
松本

のようになってしまいます。
ループのたびにmyで初期化してしまうため$ii++が無駄になってしまうために起こってると思うのですが、$ii++を生かすようにするには、どのように変えたらよいですか?
0740nobodyさん2005/11/28(月) 18:14:59ID:???
>>739
こっちのforループ。
for(my $ii = 0; $ii < @text; $ii++) {

どうでもいいかも知れないけど、
substr()よりindex()使ったほうがスマートに思う。
0741nobodyさん2005/11/28(月) 18:18:12ID:???
>>739
その場合、行を無視すると単純になる(sオプションを使う)

松島\n秩父\nhogehoge 癒し系\n松本 が
松島\n秩父→hogehoge 癒し系\n松本 に置換できればいい。

あとn行先読みするときはpush,shiftを一時配列に対して使うのが楽かも。
0742nobodyさん2005/11/28(月) 18:40:40ID:???
>>740-741
ありがとうございましたっ。
0743nobodyさん2005/11/28(月) 18:44:40ID:???
配列じゃなくてテキストだったらこんなのでも。

my $test =<<"EOT";
松島
秩父
hogehoge 癒し系
松本
EOT

$test =~ s/\n(?=hogehoge)/→/g;
0744nobodyさん2005/11/28(月) 18:48:54ID:???
>>743 == >>741
07457432005/11/28(月) 18:56:49ID:???
本当だ、質問レスしか見てなかったので気づかなかった。
07467412005/11/28(月) 19:32:34ID:???
「(sオプションを使う)」のところは必要なかった。訂正。
0747nobodyさん2005/11/28(月) 20:20:33ID:???
perl使いを目指しています、最近CGI.pmライブラリなるものを
知り使うようになりました、今までPOSTやGETメッソッドによる
変数の受け渡しなんか、フォームのデコード処理とか、その逆とか
ゴリゴリ書いていましたが、これを使うようになって
なんとなく、あまりにあっけなくて
( ゜д゜)ポカーン状態なのですが
こんなヌル湯に漬かって漏れは一人前のperl使いに成れるでしょうか?
それと、CGI.pmの弊害とかってありますか?
0748nobodyさん2005/11/28(月) 20:31:37ID:???
そんなもんです
わざわざ内部までさぐるのは時間の無駄ですので
その調子でモジュールを使いまくりましょう
0749nobodyさん2005/11/28(月) 20:33:10ID:???
その勢いでphpを知ると更にポカーン、な予感
07507472005/11/28(月) 20:52:10ID:???
perl使いの諸兄ども、どうもです
ライブラリ使うと確かに内部で何をやってるのか、全く分からないが
良い点としては、コードが少ない!見やすい!読みやすい!ですね
ゴリゴリ時代は自分でプログラム組んでいても3日もすればハァ?ってな
事がたまにありましたが今は逆なのらー、
ライブラリにおまかせする部分はおまかせして
簡単に正規表現による、文字処理とかハッシュによる構造体の変数の受け渡しや
参照の仕方等がスラスラできるように禿げみます。
0751nobodyさん2005/11/28(月) 20:52:24ID:???
おれは未だに自作のURLデコードや文字コード変換だな。
使うモジュールは strict, vars, lib ぐらいかな。
0752nobodyさん2005/11/28(月) 20:52:31ID:???
弊害というか、標準モジュール付いてない古いPerlの入っているサーバで動かないくらいかな。
0753nobodyさん2005/11/28(月) 21:03:26ID:???
既存モジュールの再利用のうまさも実力の内。
0754nobodyさん2005/11/28(月) 21:04:41ID:???
CGI.pmは要らないメソッド大杉。
無駄にコンパイルする時間を食ってる。
0755nobodyさん2005/11/28(月) 21:10:10ID:???
>>754
ほかに lightweight なおすすめがあればおしえてぷりーず。
0756nobodyさん2005/11/28(月) 21:15:18ID:???
CGI::Lite(笑)
0757nobodyさん2005/11/28(月) 21:38:42ID:???
(笑)
0758nobodyさん2005/11/28(月) 22:22:30ID:???
0759nobodyさん2005/11/28(月) 23:17:50ID:???
CGI::Liteはデフォでついてくる?
0760nobodyさん2005/11/28(月) 23:21:46ID:???
ノンノン
0761nobodyさん2005/11/28(月) 23:33:07ID:jymxeugY
ちわ。
テキストエリア(<TEXTAREA></TEXTAREA>)から送信されたテキスト内容を受け取って、
ファイルに書き出す処理を書いてます。

各行に、例えば、<BR>なんてタグをつけて出力しなおしたくて書いているんですが、どうも
意図しない改行がきてしまいます。

こいつはどこからやってきているのか。
あるいは、ここコードこうだろなんて教えていただけないでしょうか。
($buffの取得の時点でおかしい?)

コード:
#$buff取得したマルチラインのテキスト
@s_text = split(/(\r\n|r\|\n)/, $buff, 20);
open(FN, ">new.htm");
foreach $mod_line (@s_text){
$mod_line = "$mod_line" . "<BR>\n";
print FN "$mod_line";
}

元データ:
1行目
2行目
3行目

結果:
1行目<BR>

2行目<BR>

3行目<BR>
↑改行が一個多い。
07627612005/11/28(月) 23:38:52ID:jymxeugY
761の書き込みの結果嘘ついた。
出来たファイルの中身をコピペすると、以下のようになります。
コピペするとなんか改行増えてる?とにかく欲しいのは3行のデータなんです。
1行目<BR>


<BR>
2行目<BR>


<BR>
3行目<BR>
0763nobodyさん2005/11/28(月) 23:41:43ID:???
>>761
- @s_text = split(/(\r\n|r\|\n)/, $buff, 20);
+ @s_text = split(/\r\n|r\|\n/, $buff, 20);

ではどう?
0764nobodyさん2005/11/28(月) 23:46:41ID:???
>>761-762
http://www.din.or.jp/~ohzaki/perl.htm#CRLF_Unify
http://www.din.or.jp/~ohzaki/perl.htm#CRLF_2BR
0765nobodyさん2005/11/28(月) 23:52:08ID:LjPWibfY
見てみ
http://www.neet-ch.net/home3.html
0766761-7622005/11/29(火) 00:25:17ID:???
>>763
>>764
ありがとう!
>>763
一発で動きました。ただし理解できんかったです…。
括弧のあるなしっていったい…?
良かったらどう違うのか教えていただけたら幸いです。

>>764
勉強になります。
http://www.din.or.jp/~ohzaki/perl.htm#CRLF_2BR
<BR>変換のコードは使えたら使いたいですね。
(自分のコードは
元のテキストの前後に修飾処理する用途で使いますので、
すぐに構文書けません…。)
>ちゅーか、s///の基本の利用方法ですね。
>>こんな書き方あり?
s/\x0A/後方修飾\x0A前方修飾/g;
↓こんなんなっちゃうよな…。
1行目後方修飾
前方修飾2行目後方修飾
前方修飾3行目後方修飾
前方修飾

ちゅーか、いずれにせよ、ありがとう!
0767nobodyさん2005/11/29(火) 00:29:06ID:???
>>763
r\ になってる
0768nobodyさん2005/11/29(火) 00:39:01ID:???
>>766
() があれば、マッチしたものが 返されるリストに含まれるのよ。

If the PATTERN contains parentheses, additional list elements
are created from each matching substring in the delimiter.

split(/([,-])/, "1-10,20", 3);

produces the list value

(1, '-', 10, ',', 20)
0769nobodyさん2005/11/29(火) 00:46:31ID:???
>>768
761じゃないけれど勉強になりました。splitはcapturingに意味があったのか・・・
0770761-7622005/11/29(火) 00:50:25ID:???
>>767
細かいとこまでみてもらってありがとう

>>768
な、なにょー!?
そうだったんですか…。
なんかのときに、splitに関する質問をするところでした…。
ちゅーか、split勉強しなおせって言う感じですか。
あるいは、正規表現の項目に書いてありそうですね。

ありがとうございました。
0771761-7622005/11/29(火) 00:54:53ID:???
>>769
突っ込みすぎかもしれませんが、
capturingって、
どんなことに使うつもりになったんですか?

また、しばらくperlから離れちゃいそうなので教えてもらいたいのですが。
0772nobodyさん2005/11/29(火) 01:08:01ID:???
>>771
どんなことに使うつもりになったって言うと…
splitの中でグルーピングする必要性が出た場合は、
?:をつけてclusteringにするのを忘れないようにしないとな、という話です。
07737712005/11/29(火) 01:16:34ID:???
>>772
やっべえ、なんとなくしかわからんです。
修行が足りん、出直してきます。
サンクスです。
0774nobodyさん2005/11/29(火) 01:24:46ID:???
後方参照を作成しません。
0775nobodyさん2005/11/29(火) 01:33:40ID:jT6RPKnv
改行コードの統一は
s/¥x0D¥x0A|¥x0D|¥x0A/¥n/g
がおすすめ
0776nobodyさん2005/11/29(火) 01:41:13ID:???
全角に
イラッとした

                 ハ_ハ
               ('(゚∀゚∩ イラッとした!
                ヽ  〈
                 ヽヽ_)
0777nobodyさん2005/11/29(火) 02:35:33ID:???
>>775
それは遅いから云々ってのが>>764先のPerlメモにあったね。
0778nobodyさん2005/11/29(火) 10:55:30ID:jT6RPKnv
改行置換なんて投稿時だけで、読み込み時は置換されてることが前提だから\nでやるし、
そんなにパフォーマンスに影響しなうのでは?
って思う。
書き込みよりも読み込みの回数のが多いのがほとんどだと思うし…
0779nobodyさん2005/11/29(火) 12:08:00ID:???
たいした弊害もなく速くなる方法があるなら、普通はそっちを選択するものでしょ。
ついでに、>>766は改行コード統一それ自体の話をしているわけではないし、
投稿時以外にも膨大なデータで改行コードを統一する必要がある場合もあるだろう。
わざわざ突っかからないで…
0780nobodyさん2005/11/29(火) 13:13:40ID:???
ぶっちゃけどっちでもいい。
どうしても気になるなら、Cで書くべき。

そして、先につっかかってるのは>>777
0781nobodyさん2005/11/29(火) 13:40:53ID:???
Perlでやる範囲であっても、遅いより速いほうがいいだろうに。
つか>>777って、ただの参考情報じゃん。
0782nobodyさん2005/11/29(火) 13:54:21ID:skNvEddZ
改行コードの統一は
s/¥x0D¥x0A/¥n/g;
tr/¥x0D¥x0A/¥n¥n/;
がおすすめ
0783nobodyさん2005/11/29(火) 14:07:54ID:???
                 ハ_ハ
               ('(゚∀゚∩ イラッとした!
                ヽ  〈
                 ヽヽ_)
0784nobodyさん2005/11/29(火) 14:11:20ID:???
全角に
イラッとした!
0785nobodyさん2005/11/29(火) 14:49:06ID:???
apache2 , active perl5.8.2 でやってるんですが、You don't have permission to access *****.
みたいなメッセージが出ます。

Permission解除するのってconfのどこでしょうか。。
0786nobodyさん2005/11/29(火) 15:18:19ID:???
>>785
<Directory />
Options Indexes
</Directory>
0787nobodyさん2005/11/29(火) 15:50:53ID:???
>>785
PerlじゃなくてApacheの質問だね…まあいいや、OptionsにExecCGIを設定
それにしても5.8.2って随分古いものを使ってるな…最新版は5.8.7だぞ
0788nobodyさん2005/11/29(火) 17:51:42ID:???
うーむ、だめです。500errorとか出たり・・・。
win2kやwinxp proの時はすんなり言ったんですが。xp homeだと何か
先にインストール必要なものがあったりしますかね。
0789nobodyさん2005/11/29(火) 17:57:25ID:???
エラーをキャッチするか、プロンプトで走らせましょう。
0790nobodyさん2005/11/29(火) 18:26:02ID:???
コピーして読み取り専用になったとかユーザー権限でインストールしたとかでしょ
0791nobodyさん2005/11/29(火) 19:46:51ID:???
読み取り専用になってて今解除して、ユーザー権限は管理者権限にしたままです。
コマンドプロンプトからはtest.cgi動くんですが・・・うーむ。
apacheの設定であることまでは絞れたけど相変わらず
The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator, root@localhost and inform them of the time the error occurred, and anything you might have done that may have caused the error.

More information about this error may be available in the server error log.

・・・でadministratorに聞けって俺?
0792nobodyさん2005/11/29(火) 19:51:28ID:???
>791
>this error may be available in the server error log.
って出てるだろーが。
0793nobodyさん2005/11/29(火) 19:52:03ID:???
いい加減スレ違いだから消えろ~

http://pc8.2ch.net/test/read.cgi/php/1043851302/
0794nobodyさん2005/11/29(火) 20:13:28ID:???
>>791
スレ違いっていうか根本的にわかっとらんな。
administrator=管理人なんだからお前さんに決まってるだろうがよ。

で、エラー内容がわからんとこっちも答えようが無い。
エラーログ見るなり use CGI::Carp qw(fatalsToBrowser); 使うなりしてくれ。
0795nobodyさん2005/11/29(火) 20:34:16ID:???
一番初歩的に #!/usr/bin/perl のパスが違うとか print "Content-type: text/html\n\n"; 書いてないとかかもね。
0796nobodyさん2005/11/29(火) 20:36:20ID:???
別の環境では動いてたらしいので Content-Type: は無さそうだけどね。
0797nobodyさん2005/11/29(火) 20:56:33ID:???
エラーログみてぐぐったりしてたら半分解決しました。みなさんどうもありがとうございました。とりあえずapacheスレへ移動しようと思います。
http://72.14.203.104/search?q=cache:NDE5CiEokLAJ:pc5.2ch.net/test/read.cgi/mysv/1087514426/101-200+apache2+%E6%8C%87%E5%AE%9A%E3%81%95%E3%82%8C%E3%81%9F%E3%83%91%E3%82%B9%E3%81%8C%E8%A6%8B%E3%81%A4%E3%81%8B%E3%82%8A%E3%81%BE%E3%81%9B%E3%82%93&hl=ja
http://72.14.203.104/search?q=cache:-QDvNjZ_4LoJ:sakaguch.com/PastBBS/0034/B0017459.html+apache2+%E6%8C%87%E5%AE%9A%E3%81%95%E3%82%8C%E3%81%9F%E3%83%91%E3%82%B9%E3%81%8C%E8%A6%8B%E3%81%A4%E3%81%8B%E3%82%8A%E3%81%BE%E3%81%9B%E3%82%93&hl=ja

こちらのとおり#!perlだけにしたら動きました。でもレンタル鯖にうpするときにいちいち書き換えるの面倒なので引き続き試行錯誤っす。
0798nobodyさん2005/11/29(火) 21:19:22ID:jT6RPKnv
かわいそうになってきたので助言。

ホームページの管理ディレクトリ → d:\www\my_web\
Perl のインストール先 → d:\usr\

こうすれば #!/usr/bin/per って書ける。
借りてるサーバーが /usr/local/bin/per であれば、ローカルでの Perl の
インストール先は /usr/local ってなる。
0799nobodyさん2005/11/29(火) 21:23:39ID:???
お前の頭がperだよ
0800nobodyさん2005/11/29(火) 21:24:42ID:jT6RPKnv
l が抜けてた orz
0801nobodyさん2005/11/29(火) 22:17:45ID:???
         -─=三=- 、
       /イイイ   ヽ三\ヽ\
      ///イ   ___    ヽ トトト
      i:|:/ミ  -_-__--_−_-_ トト|:i
      |:|:|イ   へ、 ̄ /ヽ   |:|:|
      |:|:||   _、   ,.-_、 |:|:|
      ト:!:|  ヽ´´´ノ ヽ´´´ノ |:|リ
      ヽ_|    ̄ ノ  丶 ̄  |_ノ
         | \/ (_i  i_)\/ |
        |  | /  ̄  \ | | <売り上げ120億、利益20億ある。どんな弁護士使ってでも潰す!
         \ -=^^=- /
           ヽ   ̄  ノ
0802nobodyさん2005/11/30(水) 00:15:31ID:???
>>801
「潰す」じゃなくて「叩く」だ、ボケ。
0803nobodyさん2005/11/30(水) 00:17:24ID:???
>>802
「叩く」じゃなくて「追求させていただきます」だ、ボケ。
0804nobodyさん2005/11/30(水) 12:15:39ID:BadrrQNs
>>801-803
ここはPerlスレだ、ボケ。
0805nobodyさん2005/11/30(水) 12:36:29ID:???
>>804
さげろ、ボケ。
0806nobodyさん2005/11/30(水) 13:27:40ID:???
ぜったいageてなんかあげないんだからねっ!!
0807nobodyさん2005/11/30(水) 14:38:09ID:???
下げたお
0808nobodyさん2005/11/30(水) 14:47:51ID:???
(;^ω^)・・・
0809nobodyさん2005/11/30(水) 15:33:38ID:???
ネタでもいいけど、せめて何かperlishなネタを書けよ…
0810nobodyさん2005/11/30(水) 16:05:54ID:???
$ichi $ni

このふたつの変数を足し算した結果を出力したいのですが、どうすればよいのでしょうか
0811nobodyさん2005/11/30(水) 16:37:17ID:???
真ボスキタ━━━━━(゚∀゚)━━━━━!!
0812nobodyさん2005/11/30(水) 17:27:28ID:BWMdiBVJ
print $san;
0813nobodyさん2005/11/30(水) 18:47:17ID:???
print $ichini;
0814nobodyさん2005/11/30(水) 20:25:37ID:???
やべwwwwクソワロタwwwwwww
0815nobodyさん2005/12/01(木) 00:24:08ID:0lJ9PdU1
$pring
0816nobodyさん2005/12/01(木) 01:33:14ID:???
そろそろ面白くないからもういいよ。
0817nobodyさん2005/12/01(木) 03:20:18ID:???
$twelve
0818!omikuji2005/12/01(木) 04:22:29ID:???
!omikuji
0819nobodyさん2005/12/01(木) 07:44:14ID:???
>>816
$omaegana
0820nobodyさん2005/12/01(木) 07:45:09ID:???
>>816
$kukiyome
0821nobodyさん2005/12/01(木) 07:45:42ID:???
>>816
$chin kasu
0822nobodyさん2005/12/01(木) 08:22:49ID:???
空気読めてないのはお前らだろ。
0823!omikuji2005/12/01(木) 08:23:34ID:???
!omikuji
0824nobodyさん2005/12/01(木) 08:55:16ID:???
>>822
$kukiyome chin kasu
0825nobodyさん2005/12/01(木) 08:55:48ID:???
816=822

↑$pugya-
0826nobodyさん2005/12/01(木) 08:56:22ID:???
>>822
$pan katte koi
0827!omikuji2005/12/01(木) 09:09:32ID:???
!omikuji
0828nobodyさん2005/12/01(木) 09:12:14ID:???
複数の戻り値を得たい時に

my ( $hoge1, $hoge2, $hoge3 ) = hogehoge();

とする事はできるのですが

my ( $hoge1, %hoge2, @hoge3 ) = hogehoge();

な感じで違う種類の戻り値を得たい場合は
どのように書けば良いのでしょうか?
0829nobodyさん2005/12/01(木) 09:31:46ID:???
>>828
http://www.kt.rim.or.jp/~kbk/perl-5.8/perlfaq7.html#how_can_i_pass_return_a__function__filehandle__array__hash__method__regex_
http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlsub.html#Pass_by_Reference
http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlref.html
08308282005/12/01(木) 10:11:00ID:???
>>829を見ました。
つまり、1発で取り出すのは無理で、
リファレンスの配列を作り

my @tmp = hogehoge();
my $hoge1 = $tmp[0];
my %hoge2 = %{$tmp[1]};
my @hoge3 = @{$tmp[2]};

上記のような感じで
取り出せって事で良いですか?
0831nobodyさん2005/12/01(木) 10:34:52ID:???
グローバル変数を使うといいお( ^ω^)
0832nobodyさん2005/12/01(木) 11:18:37ID:???
>>830
それでもいいし、

sub hogehoge {
  my($scalar, $array, $hash) = @_;
  ${$scalar} = 'hoge';
  @{$array} = (0..5);
  %{$hash} = (foo => 1, bar => 2);
}
hogehoge(\$hoge1, \@hoge2, \%hoge3);

でもいいよ。
0833nobodyさん2005/12/01(木) 11:40:24ID:6Wvm5Rjx


グラフ表示に、GD使ってかいてんですけど、
モニタで見るには、気にならないのですが、
プリントアウトすると、結構荒くてもひとつなんですが。
他に、綺麗にperlでグラフ表示させるのってなんかあります?
0834nobodyさん2005/12/01(木) 11:52:22ID:???
>>833
綺麗かどうかは知らんけど、GDを使わないものも色々あるよ。
http://search.cpan.org/search?m=all&q=Graph&s=1&n=100
0835nobodyさん2005/12/01(木) 12:27:34ID:kcqRAlrr
FTPサーバにHTMLファイルをアップロードするCGIというのは実現可能でしょうか?
0836nobodyさん2005/12/01(木) 12:30:35ID:???
>>833
GDの使い込みが足りない。
設定次第で驚愕するほど美麗なグラフも出力できるぞ。
0837nobodyさん2005/12/01(木) 12:33:39ID:???
>>835
CGI経由でやらなきゃいけない事か考え直した方がいいと思うけど。
http://search.cpan.org/~gbarr/libnet-1.19/Net/FTP.pm
0838nobodyさん2005/12/01(木) 12:39:03ID:???
>>837
ありがとうございます。
どうしてもCGI経由でやりたいので助かります。
08395662005/12/01(木) 16:30:41ID:???
以前メタ文字関連で質問させて頂いた者です。

$word = quotemeta("a b c");
print $word;

このようにすると、出力文字列が
a\ b\ c
となってしまいます。
quotemetaは/[A-Za-z_0-9]/にマッチしない全ての文字の前にバックスラッシュをつけるようですが、
$wordに\または.がある場合のみ、この2文字の前にバックスラッシュを入れるということは可能でしょうか。

掲示板のログ検索機能なのですが、
検索対象文字に\を入れるとエラーが出て、
.を入れると全記事がヒットしてしまう状況に悩んでいます。
>>566も併せて参照していただけると有り難いです。
0840nobodyさん2005/12/01(木) 16:50:23ID:???
掲示板で検索って言ったらマルチバイト文字も来るだろうから、
入力された文字に対してquotemetaを使ったら\が入りまくって意味不明なことになるからNG
08415662005/12/01(木) 17:39:55ID:???
\Q\Eについて調べました。
>>566のソースから
- if ($data[6] =~ /^(?:$ascii|$twoBytes|$threeBytes)*?(?:$words[$_])/) {
+ if ($data[6] =~ /^(?:$ascii|$twoBytes|$threeBytes)*?(?:\Q$words[$_]\E)/) {
こうする事で解決できました。
0842nobodyさん2005/12/01(木) 21:07:49ID:???
かなり説明わかりにくいのですが、わかるかたヘルプです。
.pl から .pl に飛ばしたいと思っています。
 Location: test.pl
とやって read( STDIN, $hoge, $ENV{'CONTENT_LENGTH'} );
で、$hoge に情報がくっ付いてくる(&nama=boku)のようにしたいのですが
どのようにすれば出来るのでしょうか?
0843nobodyさん2005/12/01(木) 21:53:39ID:???
if ($AAA =~ /$BBB/) {・・・

$AAAが$BBBという文字列を含んでいるなら・・・
としたいのですがこのままだとエラーがでてしまいます。
どのように修正すればいいのでしょうか?
08448432005/12/01(木) 21:57:30ID:???
Perlコーディング・・・もしかしてスレ違い?失礼しました
0845nobodyさん2005/12/01(木) 21:57:44ID:???
if ($AAA =~ /\$BBB/) { foo(); }
0846nobodyさん2005/12/01(木) 21:58:15ID:???
>>842
Locationで飛ばしてPOST送信にしたいということになるのかな。
それは不可能。POSTで送らないとならない理由があるの?
単に情報を付けたいだけならQUERY_STRINGを使うべし

>>843
if ($AAA =~ /\Q$BBB\E/) {
08478432005/12/01(木) 22:03:36ID:???
>>845-846
ありがとうございます。
>>846さんの方法で解決できました。
0848nobodyさん2005/12/01(木) 23:34:13ID:6Wvm5Rjx
>>834
うーむ、いろいろとありますな・・・。
今は、時間がないので、チェックできませぬ。

>>836
GD::Graph使ってるんで、
ttp://www.linkclub.or.jp/~ma3ki/webutil/gdgraph/howtograph.html
これぐらいは、できるんだけど、円グラフなんか、印刷すると枠や、ラインがガタガタで、
設定とかあります?
とりあえず、最新バージョンに上げてみましたが、なにもかわらずでした。orz
0849nobodyさん2005/12/02(金) 00:01:04ID:???
>>846さん
ありがとうございます。見た目的に長いURLになっちゃうのが格好悪いな…
って思っちゃったぐらいです。
このたびは大人しく諦めることにします。
0850nobodyさん2005/12/02(金) 00:04:42ID:???
>>849
一時ファイル作るとか、Cookie使うとか
0851nobodyさん2005/12/02(金) 02:01:48ID:lZKmMfsr
入力値にa〜z、A〜Z、0〜9、-、_、しか入力されないように
チェックしたいと考えています。

if($abc =~ /[^a-zA-Z0-9]/){ }
大小英字、数字に関しては上記の様にする事で実現できたのですが
-と_の記号を含めてチェックするには上記にどのように含めて
記述したら良いのでしょうか?
0852nobodyさん2005/12/02(金) 02:14:27ID:???
>>851
http://www.kt.rim.or.jp/~kbk/perl-5.8/perlretut.html#using_character_classes
08538492005/12/02(金) 02:43:53ID:???
>一時ファイル作る
なるほど! Cookieは理解不足にしてもこれならいけそうです Thx!!
0854nobodyさん2005/12/02(金) 07:56:04ID:???
>>853
セッション
0855Perl初心者2005/12/02(金) 09:40:50ID:???
>>851
あれ、これでダメなの?
\がいるのかな?

/[^a-zA-Z0-9_-]/
0856nobodyさん2005/12/02(金) 12:41:38ID:zgDZ/Pi8
>>855
/[^a-zA-Z0-9_\-]/
エスケープしてくだちぃ
0857nobodyさん2005/12/02(金) 12:52:02ID:???
[]内の最後に書く分には必要ないっしょ<エスケープ
0858nobodyさん2005/12/02(金) 12:56:28ID:???
みんな\dとか使わないの?解りやすいから0-9とか使ってンノ?
0859nobodyさん2005/12/02(金) 13:20:04ID:???
文字クラス内だと\d使えない(はず)
0860nobodyさん2005/12/02(金) 13:28:19ID:???
>>859
使えるよ

% perl -e '"ab123cd" =~ /([\d]+)/ and print "match: $1\n";'
match: 123
0861nobodyさん2005/12/02(金) 14:22:38ID:???
教える側の知識がグダグダなスレ。
0862nobodyさん2005/12/02(金) 14:39:45ID:???
> 852 名前:nobodyさん(sage) 投稿日:2005/12/02(金) 02:14:27 ID:???
> >>851
> http://www.kt.rim.or.jp/~kbk/perl-5.8/perlretut.html#using_character_classes

> '-'がキャラクタクラスの中の最初か最後のキャラクタであった場合、
> 通常のキャラクタとして扱われます。[-ab]、[ab-]、[a\-b]はすべて等価です。

> \d\s\w\D\S\Wの省略記法はキャラクタクラスの内側でも外側でも使うことができます。
> 以下はその例です:
>
> /\d\d:\d\d:\d\d/; # hh:mm:ss 形式の時間表記にマッチ
> /[\d\s]/; # 数字または空白にマッチ
0863nobodyさん2005/12/02(金) 14:48:03ID:???
>>861
WebProg板なのでご了承下さい
0864nobodyさん2005/12/02(金) 15:38:16ID:???
すごいことになってるな。

# 例えば、aだけにマッチなら
/^a+$/ または !/[^a]/
0865nobodyさん2005/12/02(金) 16:09:40ID:???
どっかのベンチでは\wを使うほうが速かった
0866nobodyさん2005/12/02(金) 16:49:33ID:???
use Benchmark;
my $count = 2000000;
my %codes = ();
my $wt = 'omaemona-itteyosijisakjen_07211919童貞';
$codes{'code1'} = q{
1 if /[^a-zA-Z0-9_-]/;
};
$codes{'code2'} = q{
1 if /[^a-zA-Z0-9_\-]/;
};
$codes{'code3'} = q{
1 if /[^\da-zA-Z-]/;
};
$codes{'code4'} = q{
1 if /[^\w-]/;
};
timethese($count,\%codes);

結果:激しくバラバラ
0867JAPU ◆lVJAPUTeX. 2005/12/02(金) 18:21:04ID:???
ごきげんよう。

\w はロカールを考慮する (場合がある) という話があったなぁ。sage
0868nobodyさん2005/12/02(金) 18:46:19ID:McNady6M
置換の正規表現内で、if文を二つ以上使うにはどうすればいいですか?

$hoge =~s/hoge/
条件1 ? 式 a : 式 b ;
条件2 ? 式 c : 式 c ; /e

うまく実行されないみたいなんですが。。
0869JAPU ◆lVJAPUTeX. 2005/12/02(金) 18:58:26ID:b5HKaxNa
はにゃーん

こういうことをやりたいのかな?
$hoge = "creamy fancy magical";
$hoge =~ s{(\w+)}{
if($1 eq "creamy") { "mami" }
elsif($1 eq "magical") { "emi" }
else { "unknown" }
}ge;
0870nobodyさん2005/12/02(金) 19:20:52ID:McNady6M
よくみたら一つの三項演算子が機能してないだけでした。

$iの先頭に'う'が含まれてたら
$hoge1、ふくまれてなかったら$hoge2を、
$tmpに代入して、$hogeを書換したいんです。
でも、$iがなんであろうと、$hoge1のほうが代入されてしまうんです。
どうすればいいんでしょうか。

$uaaaa = ~s/うあああああああ/
$i = ~m!^う! ?
$tmp=$hoge1 : $tmp =$hoge2;
$tmp
/e;
0871nobodyさん2005/12/02(金) 19:23:07ID:???
$hogeを書き替えたい→$uaaaaを書き替えたい、の間違いです。
すみません。
0872JAPU ◆lVJAPUTeX. 2005/12/02(金) 19:34:04ID:???
何をやりたいのか解読できないのだけど。

とりあえず気づいた点を指摘。
$foo =~ s/regex/replacement/;
$foo = ~s/regex/replacement/;
この2つは異なる (空白の位置に注意) けどそれは大丈夫かな?
後者は
$foo = (~s/regex/replacement/);
と介錯されるので,99.99%くらいの確率で意図しているものとは違うと思う。

参考演算子は
$var = ($foo eq "bar")? $baz: $zot;
みたいな形に書いたほうがわかりやすいとおもう。


- 実際に実行したコード (それ単体で完結したもの)
- やりたいこと
- 意図した結果/実際の結果
を書けば暇な人が答えるかも。
0873nobodyさん2005/12/02(金) 22:05:38ID:???
>>872
久々に見た
本物?
0874nobodyさん2005/12/02(金) 22:12:22ID:???
おれも久々に見た。_gunzipは見ないけど・・
0875JAPU ◆lVJAPUTeX. 2005/12/02(金) 23:07:32ID:???
コードのインデントは乱さないように,変数は命名規則に従うように,きっちりと書くのがここでのたしなみ。もちろん,use strict; しないなどといった,はしたないプログラマなど存在していようはずもない。

【変数の役割】
素直にそのまま解釈すると,
$uaaaa ... 書き換えの対象
$i ... この先頭に "う" が含まれているかどうか (*) で処理を分ける
$hoge1 .., (*) が真 (成り立った) の場合置換する文字列
$hoge2 ... (*) が偽 (成り立たない) の場合に置換する文字列
でいいのかな?

【コード】
$uaaaa = "ふえいとうあああああああもえもえ";
$i = "うる星やつら";
$hoge1 = "せいばー";
$hoge2 = "とおさかりん";

$uaaaa =~ s{うあああああああ}{ ($i =~ /^う/)? $hoge1: $hoge2; }e;
print "$uaaaa\n";

>>873
本物です。:)
http://www.japu.org/ (近況更新しておきました。)
0876nobodyさん2005/12/02(金) 23:55:46ID:???
>>875
http://www.japu.org/about_japu.html の掲示板が潰れているよ。
0877nobodyさん2005/12/03(土) 00:22:10ID:???
何この痛いコテ
0878nobodyさん2005/12/03(土) 01:09:43ID:???
真性だから触るな
0879nobodyさん2005/12/03(土) 01:10:08ID:IjoTBsN+
「うぐぅ」っておまえはまだ粘着してんのかよ
0880nobodyさん2005/12/03(土) 08:04:29ID:9ILkhYC5
ありがとうございます。
三項演算子というのがよくわかってないのかも。
/で始まるパスの前には'http://yahoo.co.jp'をくっつけるようにして、
それ以外で始まるパス(../とか)の前には'http://yahoo.co.jp/mail/tegami/letter/'というURLをくっつけるようにしたいんです。
以下の方法だと、パスがなんであろうと後者のほうがくっついてしまうようなんですが、三項演算子の部分、どこが間違ってるんでしょうか。
(これを置換の式に組みこみたかったんです)

#!/usr/bin/perl
print "Content-type: text/html\n\n";

#パス名を /hoge.jpg に設定
$path='/hoge.jpg';

$host="http://yahoo.co.jp";
$directory="http://yahoo.co.jp/mail/tegami/letter/";

#問題の三項演算子
$path=~m/^\// ? $tmp=$host : $tmp=$directory;

# URLにして表示
print $tmp.$path;
exit;

結果
http://yahoo.co.jp/mail/tegami/letter//hoge.jpg
0881nobodyさん2005/12/03(土) 08:08:54ID:9ILkhYC5
ありがとうございます。
三項演算子というのがよくわかってないのかも。
/で始まるパスの前には'http://yahoo.co.jp'をくっつけるようにして、
それ以外で始まるパス(../とか)の前には'http://yahoo.co.jp/mail/tegami/letter/'というURLをくっつけるようにしたいんです。
以下の方法だと、パスがなんであろうと後者のほうがくっついてしまうようなんですが、三項演算子の部分、どこが間違ってるんでしょうか。
(これを置換の式に組みこみたかったんです)

#!/usr/bin/perl
print "Content-type: text/html\n\n";

#パス名を /hoge.jpg に設定
$path='/hoge.jpg';

$host="http://yahoo.co.jp";
$directory="http://yahoo.co.jp/mail/tegami/letter/";

#問題の三項演算子
$path=~m/^\// ? $tmp=$host : $tmp=$directory;

# URLにして表示
print $tmp.$path;
exit;

結果
http://yahoo.co.jp/mail/tegami/letter//hoge.jpg
08828802005/12/03(土) 08:14:38ID:???
おお、すみません。
>>872をよく見て、
$tmp=($path=~m/^\//) ? $host : $directory
と書き直したらちゃんと動作しました。
ただの見た目の問題かと思っていたら、
こういうふうに書かなければ動かないんですね。
ありがとうございました。
0883JAPU ◆lVJAPUTeX. 2005/12/03(土) 09:11:41ID:???
($path =~ m/^\//)? ($tmp = $host): ($tmp = $directory);
または
$tmp = ($path =~ m/^\//)? $host: $directory;

三項演算子として使うなら後者が一般的。前者の書き方をしたければ if/else を使うほうが良いと思う。


>>881 のコードが動かないのは,
$path =~ m/^\//? $tmp = $host: $tmp = $directory;
は演算子の優先順位の関係で
($path =~ m/^\//? $tmp = $host: $tmp) = $directory;
と解釈されてしまうので,条件によらず最終的に $directory が代入されてしまうため。

ちょっと説明不足でしたね。
0884nobodyさん2005/12/03(土) 10:49:25ID:H4lHBq9R
質問させてください。

$str = q{<span id="hoge">あいうえお</span>あいうえお</span>}

最初のあいうえおだけマッチする正規表現はどう書けばいいのでしょうか?
$str =~ /???/;
0885nobodyさん2005/12/03(土) 11:15:01ID:???
>>884が考えて失敗した正規表現の .* を .*? にしてみな
0886nobodyさん2005/12/03(土) 11:17:02ID:H4lHBq9R
出来ましたありがとうございます
0887nobodyさん2005/12/03(土) 23:13:08ID:???
>>884
Perl関係ないけど言っておこう。

<span>...</span>タグはインライン要素なので、ホントは入れ子にできない。
lattice(で合ってたっけ?)にもできない。
× <span>foo<span>bar</span>hoge</span>

入れ子にできるのはブロック要素。
0888nobodyさん2005/12/03(土) 23:30:02ID:???
>>887
こらこら、適当なことを言うな。span要素は入れ子にできる。
ttp://www.w3.org/TR/html401/struct/global.html#edef-SPAN

というか所謂インライン要素はXMLで言うところのmixed contentなんだから、
文字データと共に自由に混交できる (他にスキーマで制約されていなければ)。
0889nobodyさん2005/12/03(土) 23:37:38ID:9N6MOM3Z
連想配列のソートについて質問です。
配列には
@NEW[0]='a,3,C';
@NEW[1]='c,1,B';
@NEW[2]='b,2,A';
のように納まってます。
@NEW[0]='c,1,B';
@NEW[1]='b,2,A';
@NEW[2]='a,3,C';
結果はこのように数字部分をソートする方法を考えてます。

foreach my $data ( @NEW ) {
($youso1,$youso2,$youso3) = split (/\,/,$data);
$xx[$data] = $youso2;
}
%yy = sort values (%xx);
@NEW = keys %xx;
このようなものを考えたのですがうまく動きません・・・
お知恵をください・・・
08908892005/12/03(土) 23:38:52ID:???
× %yy = sort values (%xx);
○ %xx = 〜 です

ageてすみません ○| ̄|_
0891nobodyさん2005/12/04(日) 00:09:50ID:???
>>889
まず @NEW[0]='a,3,C'; は $NEW[0]='a,3,C'; だ。
次に $xx[$data] = $youso2; は配列の添え字部に $data が入ってる。恐らくやりたいのは $xx{$data} だろう。
で、 %yy = sort values (%xx); は値を基準にソートしたつもりだろうが、
valuesを使った時点でキーを含まないリストになってしまうので
このようにする @NEW = sort { $xx{$a} <=> $xx{$b} } keys %xx;
この(889の)方法はハッシュのキーを使うため重複が纏められてしまう。
ついでにハッシュはキーの順番を保持しないので最後に @NEW = keys %xx; こうすると意味が無い。

まあ多少効率は落ちるかも知れないが @NEW = sort { (split',',$a)[1] <=> (split',',$b)[1] } @NEW; の1行でできるんだけどな。
0892nobodyさん2005/12/04(日) 00:11:41ID:???
基本の Schwartzian Transform なら
my @new = ('a,3,C', 'c,1,B', 'b,2,A');
@new = map{ $_->[0] } sort{ $a->[2] <=> $b->[2] } map{ [$_, split(/,/)] } @new;

ハッシュ使うなら
my @new = ('a,3,C', 'c,1,B', 'b,2,A');
my %hash = map{ (split(/,/))[1] => $_ } @new;
my @new = @hash{sort{ $a <=> $b } keys %hash};
0893JAPU ◆lVJAPUTeX. 2005/12/04(日) 00:13:24ID:???
>>889

まずは,ハッシュ (Perl4まで連想配列と呼ばれていたものは,Perl5でハッシュと呼ばれるようになりました) のキーを指定する方法に誤りがあります。
× $xx[$data] = $youso2;
○ $xx{$data} = $youso2;
前者は (通常の) 配列 @xx の要素にアクセスする際の記法です。

ここで %xx のキーに元データが入っていますので,keys %xx を並べかえればよいということになります。
比較するためのデータはハッシュに値として入っているので,下記の通り記述すれば動くことでしょう。
@ordered = sort { $xx{$a} <=> $xx{$b} } keys %xx;

※ ハッシュ,sort などについては,マニュアルを参照してください。
- http://perldoc.perl.org/
- プログラミングPerl (オライリー)
- Programming (O'Reilly)

----
手段は違いますが,このような処理をする際の定石を示しておきます。
my @ary = ("a,3,C", "c,1,B", "b,2,A");
# @tmp0 = (["a,3,C", 3], ["c,1,B", 1], ["b,2,A", 2]);
my @tmp0 = map { [$_, (split /,/)[1]] } @ary;
# @tmp1 = (["c,1,B", 1], ["b,2,A", 2], ["a,3,C", 3]);
my @tmp1 = sort { $a->[1] <=> $b->[1] } @tmp0;
# @ordered = ("c,1,B", "b,2,A", "a,3,C");
my @ordered = map { $_->[0] } @tmp1;
print "@ordered\n";
----
これを一文にまとまるとこうなります。Schwartzian Transform と呼ばれています。
my @ordered = (map { $_->[0] }
sort { $a->[1] <=> $b->[1] }
map { [$_, (split /,/)[1]] } @ary);
# 詳細は Effective Perl を読むと良いです。
08948892005/12/04(日) 00:34:13ID:???
>>891-893
なるほど・・・よくわかりました。ハッシュには順番がないのですね。
Schwartzian Transformで簡単にできたので、これとハッシュについて学んでみます。
ありがとうございました。
0895nobodyさん2005/12/04(日) 09:41:27ID:???
Fedora Core 4 + Perl 5.8.6 です。質問お願いします。

Perl ローケルの一時的な変更の方法を教えてください。
strftime( '%d/%b/%Y', localtime() );
で 01/Oct/2005 みたいな結果を期待したのですが、 01/12月/2005 のような日本語に合わせた結果になって困っています。
それとも素直に月名を配列に入れるのが得策でしょうか?

調べたところ i18n ファイルを変更すべしと書いてあるサイトに多数出会ったのですが、
他のアプリケーションには一切影響を与えたくないため何か別の方法があればお願いします。
0896nobodyさん2005/12/04(日) 10:39:23ID:???
>>895
strftime を使わなければいいんじゃね?

sprintf '%02d/%s/%04d', (split /\s+/, localtime)[2,1,4];
0897nobodyさん2005/12/04(日) 11:30:38ID:???
ImageMagickをインストールしたいんですが
perl Makefile.PL でエラーになります

Note (probably harmless): No library found for -lMagick
Note (probably harmless): No library found for -ldpstk
Note (probably harmless): No library found for -ldps
Note (probably harmless): No library found for -lXext
Note (probably harmless): No library found for -lXt
Note (probably harmless): No library found for -lSM
Note (probably harmless): No library found for -lICE
Note (probably harmless): No library found for -lX11

先に何か入れとく必要があるのでしょうか?
0898nobodyさん2005/12/04(日) 11:35:01ID:???
>>897
「たぶん無害です」と言ってくれているのでそういうことなんじゃない?
0899nobodyさん2005/12/04(日) 11:47:37ID:???
その先のmakeでエラーが出まくりで
コンパイルできないんです
0900nobodyさん2005/12/04(日) 11:49:12ID:???
じゃあ持ってきてインストールすべし。
0901nobodyさん2005/12/04(日) 11:52:27ID:???
なにをですか?
0902nobodyさん2005/12/04(日) 11:54:20ID:???
lMagickとかでググっても何が必要か探せなかったので、、
0903nobodyさん2005/12/04(日) 12:01:54ID:???
>>897-902
「ImageMagick」は C/C++ で書かれた画像加工ライブラリで、
君が作ろうとしているのは ImageMagick を perl スクリプトから
使う為の Perl モジュールである「PerlMagick」。-lMagick が
見つからんのなら、ImageMagick がインストールされていないか、
ライブラリの在り処を適切に指定していないんだろう。

何にせよスレ違いなんで、続きは以下へ移動してくれ。

Perlモジュールについて
http://pc8.2ch.net/test/read.cgi/php/997829243/
0904nobodyさん2005/12/04(日) 12:04:22ID:???
>>895
localeまわりの環境変数(LANGとかLC_ほげとか)をあらかじめ設定してから起動するとか、
POSIXモジュールのsetlocaleじゃだめなの? Fedora Coreは知らんのではずしてるかも
しれんけど。
0905nobodyさん2005/12/04(日) 18:01:02ID:i00gwMB7
デコード処理
sub decode {local($buf,$key,$val);
undef(%in);
if ($ENV{'REQUEST_METHOD'} eq "POST") {
$post_flag=1;
if ($ENV{'CONTENT_LENGTH'} > 51200) { &error("投稿量が大きすぎます"); }
read(STDIN, $buf, $ENV{'CONTENT_LENGTH'});
} else {$post_flag=0;
$buf = $ENV{'QUERY_STRING'};}
foreach ( split(/&/, $buf) ) {
($key, $val) = split(/=/);
$val =~ tr/+/ /;
$val =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("H2", $1)/eg;

掲示板の最大文字数制限をしたくてソースを見ていました。
上の51200をいじれば最大文字数も変更できるのかと思い
50に変えたのですが、500文字の書き込みも普通に投稿できます。
どうすれば、制限することができるのでしょうか。それともここは関係ないのでしょうか。
他にあやしいところは下あたりです。よろしくお願いします。

記事登録
sub regist {local($flag,$oyaChk,@lines,@data,@new,@tmp);
# フォーム入力チェック &formCheck;
# 時間取得 &get_time;
0906nobodyさん2005/12/04(日) 18:19:15ID:???
>>905
★三 【 スクリプト改造工房 PART 8 】 ★三
http://pc8.2ch.net/test/read.cgi/php/1077525387/
0907nobodyさん2005/12/04(日) 18:33:59ID:???
もともと51Kもの投稿を許すような掲示板のソースを改変しようとすること自体間違い
0908nobodyさん2005/12/04(日) 18:37:29ID:gXJuNnnY
hogehoge.pmのファイルの三行目に
use 5.008001;
と言う記述があるのですが、これはなんでしょうか?

hogehoge.pmを利用しているファイルを動かすとエラーログに↓が返されています。

Premature end of script headers: hello.cgi
Perl v5.8.1 required--this is only v5.8.0, stopped at /usr/lib/perl5/5.8.0/xxx/xxx/xxx/hogehoge.pm line 3.
BEGIN failed--compilation aborted at /usr/lib/perl5/5.8.0/xxx/xxx/xxx/hogehoge.pm line 3.
0909nobodyさん2005/12/04(日) 18:39:46ID:???
>>908
http://perldoc.jp/docs/perl/5.6.1/perlfunc.pod#item_use_Module_VERSION_LIST
0910nobodyさん2005/12/04(日) 19:08:08ID:5pWPWSDT
>>896
エエエェェェ(´Д`)ェェェエエエ
09119082005/12/04(日) 19:24:42ID:gXJuNnnY
>>909
ありがとうございます。

use 5.008001; と言う記述は、Perlのバージョンが5.8.1以上であれば、
↓のようなエラーは出なくなるのでしょうか?

Premature end of script headers: hello.cgi
Perl v5.8.1 required--this is only v5.8.0, stopped at /usr/lib/perl5/5.8.0/xxx/xxx/xxx/hogehoge.pm line 3.
BEGIN failed--compilation aborted at /usr/lib/perl5/5.8.0/xxx/xxx/xxx/hogehoge.pm line 3.
0912nobodyさん2005/12/04(日) 19:44:31ID:???
>>895
setlocale(LC_TIME, 'C');
で行けると思う。
もちろんuse POSIX;して。
09139052005/12/04(日) 20:09:52ID:???
>>907
51200って文字制限には関係あるのでしょうか?
50に変えて500文字の投稿ができなかったので。
0914nobodyさん2005/12/04(日) 20:14:17ID:???
>>913
http://www.studyinghttp.net/rfc_ja/rfc2616.ja.xhtml.gz#Sec14.13
http://www.nilab.info/docs/cgi/draft-coar-cgi-v11-03-clean-jp.html#6.1.2

CGI: Common Gateway Interface part 13
http://pc8.2ch.net/test/read.cgi/php/1126436361/
09159052005/12/04(日) 20:23:41ID:???
解決しました。すみません。
0916nobodyさん2005/12/04(日) 20:57:50ID:???
しかもマルチだし
0917nobodyさん2005/12/04(日) 21:24:10ID:???
※低脳な質問はプログラム板でお願いします
0918nobodyさん2005/12/04(日) 21:33:34ID:???
低脳は質問はWebProg板向きだな
0919nobodyさん2005/12/04(日) 21:50:20ID:???
>>918
日本語できないヤシはハングル板向きだな
0920nobodyさん2005/12/04(日) 22:12:24ID:???
※低脳な質問はここでお願いします  ム板住人一同
0921nobodyさん2005/12/04(日) 22:24:33ID:???
Perllコーディングの質問で>>1をちゃんと読んでくれていれば、なんでもいいよ。
0922nobodyさん2005/12/05(月) 03:13:45ID:???
日曜ってどうも必死な人間がいるよね
まぁ放置が一番だけど。
0923nobodyさん2005/12/05(月) 08:37:30ID:???
だってここ実際にレベル低いし(笑)
0924nobodyさん2005/12/05(月) 09:32:44ID:???
m9(^Д^) プギャー
0925nobodyさん2005/12/05(月) 15:03:00ID:S1tZNUNq
だって、初心者質問スレって書いてあるじゃん・・・
0926nobodyさん2005/12/05(月) 15:05:05ID:S1tZNUNq
>>911
Perl v5.8.1 required--this is only v5.8.0, stopped at /usr/lib/perl5/5.8.0/xxx/xxx/xxx/hogehoge.pm line 3.

英文を見る限りこのエラーは、perl5.8.1以前だと出るのだと思う。
0927nobodyさん2005/12/06(火) 22:00:39ID:???
いま、登録CGIを作ろうとしているのですが、ユーザー名、パスワードのはじめに数字があるとき警告するようにしたいです。
indexで[0-9]を探して、返してきた値が0、つまり文字のはじめだったらエラーを返そうとしたのですが
indexから返される値がどうもおかしいようで、うまくいきませんでした。

どのようにしたらうまくいくのでしょうか?どなたか教えてください。
0928nobodyさん2005/12/06(火) 22:05:56ID:???
$pass =~ m/^\d/
09299272005/12/06(火) 22:40:27ID:???
>>928さん
うまくいきました。

正規表現のリストから見落としていました。
ありがとうございました。
0930nobodyさん2005/12/07(水) 12:18:20ID:7UCC6Dk6
すっごい、初心者な質問なんですが、
HTMLを出力させる際に

print "(ここにHTMLソース)"

ってかんじでやっていて、HTMLソースの中で変数を表示する際に
普通に $TOTAL とかで数字の変数はうまく、そこに表示されますが、
文字列($TOTALTEXT='あなたの合計点は低いです。')は $TOTALTEXT
と記述しただけでは、うまく表示されません。

どなたか分かる方いませんか?
0931nobodyさん2005/12/07(水) 12:28:37ID:???
>>930
>>1
> 2: それでこんな風にやってみたが・・・
> 3: こんなエラーが出て上手く行かなかった。
0932nobodyさん2005/12/07(水) 12:39:51ID:???
エスパーさーーん
0933nobodyさん2005/12/07(水) 12:45:31ID:???
>>930
まず、日本語を勉強してきてください。
0934えすぱ2005/12/07(水) 14:16:24ID:???
>930
Shift_JISではなくEUCでやりなされ。
09359302005/12/07(水) 14:25:17ID:7UCC6Dk6
1:変数$TOTALTEXT(文字列が入っている)をHTMLを出力させたいです。

2:print "(ここにHTMLソース、そしてこの中で$TOTALTEXTの文字列を表示したい)"

3:結果として、HTMLは出力されますが、$TOTALTEXTの内容は表示されません。


どうでしょうか
0936nobodyさん2005/12/07(水) 14:27:05ID:???
表示されない訳がない
実際のコード貼ってみろ
09379302005/12/07(水) 14:32:23ID:7UCC6Dk6
すまそ、こんなかんじです

$ALLTOTALTEXT='テスト'


#HTML出力
print "Content-type: text/html; charset=Shift_JIS\n\n";
print "<html>\n<head>\n";
print "<META HTTP-EQUIV=\"Content-type\" CONTENT=\"text/html; charset=x-sjis\">\n";
print "</head><body>「$ALLTOTALTEXT」</body><html>";
09389302005/12/07(水) 14:33:03ID:7UCC6Dk6
ちなみに文字列が数字ならうまく表示されるみたい。。。
0939nobodyさん2005/12/07(水) 14:42:24ID:???
ふつーに表示されたが
0940nobodyさん2005/12/07(水) 14:42:26ID:???
>>938
>>934
09419302005/12/07(水) 14:48:14ID:7UCC6Dk6
>>939
えっ?まじ?

>>940
print "Content-type: text/html; charset=Shift_JIS\n\n";
のShift_JISのとこを変えればいいのかな
09429302005/12/07(水) 14:52:26ID:7UCC6Dk6
えすぱーさん、くわしく
0943nobodyさん2005/12/07(水) 14:53:44ID:???
>>937
$ALLTOTALTEXT='テスト' の末尾に ; が抜けているし
突っ込み処満載だが、; さえ入れればそれで問題ない。

>>941
Shift_JIS や x-sjis を変更した上で、ファイル自体も
EUC-JP で保存。
http://www.din.or.jp/~ohzaki/perl.htm#JP_EUC_JP

まぁ盲目的に EUC-JP にすれば OK という事ではなくて、
EUC-JP の方が問題が起きにくいってだけだけどな。
同じ変えるなら UTF-8 にした方がいいし、携帯コンテンツ
だと Shift_JIS しか使えないって事もあるだろうし。
09449302005/12/07(水) 14:57:06ID:7UCC6Dk6
>>943
指摘ありがとう。;はただの記述ミスです。
JCODEいれてるんですが、これでは駄目なのかな?

携帯コンテンツではなく、PCオンリーなんですが
おすすめはShift_JIS?
0945nobodyさん2005/12/07(水) 15:04:14ID:???
>944
>943が貼ってくれたリンク先をよく読め
09469302005/12/07(水) 15:09:57ID:7UCC6Dk6
読んでみたんですが、難しいですね。。。
メールも自動生成して出力してるんですが、
メールのほうではちゃんと出力されるのが謎なんですよね
09479302005/12/07(水) 15:22:01ID:7UCC6Dk6
できました。みなさん、ありがとう
0948nobodyさん2005/12/07(水) 15:25:45ID:???
print "<$ALLTOTALTEXT>";
0949nobodyさん2005/12/07(水) 16:54:51ID:???
print 'もう来るな';
0950nobodyさん2005/12/07(水) 17:21:10ID:qBdfvq/C
EUC-JP と言ってるのに 「おすすめは Shift_JIS?」 って、まずは小学校に入ってこい。
話はそれからだ。
0951分かりません!2005/12/08(木) 00:23:26ID:zq2aWK4E
webアプリ初心者です;
調べたけどよくわからなかったんで質問させてください。
やりたいことはperlとDBを使用したアプリ作成です。DBはmysql、mdb
どちらかで考えています。
現在の環境
os:windowsXp
webサーバ:Apache

1:DBの配置場所が分かりません。どこのディレクトリに配置して
  どのような呼び出し方をするのでしょうか。(DBIでデータソース
  を指定するところ)



2:実際インターネットにのっけたとき、サーバはunixになると思うんですが
  そのときのDBの配置場所を教えてください。また、webサーバによって
  dbの配置場所、接続方法は変わるんでしょうか?



0952nobodyさん2005/12/08(木) 00:26:01ID:???
>>951
>>1を読もうね。
0953nobodyさん2005/12/08(木) 00:54:51ID:???
>DBの配置場所

メモリ上、又はファイル
0954nobodyさん2005/12/08(木) 01:00:14ID:/QVLECMb
CSV形式のファイルをダウンロードさせるCGIを構築しています。
主な流れは下記の通りです。

push(@dump, "あ,123,,,,,,,,,,,,\n");
push(@dump, "い,456,,,,,,,,,,,,\n");
push(@dump, "う,789,,,,,,,,,,,,\n");
 :
 :

print "Content-Disposition: attachment; filename=abc.csv\n";

my($sizeTmp);
foreach(@dump){
$sizeTmp .= $_;
}
my($size) = length($sizeTmp);

print "Content-Length: $size\n\n";
print "$downloadCsv";

ダウンロードはできるのですが、
lengthでファイルサイズが正しく取れていない??(おそらく)
それにより、ダウンロードしたCSVファイルを開くと
最後の方が欠けています。
よりよい方法や参考サイト等はございますでしょうか?
ご教授頂けたら幸いです。
0955nobodyさん2005/12/08(木) 01:06:06ID:???
$downloadCsv の内容を詳しく
09569542005/12/08(木) 01:10:27ID:/QVLECMb
>>955
申し訳ありません。一部訂正です。
$downloadCsvは下記の様になります。

my($downloadCsv);
foreach(@dump){
$sizeTmp .= $_;
}
my($downloadCsv) = length($sizeTmp);

print "Content-Length: $size\n\n";
print "$downloadCsv";
0957nobodyさん2005/12/08(木) 01:12:13ID:???
それだと $downloadCsv に $sizeTmp の長さが入っちゃって
数値だけの変なファイルがダウンロードされる気がするんだけど
09589542005/12/08(木) 01:14:09ID:/QVLECMb
申し訳ございません。ご指摘の通りでした。
再修正してみましたが、やはりDLしたCSVファイルが欠けてしまいます。

my($downloadCsv);
foreach(@dump){
$downloadCsv .= $_;
}
my($size) = length($downloadCsv);

print "Content-Length: $size\n\n";
print "$downloadCsv";
0959nobodyさん2005/12/08(木) 01:17:22ID:???
それだけじゃ原因が分からないなぁ
全体のソースとか無理かな
09609542005/12/08(木) 01:27:44ID:/QVLECMb
下記が実際に用いているものです。
内容は繰り返し部分を省いた以外はほぼそのままです。

<IN>:$in{data} = abc;(DLファイル名)

my(@dump);

push(@dump, "更新,$y/$m/$d,,,,,\n");
push(@dump, "記録,$hashDay{$in{'data'}}日分,,,,,\n");
push(@dump, ",,,,,,\n");
push(@dump, "更新,$y/$m/$d,,,,,\n");
 :
 以下繰り返し
 :

print "Content-Type: application/octet-stream\n";
print "Content-Disposition: attachment; filename=$in{data}.csv\n";

my($downloadCsv);
 foreach(@dump){
$downloadCsv .= $_;
}
my($size) = length($downloadCsv);

print "Content-Length: $size\n\n";
print "$downloadCsv";

exit;
0961nobodyさん2005/12/08(木) 01:41:13ID:VQhX6ruj
改行コードがlength()だと1で
printしたときは\x0D\x0Aの2になるとかじゃない?
ちゃんと調べてないけど

何バイト分足りないのか比べて見たら?
0962nobodyさん2005/12/08(木) 01:44:30ID:???
Content-Length って別に要らないだろ
進行状況のバーが無くなるぐらいだし
09639542005/12/08(木) 02:00:29ID:/QVLECMb
ありがとうございました。
とりあえず、Content-Lengthが無いとローカルでDLできない様なので
付ける方向で行こうと考えています。
DLするCSVのデータ中の改行に\x0D\x0Aを用いる事ができなかったので
下記の様にする事で問題を回避できました。

my($downloadSize);
my($downloadCsv);
foreach(@dump){

 my($downloadSizeTmp) = $_;
 $downloadSizeTmp=~ s/\n/\x0D\x0A/g;
 $downloadSize .= $downloadSizeTmp;

 $downloadCsv .= $_;
}
my($size) = length($downloadSize);

print "Content-Length: $size\n\n";
print "$downloadCsv";
0964nobodyさん2005/12/08(木) 02:05:27ID:???
ちなみに \x0D\x0A って \r\n のことだからね
09659542005/12/08(木) 02:18:27ID:/QVLECMb
なるほど。
\r\nはウィンドウズの改行コードだと思うのですが、
改行コード\nをウィンドウズのローカルにDLすると\r\nに変換されるのでしょうか?
現状では\nでDLしてもContent-Lengthが正しければ正常にDLできています。
0966nobodyさん2005/12/08(木) 02:20:59ID:???
つーか Content-Length ヘッダ無しでダウンロードできないって
どんなブラウザ使ってるんだ?
09679542005/12/08(木) 02:23:59ID:???
ブラウザはSleipnir 2 でIEのエンジンを利用してます。
やはり何度やってもContent-Lengthがないと
Internal Server Errorになります。
0968nobodyさん2005/12/08(木) 02:25:27ID:???
一部携帯では必須
0969nobodyさん2005/12/08(木) 02:27:15ID:???
>Internal Server Errorになります。

それ、
>print "Content-Length: $size\n\n";
この行をそのまま消したからだろ

>print "Content-Length: $size\n\n";

>print "\n";
に置き換えてみろ
09709542005/12/08(木) 02:29:20ID:???
なるほど。
ご指摘の通り、現環境ではprint "\n";で問題ありませんでした。
09719542005/12/08(木) 02:38:44ID:/QVLECMb
改行コードの事で一点気付いたのですが、
\nで処理しているデータは\r\nや\rなどDLする環境向けに
変換する必要があるのでしょうか?

現ローカル環境のWinでDLした際には問題なかったのですが、
その他の環境やMac環境むけにDLさせる場合は
\r等に置換しないと問題となったりする物なのでしょうか?
0972nobodyさん2005/12/08(木) 07:21:12ID:qoVbfW3N
abcdefgabcdef

こういった文字列が合った場合、2個目の abc にマッチさせたい場合の正規表現がわかりません。
行末にあれば abc$ でマッチできるんですが …
0973nobodyさん2005/12/08(木) 07:38:25ID:???
>>971
EXCELやある程度の機能があるエディタなんかは各種改行コードに対応しているので問題ない
メモ帳だと\nのファイルは1行で表示されるので問題あり。
0974nobodyさん2005/12/08(木) 09:19:32ID:???
>>971
何でもかんでも鵜呑みにせずウラを取ろうな。
http://www.din.or.jp/~ohzaki/perl.htm#CRLF_Unify
http://www.studyinghttp.net/rfc_ja/rfc2616.ja.xhtml.gz#Sec2.2
http://www.nilab.info/docs/cgi/draft-coar-cgi-v11-03-clean-jp.html#7.2.1

まともな HTTP サーバならヘッダ部の改行コードに関しては気を利かせて
くれるので "\n" で問題無い。ボディ部、今回の件だと CSV ファイルの
改行コードは >>973 の言う通りで、ファイルを読む人のソフトが特定できる
なら改行コードを合わせて吐いた方が無難。

>>972
my $str = "abcdefgabcdef\n";
for ('abc', 'def') {
  $str =~ s/(($_).*?)(\2)/ $1 . uc $3 /e;
  print $str;
}
0975nobodyさん2005/12/08(木) 09:23:44ID:qoVbfW3N
やっぱループさせないと無理ですか・・・
0976nobodyさん2005/12/08(木) 11:18:07ID:???
MacOSの改行コードが \r なのは9以前で
OSXからは \n だからね
0977nobodyさん2005/12/08(木) 13:24:04ID:???
>976
改行コードはどのプラットフォームでも\n。
\r→CR
\n→LF
としないと、意味不明。
09789542005/12/08(木) 13:51:47ID:/QVLECMb
ありがとうございます。
現状ではDLするのは主にWin環境です。
CSVエクセルファイルであるため、開くソフトはエクセルのみであると
想定出来るためソフト側に改行コードの対応は任せようと思います。
おそらくMacで用いる事はないと思うのですが、
支障があるようであれば改行コードをDL時に選択できるものに変更しようと思います。
0979nobodyさん2005/12/08(木) 14:31:43ID:???
俺はCSVはまずエディタで開くけどなぁ。
0980nobodyさん2005/12/08(木) 14:55:26ID:???
同じく
0981nobodyさん2005/12/08(木) 15:04:53ID:???
csvをダブルクリックすると秀丸が開く
0982nobodyさん2005/12/08(木) 17:02:49ID:qoVbfW3N
CSVをダブルクリックするとIEがダウンロードはじめるorz
0983nobodyさん2005/12/08(木) 18:00:29ID:???
そろそろ次スレよろ
0984nobodyさん2005/12/08(木) 18:27:53ID:???
次スレ立てる人は >>7 の URL を変更してね。

クックブック: http://www.oreilly.co.jp/books/4873112028/
日本語ドキュメント検索: http://www.cpan.jp/search.cgi

Perldoc.com っていつも全然繋がらないんだけど、死んでる?
0985nobodyさん2005/12/08(木) 18:30:40ID:???
part31 と part32 で、dat がないって言われてるな。
>>984 以外に変更した方がいい URL があったら誰かよろしく。

# 俺は立てれなかった…。
0986nobodyさん2005/12/08(木) 18:53:17ID:???
テンプレ貼ってくれるなら俺が立てるが
0987nobodyさん2005/12/08(木) 19:21:50ID:???
>>621
http://user.ftth100.com/mirrorhenkan/perl/
0988nobodyさん2005/12/08(木) 22:16:12ID:7Tka8YnI
たまに覗いてるものです。
スレ立てに失敗しました。orz・・・

で、質問です。
perl5.8.0を使っていたのですけど、perl5.8.5をインストールしました。
ところが、
# perl -v と打ちますと
This is perl, v5.8.0 と返ってきます。

英語だからとテキトーに読み飛ばしてインストールしたせいだとは思うのですが、
後から、perl5.8.5をデフォルトで使用するにはどのようにしたらよいですか??
0989nobodyさん2005/12/08(木) 22:45:53ID:???
>>988
Perl に関係ない質問なので、ここでは答えない。

ヒント: which
0990nobodyさん2005/12/08(木) 22:47:35ID:???
スレを立てる
09919882005/12/08(木) 23:04:14ID:???
新スレ立てました
http://pc8.2ch.net/test/read.cgi/php/1134049707/


>>989
どこで質問したらいいですかねぇ。
知ってたら、もうちょっと教えてください・・・。
0992nobodyさん2005/12/08(木) 23:28:57ID:???
>>991

OSがLinuxならLinux板のくだ質スレ辺りで、経緯を説明して古いほうの
Perlをアンインストールしたいと聞けば良いんじゃないかな。保証は出来ないが…
0993nobodyさん2005/12/08(木) 23:29:02ID:???
>>991
UNIX板の自分が使ってるディストリスレ
つか今のままだとエスパー以外回答できない
0994nobodyさん2005/12/09(金) 00:04:36ID:???
perl5.8.2、Postgrewsqlを使っとりまして、正規表現に日本語を使いたくなったもんで、
ウェブで調べて、とりあえずuse encoding "euc-jp";と、してみたとです。
そしたら、DBテーブルからもってきた文字列だけ、出力時に
〜does not map to euc-jpと怒られるとです。DBもeuc-jpで作ってあるとです。
スクリプト内の日本語や、openで開くファイルは問題なかです。

どこに原因があるとですか。よろしく、おねげーしますだ。
0995nobodyさん2005/12/09(金) 11:59:04ID:???
何かむかつくのは俺だけか・・・?
0996nobodyさん2005/12/09(金) 12:14:53ID:???
>>994
そのDBから持ってきて出力時にエラーになる文字列とやらの
中身とutf8フラグの状態を調べるのが基本だと思うが。
0997nobodyさん2005/12/09(金) 16:30:40ID:???
Perlコーディング初心者質問スレ Part 45
http://pc8.2ch.net/test/read.cgi/php/1134049707/
0998nobodyさん2005/12/09(金) 16:35:39ID:???
ちんこー
0999nobodyさん2005/12/09(金) 17:18:03ID:???
1000取ったやつは死ね
1000nobodyさん2005/12/09(金) 17:24:52ID:???
Perlコーディング初心者質問スレ Part 45
http://pc8.2ch.net/test/read.cgi/php/1134049707/
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。