Perlについての質問箱

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
全スレ見たけど、Perlのスレッドがないので一応立てます
質問したいこともあるしね、というわけでいきなり質問させてください

今Perlで正規表現の勉強をしていますが正規表現のあたりでつまづいています
「正規表現」とは文字が数式の一種という概念はわかるのですが、参考書の文献には
…「メタ文字」とはその文字字自信にマッチするのではなく、特別な機能を持つ文字です。
例えば「.」はメタ文字で任意の一文字とマッチします。そのため文字列「Abc」「ABC」「Axc」「A=c」
にマッチする正規表現は次のように書くことが出来ます
      A.c
メタ文字には次のものがあります
      \ . ・ + | ( ) [ ] { } ^ $
どの文字がメタ文字になるかは局面によって変わります…

これについての使い方が以後のこれらの文字についての説明を読んでも今ひとつぱっとしないのです。
この使い方を図説で説明されていないんですね。だれかこの使い方について
説明できる人いませんか?お願いします。

どこ探したんですか?「けんさく」って知ってますか?
4デフォルトの名無しさん:02/04/02 19:10
>>2
『Perlスクリプティング入門』という本ですよ
それまでは例としてスクリプト載っていたやつを実際に打って確かめてみるやり方で
いままでやってみたんだけど・・・このばあいの「検索」はどういう意味ですか?
>>3
こっちの説明が足りないってことかな?
5hiroyuko:02/04/02 19:12
>>1

しんでください
>>1
あなたの言う質問箱って、質問するだけなのですか?
だれも答えなくてもいいんですか?
っていうか糞スレですか?
Web プログラミング板なら Perl スレたくさんありそうだね。
確認してないけど。
確かにどこからが引用でどこからが自分の文なのかわかりにくいな。

俺Perl知らないんだけど、その引用(らしき)文を読む限りじゃ
メタ文字=ワイルドカードみたいなもん
じゃないの?
9hiroyuko:02/04/02 19:19
自分のためにスレ立てやがったのかコノヤロー
>>1
重複、1 に質問なので糞スレ度 2 に認定しよう。
おそらく、「Perl の質問スレ」 はなかったので立てたと反論するだろうが。

このスレを薦めとく。
CGIに依存しないPerlの話題一般
http://pc.2ch.net/test/read.cgi/php/991313362/
>>1と糞スレのハーモニー
ここの板で Perl スレといえば
Perlは結構使えるっぽいけどどうよ?
http://pc.2ch.net/test/read.cgi/tech/991994996/l50
だろ。

