【Perl】初心者コーナー Part19
レス数が900を超えています。1000を超えると表示できなくなるよ。
0001nobodyさん
03/01/11 13:52ID:???1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
あとは>>2-10にまかせた。
0805nobodyさん
03/02/01 23:42ID:???|. ノノソハ)))
(\リリ ´ー`)リ < ファイルテスト演算子
(ニE(#つo⊂#)
ファイルテスト演算子は、こんなことができる演算子だよ。
・このファイルがあるかどうかチェック (-e)
・ファイル(ディレクトリ)が読めるかどうかチェック (-r)
・ファイル(ディレクトリ)に書けるかどうかチェック (-w)
・ファイルかどうかチェックする (-f)
・ディレクトリかどうかチェックする (-d)
・ファイルのバイト数をチェックする (-s)
これくらい知ってるといいね。
実例だよ。
if ( -e "test.txt" ) { print "ファイルがあるよ"; }
else { print "ファイルないよ"; }
if ( -r "test.txt" ) { print "ファイルから読めるよ"; }
else { print "ファイルから読めないよ"; }
if ( -f "test.txt" ) { print "通常ファイルだよ"; }
else { print "通常ファイルじゃないよ"; }
$size = -s "test.txt";
print "$sizeバイト";
他にもいろいろあるんだけど、また必要になりそうだったら説明するね。
ややこしい説明はなるべく避けたいからね。。
じゃあ次回は、他の文字列処理関係の関数を勉強するよ
0807厨房
03/02/02 07:09ID:45tlaHB9$a = "aaa"; $b = "aa";
$a = ~s/^$b//;
print "$a\n";
これを実行すると
a
という実行結果になると思うのですがなぜか
4294967295
という実行結果が出ました。。 なぜでしょう?
perlのバージョンは
5.005_03 built for i386-freebsd
です。。
0808マリモーマ ◆r6PDGT6Xd2
03/02/02 07:20ID:m/KRriEG0809nobodyさん
03/02/02 07:23ID:???0811nobodyさん
03/02/02 09:20ID:mV23mEyNpackage MYLIBRARY;
sub new {
・・・
}
とか書きますよね。
んで、このソースにも、ちゃんと my のチェックをしたいので、use strict を書こうと思うんですが、
use strict;
package MYLIBRARY;
sub new {
・・・
}
とすべきか
package MYLIBRARY;
use strict;
sub new {
・・・
}
とすべきか迷ってます。
package よりも前に書くのと後に書くのはいっしょなんですか?
それとも、なんか違うんですか?
他の汎用ライブラリをお手本にする。
0813nobodyさん
03/02/02 14:10ID:pmlltvJ1my($a)=&hoge();
@b=@$a;
↑
sub hoge {
------
return(\@a);
}
0814nobodyさん
03/02/02 14:21ID:pmlltvJ10816nobodyさん
03/02/02 15:28ID:6TL1miGW>>814じゃないけど、
@b=@{hoge()}
ってことでしょ。
配列のコピーが発生するからリファレンスのまま行った方がいいような気がするが
0817nobodyさん
03/02/02 15:52ID:???$trip って入れてあるところにトリップ出せるような
機能のつけかた教えてください。
0819 e
03/02/02 16:07ID:???&jcode::tr(?$FORM{'FROM'}, '#', '#');
if($FORM{'FROM'} =~ /([^?#]*)?#(.+)/){
my $main_message = $1;
my $handle_pass = $2;
my $change_salt = substr($handle_pass, , 1) . "H";
$handle_pass = substr(crypt($handle_pass, $change_salt), -8);
if($main_message ne ""){
$FORM{'FROM'} = "$main_message </b>◆$handle_pass <b>";
}else{
$FORM{'FROM'} = "</b> ◆$handle_pass <b>";
}
}
0820nobodyさん
03/02/02 16:15ID:???0821727
03/02/02 21:03ID:ionxQd5/&ReadPlarse(*form);
require 'jcode.pl';
&jcode'convert(*form,'sjis');
$data = $form{'name'}\n$form{'mail'}$form{'sex'}\n$form{'ryori'}\n$form{'message'}\n\n
open(ENQ, ">>$enqdata.dat")||do{print "ERR";exit;};
#flock(ENQ, 2);
print ENQ $data;
#flock(ENQ, 8);
close(ENQ);
print "Content-type:text/html\n\n";
print >> "END_OF_HTML";
<HTML>
<HEAD>
<TITEL>有難う御座いました</TITLE>
</HEAD>
<BODY>
アンケートは送信されました!<BR>
またのお越しをお待ちしています
</BODY>
</HTML>
END_OF_HTML
これを実行したら
Backslash found where operator expected at enquetesys.pl line 11, near "}\"
(Missing operator before \?)
syntax error at enquetesys.pl line 11, near "}\"
enquetesys.pl had compilation errors.
ってえらーがでました。
落してきたソフトを実行しただけなのになんでエラーがでるのでしょうか?
0823nobodyさん
03/02/02 21:10ID:lbpBAa4z$MAX = 2;
@NAME = ('a','b');
for($i=0;$i<$MAX;$i++){
open(@FILE, "./$NAME[$i].txt");
}
これだとエラーになってしまいました。
上記のコードのミス、もしくは何か他の方法がありましたらアドバイスお願いします
0825デフォルトの名無しさん
03/02/02 21:16ID:???エラーメッセージちゃんと理解するように努力しろよ。
英語分かんなかったら又厨房からやり直せ
0826nobodyさん
03/02/02 21:16ID:???>$data = $form{'name'}\n$form{'mail'}$form{'sex'}\n$form{'ryori'}\n$form{'message'}\n\n
$data = "$form{'name'}\n$form{'mail'}$form{'sex'}\n$form{'ryori'}\n$form{'message'}\n\n";
>print >> "END_OF_HTML";
print <<"END_OF_HTML";
そして最後の改行も忘れずに。
しかもマルチだたし(哀)
0829nobodyさん
03/02/02 21:23ID:GIziK5Md今、
http://live.2ch.net/test/read.cgi/festival/1044106562/
このスレで
http://blatt.hp.infoseek.co.jp/
このサイトが大流行
みなさんも逝ってみてください。
よろしくおねがいします。
失礼しました。
0830nobodyさん
03/02/02 21:27ID:???どうすんの?
exit()なしで終り?
0831h
03/02/02 21:33ID:skZYA3IHローカルでCGIを動かしたところ,うまく動作しました。
で,インターネットテンポラリーファイルとクッキーを削除したら
クッキーが復活しません。
どうしたらいいですか?
0832nobodyさん
03/02/02 21:43ID:???日本語検索がうまくいきません。
if($test =~ /テスト/)
だとエラーになってしまいました。
jcodeというのもちゃんと入れました。
何かよい方法はないでしょうか?
0834826
03/02/02 21:56ID:???0835727
03/02/02 22:43ID:ionxQd5/ありがとうございました。
って言うか。コンパイルエラーが出るようなプログラムを
PERL講座って感じで公開しないで欲しいですよ、まったく。
0836nobodyさん
03/02/02 23:10ID:???講座である以上素人相手ではないのだから多少のミスはユーザ側で直して当然ということだろう。
実際、人の間違ったコードというのは課題としてよく使われる。
0837nobodyさん
03/02/02 23:30ID:???しかし、配布元http://www.salut.ne.jp/bf/wmh/seminar/にある
アフォ面http://www.salut.ne.jp/bf/wmh/seminar/img/KiryuuKiri.jpg見ると
単 に ヘ ボ な だ け
0840h
03/02/03 00:15ID:XAlS7Khuで,クッキーを削除したら クッキーが機能しません。
クッキーを復活させるにはどうしたらいいですか?
0841nobodyさん
03/02/03 00:30ID:???0842nobodyさん
03/02/03 01:53ID:???use Symbol;
my %fh = (foo => gensym, bar => gensym, baz => gensym);
my($i, $file, $fh) = (1);
open $fh, ">$file.txt" or die while ($file, $fh) = each %fh;
for (0..4) { print $_ $i++ for values %fh }
close $_ for values %fh;
>>830
http://www.din.or.jp/~bigstone/cgilab/cgitips/mod_perl1.html
0843nobodyさん
03/02/03 07:12ID:JvqhDUOZ↓のようなモノを数人分をtableでまとめようとしています
--------------------
あああ 123回
いい 11回
うううう 50回
----------------------
このような感じで文字は左端にそろえてあり、
回数のほうは「回」の部分でそろえられています。
この場合どのようにしたら回数の部分を読み込めるのでしょうか?
まず、日本語検索をしようとしてもエラーになってしまい、
もし日本語検索がうまくいったとしてもそのあとはどうすればよいのかと、
試行錯誤しております。
何かアドバイスありましたらご教授お願いします
0844nobodyさん
03/02/03 07:46ID:???EUCで処理。
正規表現で抜き出す。
> もし日本語検索がうまくいったとしてもそのあとはどうすればよいのか
知らんよ、おまいの心は漏れにとどかんとよ。
0845デフォルトの名無しさん
03/02/03 07:56ID:???/(\d+)/; print $1,"\n";
0847nobodyさん
03/02/03 10:42ID:D3Jh7Sun自分はperlに関して少々の知識があるくらいなので質問させていただきます。
htmlで、各人の名前にリンクでメールアドレスがついてるソース
例えば
<a href="mailto:[email protected]">AAA</a><br>
<a href="mailto:[email protected]">BBB</a><br>
<a href="mailto:[email protected]">CCC</a><br>
.
.
.
みたいになってるときに、ソースをテキストファイルとして保存し、それを読み込んで
メールアドレスだけ取得し、別のテキストに書き出したいのですが、どうやって検索したら
アドレスだけ抽出できますか?
自分ではアドレスには前にmailto:があり、最後は(自分の場合は携帯アドレスなので).jpで終わってる
ので、この間にある部分をすべてとるようにしたいのですが、可能ですか?
0850nobodyさん
03/02/03 12:01ID:D3Jh7Sun>>849
ありがとうございます。perlに関する知識があるとはいえ、ソースの意味が
なんとなくわかる程度なので、作るとなるとごく基本的な事もあやふやです。
#!/usr/bin/perl
$datafile = "./mail.dat";
$sortfile = "./sort.dat";
open(LOG,"$datafile");
@html = <LOG>;
close(LOG);
@mail = map { /mailto:(.+?)"/ and $1 } @html;
open(FILE, ">$sortfile");
print $mail;
close FILE;
exit;
どこがおかしいですか?お願いします☆
0851nobodyさん
03/02/03 12:11ID:???ご存じの方がいらっしゃいましたら教えてください。
0852nobodyさん
03/02/03 13:38ID:???perlに関する知識があるのにソースの意味がなんとなくわかる程度なのか?
おかしいのはチミの頭だYO
ちなみに漏れにはperlの知識は殆ど無い
print FILE $mail;
0853nobodyさん
03/02/03 13:44ID:???なにか良い方法はありますでしょうか?
今の自分のレベルでは、
$string = qq(「\\n」が含まれた任意の文字列。\nThe arbitrary character sequences in which '\\n' was contained.);
$length = scalar(map{1} unpack("C*",$string));
print "任意の文字列 \$string の総バイト数は $length です。\n";
くらいしか思い付きませんでした。
もうすこし賢い方法ってありますでしょうか?
0854nobodyさん
03/02/03 13:48ID:???0855nobodyさん
03/02/03 13:52ID:???print FILE @mail;
かな?
0856nobodyさん
03/02/03 14:10ID:???は嫌?
0857nobodyさん
03/02/03 16:08ID:???length() だと不都合あるの?
0858デフォルトの名無しさん
03/02/03 18:23ID:???0859nobodyさん
03/02/03 18:29ID:???もちろん改行コードとか全部込みで。
0860デフォルトの名無しさん
03/02/03 20:18ID:???0861nobodyさん
03/02/03 20:53ID:D3Jh7Sunそれどういうソース?
0862nobodyさん
03/02/03 22:05ID:gGc+aOjUカウンターみたいの作ってdos窓11個で
ロック処理無しで同時進行しても0にならないんですけど。
0863862
03/02/03 22:06ID:gGc+aOjU0864nobodyさん
03/02/03 22:08ID:???そら、一プロセスからなら何回ループさせようが呼び出しはシーケンシャルなのだから正常に処理されるだろう。
根本的に理解が足りてない予感。
0865nobodyさん
03/02/03 22:11ID:???よさげな解説みつけたからペタ
http://homepage1.nifty.com/glass/tom_neko/web/web_04.html
0866862
03/02/03 22:58ID:gGc+aOjUwin98の時同じ事を試したら
見事に空ファイルができたと思ったのですが。
>>864-865
どうもありがとう。
0867nobodyさん
03/02/03 23:04ID:1c8W3GXA$line_num = @file;
以外で行数を取得する方法はありますか?
一行ずつ読み込んでカウンタを回すのもなしで
0869nobodyさん
03/02/03 23:16ID:???0870nobodyさん
03/02/03 23:19ID:???while (read(IN, my $buf, 8192)) {
$lines += ($buf =~ tr/\n//);
}
0871nobodyさん
03/02/03 23:30ID:???++ $count while (<FILE>);
0872nobodyさん
03/02/03 23:32ID:???++ $count while <STDIN>;
0876
03/02/04 00:17ID:rUOqBsxaですけど、一行づつループかけて、マッチした行以外をTMPファイルへ書き
込み。吐き出したデータを読み込んで、マスターデータに(>)上書き。
更新したい行をマスターデータに追加書き込み(>>)って方法でいいんでしょ
うか?行の順番はどうなってもよいです。
なんか、スマートな方法があったらご指導ください。
0877nobodyさん
03/02/04 00:36ID:???open(OUT, '>master.tmp');
while (IN) {
if () {
print OUT 新しいもの;
} else {
print OUT $_;
}
}
rename('master.tmp', 'master');
0879nobodyさん
03/02/04 00:38ID:???マルチするほどの事じゃないだろ。どうせ見るヤツかぶってるんだし。
100行くらいならメモリに入れておいてもいいんじゃない?
メモリの量が気になるなら読み込みつつ別ファイルに書き込み。
マッチしたらその行だけ変更して最後まで読み書きする。
最後にリネームして終わりだな。
つか今度マルチしたらグーで殴るからね
0881nobodyさん
03/02/04 01:02ID:Z72oZy+O$i = 1;
print "$i+1";
で'2'と出力したのですが。
0882nobodyさん
03/02/04 01:08ID:eARYiwGA0883nobodyさん
03/02/04 01:10ID:???print "@{[ $i + 1 ]}";
0885nobodyさん
03/02/04 01:55ID:???出力してみても何だかわかんなくて。
0886nobodyさん
03/02/04 02:04ID:CHyA5DeQForbiddenと出てしまいます。どこの設定がおかしいのでしょうか?
0887nobodyさん
03/02/04 02:12ID:???最後にファイルを修正してからの日数じゃないの?
てか -Mだけじゃ分からんだろ(w perl -Mの意味かと思った。
>>886
何を参考に設定したのか知らないけど、もう一度apacheの設定の仕方を見てごらん。
まぁエラーログみれば原因分かるから、それを元に検索するのも勉強。
0888nobodyさん
03/02/04 03:42ID:VBD/sziNは、$aと$bに何か入っていたら処理するで実際OKなのですが、
unless($a and $b){ 処理 }
ですと、両方入ってなかったら処理って風にならく、
どちらか一方でも処理に行ってしまいます。
ifのまるっきり反対じゃないんですね。何か訳があるのでしょうか?
0891nobodyさん
03/02/04 04:00ID:???0892876
03/02/04 09:15ID:???マルチするつもりじゃなかったんですが、書き込みした後、リロード
して確認したら書き込まれていなかったもので、スレまちがえて再書き込みして
しまいました。ご迷惑おかけしました。
いろいろなアドバイスありがとうございました。今日、がんばってみます。
0893nobodyさん
03/02/04 09:28ID:???unlessってのは、評価の結果が偽のときに実行するという命令であって、
条件式の評価の仕方が逆になるわけではない。
慣れないうちは、if (! 式) {} を使っておいたほうがいい。
0894nobodyさん
03/02/04 12:16ID:ZSr84PG1%TEST = ('A' =>'あ', 'B' => 'い');
foreach $key(keys %TEST){
&jcode'convert(*$key, "euc");
}
このやり方では駄目なのでしょうか?
0896nobodyさん
03/02/04 13:19ID:???なんとマヌケな…
ありがとうございました!
以後気をつけます。
0897nobodyさん
03/02/04 14:28ID:???0899711
03/02/04 14:42ID:???なんかもう自分で作りたくなっちゃったよ。PERLでcgi形式で翻訳スクリプト
なんて作ったら、どうなるんだろ。無謀か。
0901nobodyさん
03/02/04 17:02ID:???1.入力フォームを作る
2.入力された文章をhttp://www.infoseek.co.jp/Honyaku?pg=honyaku_t_inout.html&svx=105420&svp=SEEK
にwgetで投げる
3.getしたhtmlから結果だけを抜き出して、整形して表示
レス数が900を超えています。1000を超えると表示できなくなるよ。