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
0527506
03/06/17 18:31ID:???ありがとうございます。
ところで、
$srt = 'document.write("<font color=#FF9900>◆</font>ホームページがリニューアルオープンいたしました!")';
$str =~ s/^\w+\.\w+\(\"(.*)\"\)$/$1/;
print $str;
とやったのですが、
なんにもprintされません。確かに正規表現はあってるかと思うのですが・・・・・
わかるかたいらっしゃいますか?
0530523
03/06/17 18:59ID:SJassQej動きました。
別のところでエラってました。スマソ
0531nobodyさん
03/06/17 19:00ID:???ここの掲示板のソースみてみれ・・・ワラタ
0532nobodyさん
03/06/17 19:24ID:???0533nobodyさん
03/06/17 19:48ID:???っていうエラーを見るんですが。
BEGIN not safe after errorsってどういう意味ですか?
0536nobodyさん
03/06/17 20:39ID:???0537525
03/06/17 21:58ID:???10回*30秒くらいみたのですが、わかりませんでした・・・
どうみても正しいようにしか見えないのですが、
どうしてこんな結果になるのでしょう・・・
どうか教えてください。。。
0538nobodyさん
03/06/17 22:13ID:???--- test.p ---
$srt = 'document.write("<font color=#FF9900>◆</font>ホームページがリニューアルオープンいたしました!")';
$str =~ s/^\w+\.\w+\(\"(.*)\"\)$/$1/;
print $str;
---
> perl -wc test.p
Name "main::srt" used only once: possible typo at test.p line 1.
test.p syntax OK
>
0539nobodyさん
03/06/17 22:24ID:???http://www.kt.rim.or.jp/~kbk/perl5.doc/perldiag.html
0540458
03/06/17 23:41ID:???おっしゃられたとおり、私の環境がおかしいにしても、mt-load.cgiのは正常に表示されるんです。。
だれか、教えてくださいまし・・・・
0541nobodyさん
03/06/17 23:48ID:???そのしつこさを別の方向に向ければいいのに。
正常に動くスクリプトがあるなら、いらない部分をガンガン削って、どの部分でそれを表現してるか調べてみるとかあるだろ。
レス遡るのもマンドクセ。
0543座敷荒氏
03/06/17 23:50ID:NkO+IDyDShellに結果を渡すようにしたいのです。
Perlでtestコマンドを実行してから結果を
どうやってShellに引き渡せばいいのでしょうか?
最終的には1ではなく100や255エラーを返すようにしたいのですが。
0544525
03/06/18 00:00ID:???それは、たぶんですが、
文法は間違いないということですよね?
なぜ、$strが空になってしまうのか、教えていただけませんか?
(それともデバッガになれてないので勘違いしてるのかしら)
0545nobodyさん
03/06/18 00:05ID:???あってもない自分の脳内知識をお互いに自慢してる。
横から見てるとハライテーヨ
0547nobodyさん
03/06/18 00:24ID:???Name "main::srt" used only once: possible typo at test.p line 1.
(main パッケージの srt という名前の変数は一度しか使われていません。
誤字の可能性があります。(test.p の 1 行目))
0550nobodyさん
03/06/18 00:41ID:???(・∀・)ノ" またあとで見に来るよん
0551506
03/06/18 01:07ID:???しかし、デバッガって便利なんですね。使ってみよう。
いままでKCatchしか使ってなかった。
0552nobodyさん
03/06/18 01:15ID:???0553506
03/06/18 02:39ID:???実は、「document.write("<font color=#FF9900>◆</font>ホームページがリニューアルオープンいたしました!")';」
というのは外部jsなんです。(SSIが使えないので、SSI Includeみたいに使おうとしている))
なので、↓の1行目で、jSファイルを読み込んでその文字列まるまるを返してます。
$topics = &responce_filesubstance($PathTopicsJS);
jcode::convert(\$topics, sjis);
$topics =~ s/^\w+\.\w+\(\"(.*)\"\)$/$1/;
ところが、そうすると、
$topicsが「document.write("<font color=#FF9900>◆</font>ホームページがリニューアルオープンいたしました!")';」
のままで置換してくれなくなってしまいました。どうすればいいのでしょう?
一応、responce_filesubstanceも書いておきます。
sub responce_filesubstance{
my($PathFile) = $_[0];
my($filesubstance);
#ファイルを開いて読み込む
open (IN,$PathFile) or die "cannot open $PathFile:$!";
flock(IN, 1);
while($LineTmp = <IN>){
$filesubstance = $filesubstance . $LineTmp;
}
close IN;
&jcode::convert(\$filesubstance, "euc");
#結果
return $filesubstance;
}
0554nobodyさん
03/06/18 02:45ID:???なんで外部JSをそのまま使わないの?
SSIなくても普通に使えるでしょ。
0555506
03/06/18 02:52ID:???JSの中身を更新できるスキル?があれば十分なのですが、
HTML知らないお客さんに納品するものなので、
外部JSの中身をコンパネで動作できればなと、。
0556nobodyさん
03/06/18 03:37ID:???置換する直前に$topicsを一度はき出して中身を確認したら?
eucに変換したモノをまたShift_jisに変換するのって意味あるのん?
0558492
03/06/18 06:06ID:???半角スペースで入れたら字下げ消えた(´Д`)
>>497
ありがとう、確かに処理の順番逆だったね(´∀`)
で、やってみたころ
相変わらずエラー表示が出ます
変数を表示させたところ
パスワードはマッチするようになりましたが
0559nobodyさん
03/06/18 09:34ID:???消えないようにするには、どうすればいいの ?
0560nobodyさん
03/06/18 10:18ID:???0561nobodyさん
03/06/18 10:19ID:???全角でもいいけど、えらっちゃうしね。
スペースを 変換してくれれば楽なのに…。
0563nobodyさん
03/06/18 10:54ID:???ファイルを読み込んでくれる関数はないですか?
0564nobodyさん
03/06/18 11:42ID:???JavaScriptスレで聞いてこい。
0566nobodyさん
03/06/18 15:57ID:yTFW11Glピクセル以上書くと折り返し表示してくれなく、80ピクセル以上に
テーブルが伸びてしまいます。
全角文字や半角カナ文字は80ピクセル以上だと自動改行してくれるのに
半角英数字だと改行してくれないのはなぜなのでしょうか?
また、改行できる方法を知ってる方がいましたら教えてください。
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:???■ このスレッドは過去ログ倉庫に格納されています