Perl 初心者コーナー Part24
■ このスレッドは過去ログ倉庫に格納されています
0001 ◆fBgbHI04bQ
03/06/07 22:30ID:GbQKLcPE【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
CGIだけど、なんか質問ある? Part 10
http://pc2.2ch.net/test/read.cgi/php/1048686475/
【Perl,CGI】参考書籍 第三版
http://pc2.2ch.net/test/read.cgi/php/1030209573/
CGIに依存しないPerlの話題一般/Part2
http://pc2.2ch.net/test/read.cgi/php/1030548610/
スクリプトの改造依頼は、【 スクリプト改造工房 PART 6 】
http://pc2.2ch.net/test/read.cgi/php/1047806915/
過去ログやお勧めサイトは >>2-10
0569566
03/06/18 16:03ID:???掲示板などのスクリプトの中にperlで
半角英数字が連続したときに自動改行してくれる
構文など有るんでしょうか、と書きたかったのです。すみません。
0570DBMのBSD DB(Berkeley DB)はMySQLより早いのか?
03/06/18 16:04ID:kZ9NfMGd上記ダウンロードより
DBMのフィールドを自分で作る(分割する)と、
Berkeley DBは、MySQLより早いのか?
この件についてどなたか、教えて下頂けませんか?
0571nobodyさん
03/06/18 16:05ID:???板違いも甚だしくてワロタ
<td style="width: 80px;table-layout:fixed;">
とか。
ブラウザ依存だから期待せぬように。
s/([a-zA-Z0-9\-_\?\.]{5})/$1\n/g;
かな。この場合5文字で改行。
0573nobodyさん
03/06/18 16:34ID:???0574nobodyさん
03/06/18 16:46ID:???2バイト文字が混在した文字列を途中で分割するのはわりと面倒なので、
そういうのは普通ブラウザの表示に依存させてしまうことが多い。
んで、>>566の質問については板違いにつき、ここでは答えない。
0575nobodyさん
03/06/18 17:45ID:???で、得られたファイル名前、ディレクトリ名前を配列に代入したいんですが
どうすればいいでしょうか?
0577nobodyさん
03/06/18 19:49ID:fCn6DpDdIEだけが機能してくれない、Opera、Mozilaは問題ないんだけど、
誰かわかりません?、オナガイします、マジでひとつ。
#!/usr/bin/perl -w
print <<"END";
Content-type: text/html
Set-Cookie: DATA=0123456789; expires=Mon, 30-Dec-2020 23:59:59 GMT
END
foreach $var (sort(keys(%ENV))) {
$val = $ENV{$var};
$val =~ s|\n|\\n|g;
$val =~ s|"|\\"|g;
print "${var}=\"${val}\"<br>\n";
}
0578nobodyさん
03/06/18 19:57ID:???print "ぬるぽ\n";
}
こんな感じに半角でインデントして、
>>578
自分へのアンカーをつけてポップアップで読む
0581443
03/06/18 20:24ID:???みなさん色々ありがとうございます。
2日間調べてやっと原因が解りました。
>>463さんが言ったようにサーバー側の設定の問題でした。
$ip = $ENV{'X_FORWARDED_FOR};に変えたら
ちゃんと違ったIPが取得できるようにました。
$useragent = $ENV{'HTTP_USER_AGENT'};でユーザーエージェントも
取得したんですが、私はWindows xpなのにWindows NTになっていました。
こういうもんなんでしょうか?
0583nobodyさん
03/06/18 20:29ID:???Operaだと2000とXPがちゃんと認識されます。
IEだと、2000はNT5.0、XPがNT5.1と識別されます。
って言う話だ。
確かめたわけじゃないが。
ここで配布してあるチャットの個人会話を覗き見する方法わかる?
ファイル名はわかってるんだけど、拡張子がCGIにされてるから見えない…
0585_
03/06/18 20:45ID:???0587nobodyさん
03/06/18 20:56ID:???FTPでログを見る。
管理人にしかできないがな。
0589nobodyさん
03/06/18 21:50ID:???(2chみたいに)
なお、テキストの中には、2つ以上URLがある可能性もあります。
0593nobodyさん
03/06/18 22:22ID:8AjElXD0http://mypage.odn.ne.jp/home/dongrico
0594543
03/06/18 22:45ID:???system("/usr/bin/test -f /path/file"); #ファイル存在確認コマンド
これでfileという名前のファイルの有無を確認できますよね?
0596nobodyさん
03/06/18 23:02ID:???↑のような配列があった時これを "12 5 3 4 1" の部分を見て
下のような数の大きい順にソートするようなスマートな方法は無いでしょうか?
@array = qw[1\tお 3\tう 4\tえ 5\tい 12\tお];
0597543
03/06/18 23:06ID:???そうしたいんですけど家に環境ないんです。
・゚゚・o(iДi)o・゚゚・。
検索はしてみますね〜♪
ありがと〜
他にも助言お願いします。
0599nobodyさん
03/06/18 23:42ID:???余計な改行コードが加えられてしまいます。
お願いします。
$match = 0;
open(votelog,"+<vote.log");
@votelog = <votelog>;
$last = @votelog + 0;
for($num=0;($num<=$last)and($match==0);$num++){
($name) = split(/\,/,$votelog[$num]);
if($namekey eq $name){
$votelog[$num] =~ s/\n//;
$votelog[$num] =~ s/\r//;
($name,$comment,$votenum) = split(/\,/,$votelog[$num]);
$votenum = $votenum+1;
$votelog[$num] = "$name,$comment,$votenum\n";
$match = 1;
}
}
seek(votelog,0,0);
print votelog @votelog;
close votelog;
0600596
03/06/18 23:53ID:???文字が含まれてても普通に
@array = sort {$a <=> $b} @array;
でやってくれるんですね。。
では↓な場合にスマートに数字の大きい順で
ソートする方法あればお願いします。
@aray = qw[a\t12\tあ b\t5\tい c\t3\tう d\t4\tえ e\t1\tお];
0602543
03/06/19 00:25ID:n1s+2eOn以下のどちらの場合もだめでした。
system("/usr/bin/test -f /path/file"); #ファイル存在確認コマンド
system(`/usr/bin/test -f /path/file`); #ファイル存在確認コマンド
どうしてでしょう?
ご助言くださいませ。
syntax error near unexpected token `system(上記)'
と表示されてしまいます。
0603nobodyさん
03/06/19 00:29ID:???確かに test コマンドもシェルではファイルテストに使うが、
Perlerなら
-e "/path/to/file" and print "存在したポ\n";
0608492
03/06/19 00:44ID:???ループ中にエラー処理はさむと
比較しなくていいものまで反応してエラー出してました。
パスワード間違いの場合はリロードさせる(何もしない)事で回避しましたが
エラー表示やっぱ出したいな……。
0610nobodyさん
03/06/19 00:53ID:???用意しろ。最低限の義務だ。
>>599
「chomp」や「binmode」で調べろ。あとこれ読め。
ttp://www.din.or.jp/~ohzaki/perl.htm#CRLF_Unify
>>600
print join '/',
map $_->[0],
sort { $b->[1] <=> $a->[1] }
map [ $_, /\\t(\d+)\\t/ ],
@aray;
0611543
03/06/19 00:55ID:???いま603さんにいわれたとおりに
#! /usr/bin/perl
-e "/path/path/ファイル名" and print "ok\n";
でokが表示されました。
ありがとうございました。
Perlerっていうのもカッコイイ(゚∀゚)~
やっと次に進めます。
まだとっかかりにすぎないけど
がんばります!
0613543
03/06/19 01:20ID:n1s+2eOnあれ?
「-e」というのは「test -e」とはまったく別なんでしょうか?
ファイルが1つの場合は611で成功したのですが、複数のファイルの存在確認をする必要があるため、
if文で一つでもファイルが確認できなかった場合にはエラーを表示するようにしたいのですが。
ファイル存在確認フロ−(下手でごめんなさい)
ファイルA −−
y| n |
↓ |
ファイルB −−
y| n |
↓ |
ファイルC −−
y| n |
↓ ↓
正常終了 異常終了
exit(0) exit(100)
0614603
03/06/19 01:26ID:???-e $_ or die;
}
0615596
03/06/19 01:32ID:???どうもありがとうございます。
が、思った結果とはちょっと違うです。。
しかしなんとなくスマートに書く方法がわかったような気がします。
0616543
03/06/19 01:44ID:???ありがとうございます。
さらに@filesで指定したファイルがすべてあった場合には
exit(0)で抜けて、足りなかった場合にはexit(100)で抜けるような
if文を加えることはできませんか?
0617603
03/06/19 01:47ID:???for (@files){
-e $_ or exit(100);
}
exit(0);
0618543
03/06/19 02:04ID:???あ、できてます!
どうもありがとうございます\(^▽^)/
ただ上記だと「-e $_ or exit(100);」の方が
@filesが存在した場合に返す終了ステータスですよね?
exit(100)はファイルがない場合の異常終了ステータスにしたいので
ご教授頂いたexit(100)とexit(0)を入れ替えればよろしいですかね?
@filesの部分は本でわかっていたのですが
「-e」や「$_」というのはまったくどういうものか
わからなかったので…
0619603
03/06/19 02:07ID:???まア、実際に試せばわかるけど
0620nobodyさん
03/06/19 02:17ID:???自分で調べようとかいう気はないようだな。
>>595でも「ついでに「ファイルテスト演算子」でググれ。」とレス
もらってるのに。
0621543
03/06/19 02:20ID:???あ、本当だぁ。
ごめんなさい。完璧でした。
本当にありがとうございましす。
これでファイルの存在確認の方は
終了コードをシェルに渡すことができると思うので
完璧みたいです。
今度はファイル削除…
同じ要領でいいのだろうけど
そのまえに「-e」や「$_」を理解しなくては…
0622543
03/06/19 02:24ID:???いえ、調べました。
すぐにひっかかったページをみると
一見してtestコマンドのようにみえたので
「-e」はtest -eかと思って、できるだけ略さずに書こうと思ったら
×でした。
それでtestコマンドではないのだろうと考えてお願いした次第です。
0623nobodyさん
03/06/19 03:14ID:???0625nobodyさん
03/06/19 03:31ID:???0626nobodyさん
03/06/19 03:40ID:???0627nobodyさん
03/06/19 04:10ID:???/^ +$/ でも /^\x20+$/ でも /^\040+$/ でも /\Qスペース\E/ でも
ご自由に。
>>626
\s == [ \t\n\r\f]
0628nobodyさん
03/06/19 04:33ID:???5 と言っても色々あるし、Linux でも Win でも何でもいいけど、
少なくとも手元のテスト環境で問題なく動くようになってから
本番機にもっていく事が大事。
0629nobodyさん
03/06/19 11:39ID:???方法をお教え下さいませ。
はてなアンテナ(ttp://a.hatena.ne.jp/)でやっているような、
htmlファイルの中の更新(追加or変更)された部分だけを抜き出して
来る方法です。定番的な一番効率の良いやり方はないでしょうか?
0631nobodyさん
03/06/19 15:15ID:???ブックマークと、URL直打ちを見分ける方法ってありませんか?
JSの力を借りなければなりませんか?
0634543
03/06/19 20:19ID:???昨夜はありがとうございました。
家のLinuxで試して成功したので
本番機でテストしたのですが見事に失敗…
以下のように表示されていました。
syntax error near unexpected token `$_ or'
慌てて本番機のPerlのVersionをみてみたらVersion 4でした。
家のテスト環境はVersion 5だったのですが、これが原因でしょうか?
手持ちの本はVersion 5を前提に書かれていますが
エラーを返してきた部分については
特別Versionについては触れられていませんでした。
0636nobodyさん
03/06/19 20:48ID:???ある意味驚きだな。
0638nobodyさん
03/06/19 21:04ID:???俺のプロバスペースもPerl4だぞ。
>637
$_は使える。
0640nobodyさん
03/06/19 21:07ID:???うん、myは使えない。
かなり不便。
$a ||= 1;もできない。
省略形はかなりピンチかもしれないから、「-e $_ or exit(100);」は
「unless(-e $_){exit(100);}」とかにした方がいいかもしれない。
0641nobodyさん
03/06/19 21:13ID:???and/or/not 演算子は Perl4 には無かったような記憶が。
if/unless 修飾子は使えた筈。
あと組み込み関数も split とか括弧を省略出来ないものが多い。
一番いいのは赤ラクダ本を手に入れる事だが、
とりあえずコレ読んどけ。>543
http://www.namazu.org/~tsuchiya/perl/info/perl-ja_124.html
0642nobodyさん
03/06/19 21:34ID:???5に慣れてから4コンパチで書くのは辛いな
0643nobodyさん
03/06/19 22:58ID:7O2enBqmPerlで
SDBM_Fileを使ってるんですけど、
MDBM_Fileにそのまま変えられますか?
SDBMになくてMDBMにある制限みたいなものってあるでしょうか?
0644nobodyさん
03/06/19 23:06ID:QrRxrm0Kmy $abc = 255;
&bbb(\$aaa);
}
なんか変になるんですけど、これって有効にならないんですか?
0645nobodyさん
03/06/19 23:06ID:QrRxrm0Ksub aaa{
my $abc = 255;
&bbb(\$abc);
}
これ。
0646nobodyさん
03/06/19 23:13ID:7O2enBqm何が変になるのかわからん限りはなんとも・・・。
きたれ!
http://ex.2ch.net/test/read.cgi/entrance/1055942024/
ファイアーエンブレム風のネトゲツクローヨ
0649nobodyさん
03/06/19 23:25ID:7O2enBqmなにか心当たりが?
0653nobodyさん
03/06/19 23:34ID:???0654恐らく
03/06/19 23:37ID:???{
print "なんか変\n";
}
0655645
03/06/19 23:43ID:???どっか他の所で重大な間違いをしてたっぽいので、しっかりデバック取ってきます。
0656543
03/06/20 00:38ID:???できました。
下の記述でfileが無い場合は100で
fileがある場合は0で終了するようになりました。
------------------------------
#! /usr/bin/perl
@files = ("/home/path/file",);
for (@files){
unless(-e $_){exit(100);
}}
exit(0);
------------------------------
今度はファイル削除用のを作ります。
これまで相談して気になるのは、
なぜ皆さんがsystemコマンドを使わなかったのか
ということです。
お話していなかったのですが、実際のオペレーションでは
ファイル存在確認の後、ファイル削除をおこなうので
systemコマンドであればcommandを書き換えるだけで済むのかなぁと。
なにか理由があるのでしょうか?
0657nobodyさん
03/06/20 00:45ID:???簡単に言えば、systemを使わないのは特に必要ないから
それとちょっと気になるんだけど
>>621に書いてあった
>これでファイルの存在確認の方は
>終了コードをシェルに渡すことができると思うので
シェルという語が出てきてるけど、どんなことやってるの?
シェルからperlプログラムを実行して戻り値を受け取るわけ?
0658nobodyさん
03/06/20 01:20ID:???1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
これから質問する奴は
1:○○
2:△△
3:××
と書け。それ以外は皆放置しろ。
どうせ>>1も読まない奴はスレ違い・板違いがほとんどだしな。
0659nobodyさん
03/06/20 01:24ID:2h2vJ76G1:○○
2:△△
3:××
0660nobodyさん
03/06/20 01:45ID:???1:○○
2:△△
3:××
0661543
03/06/20 02:40ID:???>シェルという語が出てきてるけど、どんなことやってるの?
>シェルからperlプログラムを実行して戻り値を受け取るわけ?
まさしくそのとおりです。
657さんのいうとおりの動作をさせたいのです。
それを前提にしても
汎用性という意味(?)でsystemコマンドよりも
656記載のもののほうがよろしいでしょうか?
0662nobodyさん
03/06/20 03:31ID:???1:○○ だめよ、こんなところで
2:△△
3:××
0663nobodyさん
03/06/20 04:00ID:PsiyBD1J$bst .= 'W' unless($bst =~ /W/);
の意味が分から無くて困っています。
CGIゲームで、このプログラムにより、
攻撃力が1だけ上がるのですが、
10位上げたいので。
ポイントは戦闘中だけ上がると言う事なので、
難しいんだと思いますが。
0664nobodyさん
03/06/20 04:04ID:???$bstがWにマッチしなければ、$bstにWを追加
$bst .= 'W' unless($bst =~ /W/);
0665nobodyさん
03/06/20 05:04ID:???2:それでグーグルとか使って検索をやってみたが・・・
3:それだとなぜかグロ画像ばかりが出て上手くイかなかった。
■ このスレッドは過去ログ倉庫に格納されています