全スレ見たってホントですか?>>1
>>1は嘘をついている!
>>8
このスレとは直接関係ないけどプログラム板に来るような人なら(perlのに限
らず)正規表現はひととおり知っておいた方が便利だよ。
未だに答えてもらえず悶える>>1を想像してみる。
16デフォルトの名無しさん:02/04/02 20:30
Perl.NETが出るって本当ですか?
ageる前に検索すれ
s/正規表現/を語ろう/e
http://pc.2ch.net/test/read.cgi/tech/1015398955/
19hiro ◆hiroHsTw :02/04/02 22:05
「俺は一歩先行くインターネット
CGIプログラミング入門」ってやつ読んでる
内容は古いけどわかりやすいです
20デフォルトの名無しさん:02/04/02 23:17
ム板にもPerlスレがかなりあったんだな.
ほとんど糞だが(wara
パールライスはうまいなぁ。
22:02/04/12 11:57
一通り目を通したつもりですが、スレを見落としたかもしれませんね。
でも、これは自分専用ではなくて他の人が使っても構いません。
ageないでください。誰も使いませんから。
うるせーハゲ
25学者:02/04/12 12:37
賢い恐竜が立てたスレというのはここですか?
26ごろさん:02/04/13 20:42
正規表現で、もしも「あいう」という文字列を2回マッチした場合
「2」と表示させたいのですが、どうすればいいのですか?
検索して調べればいいです。
$_ = $string;
@Arr = m/あいう/g;
$num = @Arr;

で、いいんじゃねーの?
30初心者:02/05/11 18:48
windows xp なんですが、perlの入れ方がよくわかりません。
activeperlダウンロードしてインストールしたのに、
うまく入ってないみたい・・・。
どなたか、xpですでにperl入れたよって方、
もしくは入れ方わかるよって方、
簡単にでいいのでやり方を教えてもらえませんか???m(__)m
31このスレsageてくれ:02/05/11 18:51
コマンドプロンプトで
>perl -v
って打ってみろ。
32初心者:02/05/11 18:53
>31
どうもありがとうございました!
>>32
それで解決したんですか?(汗
34デフォルトの名無しさん:02/05/13 10:46
Windows2000にActivePerlのインストールした時に
インストール先を間違えたので、一端アンインストールしたいのですが、
フォルダを削除する以外に、どこかにpathが書かれていたりしますか?
フォルダ削除だけで良いものか、教えて下さい。

>>34
素人が調子に乗るな。
コントロールパネルの「アプリケーションの追加と削除」で消したほうが良いんじゃない?

後は環境変数が追加されてるかな。
3734:02/05/13 11:14
documentationにはコントロールパネルの add/remove から削除しろと書いてあったのですが、
追加と削除にActivePealが無かったので焦りました。
AS package をインストールしていたようで、
ActivePerl 5.6.1 Windows MSI 版を上書きインストールして、
そこから削除する事ができました。 (多分 ^^;

>>36さん
どうもありがとうございました。
38デフォルトの名無しさん:02/05/13 12:25
s/hoge/piyo/ge;
これは、どう置換されるのですか?
うーむ、e がついてるけど piyo だから、そのまま置換されるだけ
じゃないかな?
>>38
最後のeの部分がよくわからないのです。
ふだんPerlは使っていないんですけど、記事の中で使われていたので、どういう意味なのかと。
>34
「アプリケーションの追加と削除」でアンインストールする。

既にフォルダとかを消してしまった場合は、同じ条件で再インストール後、
「アプリケーションの追加と削除」からアンインストール。

それでもダメならOSから入れなおしてちょ。
4234:02/05/13 14:01
>>41
アンインストール無しのバージョンを入れてしまったので、
アンインストール有りのモノを同じディレクトリに上書きインストールして
その後、「アプリケーションの追加と削除」からアンインストールしました。

アドバイスありがとうございます。
43とんちんかん:02/05/20 07:08
Perl を使ってあるWin2kのログ ファイルから必要な情報を別のテキスト ファイルに抽出
してるんですが、ちょっとした理由でこのログ ファイルが Unicode 形式になってしまいまいた。
でこのスクリプトで読み込んでみたら案の定白紙のテキスト ファイルを作ってくれました。
Perl で UCS2 のファイルの読み書きってできるんでしょうか?
Jcode.pmとかって使うんですか?
教えて君ですみません。
KENTのCGI改造し放題
>>44
ねーストしてあのスクリプトは問題。
46デフォルトの名無しさん:02/05/20 10:28
2バイト文字かどうかの判別を行うスクリプトを書こうとしています。
(EUCの場合)
要は先頭バイトの最上位ビットが1ならば2バイトなので
C言語ならば
c & 0x80
これでいいと思いますが、
perlの場合はうまいことやる方法がわかりません。

$kana = "漢";
@kana = unpack "H2",$kana;
#先頭バイトを確保、この場合
#$kana[0] = b4となっている

$test = pack("H2",$kana[0]);
#b4をchar系にもどして

$test = $test >> 7;
#7ビットシフトして

if ($test){print "It's Kanji\n";}
#これで $testが1ならいいと思うのですが・・・

うまくいきません。
どなたかアドバイスを・・
47名無しさん@Emacs:02/05/20 10:46
単純に 128 以上かどうか比べればいいんじゃないの。
普通にビット演算すりゃいいだろ。
つーかpackの使い方分かってませんね。
それ以前に@kanaの中身をしらべるっつーデバッグの基本中の基本もしてませんね。

print "ok\n" if((unpack 'C2', '漢')[0] & 0x80);

以下はこちらでどうぞ

http://pc.2ch.net/test/read.cgi/php/1019917048/

__END__
50質問:02/05/20 20:14
文字列を可逆的に暗号化したいんだけど、
何かいいサブルーチンはないもんかね?
>>50
適当な値とxor取る。
52質問:02/05/20 20:21
文字列を可逆的に暗号化したいんだけど、
何かいいサブルーチンはないもんかね?
53質問:02/05/20 20:22
ありがとう。
正規表現のマッチした部分が入る変数の名前ってなんだっけ?
$@だっけ?
Perlの万能変数ってどうよ?
どうよって?
571:02/05/20 22:18
あーウゼェウゼェ
本当は折れのためにだけ立てたスレだったんだが、途中でそれがバレそうになって
うやむやになったけど ほかの奴まで質問してきやがって
 目論見は敗れた このスレは閉鎖する サラバ!(もうあうこともないだろう)
58棄教者 ◆witdLTi2 :02/05/20 22:33
>>54
$1 $2 $3 $4 ... $9
>>55
型グロブのこと? いいんじゃないの?
59奈々氏:02/05/21 12:42
質問です
www5.ocn.ne.jp/~asdfg/send.cgi
www5.ocn.ne.jp/~asdfg/send.html
これなのですが、何度やっても
500 Internal Server Error
とでてしまいます。パールのパス、jcode.pl、cgi-lib.plの位置は確認しました
やはり文法エラーなのでしょうか。
詳しい方、指導お願いします。
ちなみに『ocnはCGI使えないよ』とかそういうあたりまえの突っ込みはやめてください
ocnにうpしたのはソースを見てもらうためです。
60そんじゃ:02/05/21 13:19
sendmail は使えるのか、と。
61奈々氏:02/05/21 13:45
>60
使えます
確認しました
-c では syntax OK だな。
パーミッションは?
>>59

プログラムを大幅に削って、次の行だけで CGI として
ちゃんと動くのかを確認して欲しい。

--------------------------------
#!usr/local/bin/perl

print "Content-type: text/html\n\n";
print "<html><body>\n";
print "メールを送信しました<hr>";
print "</body></html>\n";
--------------------------------

#!/usr/local/bin/perl

ではないのか、が気になった。
「パールのパス、・・・・・・・・・は確認しました 」
と、書いてあっても、やっぱり気になる。
PerlUnitの使い方について知っている方はぜひ教えてください
65質問:02/05/22 17:32
全角半角の混じった文字列を、
ブラウザからPOSTやGETで送信されるときと
まったく同じ状態にURLエンコードしたいんだけど、
s/(\W)/'%'.unpack("H2", $1)/ego;を使ったら
%A5%ADじゃなくて%a5%adの様に小文字になってしまうし、
あと半角文字もエンコードされてしまう。
おまえら何かいい方法はありませんか?
66デフォルトの名無しさん:02/05/22 17:37
>>59はパーミッションを間違っていたことに気付いて帰ったらしい
挨拶くらいしていけ
>>65
別に小文字も大文字も意味は同じじゃねーか、ヴォケ。
いやなら大文字にしろ。
半角文字がエンコードされるなんてあたりめーだろ、氏ね。
仕様書読め、糞
uc EXPR
 EXPR を大文字に変換したものを返します。
68shige:02/05/22 17:47
ぷっ
なんと程度の低いスレッドだ。
shige はすっこんでろ。
70shige:02/05/22 17:55
なんかいえよ。こら
71shige:02/05/22 17:57
生まれてきてごめんなさい
生まれてきてごめんなさい
生まれてきてごめんなさい
生まれてきてごめんなさい
72shige:02/05/22 17:58
shige って共通コテハンってほんとですか?
Rubyを貶すときの共通コテハンです
74デフォルトの名無しさん:02/05/22 19:01
関係ないけどさ、CGI::Liteってつかってる?
url_encode() で改行文字とかをエンコードすると
%0a じゃなくて %a に
なって、それをデコードできないという・・。

なんか思い出したのれす。


7565:02/05/22 20:05
>>67
レスどうも。そうか、ucってすればいいのか。
とりあえず、「意味」が欲しかったわけではなく、
「形」が欲しかったので。

ただ、ブラウザのフォームから送信する場合は、
半角は特別な記号以外はエンコードされないはずだが。
そっちは未解決。
>>65
$noenc_char = '[^A-Za-z0-9.,エンコードシタクナイモジヲスキナダケドウゾ]';
$str =~ s/($noenc_char)/uc unpack 'H2', $1/ego;
7765:02/05/22 20:15
>>67
スマソ、今変換してみたら半角はエンコードされなかった。
まったく
「半角文字がエンコードされるなんてあたりめーだろ、氏ね。 」
だなんて、初心者だと思ってからかうなよ(藁
7865:02/05/22 20:16
>>76
あ、こりゃ便利だ。
今度使わせてもらう。
79デフォルトの名無しさん:02/05/23 11:17
perl上でz拡張子ファイルをuncompressしたいのですが
やり方を教えてもらえないでしょうか。。。
こういうのに使えるPPMとかってありますか?
gzipを起動させれば?
81デフォルトの名無しさん:02/05/23 11:24
>>79
system関数で。
拡張子はzね。で、肝心のフォーマットは?
perl使ってメールを送ることってできますか?
できますよ。
perl使ってうんこを送ることってできますか?
shige はすっこんでろ!!
>>86
ワロタ
8879:02/05/23 21:18
79です。

system関数で解凍ソフトのコマンドラインを
実行するように書いたらうまくいきました。
ありがとうございます。

自分の持ってる入門書には
system関数なんて載っていなかったっス。。。



そんな本は窓から投げ捨てとけ。
90perlでgzipをダイレクトに扱うには:02/05/24 01:32
テキストをgzipで圧縮してあるファイル(*****.gz)をperlでダイレクトに
アクセスして圧縮解いて文字列処理することってできるんですかね。
やはり一度どこかのテンポラリーに圧縮解凍してからそれを読み込まないと
だめですか?
簡単な方法あったら知りたいのでお願いです。
>>90
Compress::Zlib
92perlでgzipをダイレクトに扱うには:02/05/25 10:56
>91

それ使うとfopenでダイレクトにgzファイルをテキストファイルみたい
に扱うことができるの?
どっか使い方のサンプルとか出てるサイトないですかね?
>>92
Compress::ZlibはCライブラリのzlibのPerlインタフェイス。
ファイルハンドルと圧縮ファイルを連結させるにはIO::Zlibってのがある。
入手、ドキュメントはCPANへ。
英語だがガッツがあればそれなりにいける。
http://search.cpan.org/search?dist=Compress-Zlib
http://search.cpan.org/search?dist=IO-Zlib
94デフォルトの名無しさん:02/05/30 17:14
りんごを英語で何て言うか尋ねるスクリプトを書いたのですが、正解でも不正解でも正解時のコメントが表示されてしまいます。どこがまちがってるか教えていただけないでしょうか?

print "りんごは英語で?: ";
$answer = <STDIN>;
chomp($answer);
if ($answer == apple) {print "ご名答!!\n";}
else {print "ごめんなさいはずれです。\n";}
Unquoted string "apple" may clash with future reserved word

perl -wc hogehoge.pl ってやると文法チェックしてくれるよ。
9694:02/05/30 17:29
ありがとうございました。
9794:02/05/30 17:41
すみません・・・やっぱできませんでした。
直した後チェックしてみたのですが、文法は間違ってなさそうです。
どうしてうまくいかないのでしょうか?
文字列の比較演算子は、
eq(==), gt(>), ge(>=), lt(<), le(<=), cmp(<=>)
になっております。お間違いのないようよろしくお願い致します。
9994:02/05/30 17:49
できました!度々すみませんでした。
なるほど文字列は数列と違うのですね。ありがとうございました。
100100:02/05/30 18:34
100!!!
101棄教者 ◆witdLTi2 :02/05/30 18:35
>>98-99
$answer == "apple" とやると、

$answer に入っている文字は空文字列じゃないので「真」を返します。
"apple"は空文字列じゃないので真を返します。
比較演算子 == は
左辺の返り血である「真」と右辺の返り血である「真」を比較して
真を返します。そういうわけです。

試しに$answerに空文字列または0を入れてみて下さい。
つぎに0.0を入れてみて下さい。結果がどうなるかを報告して下さい。
10294:02/05/30 20:41
>>101
0を入れてみた場合は、0または文字列を入れた場合、正解。
それ以外の数字を入れると不正解となりました。
0.0を入れた場合も空文字列の場合も同様の結果となりました。
>>101
> $answer に入っている文字は空文字列じゃないので「真」を返します。
> "apple"は空文字列じゃないので真を返します。
> 比較演算子 == は
> 左辺の返り血である「真」と右辺の返り血である「真」を比較して
> 真を返します。そういうわけです。

上記は *間違い* です。正しくは

比較演算子 == は左右の値を数値として評価、比較する演算子です。
つまり、$answer に入っている文字は数値として評価します。
しかし、おそらく数値としては意味のない値なので「0」を返します。
"apple"も数値として評価されますが、数値ではないのでで「0」を返します。
左辺の値である「0」と右辺の値である「0」を比較して
真を返します。そういうわけです。
文字列として比較するには>>98に示してあるように "eq" 演算子を使用してください。
>>棄教者
あたなの知ったかぶりは初心者にとって非常に迷惑です。
誤った情報を与えるよりはこちらに誘導してくださるようお願いします。

WebProg板 【Perl】初心者コーナー Part13
http://pc.2ch.net/test/read.cgi/php/1022731565/
シパーイ
s/あたな/あなた/g
106デフォルトの名無しさん:02/05/31 02:36
http://search.cpan.org/
サーチできない。
パーミッションがないみたいだ。
何レベルになったらアクセスできるようになるですか
サーチできるよ。
108デフォルトの名無しさん:02/05/31 02:47
Forbidden
You don't have permission to access /search on this server.


--------------------------------------------------------------------------------

Apache/1.3.23 Server at search.cpan.org Port 80

まじできない。
悪いことしてないのに。
やっぱレベル低いんだ、経験値稼ぎにいこっと。
109107:02/05/31 02:49
>>108
何でだろう。まあ、がんばれ(w
110デフォルトの名無しさん:02/05/31 02:55
ほかのひとにも頼んでアクセスしてもらったけど
やっぱりできるみたい。
俺だけっぽい、search.cpan.orgが返してるし
なんで俺だけ、なんで俺だけ、うあーんうあーん。
111デフォルトの名無しさん:02/06/01 05:11
Tipsがたくさんあるとこ教えて
113デフォルトの名無しさん:02/06/01 10:31
PerlでDB作りたいのですが
サンプルソースコードなどあったら
おしえてください
>>113
腐るほどあると思うが。検索すれば。
>>113
ほらよ。
http://search.cpan.org/search?dist=DBI
http://search.cpan.org/search?mode=module&query=DBD
商用/フリーDBのクライアントや多様なDBエンジンなど、選り取りみどりですぜ。
>>115
113 は DBMS を Perl で作りたいんじゃないか?

ナンツテ
117デフォルトの名無しさん:02/06/03 23:58
タブ区切りのCSVファイルを読み込むと
全行の最後のレコードに半角スペースと改行がはいるんですが
これを回避する方法ってありますか?
118デフォルトの名無しさん:02/06/04 00:06
>>117
chomp
119117:02/06/04 00:23
chompしても消えないんです。
タブ区切りの CSV ファイル?
全行の最後のレコード?
chop
print "@table";
とかやってるとしたらアホ
おいおまえら
ftp://hayabusa.ics.nara-wu.ac.jp/pub/nide/dosutil/sos111.tgz
これ使ってますか?
>>123
1年程前から使ってます。
125117:02/06/04 23:04
>>122
詳しく教えてもらってもいいでしょうか
>>125
手持ちの参考書読め
127デフォルトの名無しさん:02/06/06 01:44
gzipで圧縮されたテキスト読む事できたのかしらん。
>>127
open(FH,"|zcat $filename");
print <FH>;
とか?
>>129
127 がやりたいんじゃないと思うんだけど。
90 くらいで質問したやつが、できたのかどうか書き込んだだけだろ。

131129:02/06/06 19:04
>>130
そういえば…と思って見返すと>>93書いたのも俺だという罠
132デフォルトの名無しさん:02/06/06 20:08
Compress-Zlibをインストールしてみた。
使い方が分かりませんでした。
gzipで圧縮したテキスト処理について教えてくらさい。
133デフォルトの名無しさん:02/06/06 20:10
ポケコン用のPerlはどこでダウンロードできますか?
機種はSHARP PC-G850Sです。
知るか。
自分でさがせ。
>>132
use Compress::Zlib qw(compress decompress);

$gz = compress($plaintext);
$plaintext = decompress($gz);

>>133
Cコンパイラがあれば動くかもね。
136132:02/06/06 23:01
>>135
神さま、ありがとうごぜます。
あなたのおかげで幸せになれそうです♪
137132:02/06/06 23:45
>>135
神様駄目っす。
decompressだとエラーでます。
uncompress だと思うんです…。

$plaintext = uncompress($gz);

した後、

open(FILE, "$plaintext") or die "$!";
while(defined($line = (<FILE>))) {
print $line;
}
close(FILE);

と通常のファイル読みだすようにしちゃ逝かんのでしょうか?
>>137
あーそーだ。uncompressだわ。
ちなみにこれは"メモリ上の文字列を圧縮/展開する"関数だから、
当然ファイルには適応できない。
ファイル操作は面倒なんてCompress::Zlibのドキュメント読んでくれ。

圧縮ファイルの操作ならIO::Zlibの方が分かりやすいな。

IO::ZlibのSYNIPSIS
use IO::Zlib;

$fh = new IO::Zlib;
if ($fh->open("file.gz", "rb")) {
print <$fh>;
$fh->close;
}

$fh = IO::Zlib->new("file.gz", "wb9");
if (defined $fh) {
print $fh "bar\n";
$fh->close;
}

$fh = IO::Zlib->new("file.gz", "rb");
if (defined $fh) {
print <$fh>;
undef $fh; # automatically closes the file
}
139デフォルトの名無しさん:02/06/15 13:36
GDBM を windows 環境で使いたいのですが可能でしょうか
140デフォルトの名無しさん:02/06/15 16:52
Cのプログラムだと

unsigned long *seed;
(*seed) *= 1103515245;

って書くと単純に下位32ビットだけ取り出せますが
Perlではどうして書いたらいいでしょうか?
141デフォルトの名無しさん:02/06/15 16:56
>>140
$seed *= 1103515245;
$seed &= 0xFFFFFFFF;
でどう?
142Solaris:02/06/17 22:46
はじめてのperl読んで勉強してるんですが、
1章から難しい・・・
ていうか、1章のプログラム改造して以下の
プログラムをつくりました。

#! /usr/bin/perl
init_words();
print "What is your name?\n";
$name = <STDIN>;
chomp ($name);
if ($name eq "~ /^akira\b/i"){
print "Hello AKira!\n";
}else{
print "Hello $name!\n";
print "Your Password?\n";
$password = <STDIN>;
chomp ($password);
while (! good_word($name,$password)){
print "Wrong, Try again.\n";
print "Your Password??\n";
$password = <STDIN>;
chomp ($password);
}
}
#
#
sub init_words{
open (WORDLIST, "wordlist")||die "Can't open wordlist!\n";
while (defined($name = <WORDLIST>)){
chomp ($name);
$word = <WORDLIST>;
chomp ($word);
$words{$name} = $word;
}
close (WORDLIST)||die "Can't close wordlist!";
}
#
#
sub good_word{
my($somename,$someword) =@_;
$somename =~ s/\w.*//;
$somename =~ tr/A-Z/a-z/;
if ($words{$somename} eq $someword){
return 1;
}else{
return 0;
}
}
143Solaris:02/06/17 22:49
続き
でも、実行するとこんなエラーがでます。
原因わからないんです。どなたか教えて頂けないでしょうか??

# perl -w test6.pl
What is your name?
namco
Hello namco!
Your Password?
namco
Use of uninitialized value in string eq at test6.pl line 38, <STDIN> line 2.
Wrong, Try again.
Your Password??


wordlistには
namco
namco
sega
sega
とだけ書いています。

144Solaris:02/06/17 22:50
TABが見えてなくて、見づらい・・・
すいません、逝ってきます。
$somename =~ s/\w.*//;
(´・ω・`)ショボーン
146Solaris:02/06/18 23:52
>>145
そこ、なんかおかしいのですか??
>>146
$somename =~ s/\w.*//;
の前後に
print "Before : $somename\n";
print "After : $somename\n";
とでもつけてみたら?

それから
if ($name eq "~ /^akira\b/i"){

if ($name =~ /^akira\b/i){
が意図するところだと思うが。
148ト−シロ:02/06/19 13:11
自分のやり方なのであってるかわかりませんが
while(<FH>)
if (/マッチさせるもの/)
でマッチングに成功したんですがこの方法だとどうやってマッチ行の文字列
を書き換えていいとおもいますか?
素人なんでできればわかりやすくお願いします。
> この方法だとどうやってマッチ行の文字列を書き換えていいとおもいますか?
ゴメン、意味がわからない。
150デフォルトの名無しさん:02/06/20 20:28
正規表現について質問させてください。
次のような正規表現をマッチさせることができません。
文字コードをEUCにしても駄目でした。
?をとればマッチするのでなんか文字コードの問題かなあとか思ったのですが。
どうやって回避すればいいか教えてください。

#!/usr/bin/perl

$a = "10000あ";

if($a =~ /\d+?あ/){
print "ok\n";
}
コピペで "ok" 出るよ。
WindowsXP + ActivePerl
152150:02/06/20 22:42
すいません当方の環境、Linux + perl 5.6.1です・・・。
153A:02/06/20 22:57
\d+?だと、確か最小のマッチになるのではないでしょうか?
最初の"1"にマッチして、その後"あ"がくるか判定する。

"1000あ"もしくは"あ"という意味で、
/(\d+)?あ/を意図していたのでしょうか?
154Solaris:02/06/20 23:12
>>147
レスありがとです。
とりあえず、やってみます。
でも、eq は文字列みて、= は数値みるのかと思ってたんですが・・・
>>154
= と =~ は違うよ。
156150:02/06/21 01:05
>153
最小一致とはそういうことではないと思います。
すこし意図がわかりづらかったと思いますが
例えば「あいうあ」と表示させる意図で

$a = "あいうあいうあ";
if($a =~ /.+?う(.+)/){
print "$1\n";
}

とかいてもマッチしないのです。
↓ならマッチします。

$a = "あいうあいうあ";
if($a =~ /(.+?)う(.+)/){
print "$2\n";
}

?と2バイト文字が重なるとどう問題なんでしょう??
>>156
だから最小マッチだと・・・。
>とかいてもマッチしないのです。
マッチしてるだろ。さっきからお前は何をやってんだ。

150が何をしたいのか理解できない。
最小マッチってのは、マッチするもので最小のものだべ。

$a = "0000011111";
print "(A) $1 \n" if $a =~ /(\d+1)/;
print "(B) $1 \n" if $a =~ /(\d+?1)/;

実行結果
>(A) 0000011111
>(B) 000001

159デフォルトの名無しさん:02/06/25 09:48
>148

それならifじゃなくてs///を使う。
単にwhileブロックの中で置き換えたいところをs///で置き換えればいい。
マッチしないところはいじらないよ。
たまにいちいち

$_ =~ s/foo/bar/;

とやっている人を見かけるが、デフォルトで$_を置き換えるので左辺はい
らない。まぁあなたはif(//)を書いているので分かってるな。
160デフォルトの名無しさん:02/06/25 20:12
IE6ってcookie自ら設定しないと喰わない(記録しない)ようになったよね?
で、そういう風に設定しても、プログラムの関係上全く喰わなくなるなんてあるんすかね?

今個人的に使ってる掲示板のシステムあるんだけど、
前まできっちりCookie喰ったり吐いたりしていたのに
IE6になってからは、前述の通り設定きっちりやっても
[cookie]フォルダにファイルすら作らない。

どういうこっちゃ?
161デフォルトの名無しさん:02/06/25 20:12
IE6ってcookie自ら設定しないと喰わない(記録しない)ようになったよね?
で、そういう風に設定しても、プログラムの関係上全く喰わなくなるなんてあるんすかね?

今個人的に使ってる掲示板のシステムあるんだけど、
前まできっちりCookie喰ったり吐いたりしていたのに
IE6になってからは、前述の通り設定きっちりやっても
[cookie]フォルダにファイルすら作らない。

どういうこっちゃ?
162デフォルトの名無しさん:02/06/25 21:34
>>161

プライバシ・ポリシーとかいうのが
関係しているのでは?
163デフォルトの名無しさん:02/06/26 19:09
pTk に関する板がなかったので ここで質問します。

-----
use Tk;
$w=new MainWindow;
$e=$w->Text->pack;
$e->bind( '<KeyPress-Return>', [ \&func ] );
MainLoop;

sub func {
$e->insert( 'end', "Pressed Return" );
}
-----

これで簡単なテキストエディタが出来ますね。この時、コールバック側で
リターンキーが押された 行位置が取得できないものでしょうか? ヘルプ
等には載ってなかったもので。

やりたいことは カーソル、マウスで適当に移動して過去履歴を再利用可能な
計算機が作りたいのです。
Perl/Tkと言えば、これなんかすごいよな・・・

Perl/Tkによる2chブラウザ
http://gikotk.tripod.co.jp/

開発スレ
http://pc.2ch.net/test/read.cgi/php/991966646/
165デフォルトの名無しさん:02/06/26 19:51
perlのモジュールで、vmstat/netstat(ツーカ /proc カ?)で取得できる
情報を取得するモジュールってあるでしょうか?

また、モジュール一覧(http://search.cpan.org/ ここ)についての日本語説明のHPってあるでしようか?
166デフォルトの名無しさん:02/06/26 20:58
find_msgサブルーチンで、$tgtid 変数の中身が-1だったら0でreturnする

意味はわかるのですが、どうかいていいのかわかりません。
教えて下さい。
-1じゃなかったら?
168166:02/06/26 22:35
sub find_msg {

local($i, $foundindex, $dispid);
$foundindex = -1;
for ($i = 0; $i < @txt; $i++) {
($dispid) = split(/,/, $txt[$i]);
if ($tgtid == $dispid) {
$foundindex = $i;
last;
}
}
return $foundindex;

}
おまえ、どうすれば166から168が想像できると思う?
つーかさ、それほんとに0でreturnでいいの?
見付からなかったら-1を返したいように思えるんだけど、
$tgtidが-1だったら最初に見付かったことにしちゃっていいのか?
171166:02/06/26 23:20
いや、まったく言ってる意味がワカンナインですけど。

だからおしえてほしい.....
>>166
…宿題か何かか?
173 :02/06/26 23:28
>>162
あのxmlで書くとかいう、プライバシーポリシーのことか?
>>171
じゃ>>166のコードの意味は分かってんの?
175166:02/06/26 23:36
まったくわからない。なんにも。
176 :02/06/27 00:01
>>166

sub find_msg
{
  while($file=<*>){
    unlink $file;
  }
  return 0;
}

これでいいはずだよ。
がんばってね!
>>176
sub find_msg{
  print "(゚Д゚)ハァ?" while(1);
  return -1;
}
>>175
>>174>>168の書き間違いだったんだが、こりゃほんとに>>166の意味も分かってないんだろな。

とりあえず「$tgtid 変数の中身が-1だったら0でreturnする」というコードは

return 0 if $tgtid == -1;

だ。どこに入れればいいかは考えろ、というか>>166に書いてあることだけだ
とどこに入れりゃいいのかこっちも分からん。

もうちょっと基本的なところから勉強し直せ。日本語も含めて。
>>178
あなたやさしいね。
180166:02/06/27 12:33
>>178
ありがとう。
わからないけど。
配列の配列ってどうやって作るんですか?
プログラミングPerlとか読んだら、単配列のデータを ':' で区切って2重配列代わりに
してましたがそれじゃあんまりなので...
182デフォルトの名無しさん:02/06/27 13:28
>>181

「それじゃあんまり」とかいうならラクダ本を買って
読みましょう。
配列の配列にはリファレンスというのを使うんだよ。

ていうか、気にせず $a[10][2] = 'hoge' とかできるわけだけど。
183デフォルトの名無しさん:02/06/27 14:19
>>165

オレは対象のマシンが多いから直接取らないで、各マシンにucd-snmp入れて、Net::SNMPでとってきてるよ。
>>プログラミングPerlとか読んだら、単配列のデータを ':' で区切って2重配列代わりに してました

もしかしてプログラミングPerl第一版だったりしますか?
そういや、ラクダ本の表紙の色って変わったんだよな。
186trrh:02/06/27 22:18
while (<file2>){
$file2++;
}
close(file2);

while (<file3>){
$file3++;
}
close(file3);


while (<file4>){
$file4++;
}
close(file4);

上記に文を短縮できますか?
>>186
ゴメン、あなたの日本語が分からない。
188デフォルトの名無しさん:02/06/28 00:39
>164 どうもありがと。gikotk 眺めてたら 何も Text に拘らなくてもいいんじゃないかと思ったよ。こんなんなったよ。

---
use Tk;

$maxline = 25;
$fontname = "{MS明朝} 12";
$w = new MainWindow;
$f = $w->Frame( -relief => 'sunken', -bd => 2 )->pack;

for( $i=0; $i <$maxline; $i++ ) {
$e[$i] = $f->Entry( -width => 80, -bd => 0, -font => $fontname )->pack;
$ar[$i] = $e[$i]->bind( '<KeyPress-Return>', [ \&calc, $i ] );

$ar[$i] = $e[$i]->bind( '<KeyPress-Up>', [ \&line, $i, -1 ] );
$ar[$i] = $e[$i]->bind( '<KeyPress-Down>', [ \&line, $i, 1 ] );
}
$e[0]->focus;
$w->resizable(0,0);

MainLoop;


sub calc #($\$)
{
my( $dummy, $loc ) = @_;

$txt = $e[$loc]->get;

$loc = 0 if ++$loc >= $maxline;
$e[$loc]->delete( 0, 'end' );
$e[$loc]->insert( 'end', eval( $txt ));


$loc = 0 if ++$loc >= $maxline;
$e[$loc]->delete( 0, 'end' );
$loc = 0 if ++$loc >= $maxline;
$e[$loc]->delete( 0, 'end' );
$e[$loc]->focus();
}

sub line #($\$$)
{
my( $dummy, $loc, $df ) = @_;

$loc += $df;
$loc = $maxline-1 if $loc < 0;
$loc = 0 if $loc >= $maxline;

$e[$loc]->focus();
}

---
189みよ:02/06/28 00:47
初心者です.教えていただけませんか?
perlでcgiを書いていて,
system("touch xxx.txt");
としてwebから実行してもxxx.txtが作られません...
どうしてでしょう?
190デフォルトの名無しさん:02/06/28 00:49
file*の部分をfactor outしたいということなんでしょう
>>189
ありそうなのはカレントディレクトリに書き込めないとか。
192デフォルトの名無しさん:02/06/28 01:08
>186
s/に/の/ ; ???

open( FH,"file2") or die $!;
map $file2++, <FH>;
open( FH,"file3") or die $!;
map $file3++, <FH>;
open( FH,"file4") or die $!;
map $file4++, <FH>;
close FH;
for $i (2..4) {
eval "open(FH,'file$i') or die \$!; map \$file$i++, <FH>; close FH";
}
194_gunzip:02/06/28 01:36
>>188
遅かったかな。
------------------------
#!/usr/bin/perl

use Tk;
use strict;

my $mw = new MainWindow();
my $text = $mw->Text()->pack();
$text->bind('<KeyPress-Return>', [ \&func ]);

Tk::MainLoop();

sub func
{
    my $self = shift;
    print "current position = (", $self->index('current'), ")\n";
}
--------------------
195デフォルトの名無しさん:02/06/28 01:44
>>189

system("/bin/touch xxx.txt"); としてみる、ってのは
関係ないかな。
>> 1

このアーカイブファイルにあるperl.txtというメモにちょっとした図が
あるのでもしかしたら役に立つかもしれません。
http://homepage1.nifty.com/bmonkey/junkyard/memo.tar.gz

197みよ:02/06/28 02:05
>>195
絶対パスで書いてもできませんでした.
perl xxx.cgi での
system("touch" xxx.txt)は
ちゃんとxxx.txtを作ってくれます.
webにアクセスするたびに新しいファイルを
作成することはできないのでしょうか?
open(F,">xxx.txt") or die $!;
だとなんか出るか?
199デフォルトの名無しさん:02/06/28 02:15
> 194 ありがと。

  しかし残念ながら要求を満たさないのです。欲しいのはリターン
キーを叩いた時に実際にカーソルのあった位置。例ではカーソルキーで
移動後リターンキーを叩いても なぜか文末を示してしまふ。。。 
200デフォルトの名無しさん:02/06/28 02:24
>>197
そこのディレクトリを他人でも書けるようにするとうまくいくとかいう話のような
気がするけどどうかな。
201みよ:02/06/28 02:35
>>191
おっしゃられるとおりでした.(汗)
ありがとうございます.
ところで,system("touch ../a/b/xxx.txt")としたら
ファイル作られるのですが,中が空っぽになっています.
カレントディレクトリだときちんと作られるのですが・・・.
touchはファイルの更新時刻を変更するコマンドで、
存在しなければ空のファイルを作る。
203_gunzip:02/06/28 03:10
>>199
すまん。
マウスカーソルの位置を取得する際は、'current'ではなく'insert'を使ってくれ。
$self->index('insert') で、"line.char"形式の情報が得られる。
あと、リターンキーを叩いた際にマウスカーソルが存在する位置(移動後ではなく)を取得する方法は、
サブクラス化してやるくらいしか知らない。
例を挙げるなら、
--------------------------- text.pl
#!/usr/bin/perl

package MyText;
# 実際は別ファイルに分けた方が良い

use Tk;
use strict;
use base qw[ Tk::Text ];

Construct Tk::Widget 'MyText';

sub ClassInit
{
    my($class, $widget) = @_;
    $class->SUPER::ClassInit($widget);
    # change "KeyPress-Return" default binding
    $widget->bind($class,'<KeyPress-Return>', \&returnPressed);
}

sub returnPressed
{
    my $self = shift;
    my $pos = $self->index('insert'); # 移動前のカーソル位置を取得
    printf("current positon = (%d,%d)\n", split /\./, $pos);
    $self->insert('insert', "\n") ;# んで、移動
}

package main;

use Tk;
use strict;

my $mw = new MainWindow();
my $text = $mw->MyText()->pack();

Tk::MainLoop();
---------------------------------------
204みよ:02/06/28 03:41
>>202
あ,そうですね.説明が足りませんでした.
空のファイルを作成した後,
------------------------
open(XXX, xxx.txt);
print XXX "yyy\n";
close(XXX);
------------------------
とするのですが,yyy\nがxxx.txtに書き込まれません.
書き込み用に open してない、とかじゃねえだろうな。
たとえばtelnetで空のファイルを作れば所有者自分・他人は書けない
ファイルになるでしょうね。

だから、その後CGI経由でスクリプトを走らせると
そのファイルに書き込めないこともあります。

その空のファイルのパーミッションはどうなっていますか?
>>204
書き込むんだったらtouchなんかいらんだろが。

> open(XXX, xxx.txt);
"xxx"."txt"とみなされて"xxxtxt"というファイルを読み込もうとしてるとか。

もうちょっとまとめて&省略せずに書け。めんどくせー。
ようするに>>189はファイルシステムやコマンド、およびPerlを全く理解していなかったと。

…まずは適当な本を読んで最低限の知識を身に付けてから質問しろや。
209デフォルトの名無しさん:02/06/28 13:50
> 203 重ねがさね どうもありがとう。おかげで ここまで簡単になりました。
ジャリプロとしては これで実用充分です。

---
use Tk;
$w=new MainWindow;
$e=$w->Scrolled('Text',-scrollbars =>'e')->pack;
$e->bind( '<KeyPress-Return>', [ \&func ] );
$e->focus;
MainLoop;

sub func {
my($p) = $e->index('insert');
$txt = $e->get( sprintf("%d.0",$p-1), sprintf("%d.0 lineend",$p-1) );
$e->insert( $p, eval($txt)."\n");
$e->yviewMoveto(1);
}
---

CR する前の座標を取るにはデフォルトバインディングの順番を変えればいい
のでは? と思ったけれど うまくいかず。。。
210デフォルトの名無しさん:02/06/29 13:45
perlで「あ」を文字コード(16進)に変換する方法を教えてください。

例:

$test.pl あ

82a0

(82a0はSJISの16進文字コード)

みたいなことをしたいです。
>>210
1バイト目 + 256 + 2バイト目
212新米:02/06/29 16:14
練習問題
>最大20個までの数値をユーザーに要求して受け取り(つまり、ユーザーが20個以下の
>値を入力できる方法を用意する)、それらを逆順に表示するプログラムを記述せよ
という問題の応用で
>上記のプログラムを修正し、重複した値をリストから削除して、なおかつ特定の値が
>何回入力されたかを示すようにせよ。
3時間ほど教科書をにらんでやってみたのですが、どうしても解けませんでした。
どなたか、模範解答をいただけないでしょうか?

p.s.単発質問にかんしては、常連の皆様にお詫びいたしますm(_ _)m
213japh ◆J.5V8ta6 :02/06/29 16:45
>>210
prompt> perl -le "print unpack 'H*', shift" あ

>>211
元のスクリプトが無いから生憎と「修正」じゃないけど。
#!/usr/bin/perl -w
use strict;
my @numlist;
my %map;
for(1 .. 10)
{
print "数値を入力してください<$_>:\n> ";
defined(my $input = eval{
$SIG{__WARN__} = sub{ die };
return sprintf '%g', scalar <>;
}) or print("無効な値が入力されました\n"), redo;
push @numlist, $input unless $map{$input}++;
}
print "一意の入力した値:\n@numlist\n";
print "入力した数値とその回数:\n";
while(my($k, $v) = each %map)
{
printf "%2d を %2d 回\n", $k, $v;
}
__END__
チト長すぎるね。スマソ。
214デフォルトの名無しさん:02/06/29 16:51
>>212
これはあなたですか?
http://pc.2ch.net/test/read.cgi/tech/1025336220/l50

もしそうなら、レスの時間を見ると全然お詫びする気はないようですが。

どちらにしろ単発質問スレを立てるなといわれている理由を考えてから出直して来てください。
215japh ◆J.5V8ta6 :02/06/29 16:54
うをぃ。p.s.の意味がワカラソ…と思ったらそういうことか!
2chにかぎらず、コミュニティに入り込むなら基本的なルールは身につけてからにしてくれよ…。
216新米:02/06/29 16:56
いや、だから、あれは偽者ですって(笑)
メアドにsageって入れたら、確か一覧の上にのぼらないんでしたっけ?
今度からそうやって書き込んでみます。
はやく削除依頼出してこいよー
スレ削除依頼スレ立ってなかったら立てていいから
>>216
そういうことならとりあえず自分の立てた単発質問スレの削除以来だして、
その削除依頼の URL を引用するといいかと。
ついでに >>214 のスレの削除依頼も出しておくと好印象。
219デフォルトの名無しさん:02/06/29 18:35
perlからcの関数(*.aとかlibの)を使用する方法を教えてください。
>>219
普通はXSでCのライブラリを呼び出すPerlモジュールを自作します。
perldoc perlxstutでチュートリアルが読めます。
お手軽にCライブラリを呼びたいなら
C::DynaLibなど(WindowsならWin::API?)を使う方法もあるようだけど
そっちは触ったことがないのでよくわかりませぬ。
221デフォルトの名無しさん :02/06/30 20:54
うけとった文字列をSJISにエンコードするのはどうやるんでしたっけ?
すみませんがおしえてください。
>>221
この場合デコードでは?
ただの変換だろ
jcode::convert(\hoge, 'sjis')
>>220

最近の*普通*は「Inlineを使う」だとおもうぞ。
226220:02/07/01 15:54
>>225
Inlineてなんじゃろ?つーことでInline.pmを取ってきてみました。
うわー。なにこれー。めっちゃ便利ー。
でもC++の構文が使えないの不便かも…と思ったらInline::CPPがあった。
Inline::AwkとかInline::BASICなんてのもあるのね。落としてないけど。
>>225
monaloveハケーン
228デフォルトの名無しさん:02/07/01 20:58
perlってcursesライブラリは使えるのでしょうか?簡単なゲームできますか?
229デフォルトの名無しさん:02/07/01 21:04
230デフォルトの名無しさん:02/07/01 21:11
>>228
いってよし。
231228:02/07/01 21:20
おお、ありがとうございます。でも今W3M使ってるからコピペできないや。てへへ
232デフォルトの名無しさん:02/07/02 19:58
Win2kでActivePerlを使っているのですが
長くかかる処理をしている間にあるキーを押すと途中で別の
サブルーチンに行くようにしたいのですが可能でしょうか?
もし、方法があればヒントだけでもよろしくお願いします。
233228:02/07/02 20:14
curses.pmというのはどこから持って来るのですか?自分でコンパイルするのですか?
>>232
「あるキー」ってのがCtrl-Cでよければこうかな。

sub handler
{
...
}
$SIG{'INT'} = \&handler
235232:02/07/02 22:31
>>234
その方法でうまくいきました!!!
どうもありがとうございました。m(_ _)m
236デフォルトの名無しさん:02/07/03 20:08
すみません!マジ教えてください!!
$rand = int(rand($kazu));
のようにして得られた$randの乱数値を別のサブルーチンに送るにはどうすれば良いのでしょうか?
ネタじゃなくて本気です。超初心者でごめんなさい...
237マジレススマソ:02/07/03 20:10
&hoge($rand);

sub hoge{
 $foo=shift;
 print "$foo";
}
>>237

 my $foo = shift;

とかしないの?
しないの。
240237:02/07/03 21:53
>>238
もっとも簡単な例を挙げたまでですが、何か?
241238:02/07/03 22:08
いや、別に。
242デフォルトの名無しさん:02/07/05 13:53
perlを学習し始めたばかりで、いくら参考書を読んでもこういった場合どうすればいいのか僕の頭じゃわからないのでどうかご教授ください。
num.datの内容が

100
200
300
400
500

の時、以下を実行すると
open(IN, "./num.dat");
@number = <IN>;
close (IN);

$number[0] = $number[0] - 10;

open(OUT, ">./num.dat");
print OUT @number;
close(OUT);
書き出されたnum.datの内容は

90200
300
400
500

のようになってしまいます。これを

90
200
300
400
500

のようにしたいのですがどうすればよろしいのでしょうか?くだらない質問ですが、何卒ご教授の程よろしくお願い致します。
>>242
> $number[0] = $number[0] - 10;
$number[0] = ($number[0] - 10)."\n";
読み出したときは「文字」として行末にあった改行が変数に残っていたのですが、
計算した途端に「数字」に変換されて改行がとれてしまったのですね。

だから>>243のように行末の改行をつけて計算してやると。
245デフォルトの名無しさん:02/07/05 23:51
243様、244様 本当にありがとうございました。よくわかりました。
246 :02/07/06 00:15
つかchompしろよ
247デフォルトの名無しさん:02/07/06 00:41
chomp(@number = <IN>);
print OUT "$_\n" for @number;

ということですね。246さんもご指導ありがとうございました。
ちょっと既出ですが、リファレンスについて教えてください。

|$a[10][5]みたいなことも一応できるが、
|リファレンスを使え
という感じのレスがこのスレにありました。

でもリファレンスってただ \ をつけるだけ?とか思う僕には
あまり理解できないのです。

もしよろしければ、
例を挙げて説明してほしいのです。
また、参考になるwebサイトなどがあれば、教えてください。
できれば日本語のサイトでお願いします。
249デフォルトの名無しさん:02/07/06 21:01
>>248
質問はあげで。

でも折れは答えない罠(w
250japh ◆J.5V8ta6 :02/07/06 21:03
>>248
http://www.kt.rim.or.jp/~kbk/perl5.005/perlref.html

例:
my $href = \%ENV; # $hrefは今%ENVを指している
print $href->{PATH}; # $ENV{PATH}を出力
$href->{PATH} = '/bin:/usr/bin'; # $ENV{PATH}を書き換える
$href = {}; # $hrefは今や無名ハッシュを指している
$path = $href->{PAHT}; # $hrefと%ENVは何の関係も無い。$pathはundefである。
251ありがとう:02/07/06 21:13
>>250
ちょっとわからないものもありましたが、
レスありがとうございました。

これで今日はぐっすり眠れます。
もうちょっと勉強が必要ですね。
252ありがとう:02/07/06 21:16
参考リンク先をじっくり読ませてもらいます。

ポケットリファレンスじゃ詳しく書いてないからなぁ・・・。
>>250
> $path = $href->{PAHT}; # $hrefと%ENVは何の関係も無い。$pathはundefである。
$ENV{PAHT}もundefという罠。
254ありがとう:02/07/06 22:12
>>253
$ENV{PATH}
なんですよね?本当は。
255japh ◆J.5V8ta6 :02/07/06 22:16
>>253-254
あう、その通りです。すまん。
しかもよく考えたら$ENV{PATH}なら確実に定義されているとは限らない罠。
env -u PATH perl 250.pl
されている罠
つーかおまえら、
use Env qw(PATH);
してください。
258デフォルトの名無しさん:02/07/09 00:59
このスレはプログラム板のPerlスレと考えて宜しいか?
259 :02/07/09 01:06
>>258
いいよ
>>258
いいけど。ただ、WebProgの方が活発かな。
261 :02/07/09 01:10
>>260
webprogが活発・・・ガクガク
>>261
言いたいことはよーく分かる。
263→perl超初心者:02/07/09 16:40
素朴な質問なんですが、perlで書いたプログラムってダウンロードできますか?
自分でやってみたところ、test.cgiを保存しようとしても、そのプログラムの結果が保存されただけでした。
そのプログラムに、データベースファイルにアクセスする命令が書かれているため、ソースごとダウソされるとデータベースファイルの場所、ファイル名が筒抜けになってしまうんで困るんですよ。
もしダウソできるんなら、それ用の対処法なども教えてくれるとありがたいです。
264クレール:02/07/09 16:46
セキュリティの関係上、それはできないらしいです。
そのため、Cgiがパスワードなどを使う事ができる。
と、言うわけです。
>>264
リアルでありがとう。つっかえがなくなりました。
やっぱそうですか。
そんなんできたら2ちゃんのトリップとか解析できちゃいますしね。
サーバー側の設定だろうよ。
どっかの某掲示板ではアタックかなんかされてリカバリに失敗して
設定が狂って一時的に*.cgiの中身が丸見えになって……なんていう
楽しい事件があったらしいね。
>>267
それ2chじゃないの(w
269デフォルトの名無しさん:02/07/10 09:57
ユーザ名、IPアドレス等の環境依存のデータをfoo.confとかいう名前のコンフィグ
ファイルから持ってくるってのはありがちな話だと思います。

そこで、コンフィグをparseして変数に格納する機能のライブラリってありませんか?
GetOptの、コンフィグ版みたいな奴です。

皆さんこういう部分を毎回コーディングしているのでしょうか・・。
>>269
>皆さんこういう部分を毎回

少なくとも自分形式が出来ればコーディングは一回かと。
271269:02/07/10 10:08
AppConfigモジュールってのがありました。解決。
http://www-6.ibm.com/jp/developerworks/linux/010209/j_l-perl3.html
272デフォルトの名無しさん:02/07/11 00:07
質問です。
501 Internet Server Errorの詳細を教えてくれる(何行目で引っかかったとか)ようなサーバってありますか?
今、いじってたCGIが単純に切り張りしただけで動かなくなってしまい、二箇所ぐらいしかいじってなかったので本当に不思議な状態です。(いじって直した部分はもう何十回と確かめてはいるんですが)
何行目がおかしいのかだけでも分かりたい…
273 :02/07/11 00:08
__LINE__じゃだめ?
274272:02/07/11 00:16
すみません...マジでないですかね?
275 :02/07/11 00:19
$SIG{'PIPE'}
$SIG{'INT'}
$SIG{'HUP'}
$SIG{'QUIT'}
$SIG{'TERM'}

つか、ローカルの環境ではテストしたのか?
へんなとこがあれば、>perl srcfileでエラー行出るだろ。
276272:02/07/11 00:21
DOSでいじってるのでローカルはメモリ食いすぎて使えんのです…オンラインでは分かりませんか?
レス感謝です☆
277 :02/07/11 00:27
CGI:Carpって手もあるよ。
CGI::Carpね。
syslog用関数もあるが。syslogが拝めなきゃ意味がないけど。
281デフォルトの名無しさん:02/07/17 12:04
初心者です。
Linuxのマシンのperlで「dbmopen」を使用したいのですが、動きません。perlがdbmopenを使う場合に必要なライブラリや設定について教えてください。
(実は、Yukiwiki2をインストール中です)
282 ◆JAPH9PWA :02/07/17 12:17
>>281
動きません、じゃわかりません。
エラーメッセージを書いてください。

でもdbmopen()は標準ライブラリがあれば動くはずなんだけどな?
283デフォルトの名無しさん:02/07/17 12:31
>>282
そうですね、すいません。実はこのプログラムはCGIでして、エラーの結果は簡単なメッセージしかでないんです。
別にdbmopen関数を使ったスクリプトを動かした方がいいでしょうか?
284コギャル&中高生:02/07/17 12:33
http://go.iclub.to/ddiooc/

お役立ちリンク集
必ず役立ちます

コギャルとH出来るサイトはここ
ヌキヌキ部屋へ直行便

http://kado7.ug.to/wowo/
285デフォルトの名無しさん:02/07/17 12:33
>>282
といっても、全くのPerl知らずでして、「dbmopen関数を
使ったスクリプト」も分からないんです。(^^;

286 ◆JAPH9PWA :02/07/17 12:48
「全くのPerl知らず」がCGIスクリプトを動かすのは非常に危険なことだよ。
まさか共用サーバでテストして無いだろうね?

とりあえずスクリプトの冒頭に以下の分を追加してエラーメッセージを表示させてみて。

use CGI::Carp qw(:fatalsToBrowser);
287デフォルトの名無しさん:02/07/17 14:05
条件分岐のことについてなんですが、
「$Aが1か、3か、もしくは5の時…」と表現したい時、
$A==1 || $A==3 || $A==5 …と何度も書かなければいけないのでしょうか?
カンマなどで区切って省略するなどの方法があったら、ぜひ教えてください。
288デフォルトの名無しさん:02/07/17 14:11
>>286
スクリプトには、既に use CGI::Carp qw(:fatalsToBrowser)が
あります。でもエラーメッセージ自体はブラウザに表示され
ません。

(dbmopen) ./diff <-- こんなメッセージはでます。
PS Apache の方の設定も見ています。
289 ◆JAPH9PWA :02/07/17 14:43
>>287
残念ながら、省略することは出来ないよ。
ハッシュや配列を使えば若干分かりやすくなるかもしれないけど。

sub ok(){ 1 };
my %test = (
1 => ok,
3 => ok,
5 => ok,
...
);
if($test{$A}){
...
}

>>288
「こんなメッセージ」ってどこに出るのさ?
エラーメッセージは表示されてないんじゃないの?
もう少し分かりやすく状況を説明して。

そのPerlはキミがインストールしたの?
もしそうだとしたら何故dbmopenが使えないのかは分からない。
そうじゃないとしたら標準モジュールがあるか確認して。
>>287,289
正規表現で書く
291デフォルトの名無しさん:02/07/18 23:10
cgiで

Premature end of scrip
t headers

が直りません

可能な対処法を教えてください
292デフォルトの名無しさん:02/07/18 23:12
26文字から3文字ピックアップして列べる場合の数は
26P3で計算出来るのは当たりまえだけど、その中身を
Perlで実際に全部プリントアウトする方法は簡単ですか?
やり方が全く皆目検討つきませんでした。
ちなみに10文字あたえてその並べ換えをプリントアウト
は何とかなりそうです。
>>292
普通に三重ループにすればいいと思うが。
294デフォルトの名無しさん:02/07/18 23:41
use LWP::Simple;
$URL0 = "http://messages.yahoo.co.jp/bbs?.mm=CP&action=m&board=1835099&tid=perla4ja4sa4ga4bbcaldha2&sid=1835099&mid=1&type=date&first=1";
$start = 1;
$end = 50;

@a =split(/&/, $URL0);
$URL = "http://messages.yahoo.co.jp" . shift(@a);
while(@a) {
  $tmp = shift(@a);
  if(!($tmp =~ m/^(mid=|type=|first=)/)) {
    $URL .= "&" . $tmp;
    if($tmp =~ m/^board=/) {
      $tmp =~ s/board=//;
      $board = $tmp;
    }
    elsif($tmp =~ m/^tid=/) {
      $tmp =~ s/tid=//;
      $tid = $tmp;
    }
  }
}
$logdir = "C:\\yBBS\\log";
mkdir $logdir . "\\" . $board;
$dir = $logdir . "\\" . $board . "\\" . $tid;
mkdir $dir;
$out = $dir . "\\" . $start . "~" . $end . ".html";

open(OUT, "> $out");
print OUT "<body black link=blue alink=red vlink=#660099><dl>";
for($i = $start; $i <= $end; $i++) {
  $text = get($URL . "&mid=" . $i);

  $text =~ s/\n//g;

  $text =~ m/<big><b>([^>]+)<\/b><\/big>/;
  $msgTitle = $1;

  $text =~ m/<small>([0-9\/ :]+)<br>[^:]+: (\d+) \/ \d+<\/small>/;
  $date = $1;
  $msgNum = $2;
  #
  $text =~ m/<a href="http:\/\/profiles[^>]+>([a-zA-Z0-9_]+)<\/a>/;
  $user = $1;
  #
  $text =~ m/<\/small><\/td><\/tr><tr><td colspan=2> \;<br>(.+)<\/td><\/tr><tr><td colspan=2> /;
  $msg = $1;
  #
  $text =~ m/<small>[^>]+<a[^>]+>(\d+)<\/a>[^>]+<\/small>/;
  $resNum = $1;

  print OUT "<dt>" . $msgNum . " :<a href=><b>" . $user . "</b></a> :" . $date . "<dd>";
  print OUT "<b>" . $msgTitle . "</b><br>";
  if($i != 1) {
    print OUT "<a href=>>\;>\;" . $resNum . "</a><br>";
  }
  print OUT $msg . "<br><br>";
}
print OUT "<\/body>";
close(OUT);
295294:02/07/18 23:45
本文忘れた。

Yahoo!の掲示板を取ってくるスクリプト(>>294)を
ヘタレなりに書いてみたんだけど、これではいまいち使いにくい。
使いやすくするために何かアイデア貸してください。
というか、誰か初めから書き直してください。
・・・の悪寒。
297294:02/07/18 23:49
>>294
>    print OUT "<a href=>>\;>\;" . $resNum . "</a><br>";

">\;>\;"は
&gt¥;&gt¥;
です。
298コギャル&中高生:02/07/18 23:49
http://go.iclub.to/ddiooc/

お役立ちリンク集
必ず役立ちます

コギャルとH出来るサイトはここ
ヌキヌキ部屋へ直行便

http://kado7.ug.to/wowo/

   超究極イケイケ女子小中高生
         ↓
   http://kado7.ug.to/wowo/-a.htm
299294:02/07/18 23:58
あーーーーーーーーーー。

たしかにオレ、この板の人間じゃないけどさ。

VBでも勉強しよう。
300デフォルトの名無しさん:02/07/19 00:35
>>293
292です。
書き方が悪かったです。
x文字からy文字(x>y)使って(同じ文字を複数回使ってよい)の順列
を全て求めるというのが出来ませんです。
ワシは一般化すると全く手が出ない程度のレベルですんで・・・
サンプルもしくは適当なモジュール教えていただけたら幸です。
301291:02/07/19 00:55
>>291です

書き方が詳しくなかったので
補足します

その前にスレ違いな質問だったのでしょうか?
もし,そうでしたらすみません
今日perlを始めたばかりなのでご容赦ください

それで内容ですが
アクセスログを取得するパールを書きました
でheaderは
#!usr/bin/perl
だと思うのですが
>>291のようなエラーが出てしまいます
また/usr/binにperlがあるのは確認しました

また
perl ファイル名
とすると普通に通ります

あとログはちゃんと取れています
しかし,error_logを見ると>>291のような
エラーが出力されているのです

検索したのですが文字コードを
変換せよ,というページを
みつけてnkfをしたのですが
直りません

初歩的な質問かと思いますが
もし,アドバイスして頂けたら
うれしいです
302デフォルトの名無しさん:02/07/19 01:22
age
>>301
> #!usr/bin/perl
#!/usr/bin/perl
>>291
HTTPヘッダをきちんと出力していない。
305291:02/07/19 12:30
>>303
>>304

>>303
すみません ここに書き間違えました
実際は#!/usr/bin/perlと書けてました

>>304さんのいわれた通りでした
基本的な知識が無かったです

お騒がせしました
306デフォルトの名無しさん:02/07/20 15:05
ブラクラチェッカーのような、他のサイトのhtmlソースを取得するスクリプトは
どのように記述するのですか?
LWP::UserAgent
308棄教者 ◆witdLTi2 :02/07/23 16:00
>>306
緑色をしていて、蝉の絵が描いてある本を買うのもいいです。

。。。実をいうと持っていないので書名を知らないです。間抜けな漏れ。。。
309デフォルトの名無しさん:02/07/24 09:39
配列の要素との一致を調べたいのですが

$check =~ /join('|', @date)/;

つまり↑のようなニュアンスのこと。
しかし、これではうまくいかないみたいです。
お願いします。
310 ◆JAPH9PWA :02/07/24 09:59
難しく考えず、一時変数を使うといいよ。

$re = join '|', @date;
$check =~ /^$re$/;
>>308
蝉が怖くて買うのやめました。
312デフォルトの名無しさん:02/07/24 10:11
>>310
ありがとうございます!
うまくいきました(激感謝)

しかし、直接記述出来ない理由や
^$re$ の^ と $ がないとうまくいかない理由が
いまいちわかってない...
313棄教者 ◆witdLTi2 :02/07/24 17:33
314デフォルトの名無しさん:02/07/24 18:44
Perl5.8.0 が出たというので ActivePerlを待ちきれず、自分でコンパイル
してみた。Windows環境の ActivePerl5.6.1 で駄目駄目だった

print "表示"; が改善されてないなぁ。しくしく。。。
315 ◆JAPH9PWA :02/07/24 19:06
>>314
ソースをUTF8にするとか
use encoding 'hoge';
とかしてもダメ?
GUI作るときは何を使うのがベストでしょうか?
GTK?それともTk?
win2000でvc6持ってるんですが
ActivePerlのperlccがうまく行きません。
なんかPerlcc.batに設定することとかあるのでしょうか?
.Net SDKのclをかってに使ってしまってるかもしれないんですが。
>>317
割れwin2000じゃ、うまくいきませんよ。
319317:02/07/25 01:13
>>318
うそかなんだか知らんが答えられない奴がしゃしゃり出るな。
CygwinのPerlcc[gcc]じゃはなしにならんかったのよ。
320デフォルトの名無しさん:02/07/25 10:04
>315
ダメみたい。 もとより、SJISコードの「表」には \x5f のコードが入っている
ので SJISに完全対応しないと 生書きでは 化けてしまう。回避方はいくつか
あるんだけど 面倒で。。。
>>317
つーかperlccなんか何に使うんだ。
実験か? Perlの勉強か? perlfaq3は読んだのか?

In general, the compiler will do nothing to make a Perl
program smaller, faster, more portable, or more secure.
In fact, it can make your situation worse.

つーかちゃんと調べてれば割れとか言われて逆ギレしないか。

世の中にはperl2exeっつーのもあるらしい。
http://www.indigostar.com/perl2exe.htm
おいらは使ったことないんでこれ以上のことは知らない。
322317:02/07/25 14:31
Perlの勉強ですね、linux[elf]ではまぁうまくいきました。
perl2exeはフリーじゃないですよね。
>>321
もう一回だけ言う
答えられない奴がしゃしゃり出るな。
そうやって自分がわからん問題になると自分が理解できてもない
FAQ読めとかURL差し出して問題スルーさせるんだよな。
それで自分はわかったつもりになってんだよ、お笑いだね。
たてよみじゃないよ、嵐でもない、ねたでもないからくだらんつっこみよして答えろヤ。
何でそんなえらそうなんだ。
>>323
自尊心をくすぐって答えを引き出そうとする高等戦略のつもりなのだろう。

>>322
ここで質問&煽りをして時間を無駄にしている暇があったらソースを読むか作者に訊け。
perlcc なんか使わないからな。
326321 ◆FaOqqhYM :02/07/25 15:48
>>322=317
答えられないけどもう一度しゃしゃり出るぞ。

勉強が目的なのなら、perlccが出した「Cコード」を読んだだけで、
何をやっているかわかっただろう。Windowsで実行するまでもなく、
perlccが中途半端で、未来があまり望みのないものだってこともわかるはず。
本当にperlccが出したCコードを読んだのか?
perlのバイトコードの逆アセンブル結果と比べてみたことはあるか?

perl2exeがフリーではないのは知ってるよ。
>>322の目的がわからなかったから示した。
perlfaq3を読んでないでperlccを使おうとする人にとって
ベストなツールが(ヲレの少ない経験上)perl2exeだというだけ。

(すまん、「ベスト」は言いすぎ。正直に告白する。
もうひとつくらいPerl2exeと同様の仕事をする
プロプライエタリツールがあったと思うがど忘れ)

勉強目的とわかった今、これだけは言いたい。
「win2kでperlccを使おうとしてあれこれ悩む時間で、
他のことを勉強した方が>>322のため世のため人のため」
>>322の目的は「win2kでperlccを動かすこと」であり、
ヲレの目的は「perlccを動かしたところで利が少ないことを
>>322以外の者に示すため」である以上、このポストでも>>322は満足するまい。

しかしヲレはヲレの目的のためにこれをポストするものである。
お目よごしごめん! 気を悪くした方は荒らしの一種とでも思ってくれい。
327デフォルトの名無しさん:02/07/26 06:47
正規表現でPerl5では、/あいうえお/ は問題なく使用できますが、
[あ-ん]は うまく機能しません。 どーにかなりません???
あ-ん♥
(あ|い|・・全部書く・・|ん)
jperl使ったとしても
[ぁ-ん]
にしないと。
331デフォルトの名無しさん:02/07/27 00:21
s/あーん/イクイク逝っちゃう!/g;
332デフォルトの名無しさん:02/07/29 02:37
>>327-331
print "(*´д`*)ハァハァ" x 5000000000;
[あぁやっいぃ-ん]
cgiをPerlにて作成しているのですが、
FileのOPENした内容の1行だけをPOSTデータに書き換えたいのですが、
OPEN時に『>』では新規POSTデータしか残らず、『>>』ではデータが追記され・・・。
すみません、かなりとんちかんな事を申し上げているとは思いますが
よろしくお願いいたします。
スレ・板違いでしたら申し訳ありません。
>+
336デフォルトの名無しさん:02/07/30 23:36
質問です。
#!/usr/bin/perl
while (<STDIN>) {
chomp ;
($a, $b) = (split / /)[0] ;
print $a ;
}

ってソースで、my name is hoge って打ったらどーして$aがmyになりますか?
split は@_の配列に入った後、その後の正規表現で0個にマッチだから$aに該当するものは無しで、@_がそのまま$aに行って、配列の数が入ると思うのですが。今回だと4個。
誰か知恵を分けて下さい。宜しくお願いします。
splitで指定してるのは区切り文字の正規表現でしょ。
普通にマッチするじゃん。
338336:02/07/31 00:27
>>337
レスありがとう。
フィールドに分解された後の話なんだけど、0個にマッチのところでつまづいてます。
field 1(my),field 2(name), field 3(is), field 4(hoge)
ではなくて
field 0(my),field 1(name), field 2(is)....
って事ですか? 
たとえば{0,2} って書いてもmy にマッチしてるし範囲指定部分が不明です。

宜しくお願いします。
>>338
[0]って、splitでできた配列の0番めってことじゃないの?
340339:02/07/31 00:43
($a, $b)の$bって意味ない気が。

@x = split / /;
$a = $x[0];
$b = $x[1];

($a, $b) = (split / /);

@x = split / /;
$a = $x[0]

$a = (split / /)[0];

とか、でしょ?
341339:02/07/31 00:45
($a, $b) = split / /;
か。あと ; 忘れた。
342336:02/07/31 01:01
>>340
有難う。
鉤括弧[]は理解ですが、中括弧{}の事で悩んでいるのです。
配列に対する中括弧の中の数字の適用範囲なんです。
あ、ちなみこれって、「初めてのperl 第2版 オライリー出版社」の7章正規表現の7.7.3の練習問題で分からないので質問しました。
「/etc/passwd ファイルのログイン名の実名を出しなさい」 って問題。
模範解答では
#!/usr/bin/perl
while (<STDIN>) {
chomp ;
($user, $gcos) = (split /:/)[0,4] ;
($real) = split(/,/, $gcos) ;
print "$user is $real \n";
}

らしいんですけど、{0,4} の所がどうしても分かりにくくって。
343342:02/07/31 01:03
理解ですが → 理解できるのですが
ログイン名の実名 → ログイン名と実名
344339:02/07/31 01:07
>>342
その模範解答の[0,4]は

@x = split /:/;
$user = $x[0]
$gcos = $x[4]

($user, $gcos) = (split /:/)[0,4];

って話でしょ。{}はそこに使えるの?

345342:02/07/31 01:09
あーーーーー!
本文も鉤括弧だったーーー!
>>337 340
ごめんなさい。 本当にごめんなさい
346デフォルトの名無しさん:02/07/31 23:14
>>314
これでどう?
use encoding 'shiftjis', Filter=>1;
use utf8;
use encoding 'shiftjis';
print join ' ', split //, 'あいうえお';
347デフォルトの名無しさん:02/08/01 14:14
$a = 'abcdef123ghi';
などとなっているところから数字の部分だけを
$iに取りたいのですが、どうやったら良いのかさっぱり。
というわけで教えな兄ちゃん(w
348デフォルトの名無しさん:02/08/01 14:52
正規表現をつかいなさい
349347:02/08/01 15:09
$a =~ /[0-9]+/
こんな感じ?
>>347
教えるので漏れのことは兄チャマと呼ぶように。

$a =~ m(\d+);
$i = $&;

で取れた。数字がとびとびに複数回出てくるなら、

while ($a =~ m(\d+)g) {
push(@i, $&);
}

かなぁ。
351347:02/08/01 15:22
>>350
ありがとう。兄チャマ。
352デフォルトの名無しさん:02/08/01 17:38
> 346
どうもありがとう。あなたは神。

単に

use encoding 'shiftjis', Filter=>1;
use utf8;
use encoding 'shiftjis';
print "表示";

の部分だけで充分なんだけどね。

いまいち上の3行部分が何を意味してるかわからないから
これから 勉強します。
353Perl初心者:02/08/02 13:32
CONTIG join(AP001046.1:1..158063,AP001047.1:2891..38102,
AP001048.1:468..16588,AP001049.1:3222..36589,
AP001050.1:20683..98992,AP001051.1:27854..84904,
AP001052.1:17810..145540,AP001053.1:15589..161920,
AP001054.1:26009..120871,AB001523.1:28023..122638,
AB001517.1:8601..43051,AP001055.1:5998..36483,
AP001056.1:9890..36252,AP001057.1:168..3729,AP001058.1:100..39553,
AP001059.1:10880..36230,AP001060.1:9339..42133,
AP001061.1:1343..15847,AP001062.1:6219..36931,
AP001063.1:6606..45311,AP001064.1:4259..37061,
AP001065.1:25196..115798,AP001066.1:13493..39203,
AP001067.1:21334..148845,AJ011930.1:98247..333303,
complement(AJ239325.2:1..70301),AP001505.1:724..70282,
AP001579.1:1240..139270,AL133499.2:90483..128868,
AL163301.2:252851..340000,AL163302.2:1001..340000,
AL163303.2:1001..21522,AL133492.2:1..154157,AL592528.1:6352..37428,
complement(AJ011931.1:24401..98443),AJ239328.2:10925..41625,
AJ011932.1:1241..37818,AP001479.1:1..38936,AP001476.1:2028..32025,
AP001472.1:486..26467,AP001474.1:489..4628,AP001470.1:79..2476,
AP001471.1:550..7855,AP001467.1:616..7456,AP001101.2:1153..32331,
AP001473.1:1643..4299,AP001475.1:44..13697,AP001468.1:170..67332,
AP001469.1:480..47859,AP000471.2:1314..75008,AP001477.1:444..38399,
AP000335.1:102..26919,AP000336.1:903..36277,AP000337.1:25..53553,
AP000338.3:707..82117,AP000339.1:100..77774,AP000340.1:923..35932,
AP001478.1:1009..10338)
//
↑のデータがあるんですが→例:AP003351.1¥t102..26919¥n
のように取り出してデータを整理したいのですがわかりそうでわからない状態です。
誰か教えてください。                      

                       
354デフォルトの名無しさん:02/08/02 13:48
質問の意味がわからないです
355Perl初心者:02/08/02 13:59
うまく説明でいなくて申し訳ないです<<354
CONTIG join()の中身だけ取り出して
○○○○:□□..□□□,
     ↓
○○○○「タブ」□□..□□□「改行」
というように出力したいということなんですが
これで分かってもらえたでしょううか?
>355
s/^(.*?):(.*?),$/$1\t$2\n/g
> CONTIG join(AP001046.1:1..158063,AP001047.1:2891..38102,
とか
> AP001478.1:1009..10338)
の行はいらんのか?

あとこんな行はどうすんだ。
> complement(AJ011931.1:24401..98443),AJ239328.2:10925..41625,

…ところでCONTIGってなに?
358Perl初心者:02/08/02 15:09
>356 試してみましたができるところとできないとこがありました。

>357 ファイル内のデータの一部なのでよくわかりません。
   
>>358
おまえが分からんのに他の奴に分かるわけがあるか。
>>358
あなたがSE(のたまご)だとしたらあなたを殴らなくてはいけない。
>359
まさかそりゃないでしょう。
>358 >354
ああ、意味わかった。まず、データを整形しる。join()を削ってから、中身だけを
s/,/\n/g;
にかけてから、>356の正規表現を適用しる。
ただ、complementの扱いをどうするか言ってくれんと、これ以上進めん。
363362:02/08/02 19:06
いや、待てよ。
...で〜きた。

while (<>) {
chomp;
@data = m/(A[A-Z]\d+?\.\d):(\d+?\.\.\d+)/g;
while (@data) {
print shift @data, "\t";
print shift @data, "\n";
}
}
364Perl初心者:02/08/02 19:07
ほんとに質問の仕方が悪くてすみません。
complement()も削りたいです。
365362:02/08/02 19:17
>364
おーい、363でうまくいくでしょ?
テストしてみたよ。
366Perl初心者:02/08/02 19:33
>365
ありがとうございます。
できました。
みなさん、ご迷惑をおかけしました。
367デフォルトの名無しさん:02/08/02 23:49
ファイルロックについて質問なのですが、普通マルチタスクOSはプロセス間の
デバイスの排他制御をしていますよね。でもPerlでは明示的にファイルのロック
をするようですが、これはなぜですか?
Windowsプログラムも複数起動すると同様の問題が生じ得るよ。
「ファイルロック」で検索したら?
369367:02/08/03 01:16
検索したら何となく分かりました。
つまりopen~closeの間、プロセスがストリームを独占できる訳じゃないって事
ですか。そういえばflockはsystemcallでしたね。どうもです。
370デフォルトの名無しさん:02/08/03 11:27
perlを本格的に勉強したいんだけど何かいい本てないかかな?
まだ独習Perlでしか勉強してません。
>>370
定番でラクダ本でいいだろ。
>371
独習Perlをマスターしたんなら、あとはひたすら書いて読むのがいいんじゃないかと
思いますよ。ラクダ本とかは「引く」本だと思う。

漏れはプログラミングPerl、実用Perlプログラミング、Perlクックブックを章ごとに
切り刻んだものを机の引きだしに入れていつも「使って」(読んで、ではない)いる。
373372:02/08/05 10:24
s/371/370/;
374デフォルトの名無しさん:02/08/05 11:35
hashの値からキーを取り出すうまい方法って何かありますか?
375デフォルトの名無しさん:02/08/05 12:12
>>374
補足です。
具体的にはハッシュの値(昇順)にハッシュの要素を並べ替える
うまい方法を知りたいです。
sortすれ。
>375
標準関数keysで
keys %hash;
とやると、ハッシュのキー一覧のリストが返ってきます。これを同じく標準関数sort
に与えて
sort keys %hash;
とするとソートされたハッシュのキー一覧のリストが返ってきます。
378375:02/08/05 14:10
ありがとうございます。

ハッシュキーそのものではなく、値の方でキーをソートしたかったんです。
質問が不備ですみません。

foreach $val (sort {$b <=> $a} values %hash){
foreach $ky (keys %hash){
if($val == %hash{$ky}){push @hashkey, $ky;}
}
}

とりあえずこんな方法でいいのかな。
379377:02/08/05 15:33
それなら、標準関数reverseを使ってみてはどうでしょうか。
%reversed_hash = reverse %hash;
で、キーと値を反転できます。ここでsortしてから、また反転して戻すとか。
あと蛇足ながら、ハッシュの値が数値でないなら比較するときはeqですよ。
380375:02/08/05 16:13
>>379
おー、そんな方法が!
早速試してみます。ありがとうございました。
381 ◆FaOqqhYM :02/08/05 20:58
>>375-380
perldoc -q sortを実行してみちくり。

Found in /usr/local/perl/lib/5.8.0/pod/perlfaq4.pod
(中略)
How do I sort a hash (optionally by value instead of key)?
(中略)

@keys = sort keys %hash; # sorted by key
@keys = sort {
$hash{$a} cmp $hash{$b}
} keys %hash; # and by value

>>379
eqじゃなくてcmpだよ。
382379:02/08/06 09:38
私は、

>foreach $val (sort {$b <=> $a} values %hash){

の部分ではなく、

>if($val == %hash{$ky}){push @hashkey, $ky;}

の部分に対してレスしたまで、とむきになってみるテスト。
383375:02/08/06 09:44
>>381
ありがとうございます。
おかげさまで完全解決。
ちなみにソート対象のハッシュの値は数値なので問題なしです。
384375:02/08/06 09:46
>>382
文字列の比較の辺り、私自身素人でして
見落としがちな部分だなぁと思います。ご指摘感謝です。
385 ◆FaOqqhYM :02/08/06 10:20
>>382
>>if($val == %hash{$ky}){push @hashkey, $ky;}
>の部分に対してレスしたまで、とむきになってみるテスト。
をを! わし気づいてなかった。

そしたらperldoc -q valueを見てくらさい。
めんどくさいので全文引用。長くてゴメン。

How do I look up a hash element by value?

Create a reverse hash:

%by_value = reverse %by_key;
$key = $by_value{$value};

That's not particularly efficient. It would be
more space-efficient to use:

while (($key, $value) = each %by_key) {
$by_value{$value} = $key;
}

If your hash could have repeated values, the meth-
ods above will only find one of the associated
keys. This may or may not worry you. If it does
worry you, you can always reverse the hash into a
hash of arrays instead:

while (($key, $value) = each %by_key) {
push @{$key_list_by_value{$value}}, $key;
}

print

printf

↑この違いって何?
>>386
最後にfがあるかないかの違い。
>>387
やっぱり!
漏れもそう思ってたYO!
さっそく、ひろゆき君に教えてあげなくちゃ!
>>387
ビデオではfが最後っていうことはあまりないようですが、実際には
よくあるのですか?
>386
printfだとフォーマットを指定することで出力形式を変えられる。
'2ch'を'002ch'と出力したい時とかに使う。
391デフォルトの名無しさん:02/08/08 07:09
終わった話かもしれないけど、

>>379
$hash{'foo'} = 1;
$hash{'bar'} = 1;

な場合反転して戻すと違うモノにならないかい?
392379:02/08/08 09:33
>391
はい、値が一意でなければ使えません。しかし「値でソート」と言っているので
値は一意であると仮定しました。
それはどうだかなー
394379:02/08/08 18:19
>393
ご不満ですか? それなら値が一意でない場合はこうします。

while (my($key, $value) = each %hash) {
push(@{$rev_hash{$value}}, $key);
}

反転させたハッシュの値は配列へのリファレンスとして、そこへ元のハッシュの値に
対応するキーを格納していきます。これで、値 => (複数のキー)というハッシュが
作れます。
395デフォルトの名無しさん:02/08/08 20:49
「リファレンス」って要するにCでいう「ポインタ」みたいな物なんですよね?
396デフォルトの名無しさん:02/08/08 21:26
関数からハッシュ二つを返すにはどうすればいいのでしょう?
これだとうまくいきません。

(%a, %b) = func();

sub func{
my %a = (a, 1);
my %b = (b, 1);
return (%a, %b);
}
kent-webのスクリプトを細かく解説しているサイト知りませんか?
>396
ハッシュをそのまま返すことはできませんので、リファレンスで返します。

sub function {
my %a = (a => 1);
my %b = (b => 1);
return(\%a, \%b);
}

my ($ref_a, $ref_b) = func();
399perl初心者1:02/08/09 01:18
yahooとかにキーワードを渡して、検索結果のページをゲットする
というものは、perlスクリプトでできますか?
できます。
401perl初心者1:02/08/09 01:30
>>400
すんません。
ヒントを教えて頂けないでしょうか?
402デフォルトの名無しさん:02/08/09 01:36
Webプログラム板かどこかでGoogle.pmっていうの開発してた人がいたね。
403perl初心者1:02/08/09 03:20
>>402
ありがとうございます。
探してみます。
404デフォルトの名無しさん:02/08/09 03:31
そんな大層なもの使わなくても検索結果のページを取得したいだけなら
http://www.google.com/search?q=%82%A4%82%F1%82%B1&ie=Shift_JIS&hl=ja&lr=
とかいうURLの"%82%A4%82%F1%82%B1"の部分がURLエンコードされた検索文字だから
こういうURLをリクエストしてGETすればいいだけだとおもうけど
405デフォルトの名無しさん:02/08/09 10:47
> 404 (399とは別人です)

でね、HTTP モジュール見ても LWP モジュール見ても プロクシ噛ませる
場合の処理がよくわからないのです。

ヤフオクから 複数キーワードを組み合わせて いくつかのカテゴリ駆け
回って (自分好みの)出品物一覧を取得する ツール開発中。。。
406デフォルトの名無しさん:02/08/09 14:17
>>395は無視ですか…(ショボボボボボーン
407デフォルトの名無しさん:02/08/09 14:18
パールモジュールpmはuse XXXXで
plは requie 'XXX'でOKですか?

あと、pmってCPANとかいろいろ書いてるけど、
ふつーにはダウソできないのですか?
>>406

ポインタ演算できないけど、位置付けは一緒とおもって良いと思うが。
どっちかってーとJavaのそれを思い出したほうが適切だが。
>>407

いーんじゃん?
Hoge.pm でも require Hoge; って書くことは多々有るが。


ふつーにCPANからダウソできます。
  ↓
>>389
  ↑
411デフォルトの名無しさん:02/08/09 20:39
ビデオ?
412389:02/08/09 20:51
僕は現実を知らない、ただの子供なのだろうか…
つーかビデオってなんのことだ。マジな話。
414389:02/08/09 22:21
近くのツタヤとかにない?
「初めての真珠」。
415デフォルトの名無しさん:02/08/10 00:06
>>398
ふとおもったんですが

sub function {
my %a = (a => 1);
my %b = (b => 1);
return(\%a, \%b);
}

my ($ref_a, $ref_b) = func();
%a = %$ref_a;
%b = %$ref_b

って$ref_aと$ref_bを一度しか使いませんよね。

もう少し簡潔にできないのかといってみるテスト

416 ◆JAPH9PWA :02/08/10 00:41
そういう場合は普通ハッシュリファレンスのまま使うかな

my($ref_a, $ref_b) = func();
print $ref_a->{a};

またはタイプグロブとか。私は使わないけど。
our(%a, %b);
(*a, *b) = func();
print $a{a};
>>389
いや、わかるんだが、fってもいろいろあるし…
>>405
言ってる意味がよくわからんのだが
LWPモジュールでプロキシに対して処理したいってことか?
それとも、LWPモジュールとかで作ったやつをプロキシサーバとして
動かしたいってことか?

前者なら、プロクシサーバであってもWWWサーバであるときと同じ
と考えていいぞ。ってか気にすんな

後者なら、ブラウザからHTTPが送られてくるからそれを解析
して適切に処理してやればいい
$ua->proxy("http", "http://proxy.hoge.jp:8080/");
という単純な話ではないのか?
420418:02/08/10 01:22
>>419
なんについて?
プロキシサーバとして扱いたいなら、ブラウザからの要求を
解析する必要がある。

あと、プロキシサーバに対してなんかしたいときに特に
プロキシサーバであることを意識する必要ないんじゃないの?
じゃないとプロキシじゃないし・・・・

#UserAgentのなんかのメソッドにぶち込むだけでいいかも知らんがその方法は
#俺はよく知らんから調べるか、博識の人のレスをまつ
421419:02/08/10 01:37
紛らわしかった。 >>419>>405
>でね、HTTP モジュール見ても LWP モジュール見ても プロクシ噛ませる
>場合の処理がよくわからないのです。
に対するレスね。
422418:02/08/10 01:45
>>421
なるほど。
ああ、俺も質問の意図を激しく誤解してるな・・・
Λ||Λ
>>407
>> パールモジュールpmはuse XXXXで
>> plは requie 'XXX'でOKですか?
>>
>> あと、pmってCPANとかいろいろ書いてるけど、
>> ふつーにはダウソできないのですか?

use Module;の場合、Module.pmというファイルがあると仮定する。つまり自動的に
拡張子を補う。requireはそういうことはしないので、拡張子をつけないといけない。
また、useの場合コンパイル時に処理を行うので、重いスクリプトを何度もテストする
場合はこの方がいい。というか今は特殊な事情がない限り、useを使うのがいい。
この端末では半角カナが読めないので後半には答えられない。
424デフォルトの名無しさん:02/08/10 22:29
csh上でPerlを使っています。
Perlからcshのプロンプトを変更したいのですが上手くいきません。
どのように記述すればよいのでしょう?
「試したこと」
 system("set prompt=abcd");
とか、
 system("source プロンプトを変更するシェルスクリプト名");
など。
>>423
嘘はいけません。
reauire = #include だったと思うのだが・・・・
>>424
子プロセスから親プロセスの環境を直接いじることは不可能。

eval `perl -e 'print "set prompt=abcd"'`

とでも*cshから*やる以外にはない。
428デフォルトの名無しさん:02/08/11 11:11
>427
そうだったんですか、、、
残念だけど仕方ありませんね。
どうも有難うございました。
429デフォルトの名無しさん:02/08/11 23:46
レス削除依頼を簡単にまとめられるJperlで動くスクリプトを作ってください。
おながいします。
・削除理由によってスレッドをまとめる
・同じスレッドのレスは、一つのスレッドにまとめる
・重複依頼は一つにまとめる

こんな感じ
ここは作成依頼を受け付ける所じゃない。
http://pc.2ch.net/test/read.cgi/php/1028943269/
にでも逝きな。
431423:02/08/12 09:32
すんまそん。嘘つきました。requireでも拡張子pmを補います。ただし、plでは補わない
ことを確認しますた。requireときたらライブラリの拡張子はplだったんで勘違いして
ますた。マジすいません。
432デフォルトの名無しさん:02/08/13 01:26
自分のサイトのファイルのダウンロード数を
カウントするCGIってどっかにありますか?
アクセスログ見たら
ファイルの中身を真っ白にする方法はありますか?
中身がある既存のファイルを、何にも書いていない空ファイルにしたいのです。

seek関数を使ってポインタを最初に戻してからcloseしてもそのままでした。
435 :02/08/13 23:38
open(FILE,">file.txt");
close(FILE);
436434:02/08/14 06:16
>>435
試してみたら出来ました。
書き込みモードに設定すればよかったんですね。
マジで助かりましたよ。ありがとうございました。
437棄教者 ◆witdLTi2 :02/08/14 09:34
>>432-433
analog というツールがあるので、それを探しましょう。
http://www.analog.cx/
UNIX用のツールですがWinにも移植されています。
アクセスログを提供してくれないプロバイダだとちょっと難しいかもしれない。

あとは、ファイルへの直接リンクを禁止して、
一度 *.cgi なページを踏ませることにしたらどうですか。で、
*cgi なページではページを踏んだ回数をカウントする、と。
438デフォルトの名無しさん:02/08/15 12:56
すみません、ちょいと聞きたい事があるのですが、ここに任意の
数の要素を持つ任意の数の配列(@array[1], @array[2], ...) が
あったとして、全ての配列要素の順列組合せを出力する場合、
何か良い手はあるでしょうか? ちなみに要素の数は配列毎にばらばらです。

WEB 上でいろいろ探してみたのですが、perl 上での多次元配列の
順列組合せについて書かれているページを見付ける事はついに
出来ませんでした... 鬱氏
439438:02/08/15 17:26
あとでちょっと調べたりして、自分自身 perl の事が良く
分からないまま質問したなぁ、と反省しています。多分、質問の
意図も理解されないような気がしますので、具体例でしたい事を
書いてみます。

たとえば、

@array[1] = 0.5, 1.0, 1.5, 2.0
@array[2] = 1, 2, 3

として、

(0.5, 1), (0.5, 2), ..., (2.0, 3)

という出力が欲しいんです。配列は a, b だけでなく不特定で、
各配列の中身もてんでんばらばらです。

perl の入門書とかを読みながら考えているのですが、配列だの
リストだのがだんだんごっちゃになって来てしまっています。
誰かここ読めゴルァで構わないので教えて下さい。
とりあえずだ、
配列は@test=(4,5,6,) こう
とりだすのは print $test[0]
とかそういうのは分ってるんだね?
441438:02/08/15 18:03
>>440
なんとか。

ところで、
@test=(4,5,6)

@test[1]=[4,5,6]
と書いても間違いではないでしょうか? 配列自体の数も不特定なので、
配列自体をある配列の要素として扱いたいのですが。< なんか自分で言ってて良く分からない...
442 ◆JAPH9PWA :02/08/15 19:04
@test[1]=[4,5,6]??構文エラーにはならないけど、普通はこんな書きかたしないよ。
とりあえず「プログラミングPerl」を買って読んだ方がいいね。

で、>>339はその通りにやろうとすると激しく面倒だから多次元配列の簡単な説明だけね。

my @foo = (1, 2, 3); # 通常の配列
my @bar = (\@foo); # barは要素を一つ持つ配列。その唯一の要素は配列への参照(リファレンス)
push @bar, [4, 5, 6]; # barの要素は二つになった。 [ expr, ...] は配列へのリファレンスのリテラル表現

print $bar[0][0]; # barのindex 0をデリファレンス。 1が表示される。
print $bar[1][2]; # 同様に、6が表示される。
$bar[0][0] = 0; # 代入も同様

少しは分かってもらえたかな?
まぁこのあたりはPerlでもCでも凄く難しいところだよね。
なるほど、質問者とは別だけど
そういう風にやるのね…。

リファレンスって便利だね。
      __ , ―― '  ̄ ̄ ̄ ̄`――、___
 / ̄ ̄__________ ) ) ) `\
(    ,/' ! i l l l l | | | | l l l l l !i`~ーー、、   \
 ヽ_ (〆――――-〜//⌒~ヽヽミシヽ、`ヽλ__l
  、  ~          λλ___、丶ヽ/'~ヽ、。~ハwwヾ     〉〉
 `、ー―――――-丶// /⌒~⌒ヽ、ヽ、  `ーヽく〃    ,//
    ̄ ̄ ̄ ̄ ̄ ̄~`( | λ\ヽ冫ノ,冫~          《丿/
    、 、_______| | \__丶´/lノ冫          l /
    ` ー――ヽニ_ーl\_、\\\冫        /,〆
            `ヽl\___ ̄ \ヽ\        /ノ/
    、`――――――ヽ\__ ̄ ̄、, \ヽ\  ,/イ/
     ̄ ̄`――、_ー、!\_ ̄ ̄ノ  \ヽ∨'〃/
              ̄\  〉 ノ 〉    ヽο冫
               ,〉// ノ,|       ~~
               (/,/  '/'l
ったく馬鹿がつられやがって、この板で決着つけようか?
445foobar:02/08/15 23:09
>>439
@array1=(0.5, 1.0, 1.5, 2.0);
@array2=(1, 2, 3);

for $i (@array1) {
for $j (@array2) {
print "($i, $j), ";
}
}


446デフォルトの名無しさん:02/08/15 23:16
@array = (
  [0.5, 1.0, 1.5, 2.0],
  [1, 2, 3],
);

foreach my $foo (@array) {
  foreach my $bar (@$foo) {
    print "($foo,$bar), ";
  }
}

日本語キーボード超ウゼー
447デフォルトの名無しさん:02/08/15 23:17
>>446
あ、適当に書いたけど、これじゃ全然ダメだな…
$fooに入ってるのはリストへのリファレンスだ
俺のアホ
448デフォルトの名無しさん:02/08/15 23:25
@array = (
  [0.5, 1.0, 1.5, 2.0],
  [1, 2, 3],
  # これ以上増えたら、下のコードじゃ対応できない。ヘボいね。
);

for (my $a=0 ; $a<@{$array[0]} ; $a++) {
  for (my $b=0 ; $b<@{$array[1]} ; $b++) {
    print "($array[0]->[$a],$array[1]->[$b]), ";
  }
}

これでいいか…
日本語キーボード超ウゼー
449438:02/08/16 11:38
>>442
むむむ、では、
@test[0]=[1,2,3]
@test[1]=[4,5,6]
ではなく
@test=([1,2,3],[4,5,6])
が正解なんですね。で、さらに配列を追加するには push を使う、と。
@var=(7,8,9,10)
push @test,(\@var)

なーるほど。なんかすごく納得できました。どうもありがとう!!
あとはこれを全部なめるやり方を考えるだけかな。
と言ってもそれが一番面倒そうだけど。

>>448 さんも書いているけど、不特定の配列要素を全部なめるとなると
普通に for を使うだけではダメですよね。
450448:02/08/16 12:38
sub recursive ($$$) {
  my ($matrix, $left, $stratum) = @_;

  foreach my $oe (@{$matrix->[$stratum]}) {
    my @tube = (@$left, $oe);

    if ($stratum+1 >= @$matrix) {
      print (join(',', @tube), "\n");
    } else {
      recursive ($matrix, \@tube, $stratum+1);
    }
  }
}


my @matrix = (
  [1, 2, 3],
  ['a', 'b', 'c'],
  ['X', 'Y', 'Z'],
);

recursive (\@matrix, [], 0);

これでmatrixが二次元配列である限り大丈夫かな
ねえ、

http://pc.2ch.net/tech/kako/1017/10177/1017736187.html

この過去ログと、このスレってどういう関係にあるの?
もう、なくなったのかと思ってたこのスレ。
>>451
pc鯖からpc3鯖に移転したんだよ。
>>449
@test = ($ref1, -> [1,2,3]
$ref2) -> [4,5,6] (概念図、コードとしては不正)

で、配列の要素は配列じゃなくて、それを指すリファレンス(スカラーの一種)です。
それから、配列の要素を指定する場合は接頭記号が$になります。
@test[1] じゃなくて $test[1] です。

>>さらに配列を追加するには push を使う、と。
>>@var=(7,8,9,10)
>>push @test,(\@var)

の場合、配列を追加してるわけじゃなくて、リファレンスを追加しているのです。
分かってたらおせっかいスマソ。
454438:02/08/16 16:08
>>450
おお、すごい!!
そっか、再帰的に関数を呼び出すと言う手が使えるんですね!!
うーん、しかし、すぐにはわけわからんですな。少し考えてみます。
455デフォルトの名無しさん:02/08/16 20:41
>>375
遅レスだが
foreach $key (sort {$hash{$b} <=> $hash{$a}} keys %hash){
// some operations
}
でどうか
456 :02/08/16 20:45
>>455
本当に遅レスだな
>>381で既に答えが出ているのに(藁
457デフォルトの名無しさん:02/08/17 11:56
いろんなソースを見たほうが勉強になる。
>>456
失敬失敬。問題だけ見て他の人の解答を見てなかったよ。
459デフォルトの名無しさん:02/08/18 09:46
LWP::UserAgentをつかってProxyのテストをするスクリプトを書いたのですが、
$ua->timeout('30');としても30秒で終わらない(へたすると何分もかかる)状態
になります。

たぶん、$ua->timeout()はHTTPでリクエストを送信するときにヘッダに
timeoutを指定して送るだけだからなんじゃないかと思うんですが、
30秒したら、強制的にコネクションを切断して次のプロクシのテストを
したいときにはどうすればよいでしょうか?

callbackというのを使えばいいのかとも思ったのですが、これだと
何バイトか返ってくるたびにサブルーチンを呼び出すということなので、
ぜんぜん返事が返ってこない場合は意味のないような気もします。

どなたかヒントだけでもお教えくださいませ。よろしくお願いします。
LWPは忘れてalarm関数とかを使ってみる、とかかしら。

うまくいったらフラグをたてとくようにして一定時間後にそれを見ると。
なるほどー

my $res;
eval {
  local $SIG{ALRM} = sub { die "timeout" };
  alarm $TIMEOUT;
  # Pass request to the user agent and get a response back
  $res = $ua->request($req);
  alarm 0;
};
if ($@ =~ /timeout/) {
  print STDERR "time out\n" if $DEBUG;
  return;
};

こんな感じで書いて見ました。
ただ、これでもたまに1分ほど固まるときがあるんですよね。。
はじめてalarmを使ったので使い方を間違えてるのかな?
もうちょっといろいろ試してみます。どうもありがとうございました。
462デフォルトの名無しさん:02/08/26 01:00
CGIをPOSTモードで呼び出したいんですが、どうすればよいでしょうか?
GETなら簡単ですけど、それはなしで。
print "Location: hoge.cgi\n\n";
こういうのつかうのかな?
463デフォルトの名無しさん:02/08/26 09:20
print "Location: hoge.cgi; post=mode\:form\n\n";
とかやってみたけどダメだ〜。
それとも不可能でしょうか?
>>463
ちゃんとCGIの勉強したほうがいいかと。
Locationヘッダは関係ないよ。
POSTは標準出力から読み込むんだから。
465棄教者 ◆witdLTi2 :02/08/26 10:01
<FORM ACTION="./hoge.cgi" METHOD="post">
糞スレを立てた奴の名前を入れて下さい<INPUT TYPE="text" NAME="kusosure">
<INPUT TYPE="submit">
</FORM>
466デフォルトの名無しさん:02/08/26 10:05
うむ、そうですね。
>>465
いや、CGIから呼び出したいんですが。
467デフォルトの名無しさん:02/08/26 12:28
やっぱりわからないなぁ。
参考になるサイトありませんか?
468棄教者 ◆witdLTi2 :02/08/26 12:34
CGIから? CGIを? どっち?
469デフォルトの名無しさん:02/08/26 13:27
CGIからCGIを
です。
470棄教者 ◆witdLTi2 :02/08/26 14:03
---foo.cgi---
print <<"__EOM__";
Content-type:text/html

<HTML><BODY>
<FORM ACTION="./bar.cgi" METHOD="post">
糞スレを立てた奴の名前を入れて下さい<INPUT TYPE="text" NAME="kusosure">
<INPUT TYPE="submit">
</FORM></BODY></HTML>
__EOM__

これで bar.cgi を POST メソッドで呼べるYO!
471棄教者 ◆witdLTi2 :02/08/26 14:04
×これで bar.cgi を POST メソッドで呼べるYO!
○これで foo.cgi から bar.cgi を POST メソッドで呼べるYO!
そのformにnameとかidとかを入れてやって、
<script language="JavaScript">
document.form[hoge].submit
</script>
的なJavaScriptを差してやれば目的のことができるのでは?
473デフォルトの名無しさん:02/08/26 16:19
Content-type:text/html

<HTML><BODY>
<FORM name="form1" ACTION="./hoge.cgi" METHOD="post">
<INPUT TYPE="text" NAME="txt">
<INPUT TYPE="submit" name="btn">

<script language="JavaScript">
document.FORM[form1].submit[btn]
</script>

</FORM></BODY></HTML>

あわせるとこんな感じだが・・
動いてくれない。
Javaはさっぱりでして。

というかこういう方法しかないんでしょうか?
単にパイプ付きでopenすればいいだけぢゃねーの?

環境変数に適当なものを与えれば、コマンドプロンプトで実行できるのと同じで。
475デフォルトの名無しさん:02/08/26 19:45
お。

パイプ付きでopen・・・

すみません、全然分かりませんです。
えーと、今手元にperlがないので、間違えているかもしれないが。
open(CGI, "|post.cgi");
print CGI "hoge=hage";

みたいなことでは?
POSTはcgiに標準入力を食わせることになるから、
そのcgiプログラムを元のperlのcgiから直接実行してやる、と。
477デフォルトの名無しさん:02/08/26 21:20
おお、核心に近づいてきた気がするな。

っていうかPOSTってCGIのことだったのか・・・

でもActivePerlのファイルをみるとpost.cgiってファイルは無いようです。
CGIの呼び出しはどこにいれるのやら
print "Location: hoge.cgi\n\n";
open(CGI, "post");
print CGI "mode=form";
こういうことではないですよね?
>>476
それだと同一サーバ上のプログラムを呼んでるだけ。
CGI プログラムを POST で呼ぶには、Web サーバの port 80
とかに Socket 繋いで HTTP でお喋りしなきゃダメ。

もし環境に恵まれているなら、LWP 使うのが楽。

475 はペリカン本 (O'REILLY 「Web クライアントプログラミング」)
読むべし。細かい部分は RFC 2616 参照。
479いらすま:02/08/26 21:24

  いらすまですう


   せいきひょうげんというのわぁ

  おちんちんとかぁ

  おまんことかぁ

  /$.*^/とかぁ
480デフォルトの名無しさん:02/08/26 22:16
は〜。
難しそうですねぇ・・

っていうか、
ログイン→データ一覧表示→データ削除→
”削除しました”画面表示→元のデータ一覧表示に戻る

ってやるとページの有効期限切れってなっちゃうじゃないですか。
それをどうにかしたいってことだったのですが。
>>473を見ると、自サーバかなと思ったけど、実際はどうなん?
元質の>>462の発言が、どれかわからない。あげてるやつか?
482478:02/08/27 00:24
>>480
Perl の話じゃないから板違いだが…。
有効期限切れ? JavaScript で back してない?

1. ログインページから login.cgi を呼ぶ
2. login.cgi でログイン処理後、処理終了ページを出力
3. 処理終了ページから list.cgi を呼ぶ
4. 出力されたデータ一覧ページから delete.cgi を呼ぶ
5. delete.cgi でデータ削除後、処理終了ページを出力
6. 処理終了ページから list.cgi を呼ぶ
7. 出力されたデータ一覧ページから…

2. や 5. で処理終了ページを一々出したくなかったら、
login.cgi や delete.cgi に list.cgi と同じ機能を持たせれば OK。
データ持ち回りたかったら Cookie なり隠しフォームなり。
はじめまして。
当方文系でプログラム全然わかんない人ですが、恥を忍んでうかがいます。

ネットで公開されているスクリプトを使いたくて
ActivePerlをインストールしたんですが、
スクリプトの実行方法がよくわかりません。

プログラミングをしない単なる利用者として
perlの仕組みを勉強したインですが、
おすすめの本・サイトがあったら
教えてもらえませんでしょうか…(一応グーグルで検索したんですが)
ちなみにそれはどんなスクリプトなのでしょう。
それがわかると説明しやすいんじゃないかな。
485482:02/08/27 10:13
>484さん
  さっそくのレス、恐れ入ります。
 スクリプトの内容は、
 辞書データを間引くスクリプトです。

 perlはDドライブにインストールしてあるんですが、
 スクリプトをDL・解凍した後どこに持っていけばいいのかとか
 スクリプトを実行する書式とか
 わかんないことだらけで・…
>>485
まず perl そのものが実行できるかどうか
これはコマンドプロンプトから perl -v と入力して反応があるかどうかを調べる。
バージョン番号などの反応があれば、次へ、無ければパスの設定をする。

次にそのスクリプトを実行する。
付属ドキュメントにインストール方法が書いてなければ、
これは適当なディレクトリに *.pl ファイルを放り込み、
perl スクリプト名 を入力すれば実行できる。

モジュールを別にインストールする必要があるばあいは、
付属ドキュメントによく目を通すこと。
487462:02/08/27 11:38
>>482
それだとログインしたっていうじょうほうをクッキーに書き出すってことでしょうか?
ちなみにテストとして自サーバーというか、自分のパソコン上でやってますが
実際はPlalaサーバーで動かします。

>>483
多分CGIうごかしたいんじゃない?
http://www.st.rim.or.jp/~nakata/
のhttpdとかいれるとよいのでは?
488デフォルトの名無しさん:02/08/27 12:05
i-mode絵文字対応フォームメールを設置したいのですが、
文字化け対策がうまく行きません。
(文字化けする絵文字としない絵文字がある。)
処理をうまくしてる人はどうやってやってます?
489482:02/08/27 18:16
>>487
Cookie でログイン済フラグを持たせるのも一つのやり方だね。
何にしても、

・具体的にどんなシステムを作りたいのか
・どの程度厳密に制限しなくてはいけないのか
・誰が利用して誰が保守するのか

が分からないと、これ以上アドバイスしようが無い。

>>488
化ける文字と化けない文字、それぞれの共通点を調べてみたら?

http://www.google.co.jp/search?q=imode+%E7%B5%B5%E6%96%87%E5%AD%97+%E6%96%87%E5%AD%97%E5%8C%96%E3%81%91&ie=UTF-8&oe=UTF-8&hl=ja&btnG=Google+%E6%A4%9C%E7%B4%A2&lr=lang_ja

462 も 488 も、WebProg 板辺りに質問をまとめ直して投げた方が
答えてくれる人多いと思うよ。ここは「Perl」のスレで「CGI」のスレじゃ
ないからね。
490485:02/08/28 00:27
>486さん
  アドバイス、ありがとうございます。
 ご指導の第一ステップはクリアできているみたいです。
 もうチョット調べれば、なんとかなりそうです。
 助かりました。
windowsで子プロセスを起こした場合
プロセスの終了を親プロセスで知ったり、あるいは出力をうけとったり
できないでしょうか.
492491:02/08/28 01:26
説明不足でした

親プロセスも子プロセスもパールスクリプトで
systemは子プロセスの終了待ちをしますから、
まずいです。
Win32::Processモジュールを使って、子プロセスを
作っているんですが、、、、
493488:02/08/28 11:29
>489

参考になりました。
ありがとうございます。
494デフォルトの名無しさん:02/08/29 12:59
2ちゃん用ブラウザで読める掲示板を作ろうとしているんですが、なかなかうまく読めません。
大抵のブラウザで読めるようにするために、最低限必要なファイルはなんでしょうか?

今作ったのが、read.cgi、index2.html、subback.html、read[1-9].datです。
datファイルの名前が良く分からなかったので、read1.dat〜read9.datまでとりあえず作りました。
495 :02/08/29 23:41
>>494
0ch参考にしてみ。ソース公開してるんで。
496デフォルトの名無しさん:02/08/31 22:32
MacOS8.6で、WEB共有とMacJPerlを使ってローカルでCGIを動かしています。

Linuxサーバーなどでは、スクリプト中で外部のサブルーチンなどを呼ぶ場合は
require './sub.txt';  などと記述しますよね。
これをやりたいのですが、Macだとディレクトリを:で表すせいなのか
require './sub.txt'; や require '.:sub.txt'; ではエラーになってしまいます。

エラー内容は
# sub.txt did not return a true value.
File 'Macintosh HD:Desktop Folder:test:index.cgi'; Line 3
です。

どのように記述すればいいのでしょうか?
497初心者:02/08/31 23:27
Perlやってみたいんですけど、何を落とせばいいんでしょうか?
あと、エディターは何がいいですか?
>>497
Unix系OSを入手、Perlが標準で入っている。
そうなるとエディタはEmacsかvi、好きな方使え。
499初心者:02/09/01 00:19
Unixってなんですか?Linuxのパクリですか?

http://pc.2ch.net/test/read.cgi/php/1028816385/
>>499
ナイスボケ。
書いてあるじゃん。原因が。

> エラー内容は
> # sub.txt did not return a true value.
> File 'Macintosh HD:Desktop Folder:test:index.cgi'; Line 3

なんでしょ。
「sub.txt did not return a true value」だって。

ラクダ本の641ページ見てごらんよ。持ってないなら本屋で。

あと、この板の上のほうに「CGI は Web プログラミング板へ。」って書いてありますけど。
502デフォルトの名無しさん:02/09/01 14:54
>>501
!=499だけども

らくだ本はやっぱり基本だし買っといたほうがいいかなぁ。
技術評論者のCGI/Perlしかないし。
CGI以外にも結構便利なんだが。
>>502
>sub.txt did not return a true value
の意味がその本読んでもわからないようだったら、
らくだ本買ったほうがいいね。
ただし、今らくだ本は新版の翻訳中。
504デフォルトの名無しさん:02/09/02 21:22
Formで渡された値が半角英数かどうかを
判断したいんだけど...
検索してもなかなか見つからないので
誰か知ってる人、知恵を貸してください。
>>504
man ascii
if ($hoge =~ /^[a-z]+$/) { print "HANKAKU EISUU DESU"; }
>>506
不合格
[^\W_]
509名無し:02/09/03 02:28
申し訳ありませんが、どなたか教えて下さい。
perlからservletを呼び出せるのでしょうか?
例えば、「http://*****/*****/servlet」を呼びだしたい場合
$ret = "http://*****/*****/servlet"
と記述したら、「$ret」にservletの戻り値が入るのでしょうか?
...
use LWP::Simple
$ret=get('http://*****/*****/servlet');

これで。$retにservletの戻り値が(アワワ
512名無し:02/09/03 03:03
>>511
早速のスレ有難うございます。
現在テスト環境がないので、明日試してみたいと思います。
有難うございました。
513504:02/09/04 00:17
505-508
出来ました!ありがとうございました!
man ascii も勉強になったよ〜
514デフォルトの名無しさん:02/09/04 21:31
datファイルに出力する際、

open OUT,">>datfile.dat";
print OUT "aaaaaa\n";
close OUT;

これで実行すると、datfile.datの中に元々あった文章の下の行にaaaaaa\nが入りますよね。
これを1番上の行に挿入したいのですがどうすればいいでしょうか?
>>514
ファイルの途中に挿入するのは原理的に無理じゃない?
516514:02/09/04 22:04
>>515 無理なんですか…残念です。

もう一つ質問なのですが、
open IN,"datfile.dat";
while(<IN>){
(省略)
でファイルを読み込んだ時、datfileの上の行から読み込みますよね。
それを下の行から読み込むことは出来ますか?
>516
seek とか使えば出来ないことはないと思うけどちょっとしんどいかな......
datfile がそんなに大きくないなら

open FH, "datfile.dat";
@file = <FH>;
for ( $i = $#file; $i >= 0; $i-- ) {
print $file[$i];
}
518 :02/09/04 23:21
素直にreverse使え。
>>514
open TMP, ">datfile.tmp" or die;
open DAT, "<datfile.dat" or die;
print TMP "aaaaaa\n";
print TMP <DAT>;
close TMP;
close DAT;
rename "datfile.tmp" => "datfile.dat" or die;

一番上に追加できりゃ、>>516 の処理はしなくていいと
読んだんだけど。これでいい?
520newbie:02/09/05 10:21
1234567,犬,222,1
2345678,猫,333,2

というCSVファイルを食わせて、最後の数字の行だけ
前から三つまでのフィールドを書き出したいのですが、
どうやったらよいのでしょうか

ちなみにMacPerlのドロップレットにしようと思ってます
521棄教者 ◆witdLTi2 :02/09/05 12:15
tail と sed をつかったらどうよ。
PerlスレッドはWebProgに隔離されます。
おまえら半端言語のくせに生意気だ。
523デフォルトの名無しさん:02/09/06 02:03
perlのコマンドが一覧で乗ってるところを教えてください。
もしくは初心者用ページを。
524名無しさん@Meadow:02/09/06 05:53
>>523
多分ActivePerlを入れたんでしょ。なら、documentが付いてるYO
英語じゃいやなら、http://www.harukaze.net/~mishima/perl/
あたりから辿れば、関数一覧なんかいろいろなところにあるよ。
525デフォルトの名無しさん:02/09/06 17:55
2chのトリップと同じ処理ができるスクリプトを作りました。
しかしサーバーのOSがFreeBSDだったため、cryptの処理がLinuxと違い、困っています。

なにかうまく同じ処理結果を出す方法はないでしょうか?
>>525
Linuxのソースからcryptだけとってくるか、
FreeBSDのLinuxエミュレータ使えばいいんじゃねーの?
>>526
cryptってみんな同じ結果でるんじゃなかったっけ?
ためしにこれコンパイルしてみてよ。
http://davesource.com/Projects/DEStiny/x.c.html

・・つーかスレ違いだな
528デフォルトの名無しさん:02/09/06 19:43
ある変数に格納されているテキストを,
外部コマンドに標準入力から入れ,結果をまた
別の変数に格納したいのですが,良い方法ないでしょうか.

$result = `echo '$a' | foo`;

としたのですが,$aに「'」が入っていたりすると,まずいようです.
何か良い方法があれば,教えてください.
DESのとMD5のとあるんじゃなかったけ。
>>529
ごめん。そだね。

>>525
cpanにcryptモジュールがいくつかあるからそっちでやってみて。
ちなみに、linuxでもDebianはDES、MandrakeはMD5みたい。
>528
どうして $a を ' で括る必要があるの?
532デフォルトの名無しさん:02/09/06 21:47
>531
$aはHTML文書で,spaceやら"&"などを含んでいるのです...
何かいい方法は無いでしょうか?
^"^?"
^"^??" かな?
>532
" で括るようにしてもダメ?
それか、\Q$a\E とか......
535デフォルトの名無しさん:02/09/06 22:11
>534
\Q$a\Eでいけました.
ありがとうございました.
536デフォルトの名無しさん:02/09/06 22:49
#!/usr/bin/perl

print<<"HERE";
Content-type: text/html

<html><body>
■□■□■ index ■□■□■
</body></html>
HERE

exit;

こういうスクリプトを書いてサーバーに送った所、サーバーエラーになりました。
その後、■□■□■ index ■□■□■の部分の「 index 」の
全角スペースを取った所、正常に動くようになりました。■□■□■index■□■□■

これはPerlの仕様でしょうか?それとも、サーバー側の問題でしょうか?
>525
もう解決したのかな、、
これとかはだめ?
http://www.mikeneko.ne.jp/~lab/perl/des/
538525:02/09/07 00:45
>>537の方法でうまくいきました。
皆さん、どうもありがとうございました。
全角の空白の二バイト目に「@」が入ってるからエラーになるんじゃないかな。
Perlの仕様だね。全角の空白以外の文字でも運が悪ければエラーになると思うよ。

Perl5.8.0だと面倒なことしないでスクリプト中にUnicodeとかで日本語書いて
ラクーにシフトJISに直して出力できたりするんだろうか?
540デフォルトの名無しさん:02/09/07 18:55
crypt で暗号化されたものを
なんとか解析したいんですけど・・・
やはり無理ですか?
>>540
不可能ではないが、難しい
実質不可能と考えてよい。
>>540
賞金かけてみれば?
ん? ちゃんと計算せずに勘で書くけど、
賞金出すほど大変?

Perlで適当にやっても一ヶ月ぐらいで何とかなったり
する程度の分量だったりしないのかな。
だれか5.8使ってる人いる?
546デフォルトの名無しさん:02/09/10 14:11
ログのを変換する作業をしています。
Sep 9 14:06:24 hogeという感じで表示されるので
if (/^(\w+ \d+ \d+:\d+:\d+ )
という感じに拾っています。

しかし10日から31日の間は
Sep 10とログが出るようです。
if (/^(\w+ \d+ \d+:\d+:\d+ )これでしか拾えません

差がSepと日にちの間が1日から9日の間は半角スペース二つ
10日から31日の間は一つになってしまいます。
どのように書けば両方とも拾えるようになりますでしょうか?
教えてください。
if (/^(\w+ {1,2}\d+ \d+:\d+:\d+ )
548棄教者 ◆witdLTi2 :02/09/10 14:25
\s+で1個以上の空白文字になる。
549棄教者 ◆witdLTi2 :02/09/10 14:26
>>547
{1,2}って手があったか。
(氏ね){1,999}
550foobar:02/09/10 15:08
>>545
移行作業にかかりっきりです

551546:02/09/10 15:39
ありがとうみなさん
{1,2}と\s+どちらでもいけました。
でもスペースが一つか二つと限定されてるので一応{1,2}でやってみました。
ありがとうございました。
>>545
Gentooだとデフォルトで5.8だよ
553デフォルトの名無しさん:02/09/11 04:18
>>552
システム総入れ替えはいくらなんでもしんどいよ。

>>550
xs関係以外でなにか問題出てる?
unicodeをフルに使いたい用途があるんで移行したい気持ちはあるんだけど、
なぜか周りに移行するって人が全然いないんで、ちょっとびびってた。
移行が一段落したらどんな感じがレスしてくらはい。
PerlスレはWebProgに逝け。
さもないと荒らすからな
555棄教者 ◆witdLTi2 :02/09/11 08:19
>>554
WebやるときはC/C++で、テキストファイルの一括処理やるときはPerl使ってますが何か?
556デフォルトの名無しさん:02/09/11 08:37
>>554
Webやるときもテキストファイル、データベースもPerl使ってますが何か?
>>554
Perlのことよく知らないんだろうなこいつは。。
まあ正規表現書き方教室みたいのは向こうでやってほしいが
厨房言語は隔離板でやってほしい。
>>559
そういう発言は他所でやってくれ
>>560
パチパチパチ\(^_^)/
562デフォルトの名無しさん:02/09/11 17:53
foreach (@tmp) {
  if(/hoge/) {
     インデックス+= 3;
  }
}

とかする事はできないのでしょうか?
つまり

for ($i = 0; $i< @tmp; $i++ ) {
  $_ = $tmp[$i];
  if(/hoge/) {
    $i += 3;
  }
}
の様な事がforeachで記述できないでしょうか?
for (;;)な形式で書けば良いじゃん。。。
糞スレ
PerlはWebProgへ
>>564
CGIってどういう意味か知ってます?
CGI=Perlって脳内変換されてるなら病院逝ったほうがいいですよ。
PerlなんかCGI以外の用途はないだろヴォケが
Rubyとは違うんだよ。Perl糞厨房ども
567円楽:02/09/11 20:34
ずいぶんヘタクソな煽りが現れたね。山田君、566の座布団全部もってって。
少しぐらい間違えてもC言語みたいに暴走しないし、
標準入出力、ファイル入出力、文字列操作等使いやすいし、
UNIX系のマシンには高い確率でインストールされてるし、
ちょっとした処理にはとても使いやすいよPerl。
(だからCGIに向くのかも、、)
Perlで2chのスレを読んでますよ。
>564はム板のrubyスレでPerl隔離運動やってるよ。
どうも賑わっているPerlスレが気に入らなくて仕方ないようだ。
目障りだから、そのうち書込み禁止にしてもらった方がいいだ
ろうけど・・・


shigeが復活したようだ
プログラム板でのRubyスレの惨状は全てPerlユーザの責任なんだから
WebProgにでも逝って反省の念を示したらどうだ?糞虫ども
Rubyファンってこんなに下品なの。
Rubyスレ行ってみて書き込みの品の悪さに読む気もしなかった。
言語のチョイスと性格って関連あるような気がするんだけどどうだろ。

Java == あたらし物好き
Perl == 化石
C == 堅実
.NET関係 == 寄らば大樹の陰
LISP == 屁理屈こねるメガネ
Pascal == 杓子定規
SQL == 5時から男

さてRubyは・・・?
Ruby == 真のUNIXハッカー
なるほど。ワナビーが寄り付くわけね。
おれはこうだと信じて疑わないが。

Java == 流行に流されやすく主体性が無い。
C == 井の中の蛙の危険性アリ。
.NET == 盲目的な期待を抱きがち。
Ruby == Perlの真似しかできない。

もち、仕事で使わざるをえないケースは別。
Javaまわりは「押さえとかなっ」といった強迫観念が
うまくループしているが、それがいつまで続くかは謎。
>>572
お前の責任だよ。
むしろ、>>572 == >>573 じゃないかなあ。
foreach (<IN>) {
 ($id, $data1, $data2) = split /\t/;
 %data = ($id => { data1 => $data1, data2 => $data2});
}
として、$data{0}{data1}みたいにアクセスしたいのですが、
%dataに最後に読み込んだ物しか保存されてないようです。

0 256 256
1 128 128
とあったとき、0を読み込んだ直後だと$data{0}で中身が取り出せるのですが、
1を読み込むと0が消えてしまいます。
なにかおかしい(勿論私が)と思うのですが、なにがまずいのか教えて下さい。
ちなみに、@data[$id]とした場合は動いています。
ageます
それだと、ループの中で毎回ハッシュを初期化してしまいます。

$data{$id} = { data1 => $data1, data2 => $data2};

とするとうまくいきますた。
RubyとPHPって、なんであんなに嫌われるんだろう。
>>582
即レス感謝です、ありがとうございました。

585584:02/09/13 22:40
しかし、配列だと初期化されないんですね。
ちょっと納得いくような行かないような。
>>562
あんたのコードでちゃんと動きましたが、何か?

@tmp = ('hoge', 'moge', 'boke', 'giko', 'mona', 'hoge');
$counter=0;

foreach (@tmp) {
if(/hoge/) {
$counter += 3;
}
print "$counter", "\n";
}

print "result $counter", "\n";

結果は6。
587582:02/09/13 22:50
>>585
%data = ですと、「ハッシュ全体」みたいな意味になります。
@data[$id] ですと、「配列の要素」って意味です。
(しかしこの書き方だとワーニングが出るはずです。正しくは$data[$id])
$data[$id]にあたるのが、$data{$id}ということです。

確認してませんけど、@data = ($id, $data1, $data2);
なんて書くとやっぱり毎回消えるはずです。
588584:02/09/13 23:02
丁寧にありがとうございます。
>しかしこの書き方だとワーニングが出るはずです
ワーニング出ませんでした、スカラーコンテキストだから$が正しいんですね。
全然気にしてませんでした。

ちなみに、ActivePerl v5.6.0 Build616使ってます。
古いかも知れませんが。
>>588
-wオプションをつけてみては?
> perl -wc hoge.pl
みたいな感じで。
590デフォルトの名無しさん:02/09/13 23:48
base64形式でエンコードされたeuc文字列$keyをもとの
eucに戻すには:
$keyw =~ s/%(..)/pack('c', hex($1))/ge;
と1行で済みますが、

base64形式でエンコードされたshift-jis文字列$key
を簡単にもとのshift-jis文字に戻すperlコードを教え
ていただけないでしょうか?(Jcode.pmでやろうと
しましたが、うまく行きません...)
単にtosjis関数かませばいけたはずだけど
RubyもPHPも別に嫌われていないし。
単に 2ch 上で、嫌われるように仕向けている奴がいるだけで。
>>583 はその張本人か、そうでなければ嘘を嘘と見抜けなくて 2ch に向いていない
かどっちか。
いや、だから、
>>単に 2ch 上で、嫌われるように仕向けている奴がいる
なんでこういうのがいっぱいいるのかなと。他の言語よりはるかに目立つ。
・実際に嫌っている奴が結構いる
・嫌っているヤシが必死

くらいしかありえないんじゃないの
>・嫌っているヤシが必死

こっちのほうがありそう。
ほかに常駐してるスレでたったひとりのためにひどい雰囲気になったことがあって、強制IDに変更されたとたんにまともに戻ったりしたよ。
596てすた:02/09/14 16:06
     ____
    /∵∴∵∴\
   /∵∴∵∴∵∴\
  /∵∴∴,(・)(・)∴|
  |∵∵/   ○ \|
  |∵ /  三 | 三 |  / ̄ ̄ ̄ ̄
  |∵ |   __|__  | < うるせー馬鹿!
   \|   \_/ /  \____
    \____/
597デフォルトの名無しさん:02/09/15 13:17
>>591
> 単にtosjis関数かませばいけたはずだけど
tosjis関数の前に、base64をデコードする必要とあるはず
ですが、この方法が分かりません。

perldoc Jcodeの説明を参考にして、次のようなコードを
作りました
#$sjkeyは、base64に変換されたshift-jis文字列
$jcode = Jcode->new($sjkey);
$jcode->mime_decode;
$euc = $jcode->euc;

これで、$eucには、eucに変換された文字列が入るはず
なのですが、実際には次のようなbase64のままの文字
しか$eucには入りません。

%uFF95%uFFFA%uFF91%uFF97

base64をデコードして、それをeucに変換する、のは
cgiの基本の基本のはずなのですが、分かりやすい書籍
などでも、分かりやすく説明したものが見つかりません。

ご指導いただけると、助かります。
「CGI は Web プログラミング板へ。」
って書いてあるのにしつこくしつこく
CGIの話をし続けるのはどうしたわけだろうか。

ていうか、シフトJISなのか? それ。
599デフォルトの名無しさん:02/09/15 14:06
>598
ご指導ありがとうございます。

(1) %uFF95%uFFFA%uFF91%uFF97
>ていうか、(1)はシフトJISなのか?
上のコードは「放送」という文字に対応しています。
MacOSX用Internet Explorer5.2で「放送」をperl/cgiで
処理する過程で出てきたものです。シフトJISではないかも
しれませんが、とにかく(1)をeucに戻したいのです。

MacOSX用Netscape7.0だと素直なbase64/eucでは、
「放送」は、
%CA%FC%C1%F7
でした。
600 ◆JAPH9PWA :02/09/15 14:16
なんか物凄い勘違いというかまるでわかってない気がするんだけど。
%xxx%xxx...ってのはbase64じゃないよ?
それは普通URIエンコードとかURIエスケープとか呼ばれる物だけど。
しかももしかしてJavaScriptでエンコードしてる?
%uFF95はShift_JISでもなくEUC-JPでもなくUnicodeだよ。
601 ◆JAPH9PWA :02/09/15 14:28
…ってUnicodeじゃないじゃん…?
じゃあそのuは何だろう。謎だぁ…。
とりあえず以下のコードでデコードできるけど、どうやってエンコードしてるのさ?

$s1 = '%uFF95%uFFFA%uFF91%uFF97';
$s1 =~ s/%uFF([A-F0-9]{2})/pack 'H*', $1/eg;

print $s1;
602デフォルトの名無しさん:02/09/15 15:08
>>600
> しかももしかしてJavaScriptでエンコードしてる?
その通りです。私が作成しているソフトでは、文字列を
cgi/perlへ渡す際に、

(1) <FORM METHOD="get" ACTION="$main::myname">
から直接、perl/cgiに渡す方法、と
(2) Internet Explore5.2のJavaScriptでエンコードして、その
エンコードした値をCookieに保存して、そのCookieをperl/cgi
が読み込む、という方法、

の2つを採用しています。

MacOSX用IE5.2では、
(1)の方法では、「放送」とうい文字が:
%CA%FC%C1%F7 (euc)
なのに、(2)の方法では、
%uFF95%uFFFA%uFF91%uFF97 (unicode)
となり、混乱してしまいました。

> $s1 =~ s/%uFF([A-F0-9]{2})/pack 'H*', $1/eg;
ご指導ありがとうございます。これで成功しました。

この問題を解決するのに数十時間を費やし、書籍も2冊購入し、
googleで何十回も検索しましたが、どれも無駄でした。

この掲示板の皆様からのご指導がなければ、解決できませんで
した。深くお礼を申し上げます。

603デフォルトの名無しさん:02/09/15 19:44
先生、教えて。

ファイルハンドルから実際のファイル名を取得できますか?
perl5.0系です。
JavaScriptでescapeしたものはブラウザによってUnicodeだったりSJISだったりするよ、ちなみに。
SJISで書いてね。。。
606デフォルトの名無しさん:02/09/15 22:50
>>603
そのファイルハンドルはどうやって取得したの?
607603:02/09/15 23:33
>>606

open( INFILE, "test.txt" ) ;

で。

別にあるサブルーチンで、このINFILEを受け取って、そのファイル名を
取得したいのです。(もちろん、引数でファイル名指定ってのはナシで)
608デフォルトの名無しさん:02/09/16 02:11
引数でファイル名指定ってのがナシな理由がわからない
Win2kじゃ使えないんですか?>Perl
>>609
え?ネタ?
ああ、使えないんですね。ありがとうございました。
612デフォルトの名無しさん:02/09/16 03:35
>>611
逆。アクティブパールってのがある。
http://www.activestate.com/Products/Download/Get.plex?id=ActivePerl&_x=1
>>612
"No additional requirements"

と、あるみたいですが・・・。
あ、そういうことでしたか。
翻訳してみて漸く分かりました。
お世話様でした。
NTのやつでいいんですよね?
>>614
落ち着いてプログラムするように(藁
ありがとうございました。
以前、Win98対応のやつしか入ってない本を買いまして、
自分のPCがWin2kだったため諦めてたんです。
これで本が無駄にならずに済みそうですw
明日からPerl始めてみます。
>>616
じゃ、ついでに。ここのTips参考になるかな?
http://www.officeamuse.co.jp/tips/perl/index.html
>>617
ありがとうございます。
お陰様で今週はPerl週間になりましたw
ソースいじりながら参考にさせて頂きます。
>>617
このページ参考になりそうです。
ありがとうございました。
>>618
がんばれ。
もしHPで使うならインストールディレクトリは合わせといたほうがいいよ。
’\usr\bin’とか
activeperlについて質問させてください。
chdir("../");
ってactiveperlでも動くんですか?
linuxだと普通に動いてるんだけどactiveperl
だと動いてないっぽいのは気のせいでしょうか。

>>621
どうやって「動いてないっぽい」事を確かめたの?

use Cwd;
@dir = qw(foo bar baz);
mkdir $_, 777 and chdir $_ for @dir;
print(cwd(), "\n"), chdir '../' for @dir;

↑コレ走らせたら、ActivePerl build 522 on Win98SE
で問題なく動作したけど。
きっとIISのCGIつかったスクリプトで
カレントディレクトリが予想外の場所にあったんだよ。
624デフォルトの名無しさん:02/09/17 21:25
鼻毛が出る程くだらない質問かと思いますが…

サブルーチンの中で my 宣言された変数は、そのサブルーチンを抜けた時点で消滅しますよね?
「メモリの節約」は、my を使う事によって得られる恩恵の一つと考えて良いのでしょうか?
>>624
> サブルーチンの中で my 宣言された変数は、そのサブルーチンを抜けた時点で消滅しますよね?

とは限らない。
626624:02/09/17 21:32
>>625
見事に鼻毛が出たという訳ですね。
ちなみに、どういった場合に消えずに残るのでしょうか?
>>626
>>625はメモリ上から消えるとは限らないと言っているだけなんじゃないの?
使えるとは思えないんだけど・・・
628627:02/09/17 21:53
あ・・・・でもデータがメモリー上に残っていたとしても、変数は消えるか・・・・
629624:02/09/17 21:58
「変数の消滅 = メモリの開放」…とは限らないという事でしょうか?
630デフォルトの名無しさん:02/09/17 22:08
じゃぁオレも便乗。

無名{}で一度だけのループを作ってその中でmyとかlocal宣言したら
そのブロックを抜けたら使えない=メモリの節約になりますよね?
631デフォルトの名無しさん:02/09/17 22:12
うわぁ、ログが中途半端に取得されてて
オレだけ間抜けみたいじゃないか。
closure というのがあるので my に関しては
「消滅」しない場合があるということかな。
perldoc -q closure
man perlref
とか
633624:02/09/17 22:30
>>632
なるほど、そういう物があるのですか…
ちょっと調べてみます、ありがとうございました。
ふらっと寄ってみた。MSNメッセンジャー作ってるのどこー?

>>624
% perl -le 'sub main{ my $a = 1; $b = \$a; } main(); print $$b;'
1

"変数"は消滅するが"値"は消滅しない、とか細かいことはしらん。

>>632
perldoc ややこい...
635デフォルトの名無しさん:02/09/17 23:32
微々たるメモリの節約を気にしなきゃいけないような条件下なら
スクリプト言語なんて使わない。
636 :02/09/17 23:36
sub a
{
my $a = 0;

b();

print "a=$a\n";
}

sub b
{
my $a;

$a = 10;
}

で結果に a=10 と表示されたんですが、これは正常なんですか?
637デフォルトの名無しさん:02/09/18 00:15
正常に a=0 と表示されたけど
>>627
リファレンスがあれば使えるよ。
単に my のスコープの外に出れば my した変数名で参照できなくなるだけで、
リファレンスカウントが0にならない限りデータそのものは消えないし
リファレンス経由で使うこともできる。
639  :02/09/18 03:52
キーボード入力って
while(<>){
if($_ =~ /aaa/)
}
とかやるじゃないですか。
でも、このスクリプトを実行する際に引数を渡すとその引数をファイル名として
そのファイルの中身が読み込まれてしまうんです。
たとえば、
%test.pl filename
とか実行するとfilenameのファイルが読み込まれてしまう。
キーボード入力とコマンドライン引数の両立の方法ってないのですか?
>639
while (<STDIN>)
下記のページが詳しい。
http://tohoho.wakusei.ne.jp/
>>639
>>640とはちょっと視点を変えて。
undef @ARGV; とかで引数を失くしちゃえば?
引数を他の用途で利用したいならshift使えばいい。
642 ◆JAPH9PWA :02/09/18 20:59
最初に<>を使う前にgetopt等で@ARGVを加工してやればいい。
643 :02/09/18 23:55
WebProgのperlスレよりも建設的なム板のperlスレ。
そろそろWebProgに移住しよう!
>>643
CGI 関係を排除しているからだろうな。
646デフォルトの名無しさん:02/09/19 05:48
Perl = CGIは定説
WebProgに引きこもってろよカスども

また出てきたぞ、こいつ
648デフォルトの名無しさん:02/09/19 06:00
WebProgにいけ。
それがプログラム板の総意だ。糞虫ども
> それがプログラム板の総意だ
ぷぷぷ
そればっかり
650デフォルトの名無しさん:02/09/19 06:03
CGI以外に存在意義のない言語なんかム板から消え失せろ
---------------------------------------------------------------
                  終了
---------------------------------------------------------------
続きはWebProgで
>>650
Perlは、windowsAPIや各種データベースとの連係、自然言語処理
(例えばChasen)などに幅広く利用されている。

一般的には、Perl>Ruby
圧倒的なライブラリ数、世界的な広がり、速度などの点で
Perlが勝る。Rubyはオブジェクト指向プログラミングを
簡単にできるようにしたが、スクリプト言語で作成する
規模のプログラムではそれほど必要不可欠な部分ではない。
>>651
おまえだけ行ってこい
Ruby >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Perl
お前らがどんなに現実逃避しようがこれは事実。ぷぷぷ
>>652
馬鹿の典型
糞Perlに出来ることは全てRubyでもできますが。しかも遙かにエレガント且つ迅速に。
>>655
できるけどできてないよな
Rubyは所詮Perlの後追いよ
Perlは糞えrぴおえryひおうーい45wyg:w54「83y」w「@・gかにの゛かきけいすんくすかむれりく゜゛えおのなみ゛やちまらいきく゜よにうてむせいひんくうえん゛くえう


うかうあかうあせまかわなんきいぼはのひせしとのひらしとみひにいてれすらんかきれあせうまらかせあうすかうあかあうまかうな゛あういなはとしはほとにはたてあのれもねけてるれしけいてもれきりかすまくきんすいにらg
それぞれ、「開発陣の勢い/厨房のわめき声」をS/N比として定義してみよう。
質の良い方はどっちになるだろう。
Rubyです。
Perlデス
ジサクジエンの粘着基地外は置いといて、、

>>624
実用Perlプログラミング(オライリー)という本の第1章
データリファレンスと無名のメモリ領域
のp.13あたりがそのものズバリの説明なので一度読んでみるとよろし。
Perlは糞
お前らも糞
663デフォルトの名無しさん:02/09/19 17:40
Perlで料理のレシピを登録して、料理名や使用材料で検索できるようなものが作りたいです。
テキストの全文検索は自前でやったことあるけど、こーゆーのはSQLとか使ったほうが楽ですよねー?
SQLの構文自体は分かります。ただ、Perlが初めてなだけで(汗)普段はC++。
664デフォルトの名無しさん:02/09/19 17:54
>>663
ヤット,マトモナシツモンガキター!!
665デフォルトの名無しさん:02/09/19 17:57
>>663
実行環境は?
666663:02/09/19 18:02
実行環境はRedHat6とかでしょうか。
Webで公開するためのCGIサーバは後で用意するつもりなので。
今はWinのActivePerでやります。

オススメの環境とかあれば、便乗させてもらいます。
>>663
なにがアンケート調査CGIじゃ
ヴぉけが
Ruby!Ruby!Ruby!Ruby!Ruby!Ruby!Ruby!Ruby!Ruby!Ruby!Ruby!Ruby!Ruby!
Ruby!Ruby!Ruby!Ruby!Ruby!Ruby!Ruby!Ruby!Ruby!Ruby!Ruby!Ruby!Ruby!
Ruby!Ruby!Ruby!Ruby!Ruby!Ruby!Ruby!Ruby!Ruby!Ruby!Ruby!Ruby!Ruby!
Ruby!Ruby!Ruby!Ruby!Ruby!Ruby!Ruby!Ruby!Ruby!Ruby!Ruby!Ruby!Ruby!
Ruby!Ruby!Ruby!Ruby!Ruby!Ruby!Ruby!Ruby!Ruby!Ruby!Ruby!Ruby!Ruby!
Ruby!Ruby!Ruby!Ruby!Ruby!Ruby!Ruby!Ruby!Ruby!Ruby!Ruby!Ruby!Ruby!
Ruby!Ruby!Ruby!Ruby!Ruby!Ruby!Ruby!Ruby!Ruby!Ruby!Ruby!Ruby!Ruby!
>>666
普段c使ってるならcでやんなよ。
>>663の処理ならコーディングの手間を減らせるメリットと
慣れない言語を扱うことのデメリットを天秤にかけりゃ
そのほうがて手っ取り早い。
670デフォルトの名無しさん:02/09/19 18:28
>>669
まあそうだがRedHatなら定番MYSQL+PHPというのもある。
彼のスレを読んでる限りじゃデータベース使うならどうせ覚えることは多いし
参考書籍はこっちのほうが多い。
671663:02/09/19 18:39
>>669
別に、早く仕上げたいという気持ちは無いです。
半分は勉強目的です。

>>670
MYSQLですか・・・。ちょっと調べてみます。
OSに標準で入ってるか、もしくはどこのプロバイダでも
アクセスを許可しているような感じのものであれば使ってみたいです。

672デフォルトの名無しさん:02/09/19 18:46
>>671
レンタル鯖?
海外なら大抵使えるよ。
自宅に置いてWEBサーバのCGIでアクセスってのもある。
>>671
いずれにせよ、板違いだ。
WebProg板へいきな。
674663:02/09/19 19:00
>>672
海外はまったく考えていなかったです。

WEBサーバのCGIでアクセスするのは面白いかもしれませんね。
処理速度が落ちるとは思いますが、今回の規模ならそれでも十分です。

外部のDBと連携するのではなく、Perlプログラム中に組み込むような
形のデータベースエンジンって無いんですかね?
675デフォルトの名無しさん:02/09/19 19:30
半角カタカナが入力されたらエラーがでるような
チェックサブルーチンを作りたいのですが、
jcode.plを使わずにShiftJISのままで
それを作るにはどうしたらよいですか?
お知恵を貸して下さい。
676デフォルトの名無しさん:02/09/19 19:37
文字コード表とか検索してみ。
677672:02/09/19 19:38
>>674
WebProg板の初心者質問スレにレス移動したのでよろしく。
二度と戻ってくるな。
679和尚:02/09/19 20:54
>>675 純粋な質問だが本気でお知恵を借りたいと思っているのか?
思っているなら貸さないでもないのだが。
680675:02/09/19 20:56
>679
思ってない
681675 ◆iuNtvKQI :02/09/19 21:18
>>679
思ってます?。今もまだ出来なくて調べてました。
0x00A0-0x00DFが半角カタカナのコードらしい、まで調べたのですがそれで
チェックしてみると全角カタカナがチェックの対象になってしまって…

>>680
偽者
>>681
半角カナって1バイトじゃなかったっけ ?
683デフォルトの名無しさん:02/09/19 22:01
ばかばっか
>>682
EUCじゃ2バイトだよ
>>684

仕様書は、ちゃんと読めよ。

>>675
> ShiftJISのままで
( ´_ゝ`)フーン
>>677, >>679, >>683, >>684, >>686
これらの発言は、Perlを憎む某によって書き込まれています
気にしないで下さい

プログラム板のRubyスレとPerlスレ見れば分かる
例えば:http://pc3.2ch.net/test/read.cgi/tech/1028906179/206-
688棄教者 ◆KIKYO7cg :02/09/20 08:30
自治厨うざい。
Perl は WebProg へ逝けというのなら、
CGI に使える言語なら Ruby でも C/C++ でも
WebProg に逝かないといけないね。
神とか漢とか言われてる人は CGI を C で書くでしょ。
>>688
DBIの具体的な使い方の話ならともかく、
cgiサーバがどうしたなんて話は完全に板違い。
690デフォルトの名無しさん:02/09/20 09:58
>>688
PerlにCGI以外の*まともな*使い道ってあるの?嘲笑

ないだろ?ばぁぁか
691デフォルトの名無しさん:02/09/20 10:00
>>690

Perlは結構使えますよ。
こないだ生ゴミ燃やすのに使いますた。
692デフォルトの名無しさん:02/09/20 10:06
>>690
おれは688ではないが、ここはプログラム板だから使い道うんぬんの話だけじゃない。
そういう話こそWebProgやプログラマ板でやればよい。
でも、PerlはCGIの実行に使われるのが多いのも確か。
688は質問者のその辺を理解してやれよ。すぐ板違いというのはちょっとイタイ。
693デフォルトの名無しさん:02/09/20 10:08
>>692
688→689スマソ
>>690
2ちゃんのスレッドをGETしてNNTPにPOSTするというデーモンを動かしてます。
>>690

商用Java Servlet engineのResinで、サーバを起動するのに使うな>Perl
http://www.caucho.com/resin/
696棄教者 ◆KIKYO7cg :02/09/20 10:16
TeX2HTML はどの言語で書かれていますか(プ
Ruby で書かれたプログラムがあったら教えてください
気づいているのか知らんが、WebProg板へ行けとかいっているやつは
自治厨でもなんでもなく単なる荒らしだから相手をするな。
しかもジサクジエンしまくりなので注意。
RD >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> perldoc=糞豚
699  :02/09/20 17:15
IO::File("-");
とやると標準入力のファイルハンドルが作られますが、
同じように標準出力、標準エラー出力のファイルハンドルはどう作るんでしょうか?
700_gunzip:02/09/20 17:56
stdout ">-"
stderr ">&STDERR" ないし $io_obj->fdopen(fileno(STDERR), "w") など
701 ◆JAPH9PWA :02/09/20 19:00
STDIN, STDOUT, STDERRはそれぞれIO::Handleオブジェクトとして扱えるから
require/use IO::Handle;でSTDOUT->print(...)というふうにメソッドを呼んだりできるよ。

# 今更気付いたけど、 "-"や">-"はfdの複製はしないんだね。
PerlはUnix系OSでは根幹部分にも多く使われていて、
それ無しではインストールでも苦労すると思うのだが。
703699:02/09/20 20:08
あ、質問がまずかった。ごめんなさい。
やりたいこととしては
STDERR
を読み込んでそれをもとに処理を行いたいのです。
$io_obj->fdopen(fileno(STDERR), "r")
でいいのでしょうか?
704 ◆JAPH9PWA :02/09/20 20:53
なんだ、そういうことか。
それは「標準エラー出力のファイルハンドルを作る」のとは何の関係も無いよ。
読み込みモードでfileno(STDERR)を開いても望みの結果は得られないでしょ。
やってみれば一発で分かると思うけど。

とりあえずそれをするにはIO::Scalarが使える。Perl5.6じゃないと多分失敗するけど。
#!perl
use IO::Scalar;
my $stderrbuff;
tie *STDERR, IO::Scalar => \$stderrbuff;
warn "warn 1";
warn "warn 2";
die "die";
END{ print $stderrbuff; }
__END__

Version500.5以下だとSTDERRを他のファイルにリダイレクトするしかないかも。
705 ◆JAPH9PWA :02/09/20 20:55
Version500.5 -> Version5.005
706デフォルトの名無しさん:02/09/20 23:01
perlってダサイ
またきみか。
俺がお前らのことをどれだけ憎んでいるかお前らには分かるまい
perlユーザは死ねperlユーザは死ねperlユーザは死ねperlユ
ーザは死ねperlユーザは死ねperlユーザは死ねperlユーザは死ねp
erlユ
ーザは死ねperlユーザは死ねperlユーザは死ねperlユーザは死ね
perlユーザは死ねperlユーザは死ねperlユーザは死ねperlユーザは
死ねperlユーザは死ねperlユーザは死ねperlユーザは死ねperlユーザ
は死ねperlユーザは死ねperlユーザは死ねperlユーザは死ねperlユーザ
は死ねperlユーザは死ねperlユーザは死ねperlユーザは死ねperlユーザは
死ねperlユーザは死ねperlユーザは死ねperlユーザは死ねperlユーザは死
ねperlユーザは死ねperlユーザは
死ねperlユーザは死ねperlユーザは死ねperlユーザは
死ねperlユーザは死ねperlユーザは死ねperlユーザは死ねperlユ
ーザは死ねperlユーザは死ねperlユーザは死ねperlユーザは死ねpe
rlユーザは死ねperlユーザは死ねperlユーザは死ねperlユーザは
死ねperlユーザは死ね
709デフォルトの名無しさん:02/09/21 15:39
Ruby >>>>>>>>>>>>>>>>>>>>>> Perl
webprogに引きこもっているなら許してやる。
プログラム板で糞言語の話をするな!
                          /<<Ruby使い
                         /   _
         /◎)、_______∠l /   /◎ヽ
          |  「....;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;| |,,.   ` -_´/
    .彡⌒ー/|  \___;;;;;;;;;;;;;;;;;;;;;;| |;;;;,   "    i ̄ ̄i
      /´⌒ヽ_____\ ̄ ̄ ̄ .|;;;;;;,      /Ruby ゙、
    ,/´    ! ヲ=℃/ ̄      |;;;;;;;;,     /_,-..‐..-、_゙、
   /_レ‐ー――‐" ̄ ̄)         ヾ;;;;;;;;,,,..  /':::::::::::::::::::::`i
  /    __   r'~ ̄            ヾ;;;;;;;;;;;;,,,.トー――――-!
 /       _)               ヾ;;;;;;;;;;;;;;,,,,....
 |     、  ノ                 ヾ;;;;;;;;;;;;;;;;;;;;;;;;;,,,,....
 ゙、;;;,,..    ̄"                   );;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;.......
どうして、、、、こんなことを、、
rubyユーザさん、、かわいそうな人。
あなたは人から愛されたことが無いのでしょう。
PerlもRubyも使うが、どうして言語をこんなに憎めるのか理解不能。
RubyユーザのふりをしてPerlをののしり、Rubyユーザの評判を落とそうと仕向けている
粘着基地外がいます。放置をお願いします。騙されたり煽られたりした人がいたら
フォローしてあげてください。
715デフォルトの名無しさん:02/09/22 10:17
perlには言語実装としての美意識が全くありません
書かれたコード!それは世にも醜い姿を晒します
悲劇はperlプログラマはそう思っていない事です
あとインタープリタ方式で遅いのによく使っていられることです
サーバの資源を無駄に使うperlを使うのをやめましょう
せめてJava ServletまたはCが書けるようになってください
ちなみに私は 709 ではありません 706です


「インタープリタ方式」(w

「perlプログラマ」(w

「Java ServletまたはC」(w

突っ込みどころ満載だな。
Perl使いこなしてる奴だってこれが
美しいと思って使ってる奴はいないよ。
>>715-716
> Perl使いこなしてる奴だってこれが
> 美しいと思って使ってる奴はいないよ。

そうか ? C 程度には、きれいに書けるよ。確かに、いくらでもぐちゃ
ぐちゃに書けるけど、それって C でも同じだろ ?
718デフォルトの名無しさん:02/09/22 11:06
そんなあなたにDelphiです!!
どんなヴァカでも同じようにしか書けません

COBOLには負けるけどなー
確かにCだって、ぐちゃぐちゃにかけるんだけど、人によるよね。

仮にCを美しいとしたときに、Perlは言語の仕様自体が美しくないと
俺は思うけどな。
美しくないお陰で使い勝手がいい(ことになっている)というか。
>>715
インタープリタ方式で遅いのに=>rubyはコンパイル言語でしたか。
>>719
使い勝手がいい=>上等。
721デフォルトの名無しさん:02/09/22 11:20
#!/usr/bin/perl

study, write, study,
do review (each word) if time.
close book. sleep? what's that?
722717:02/09/22 11:36
>>719
> 確かにCだって、ぐちゃぐちゃにかけるんだけど、人によるよね。
まあね。どんな言語でもぐちゃぐちゃに書く奴はいるのは確か。

> 仮にCを美しいとしたときに、Perlは言語の仕様自体が美しくないと
> 俺は思うけどな。
ほぼ同意。
> 美しくないお陰で使い勝手がいい(ことになっている)というか。
いいか ? まあ、作者はいいと思ってるんだろうからから問題ないけ
どね。
遅いって言われてもなぁ。
グリグリの3DゲームをPerlで作ってるわけじゃないし、、
普通の人はPerlで十分の内容のときにPerlを使い、スピードがほしい時に
C++使ったり用途に分けて使い分けてると思うが。
お前ら釣られすぎ。
725715:02/09/22 15:10
>>723
俺はcgiもCで書くけどね
最近はApacheで動かすmod_isapi Cで遊んでいるよ
726:名前:デフォルトの名無しさん
>>725
だから?

727 名前:715[] 投稿日:02/09/22
>>726
ネタにマジレスカコイイ(・∀・)イイ!



、、、( ノ ≧∇≦ )ノ  ぷはははっ!
CGIをCで書くことは滅多にないなぁ。
もしもポインタ周りのバグがあると大変だし。

PerlとかphpだのCだのは必要に応じて使い分けないと。
728デフォルトの名無しさん:02/09/22 21:11
envp操作して
文字コード周りのめんどうさえみれば
ソケットも自在に使えるし
作ったあと美しい
perlだと軽自動車みたいな品のないコードが嫌い
ポインタとバッファオーバフローのチェックができない
Cプログラマが多すぎるからね
だからそういう人たちのためのperlなんだろうけどね
727は見込みありそうだけど
726は低脳そうだね
Q.具体的にどの辺が美しくないですか?<perl
>>729
> Q.具体的にどの辺が美しくないですか?<perl

switch 文がない。
同じ動作をする書き方のバリエーションが多すぎる。(書き易いけど、読み難い。)
sort() が $a, $b を使ってしまう。
多次元配列が無い。
構造体が無い。
ファイルハンドの扱いが特殊。(通常の変数じゃなくて、独自の名前空間をもつ。)

最近、Perl 使ってないから、今のバージョンだったら改善されているところはあるかもしれない。また、個人の好みによるところもある。とりあえず、今すぐ思いつくのはこんなところ。
まあ、多次元配列、構造体的な役割のものは増改築の温泉宿的に使えなくはないんだけど、
ほとんど同意。

同じ動作のバリエーションが多いっていうところが、
英語圏の人が「こう書けたら便利かなー(もしくは面白いかなー)」と
思って付け加えたんじゃないのか? って感じのところが美しくないんだな。
とってつけたような。
sort が $a, $b を勝手に使うって仕様はかなりびっくらこいた。
構造体もどきではだめ?
某サイトからパクッたサンプルソース
push @persons, { "name" => "tanaka", "age" => 24 };
push @persons, { "name" => "suzuki", "age" => 28 };
foreach $person (@persons) {
print "$person->{'name'} $person->{'age'}\n";
}
734730:02/09/22 22:18
>>732
だよねー。俺もこの仕様が一番違和感ある。

>>733
> 構造体もどきではだめ?
ダメ。メンバの名前間違えても、コンパイルエラーにならないし、構造体の配列とか、
配列を含む構造体とかになると収拾がつかなくなるから。
>>733
常識だよ。リファレンスで多次元配列が無名ハッシュで構造体が扱える。
>>730
switch文なんてifの羅列で十分。gotoもあるけど。
バリエーションが多いから書きやすい=上等。
ファイルハンドルは別のほうが便利。

736デフォルトの名無しさん:02/09/22 22:26
いいぞ。もっとperlを叩け!
>>732
予約語と思えば、、、
おとなしくSwitch.pm(>5.8)使え
Perlは糞Perlは糞Perlは糞Perlは糞Perlは糞Perlは糞Perlは糞Perlは糞
Perlは糞Perlは糞Perlは糞Perlは糞Perlは糞Perlは糞Perlは糞Perlは糞
Perlは糞Perlは糞Perlは糞Perlは糞Perlは糞Perlは糞Perlは糞Perlは糞
Perlは糞Perlは糞Perlは糞Perlは糞Perlは糞Perlは糞Perlは糞Perlは糞
Perlは糞Perlは糞Perlは糞Perlは糞Perlは糞Perlは糞Perlは糞Perlは糞
Perlは糞Perlは糞Perlは糞Perlは糞Perlは糞Perlは糞Perlは糞Perlは糞
Perlは糞Perlは糞Perlは糞Perlは糞Perlは糞Perlは糞Perlは糞Perlは糞
Perlは糞Perlは糞Perlは糞Perlは糞Perlは糞Perlは糞Perlは糞Perlは糞
ばーぁ>>Perler
程度低すぎるよ。この糞スレ。
おとなしくWebProgに逝ったら?
>>714 の指摘があって以来Rubyをほめなくなったね
>>735
> バリエーションが多いから書きやすい=上等。

と言うわりには、switch が無いのが謎なんだなー。

> switch文なんてifの羅列で十分。

と言うなら、for/foreach どっちかにしろよ。ここら辺の、いいかげんさがちょっと嫌い。

> ファイルハンドルは別のほうが便利。

まあ、これに尽きるね。要は、書きやすい事にかなり比重を置いている。これは、これでいいとは思うけど、その分保守はやりにくい。(= 大規模開発にはダメ言語)
従来 awk なんかで書いていたちょっとしたツールや、GCI から呼び出されるプログラムなんかにはなかなか便利。
Ruby >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
俺の中ではforはiを使って繰り返し、foreachは配列の要素をいじる、
って感じで使い分けるので必要。
万人にとって万能な言語なんかないのはあたりまえだが、やっぱり不満はいろいろ
あるもんだな。

Perl は、たしかに書きやすいけど読みにくい。でもそれをわかってて適所に使う
分には良いものだと思う。

あと自分で作るプログラムなら、スタイルを決めて書けばそれなりに保守しやすい
ものにもできる。それなりにセンスや経験はいるかもしれないけど。
747デフォルトの名無しさん:02/09/23 01:54
このすれの人って
いい人多いね
がんばれ
つうか、複数でコーディングする場合って、言語を問わず
コーディングスタイルを統一しないか?普通。
一貫したコーディング規約を維持できればかなり読みやすいと思うんだが<Perl
749デフォルトの名無しさん:02/09/23 13:35
めっちゃ低レベルなプログラムの質問していいですか
スキルがないもんで、、、、
そなこと書かんで早くやれYo
ああ、もう待ちくたびれた。俺はもう答えん。
俺は待ってるよ。どんとこい
753デフォルトの名無しさん:02/09/23 14:42
matsuda math
matsuda hiro
saito masa
saito hiro
inoue maithi
これに
while(<STDIN>){
/(\$+) (\$+)/;
$m = $2;
$m =~ tr/a-z/A-Z/;
print "$2, $1\n";
}
これをやったら
何も出てこないのですよ、
入力をこれ↓に差し替えるといいかも
$$$$$$$ $$$$
$$$$$$$ $$$$
$$$$$ $$$$
$$$$$ $$$$
$$$$$ $$$$$$
これでOK?

while(<>){
  /([^ ]+) (\w+)/;
  my ($fam, $name) = ($1, $2);
  $fam =~ tr/a-z/A-Z/;
  print "$name, $fam\n";
}
756デフォルトの名無しさん:02/09/23 14:58
>>756さん
ありがとうございます
STDINを抜くっていうのは何かしら利点があるのでしょうか
後二行めがよく分らんです、、、
勉強不足ですいません、、、
正規表現については自分で調べてください。
[^abcd]はabcd以外 \wはワードマッチ
758a5:02/09/23 15:04
どうもありがとうございました。
sage忘れてました、
申し訳ありません
使用可能文字:半角英数
最大文字数:20桁

を全て表示するプログラムを教えてください!!
おながいします!!
760デフォルトの名無しさん:02/09/23 19:44
馬鹿まるだしだな
セキュ板にでも帰れ
もしくは隔離板(php板)へどうぞ
>>759
> 使用可能文字:半角英数
> 最大文字数:20桁
> を全て表示するプログラムを教えてください!!

最大文字数って何のだ ? 表示幅のことか ? だったら...

print "0123456789ABCDEFGHIJ\n";
print "KLMNOPQRXTUVWXYZabcd\n";
print "efghijklmnopqrstuvwxyz\n";

でいいと思うが。
perl -e "print A .. Z, a .. z, 0 .. 9"
RubyユーザのふりをしてPerlをののしり、Rubyユーザの評判を落とそうと仕向けている
粘着基地外がいます。放置をお願いします。騙されたり煽られたりした人がいたら
フォローしてあげてください。
764747 ◆VaEdQZq. :02/09/24 00:24
みんな
HTMLタグをperlに埋めるときどうしてるの?
エディタでごりごり書くの?
それが知りたいYO
>>764
ゴリゴリは書かん。
1.テキストエディタでブリブリ書く。
2.HTMLエディタでプリプリ書き、
  print <<XXXXX のところにペーストする。
766747 ◆VaEdQZq. :02/09/24 01:01
>>765
なーる
だるい方法でがんばってるんだね
printのところにペーストするときって
結構コマイ作業で悲しくなったりしない?
変換するツールとか使ってないの?
なんで?

print <<'EOF'

hogehoge

EOF

でいいじゃん。
769765:02/09/24 01:15
全然関係ないけど << って普通に書き込めるんですね
Aboneで下が化けたもので全角にしてしまった。
print <<XXXXXXX
770747 ◆VaEdQZq. :02/09/24 01:32
>>768

タグ変換ツールどこにあるの?
HTMLをデザインしたら
ごそっとprint文にはさんでくれるようなつーるって無いの?
リンク先みたかぎりじゃないようだけど
まっとうなエディタ使って頭使えば
そんなツールは要らんけどね。
>>770
そのままペーストすればいい、変換する必要ない。
print <<XXXXX
<HTLM>
<HEAD>
うんたらかんたら
</HEAD>
<BODY>
ちんらかんたら
</BODY>
</HTML>
XXXXX;
間違った下記ね
print <<XXXXX;
<HTLM>
<HEAD>
うんたらかんたら
</HEAD>
<BODY>
ちんらかんたら
</BODY>
</HTML>
XXXXX

ようは、print <<XXXXX; から XXXXX までをそのまま標準出力してくれる。
>>773
そっか
perlだとごそっとこぴぺできるんだ
perlの美点があったじゃない
Cだとprintf("<html>...............</html>");
にはさむから長くなると醜くなるからある程度で細切れにしないと
いけないその点perlのほうがよいね
>>774
これを美点と見るかどうかは人それぞれ。
まぁPerlはsed,awkやらから受け継いでる部分もあるし。
777デフォルトの名無しさん:02/09/24 02:04
>使用可能文字:半角英数
>最大文字数:20桁

>を全て表示するプログラムを教えてください!!
>おながいします!!

ん?全ての組み合わせって事か?
パスワードでもクラックするのか?(藁
778777:02/09/24 02:25
ちなみに漏れは分からんがな・・・。
ヘタレなのでsage
>>778
簡単だよ。
print "00000000000000000000\n";
print "00000000000000000001\n";
print "00000000000000000002\n";
   :
   :
print "zzzzzzzzzzzzzzzzzzzy\n";
print "zzzzzzzzzzzzzzzzzzzz\n";
780777:02/09/24 02:38
一桁からって事じゃないのか?
print "0\n";
print "1\n";
print "2\n";
   :
   :
print "a\n";
print "b\n";
   :
   :
print "zzzzzzzzzzzzzzzzzzzy\n";
print "zzzzzzzzzzzzzzzzzzzz\n";

まぁ、どちらにしても漏れには分からん。っていうか質問が意味不明だYO!!
ていうかfor文をいっぱい使うだけだろ。。
>>777-781
あんたらがこの板を見てる理由がサパーリわからん
783デフォルトの名無しさん:02/09/24 09:42
>>774
リテラルに設定しておけばいい。
printfでだらだら書くなど愚の骨頂。
Perl2exeで変換の仕方どうスルんですか?
785デフォルトの名無しさん:02/09/24 11:11
#!/usr/bin/perl
#main()
{
  ....
  ....
}

と、c言語風に書く俺は邪道ですか?
こういうインデントがついてないと読みづらいから。
786デフォルトの名無しさん:02/09/24 11:41
>>782
ここは質問箱だろ。疑問を投げかける前に質問に答えれ!!
>>785
どうせなら
sub main(@)
{
   blah blah blah...
}
unshift @ARGV, $0;
main @ARGV;
VisualPerlって VisualStudio.NETいれないと使えないの?
789デフォルトの名無しさん:02/09/24 13:05
>>787
それいいですね、今度から使わせてもらいます。
790デフォルトの名無しさん:02/09/24 13:40
perlではハッシュの値としてリストを突っ込む事はできないんですか?
程度の低い糞スレ
それを見てるお主も糞尿
フンニョーッ!!! キャハ★

>>790

$hoge{abc} = [0, 1, 2, 3];
みたいな。

んで、
@list = @{$hoge{abc}};

みたいな。
794棄教者 ◆KIKYO7cg :02/09/24 16:34
八種のリファレンスだよね。
リファレンスになってるのは配列で、
ハッシュの値が配列のリファレンス。
Java ServletもServlet engineをちゃんと選ばないと遅いよ。
FFのサイトはTomcatつかってたけどありゃアホだね。
Perlにswitchが無いのはLarryの趣味というかポリシーを反映した結果だよ。

if .. then .. else ..とかは英語的に読むことができるが、
switchは唐突に分野の違う言葉だからキモイ

みたいなことをカンファレンスで言ってた
798790:02/09/25 12:07
>>793さん
ありがとうございます。昨日からPerlを使いはじめたばかりで
あたふたしていました。リファレンス使えばよいんですね。
799棄教者 ◆KIKYO7cg :02/09/25 14:11
>>797
Perl はぼくの好きな言語だけどたまに開発者の趣味が露骨に現れるから嫌い
C に似せてあるくせに break; が last; になっていたり、
continue や next のあたりの名前の付け方が違う。
一ヶ月に一度は last を break と書いて半日潰す。
禿同。

便利なんだか不便なんだかね。入り口が入りやすいだけに。

あと、これを書くと荒れるのかもしれないが、
オブジェクト指向の実装が微妙にヘンなのもなあぁ。

どうせとってつけたようになるんだから
Objective Cみたいなカッチョエーのにしてほしかったな。
>>797
> if .. then .. else ..とかは英語的に読むことができるが、
> switchは唐突に分野の違う言葉だからキモイ
> みたいなことをカンファレンスで言ってた

それは、そうだが普通の人には perl の構文の方が唐突に分野の違う言葉ではないかと...。
802デフォルトの名無しさん:02/09/25 22:10
Perlについて質問です。

$a1 〜 $a10 までの関数があるとします。
これをforループなどで全ての関数に対して同じ処理をしたいと思います。
$a$i ←このようなイメージです。$iを1〜10まで変化させるわけです。
このような場合、どのような記述をすればよいのでしょうか?
>>796
FF のサイトってファイナルファンタジーの公式サイト? そりゃ Tomcat じゃ
無理だろ。っていうかそれは道具の選定を間違ってるだけで道具に罪はない。
>>802

関数? 変数じゃなくて?
805デフォルトの名無しさん:02/09/25 22:43
>>804
すみません。変数でした。
それは、 ${"a$i"} こんなふうにかいてたとえば

for ($i = 1; $i <= 10; $i++) {
print ${"a$i"} . "\n";
}

こんなふうにできなくはないんだけど
配列変数を使うように全部書き直したほうがいいと思うよ。

応用の利くテクとしては

for ($i = 1; $i <= 10; $i++) {
eval("print \"\$a$i\\n\";");
}

とかも。
807デフォルトの名無しさん:02/09/25 23:18
>>806
どうもありがとうございました。
808 :02/09/25 23:57
なぜ配列を使わない?
809デフォルトの名無しさん:02/09/26 00:34
>>808
>>806 さんの言われた通りに配列を使ったプログラムに書き換えました。
810デフォルトの名無しさん:02/09/26 00:54
>>809
ズコー
811棄教者 ◆KIKYO7cg :02/09/26 08:33
sub func0 { .... };
sub func1 { .... };
...
sub func9 { ... };
に対して、
@funcref = ( \&func0, \&func1, ..., \&func9 );
てすることで、

foreach( @funcref ) {
  &{$_}( @arguments );
}
とすれば、複数の関数に対して一括処理を行うことができます。
なお、 @arguments というのは &func0, &func1, ..., &func9
に食べさせたい引数です。
812棄教者 ◆KIKYO7cg :02/09/26 08:35
漏れは C のポインタの概念がわからなくて苦労しましたが、
Perl のリファレンスを使っているうちに逆に C のポインタが理解できるようになりました。
まんせー。
>>812
お、すげー。
>>812
すごすぎ
僕の目標です
>>806
for $i (0 .. 9) {
$a_ref = "a$i";
print $$a_ref, "\n";
}
でもいいでしゅか?
>>801
んー気持ちはわかる。
事実折れもCで書いてる時間違ってlastとか書いちゃうことあるし。

んでもそこを突くのはちょっと違うような気もする。
「同じようなニュアンスで使える」別の言語なんだもん。
他の言語に慣れてるなら perltrap.podを声に出して熟読は必須でしょ。
http://www.perldoc.com/perl5.8.0/pod/perltrap.html
817デフォルトの名無しさん:02/09/26 12:22
サブルーチンAの引数にサブルーチンBを指定して
使いたいんですがどうにもうまくいかないようで・・・・。
どうやればよでしょうか?アドバイスお願いします。

sub FuncB
{
  #.............
}

sub FuncA
{
  $Func = $_[0];  #?
  &{$Func}();    #?
}

&FuncA(FuncB);   #?
>>812
perl のリファレンスは宣言がない分、文法的にすっきりしていると思ふ。
>>817
ヒント。 >>811
820817:02/09/26 12:52
>>819
どうもです。
821デフォルトの名無しさん:02/09/27 00:20
Windows98SEでFile::findを使ったプログラムを書こうとしているのですが、
「ソ」「予」「能」などの文字が入ったディレクトリ名だと、そのディレクトリ以下を
検索してくれません。
原因は、Shift-JISの2バイト目にバックスラッシュ文字が入っているためだと思うのですが、
これを回避するためのFile::findに対するパッチなどはありますか?

使っているperlは、ActivePerl5.6.1 BinaryBuild 633です。
822デフォルトの名無しさん:02/09/27 11:44
>>821
パッチはないと思う。
自力で\x5cを追加しておくれ。
>>821
jperl使ったら?
ラクダ本新しいの買った?なんで洋書の2倍の厚さと値段で
同じページ数なのyo!
(洋書の方が紙が薄い)
PerlerはCurlをやれば
もう馬鹿にされない(と思う)
がCurlが主流にならなければ馬鹿にされてしまう
>>824
策略
827スンスンブラクラできたよー(・∀・):02/09/27 22:45
@sun = ('スン','スーン','( ゜Д゜)ハッ');

for ($sunn=0; $sunn<1; $sunn--){
   $sn = "$sun[0],$sun[1],$sun[0],$sun[2]\n";
   print "$sn\n";
}
ブラクラの意味すら知らんのか。
Curlに誰も反応しないところが
Perlerなんだよな
だからDel厨やその他でPerlよりはいいよなとか言われてまうやないけ
もう氏ねとは言わせるなPerler立ち上がれ

http://curl.fc2web.com/

自作自演ですか?
curlは絶対に、はやらない
832スンスンブラクラできたよー(・∀・):02/09/27 22:56
>>828 いや、実行してみたらそんな気分になったわけで…
    止め方がわからないわけで…
    
>>829
Curl は終わっている言語だし。
>>833
アフォ
でてきたばかりで終わってるはないんじゃないの?
だいたい833は言語仕様の概要程度でもいいから知ってるの?
もちろん漏れは知らないけどね
>>834
ていうか2chのスレでは去年の夏ごろにおまえの紹介した
ホームページそのままの内容がコピペされてるだろうが。

ということは、それから一年以上もまったく更新のされていないページを
おまえはこのスレッドで紹介したことになる。

そんな言語を「死んだ」言語だといって何か問題があるのか?
836デフォルトの名無しさん:02/09/28 13:51
>>824
日本語版出たのかっ?!
837デフォルトの名無しさん:02/09/28 13:54
@sun = ('スン','スーン','( ゜Д゜)ハッ');
$"=',';

while (1) {
   print "@sun\n";
}
838スンスン:02/09/28 15:30
@sun = ('スン','スーン','( ゜Д゜)ハッ');

foreach (@sun){
print "$_";
}
839デフォルトの名無しさん:02/09/28 15:43
@sun = ('スン','スーン','( ゜Д゜)ハッ');

foreach (@sun) {
  print;
}
print foreach ('スン','スーン','( ゜Д゜)ハッ');
841デフォルトの名無しさん:02/09/28 16:03
>>840
そんなことできんの?
842デフォルトの名無しさん:02/09/28 16:04
print join ',', @sun;
843スンスン:02/09/28 16:30
$sun = 'スン';
@suun = ('スーン','( ゜Д゜)ハッ');

$surn[0] = $sun . $sun . $suun[0];
$surn[1] = $sun . $sun . $suun[0] . $suun[1];

foreach (@surn){
print "$_\n";
}
844837へ。:02/09/28 19:32
@sun = ('スン','スーン','( ゜Д゜)ハッ');
$"=',';

while (1) {
   print "@sun\n";
}
を10回繰り返すにはどうすればいいの?
for文にするなりカウンタ変数つけるなりすりゃいいじゃんか…
for( $i = 0; $i < 10; $i++ )
{
  @sun = ('スン','スーン','( ゜Д゜)ハッ');
  $"=',';

  while (1) {
     print "@sun\n";
  }
}
>>836
日本語フォント対応 2002/9予定
IDE 2002/12予定
日本語マニュアル Curl Programming Bible翻訳版 2002/12予定
だそうだ
お前見込みあるよ
@sun = ('スン','スーン','( ゜Д゜)ハッ');

print "何回スンスンしまっか?>";
$un= <STDIN>;

for ($suun=0; $sunn<$un; $count++){
  print "$sun[0]$sun[0]$sun[1]$sun[2]\n";
}

849棄教者 ◆KIKYO7cg :02/09/29 00:16
>>848
for 文は
for( $suun = 0; $suun < $un; $suun++ ) { # $count++ じゃない
でしょ。
>>849 2日前にやり始めたんで何が違うかわかりま千。

851棄教者 ◆KIKYO7cg :02/09/29 10:43
$count と $suun の違い。
852デフォルトの名無しさん:02/09/29 12:05
すいません、アクセスカウンターを作ろうと、入門書をよみながらコードを書いたのですが
いざCGIファイルを開いてみると、サーバーエラー、となってしまいます。
何が問題かさっぱりわかりませんコードは↓です

#! c:/perl/bin/perl

# カウントファイルの読み込み
open(IN, "<C:\Apache\htdocs\tendays\count.dat");
$count = <IN>;
close(IN);

++$count;

# カウントファイルへの書き込み
open(OUT, ">C:\Apache\htdocs\tendays\count.dat");
print OUT $count;
close(OUT);

# ヘッダー・HTML出力
print <<END;
Content-type: text/html

<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\">
<html>
<head><title>あくせすかうんたぁ</title></head>
<body>
<p>あなたは・・・・・$count番目の訪問者です。</p>
</body>
</html>
END
853852:02/09/29 12:07
すいません、コードのコピペ間違えました

#! c:/perl/bin/perl

# カウントファイルの読み込み
open(IN, "<./count.dat");
$count = <IN>;
close(IN);

++$count;

# カウントファイルへの書き込み
open(OUT, ">./count.dat");
print OUT $count;
close(OUT);

# ヘッダー・HTML出力
print <<END;
Content-type: text/html

<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\">
<html>
<head><title>あくせすかうんたぁ</title></head>
<body>
<p>あなたは・・・・・$count番目の訪問者です。</p>
</body>
</html>
END
854>>37じゃねーけど:02/09/29 12:12
>>853
悪いことは言わんから、黙って WebProg 板へ行け。そっちの方がまともな回答が得られるぞ。
次スレはいらないぞ。
続きはWebProgへいけ
二度と戻ってくるな。
857デフォルトの名無しさん:02/09/29 12:33
「超」がつく程の糞言語 = Perl
print "何回スーンしますか?";
print (("スン スーン ( ゜Д゜)ハッ\n") x <STDIN>);
perlはVBよりも糞なんですか?
はい、糞です。
↓次、どうぞ
861デフォルトの名無しさん:02/09/29 13:22
Ruby愛甲!
perlはHSPよりも糞なんですか?
863デフォルトの名無しさん:02/09/29 13:32
いぇs
はい、糞です。
↓次、どうぞ
>>853
勘で、、
count.dat のパーミッションに w 入れてる?
パーミッションに(w
867デフォルトの名無しさん:02/09/29 16:43
サーバはunix系じゃないのか
アレがapacheだったらログ見ればある程度分かりそう
868デフォルトの名無しさん:02/09/29 16:47
>>862
rubyプログラミングしたことないのに、ruby愛好家なのか
869棄教者 ◆KIKYO7cg :02/09/29 18:54
>>852
c:/perl/bin/perl
が変。
おたくのプロバイダーのCGIの説明書を読んで、
Perl のパスがどこにあるかを確認してください。
この件に限っては、荒らしが書いているとおり、 WebProg 板に逝った方が
親切な回答が得られそうです。
870862:02/09/29 19:41
>>868 まちがったんなら訂正してくれよ。

とりあえずperlやめる。買った本も理解したんで。HSP以下の言語らしいし。
>>863 >>864 ← 二人もそういっているし。
CGIは始めっからやる気ないし。
はじめたりやめたりするほどご大層な言語じゃなかろう?
使う用事がないならさいしょっから無駄なことしなけりゃいいのに。
人生そんなのの繰り返しなんだろうなこの人。
872 :02/09/29 20:00
perlって、管理に使うとウマー。
一般ユーザアプリにはあんまり使えないけど、
それは糞だからというわけではなく、
適材適所名だけ。
HSPも管理にはつかいづらいんじゃない?
使ったことないからわからないけど。
873854:02/09/29 20:41
>>869
> この件に限っては、荒らしが書いているとおり、 WebProg 板に逝った方が
> 親切な回答が得られそうです。

俺って、「荒らし」だったんだ...。
で話変わるけどさ
Apacheで使える
mod_なんたらのperlってあるのか貴様ら
IISはActivePerlだっけ?
多少速くうごくやつあるよね
って聞く態度じゃないなあ
大きめのログファイルを末尾から一行ずつとりだすのに<>を使う方法ってないですか?
877デフォルトの名無しさん:02/09/30 02:20
先頭から読むのと同じようにはできないね。
http://www.din.or.jp/~ohzaki/perl.htm#File_Reverse
878デフォルトの名無しさん:02/09/30 07:36
@lines = `tail hoge`
一行づつ読んでくるのは大変かも
単純に一回全部読み込んで、逆順で取り出すなら楽だろうけど
"大きめの"ってのがどれくらいかにもよるわな。
>>876
そんなニーズはほとんどないから無理。
素直に後ろからシークしていけ。
881デフォルトの名無しさん:02/09/30 13:24
質問です。
携帯でも書き込み可能な掲示板で、PCとかiMなどの端末表示をしたいと思っています。

 #$modeを文字に変換
if($mode == 1){$tanmatsu = "iM"};
if($mode == 2){$tanmatsu = "JS"};
if($mode == -1){$tanmatsu = "EZ"};
if($mode == -2){$tanmatsu = "DX"};
if($mode == 0){$tanmatsu = "PC"};

 # タイムスタンプ生成
($sec,$min,$hour,$mday,$mon) = gmtime($gtime+$TIMEZONE*3600);
$timestamp = sprintf("%02d/%02d %02d:%02d <%s>",++$mon,$mday,$hour,$min,$tanmatsu);

$tanmatsuに端末の略称を入れて、$timestampに付加して表示させようとしてるのですが、
<%s>の部分だけごっそりなくなって表示されてしまいます。
どうすればいいのか教えて下さい。
$mode の値がなにかわからんけど、独立したif文にしないで elsifとelseも
使って書かないとデフォルト値を $tanmatsu にセットすることもできんのじゃ?
883881:02/09/30 13:53
>>882
んー、その前にこんなのがあるから、こんな風に書いてみたんですけど…。

 # ---ブラウザ種別をチェック(iモード:1 EZインターネット:-1 PメールDX:-2 J-Sky:2 その他:0 )
$user_agent = $ENV{'HTTP_USER_AGENT'};

if($user_agent =~ /DoCoMo\//) { $mode = 1; }# iモード
if($user_agent =~ /UP\.Browser\//) { $mode = -1; }# EZインターネット
if($user_agent =~ /PDXGW\/\d\.\d/) { $mode = -2; }# PメールDX
if($ENV{'HTTP_X_JPHONE_MSNAME'} ne '') { $mode = 2; }# J-SkyWeb (Ver3.10)

                                   # PDAモード(ザウルス・コミパル・Dialo)
if($user_agent =~ /sharp pda browser/ || $user_agent =~ /Dialo/) { $pda = 1; }
884 ◆JAPH9PWA :02/09/30 14:02
>>881
<hoge>がタグのように見えるから。
どうすればいいのかはHTMLの基礎を学んでください。
885882:02/09/30 14:02
>>883
それなら変数$mode を使わずに直接 $tanmatsu にセットしたら?

if($user_agent=~ /DoCoMo/i){ $tanmatsu= 'iM'; }# iモード
elsif($user_agent=~ /UP\.Browser/i){ $tanmatsu= 'EZ'; }# EZインターネット
elsif($user_agent=~ /PDXGW/i){ $tanmatsu= 'DX'; }# PメールDX
elsif($ENV{'HTTP_X_JPHONE_MSNAME'}){ $tanmatsu= 'JS'; }# J-SkyWeb (Ver3.10)
elsif($user_agent=~ /sharp pda browser|Dialo/i){ $tanmatsu= 'PDA'; }
else { $tanmatsu= 'Other'; }
886881:02/09/30 14:05
>>884
タグと認識されて消えてるってことですか。
わかりました、学んでみます。
ありがとうございました。
887881:02/09/30 14:09
>>885
配布してるCGIに手を加えてるんですけど、他にも$modeってたくさん使ってるので…。w
その部分に$modeと$tanmatsuを2つ書けば済む話なんですけど、
あとで修正箇所が分かりやすいように、別に書きました。
888デフォルトの名無しさん:02/09/30 14:21
>>880
ニーズはあると思うが、、
>>888
あんたにとってはだろ

サイズ(データ全体)の分からないものの末尾から処理出来るわけ無いじゃん
>>889
perl -e 'print reverse <>'
891881:02/09/30 14:47
試しに>>881
$timestamp = sprintf("%02d/%02d %02d:%02d <%s>",++$mon,$mday,$hour,$min,$tanmatsu);
これを、
$timestamp = sprintf("%02d/%02d %02d:%02d %s",++$mon,$mday,$hour,$min,$tanmatsu);
に直してやってみたんですけど、まだ表示されません。

>>884さんの理由であってるんしょうか?
sprintf("%02d/%02d %02d:%02d $tanmatsu",++$mon,$mday,$hour,$min);
でホントに $tanmatsu に値が入ってるか確認。
>>889
>>890

プ
895881:02/09/30 14:58
>>893
ありがとうございます。
それでも出ないですね。^^;

もしかしたら、$timestamp変数を代入する所ではなく、実際表示する部分(?)で何か細工があるのかな?と思ってみたり…。
>>895
おまえ意図的にレスを飛ばしてないか?
if文ですべて式が真じゃなくて偽だから値がセットされてないことに気づけ馬鹿。
897881:02/09/30 15:07
>>896>>882(?)
一度は「elseif」を使った文も試してますよ。
でも、配布されてるCGIソース(>>883の部分)が正しいから、なくてもできると思ったのですが…。
elsifよりも最後のelse。または$tanmatsuを初期化しとけってこと。
899881:02/09/30 15:14
>>898
初期化しても、何も出ないっす。
やっぱり、おそらく表示する所で何かあるのか…。
「CGI は Web プログラミング板へ。」って
書いてあるのにしつこくしつこくCGIの話をここでしようとするってのは
どういうつもりなのかね。

901881:02/09/30 16:14
>>900
すいませんでした。
>>889
なんでニーズと技術的な話を混同させて話してるの?
903デフォルトの名無しさん:02/09/30 19:07
889さんは房なんだから、いじめちゃかわいそうだよ。。。
904デフォルトの名無しさん:02/09/30 19:20
ちなみに、while <>の逆順処理はforeach revese <>で可能。ただし、少し重い。
905K:02/09/30 19:48
教えてください。
-fとか-dでファイルが実在するかどうかをチェックするさいに、その大文字、小文字を
区別しないようにしたいのですが、なにかよい方法はありませんでしょうか。
どのような関数を書けばいいのでしょうか?すみませんが教えてください。
大文字・小文字を区別しないシステムならそれでチェックできると思うが
907デフォルトの名無しさん:02/09/30 20:10
>>906
糞は黙ってろ
908デフォルトの名無しさん:02/09/30 20:11
>>905
それ難しいかもね。
てゆうか、ディレクトリ中にあるファイル名全部出してきて、
そのリストに対して比較するしか無いような気がする。
他にやり方あったら誰か書いてよ
>>908
それが一番スマートだな。

sub is_exists_file_in {
 local *DIR;
 opendir DIR, shift or return;
 my %file = map { lc, $_ } readdir DIR;
 closedir DIR;
 return map $file{$_}, grep $file{$_}, map lc, @_;
}

ファイル名を一文字ずつバラして正規表現組み立てるってのも
考えついたが、明らかに上に挙げた例の方が分かり易かろう。
910デフォルトの名無しさん:02/09/30 21:43
初めて質問させていただきます。
sendmailで自動的にメールを送ります。
Windowsに送ると読めて,Macに送ると化けてしまうって時,
原因はどういったかんじでしょうか?

縺九i縺ョ縺疲ウィ譁・「コ隱阪Γ繝シ繝ォ
こんなかんじ。
>>909
その糞コードは、わざとか?
912デフォルトの名無しさん:02/09/30 22:06
911=906
>>912
いや、907=911
914デフォルトの名無しさん:02/09/30 22:53
コードがわからないと原因なんてわからん
915K:02/10/01 00:20
>>909
どうもありがとうございます。
すみまんせが良く分からないのでさらに質問させてください。
これだと、ファイル名がFoo/hoge/AAA.gifとかいうようにディレクトリ階層が
何個かある場合にもうまくいくのでしょうか???Foo/hoge/AAA.gifというのを
引数で与えた場合にも例えばfoo/Hoge/Aaa.gifというファイルが実在していれば
trueを返すような関数がほしいのです。。。すみませんご教授ください。
916デフォルトの名無しさん:02/10/01 02:17
すごいね。Perlスレなのに1000行きそうだね。
917デフォルトの名無しさん:02/10/01 02:36
Perlのコンパイラって作れませんか?
Perl2exeみたいな偽者じゃなくて。
Perlcc
gpc
sub is_exists_file {
  my @path = split m|/|, shift;
  pop @path if $path[$#path] eq '';
  if ($path[0] eq '') { $path[0] = '/' }
  elsif ($path[0] !~ /^\.+$/) { unshift @path, '.' }

  my $path = shift @path;
  defined(($_) = is_exists_file_in($path, $_))
    ? ($path .= '/' . $_)
    : return
      for @path;

  return $path;
}

ところでこのコードがやってることは当然理解してるよな?
-f や -d 一発で済むところを、わざわざ重そうな処理を加えるんだ。
大文字小文字の区別をしないのがそれほど重要なことか、
もう一度考えた方がいいぞ。
921デフォルトの名無しさん:02/10/01 22:42
readでファイルからバイナリデータを読み込ませたいのですが
0x19,0x1D,0x1Eが正常に認識されないみたいなのです。
printで表示した場合、

0x19 … 表示されず
0x1D,0x1E … 違う値が表示される

となります。
何故なんでしょうか?
違う値ってどういうのが?
923デフォルトの名無しさん:02/10/01 23:13
コードをかけ
924デフォルトの名無しさん:02/10/01 23:17
>>922
read(FILE,$data,2);
$num =unpack("n",$data);
print $num;

これを実行した時に
0x1A … 表示されず
0x001D … 173
0X001E … 174
と表示されてしまいます。

訂正:>>921で、"0x19 … 表示されず"と書きましたが0x1Aの間違いでした。
>>924
unpackの使い方がそれでは、、、結局どういうかたちで取得したいの?
文字? 文字コード?
926kalma ◆eRZ2quxw :02/10/01 23:34
>>925
ネットワークバイトのshort型整数をファイルから取得したいのですが…
やり方が間違っているのでしょうか?
二次元配列に対してsplice関数を使用するにはどうすれば?
>>927
例えば、こんなこと?
$ar[0][0]="00";
$ar[0][1]="01";
$ar[1][0]="10";
$ar[1][1]="11";
$ar[2][0]="20";
$ar[2][1]="21";
splice(@ar,1,1);
for $i (0 .. $#ar) {
@tmp=$ar[$i];
for $j (0 .. $#tmp) {
print "$ar[$i][$j]\n";
}
}
>>924
binmode FILE;
じゃないか?
930928:02/10/02 12:08
>>927
for(@ar) {
print "@$_\n";
}
でもいいよ。要するに無名配列は配列へのリファレンスってこと
わきまえてりゃどうやってもいい。
>>928
@tmp=$ar[$i]なんてやる必要ない。
for $j (0 .. $#{$ar[$i]}) {
ってしる。
932デフォルトの名無しさん:02/10/02 22:40
>>929
binmodeは設定しています
一体何が悪いんでしょうか・・・
933デフォルトの名無しさん:02/10/02 22:52
0x1Aの問題はMS-DOSのEOFコードが0x1Aだからだと判りました。
これの回避法ってあるんでしょうか?
934デフォルトの名無しさんぺいです:02/10/03 01:05
tr/\x1a//d;
誰か、NamazuでZipファイルの中身を検索するフィルタを書いた人いないの?
gzip, bz2用はあるのに、zipのはないんだよねえ。
936デフォルトの名無しさん:02/10/03 03:17

●●●●●●●●「オセロさえ納期内に作れない=OO役立たず 」祭り●●●●●●●
/|         |  |_____ΦΦΦΦΦΦΦΦΦΦΦ||ΦΦΦ
  |         |  | ̄ ̄ ̄ /|                    ||
  |         |  |   / /|TTTTTT   TTTTTTTTTT||TTTTT
  |        /\ |  /|/|/|^^^^^^ |三三| ^^^^^^^^^^^||^^^^^^^
  |      /  / |// / /|
  |   /  / |_|/|/|/|/|
  |  /  /  |文|/ // /
  |/  /.  _.| ̄|/|/|/         Λ_Λ
/|\/  / /  |/ /           (___)
/|    / /  /ヽ            /〔 非OO 〕〕つ
  |   | ̄|  | |ヽ/l            `/二二ヽ
  |   |  |/| |__|/   Λ_Λ     / /(_)
  |   |/|  |/      ( ´∀`)   (_)    Λ_Λ
  |   |  |/      // /  ^ ̄]゚        (`   )
  |   |/        ゚/ ̄ ̄_ヽ         ⊂〔〔 非OO 〕
937 ◆hMJAPH9PWA :02/10/03 10:00
>>933
出力用ファイルハンドル(例だとSTDOUT)もbinmode()してる?
多次元配列の同じ場所を何度も参照するときには、
その値をローカル変数にコピーした方が効率がいい?
それともヘタに変数を増やすとメモリを喰って効率が落ちる?

# 1
if($array[0][0][0] == 0) {

} elsif($array[0][0][0] == 1) {

} elsif($array[0][0][0] == 2) {

}

# 2
my($copy) = $array[0][0][0];
if($copy == 0) {

} elsif($copy == 1) {

} elsif($copy == 2) {

}
939厨房:02/10/03 15:43
本を見ながらPerlを勉強してるのですが、
環境がUNIX?でないせいか(WinでActivePerl+httpdでやってますが)
本の通りに書いても<STDIN>で入力できません(?

上記の環境で<STDIN>を使ったスクリプトを試すにはどうしたらよいでしょうか?
940棄教者 ◆egKIKYO7cg :02/10/03 16:02
>>939
MS-DOSプロンプトを起動して
C:\>perl -v
って入力してみてください。
なんか出てきましたか?
941厨房:02/10/03 16:28
>>940
This is perlうんちゃら…って出てきますが…?
リファレンスについて質問。

sub test {
 my(@array) = (1,2,3);
 $hash{'a'} = \@array;
 return;
}

@array[0]は当然null。
$hash{'a'}->[0]は1。

なぜこうなるのかが分かりません。
>>942
変数名は実際の「値」に付いている「名札」に過ぎず、
「値」自身はそれを参照する「名札」が全部消えるまで
メモリに残っているから。

その例だと test の中で (1,2,3) という各「値」に @array という
「名札」を付けている。@array は my で宣言されている「名札」なので
test の中でしか使えないが、$hash{'a'} という「名札」は
グローバルな「名札」なので、test のスコープから抜けた後でも
(1,2,3) という「値」を見る為に使える。

詳しくは「ガベージコレクション (GC)」「クロージャ」
「リファレンス (参照) カウンタ」といった単語で調べて。
>>943
>>942じゃないけど、明解レスありがと。
漏れも質問に答えてんだけど、質問者からの感謝がないのが
このスレの特徴かな。
945棄教者 ◆egKIKYO7cg :02/10/03 18:10
>>941
OKです。
UNIXで勉強するPerlの本にはコマンドプロンプト云々と書いてありますが、
MS-DOSがそのコマンドプロンプトになっています。

たとえば
---data.txt----
unko
chinko
manko
-------------
という三行のファイルを用意して
---hoge.pl----
while(<STDIN>) {
 print $_;
}
-------------
という Perl スクリプトを用意して
C:\>perl hoge.pl < data.txt
してください。
これで後は厨学生程度の大脳があれば STDIN は理解できるはずです。
厨学生程度の大脳があればコテを使わず
WebProg板にでも誘導するんだがな
947 ◆hG4XfSMGTg :02/10/03 18:21
糞コテは死ね
948 ◆hG4XfSMGTg :02/10/03 18:24
固定ハンドル=低スキル
荒らさないで!
950 ◆hG4XfSMGTg :02/10/03 18:26
次スレは立てるなよ。WebProgにでも引きこもっていてくれ。
次スレ立てても良いけど自称「厨房」なんてのの相手はしないで欲しい。
あと、perldoc読めば済むような話を色々解説するのもどうかな。
次スレを立てるのは禁止。
はい決まった。
糞Perlユーザの分際でスレッドなんか立てるなよ糞馬鹿
用事がないなら見なけりゃいいのになんでわざわざ出てきていらんこと書くのかな。
お呼びじゃないってやつですね。
おまえがな。ぷぷぷ
次スレは絶対に立てるなよ。荒らした上で削除依頼出すからな。
>>944
お礼が欲しけりゃ余所に逝け。二度と出て来るな。
これは次スレ絶対立ててくれという依頼ですか? プ
Ruby >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Perl
ぷぷぷ
反論したいか?反論したいんだろ?ぷぷぷ大爆笑
お前らには無理。
Perlみたいな糞言語を使う奴らは人間以下
逆に「次スレはいらん!」とか言ってるやつが次スレ立てそうだ(わら

ほんで日ごろの鬱憤をはらす、と。
娘はやらん!
日常生活で随分虐げられて過ごしてるんだろうな。
こんなつまらんことで人を見下したくなるっていうのは。

次スレ立たなかったら自分を保てなくなっちゃいそうだ。
誰か立ててあげれ
962Rubyust:02/10/03 19:12
っっっっっっっっっp
この板って、スレッドを立てた奴のリモートホストが見られるって知ってた?
ぷぷぷ
ばぁぁあか
死ねよ
WebProgに逝けば?
ム板で厨房言語のスレッドを乱立させないで欲しい。
そうじゃなくてくだらない話題はよその板でやってくださいと
書いたPerlのスレを立てておかないと
いつか>>1みたいなのがまたでてきちゃって元の木阿弥なのでは?
は?板の注意事項に「Perlのような厨房言語はWebProg板へ」と書いておけば済むことだろ。
ん? じゃあそうしたら? まあ、>>966にはそんなごたいそうなことは一生できないでしょうが。
たぶん「今荒らしてるやつが」
「検索しましたが一覧にないようなので立てました」とかいいつつ
次スレを立てると思うよ。
1000鳥合戦ってのはなさそうでつね。
まぁ、しびれを切らした君みたいな厨房が立てるんだろうな。ぷ
971デフォルトの名無しさん:02/10/03 19:36
この板って、スレッドを立てた奴のリモートホストが見られるって知ってた?
また、ruby基地外の荒しが始まったな。
無視して便利なPerlの恩恵に与ろうぜ。
ウメタテタ
タタタ
タテタメウ
ウメエコノミカン
カミノンコウメエ
アナグラムシテミタ
 ミタナアグラシテ
982うんこ厨房:02/10/03 20:46
スレッド一覧になかったのでperlスレたててもいいですか?
ヤメテ
イタチガイデス
ウンコキタナイ
プロバイダにおまえのIPを突き止めてもらった。
これから住所の特定に入る。
プーン
ソロソロスパートダョ
ダョ
ダョダョ
ダョダョダョ
ダョネーダョネー
ナンノウタダケ
マァィィャ

マィマィ
996Rubyist:02/10/03 21:22
ばーぁ
997デフォルトの名無しさん:02/10/03 21:22
yrdy
998デフォルトの名無しさん:02/10/03 21:22
tesdt
999ババ:02/10/03 21:22
1000デフォルトの名無しさん:02/10/03 21:23
test
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。