Perlコーディング初心者質問スレ Part 38
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
04/10/07 23:23:08ID:kiEzDCJF【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。
過去ログやお勧めサイトは >>2-10
0637nobodyさん
04/11/10 00:18:59ID:sQyPPo3Ncronでcgiを動かすにはどのように設定ファイルを書けば宜しいのでしょうか。
/public_html/a.cgi
にありますcgiを例えば1時間毎にa.cgi?a=1&b=2とパラメータを渡してcronで
実行したいのですが。
よろしくお願い致します。
0638nobodyさん
04/11/10 00:22:22ID:???0639nobodyさん
04/11/10 00:37:27ID:sQyPPo3N大変申し訳ありません。
該当スレを御存知でしたらお願いしたいのですが。
0641nobodyさん
04/11/10 05:09:30ID:???perl /public_html/a.cgi
パラメータは渡せるが動的にするのはcronじゃ無理じゃないかな〜(知らないだけかも)
ちなみにコマンドラインのときはGETメソッドじゃなく引数になるから受け方違うよ
a=1とb=2が決まってるなら
ファイルの最初に宣言した方が早い
どうしてもCGIとして動かしたいならばWWW経由で/public_html/a.cgiを呼び出すプログラムが必要
それよりコマンドラインでperlを使ったことなさそうだけど
作るときちゃんと文法チェックしてるのかな?
0642nobodyさん
04/11/10 08:39:47ID:QcwLl9v+晒し上げ。
0643nobodyさん
04/11/10 11:45:26ID:I1NueUmNとかして、ディスクの使用状況をテキストに書き出したいんだけど、
これじゃあ戻り値を取得できないですよね。
どうやったら取得できますか?
0644nobodyさん
04/11/10 11:55:42ID:I1NueUmN自己解決しますた。m(_ _)m
0645nobodyさん
04/11/10 16:07:28ID:???どのようにしたらいいのでしょうか?
ファイル作成後に「ダウンロード」とボタンを表示してクリックしたら
ファイルをダウンロードするみたいな感じです。
0646nobodyさん
04/11/10 17:04:37ID:I1NueUmNprint "<a href=\"file\">DL</a>\n";
0647nobodyさん
04/11/10 18:18:53ID:???結構な頻度で値が取得できません。
ですが、少し時間をおいて取得すると値が取得できるので、
cookie作成のスピードよりもリダイレクト後のページで値を取得してるっぽいです。
従いまして、cookie作成時に少し時間を開けてからリダイレクトしたいのですが、
sleepを入れても意味がありませんでした。
この様な場合の対処方法をご存知の方がいらっしゃいましたら、どうかご教授ください。
よろしくお願いいたします。
0648nobodyさん
04/11/10 20:55:28ID:sQyPPo3Naaa,bbb,ccc,ddd
111,222,33,4444
このようなファイルがありaaa,bbb,ccc,dddを読み込んだ後にaaa,bbb,ccc,dddを削除して
ファイルを上書きするような処理です。
よろしくお願いします。
0649nobodyさん
04/11/10 21:03:44ID:???「ダウンロード」とボタンをクリックしたらファイルを作成して
print "Location: http://www.example.com/file.zip\n\n"
0650nobodyさん
04/11/10 21:52:59ID:QZhMSK0DダウンロードボタンをクリックしてCGIでperlを動かした先で
$length = (-s $file);
print "Content-type: application/octet-stream\n";
print "Content-disposition: attachment; filename=hoge.dat\n";
print "Content-Length: $length\n\n";
open(fp, "<$file");
binmode(fp);
print <fp>;
close(fp);
するとOKだと思う
0651nobodyさん
04/11/10 21:55:59ID:QZhMSK0D削除したい行以外を別の一時ファイルに書き込んで、元のファイル名にリネームする
で良いんじゃない?
他にいい方法があれば知りたい
0652nobodyさん
04/11/10 21:57:30ID:???0653nobodyさん
04/11/10 22:21:12ID:???クッキーを食べない時と食べる時がある状況が良く分からないけど…。
<meta http-equiv="refresh" ..>
を使ってクライアント側で飛ばして見るとか。
# 状況は改善されない予感。
0654nobodyさん
04/11/10 22:24:11ID:QZhMSK0D0655nobodyさん
04/11/10 22:30:47ID:???あぼーんすると変な状態で残ったりする。別ファイルに書き込み、
書き終わったらrenameなら書き換え前か書き換え後のどっちかには
なるので、オレはこのほうが好き。
0657nobodyさん
04/11/11 00:08:27ID:???IEでcookieが急に読めなくなった。(前はできてました。)
プログラムAでcookie送信してプログラムBに遷移して
そのcookieを取ろうとしても取れなかった。
他のcookieは取得することができました。
ネスケでは大丈夫だったんだけどなぁ。
ちなみにCGI.pm使って
$hoge=param('hoge');
とやって$hogeが空になっており、
cookieのフォルダを見るとちゃんとそのcookieがありました。
0659nobodyさん
04/11/11 00:52:30ID:???0660657
04/11/11 01:49:17ID:???paramのとこcookieです。
>>659
クッキーの設定も疑って全て許可にしてもだめだったのです。
でも、今家のPCで同じスクリプト走らせたらできました・・・。
で、サーバの方も試したらできました。
仕事場のPCからやった時はできなかったんですよほほほ。
ご迷惑おかけしました。
0661nobodyさん
04/11/11 11:33:09ID:???エラー出したいんですが、
どうすればいいんでしたでしょうか?
~[0-9]を使えばいいことはわかるんですが・・・
if($a=^[0-9]){
echo"error";}
何か間違ってますか?(^^;
0662nobodyさん
04/11/11 11:35:42ID:???0665nobodyさん
04/11/11 13:59:06ID:???0666nobodyさん
04/11/11 14:33:41ID:tk5UM/xB記載されている内容を処理しファイルに書きたいのですが
可能でしょうか?
基本的なことですみません。
何の言語を覚えたらいいのかわかりませんので。
0667nobodyさん
04/11/11 14:54:37ID:???0668nobodyさん
04/11/11 15:18:47ID:tk5UM/xB以下のようなことをWindows XP上でしたいのです。
できますか。
実行したら、例えばこの板のスレッド一覧
http://pc5.2ch.net/php/subback.html
を読んで
インデックス/スレタイ/その時点での書き込み数
をCSVファイルに書き込むようなものです。
中でリンクから各スレを読んで>>1のハンドルも取得できればなおよいです。
0670nobodyさん
04/11/11 15:21:57ID:???0671nobodyさん
04/11/11 15:28:02ID:riaohoToperlプログラムをローカルPCで実行
ネット上のウェブページの情報を取得
いろんな処理
ローカルPCに保存
ってこときゃ?
0672671
04/11/11 15:29:21ID:riaohoToすまそ
0673nobodyさん
04/11/11 15:32:15ID:R3WWGPIlチェックして必要があれば弾いたり空いている場所に追加したり削除する
CGIを作りたいのですが・・・・。
ユーザー名の入ったファイルを行入力演算子で配列に読み込んで、
それをいろいろやってから再び配列に戻して、最後に
$i=0;
while($i<=$count){
print FILE "$username[$i]\n";
$i++;
}
みたいに、改行して出力すれば次にCGIを呼び出したときに再び
行入力演算子で配列に読みこめるファイルが作成できるのでしょうか?
何度もやったのですが、どうしてもうまくファイルが作成できないのです。
0674nobodyさん
04/11/11 15:33:41ID:???そんな感じぢゃな。
perlプログラムをローカルPCで実行 → ActivePerl をゲットせよ
ネット上のページの情報を取得 → LWPの使い方を習得せよ
解読処理 → HTMLをパースする方法、正規表現とか HTML::Parser とかを習得せよ
CSVファイルに書き込む → まあ何とでもなるぢゃろう
>>672
その FILE とかいうファイルハンドラは
当然書き込みモードで open されとるんぢゃろうな?
0676673
04/11/11 15:35:58ID:R3WWGPIlいえ、入力モードで開いて配列に読み込んで、
一旦閉じてから再び出力モードで開いてます
0677nobodyさん
04/11/11 15:46:34ID:tk5UM/xBありがとうございます。
>>675
覚えてからできないのがわかったら悲惨ですから
先に確認したいと思いました。
じゃ勉強始めます。
0678nobodyさん
04/11/11 16:00:47ID:???スレの中身見るのは、自分で作りな。
use LWP::Simple;
$url = "http://pc5.2ch.net/php/subback.html";
@lines = split(/[\r\n]/, get($url));
foreach my $buf (@lines) {
if ($buf =~ /<base href="([^\"]+)"/){
$base_ref = $1;
last;
}
}
foreach $buf (@lines) {
if ($buf =~ /<a href="(\d+)\/l50">(\d+):(.*)\((\d+)\)/){
$thethread = $1;
$num = $2;
$title = $3;
$rescount = $4;
print "$thethread, $num, $title, $rescount\n";
}
}
0679nobodyさん
04/11/11 16:42:01ID:???このスクリプトの問題点を調べたいのですが、どのようにすればよい
かアドバイスを頂けたらと思います。
利用しているスクリプトは、余裕派掲示板です。
http://specters.net/cgipon/
バージョンは、2.62と、3.00 beta7を利用しておりどっちが
CPUを食っているかはまだわかりません。
そこまでCPUを使ってるのにkillしないサーバ屋もサーバ屋ですが、
とりあえず、他人の迷惑になるので調査したいのですが、とっかかり
がわかりません。
発生頻度は、1-2日に1回位起きてるのかもという位で、まだ
詳しくはわかりません。
よろしくお願いします。
0680nobodyさん
04/11/11 16:49:47ID:???0683nobodyさん
04/11/11 20:23:40ID:???>レンタルサーバにてたまにcgiがCPU 90%を長時間(600hとか)使うことがあります。
600時間てあんた、一体何動かしてるんだ?
ほぼ一ヶ月だぞ?
0686nobodyさん
04/11/11 21:11:26ID:Z05OwTsMそれを指定した位置から指定した位置の複数文字([6]から[14]までの文字)を
$hogeに入れるにはどうしたらよいですか?
0687nobodyさん
04/11/11 21:16:03ID:???$hoge .= $hoge[$i];
}
0688nobodyさん
04/11/11 21:35:44ID:Z05OwTsM多謝!!
0689nobodyさん
04/11/11 22:09:33ID:???0690nobodyさん
04/11/12 00:37:35ID:???0691nobodyさん
04/11/12 00:44:05ID:???0692nobodyさん
04/11/12 00:47:37ID:???$value =~ s/\n//;としてもだめでした。
perlバージョンは最新です。windows2000です
0694nobodyさん
04/11/12 01:02:48ID:???0696nobodyさん
04/11/12 01:18:01ID:???0697nobodyさん
04/11/12 03:20:48ID:???$hoge .= $foo; と $hoge = $hoge . $foo; は同じ
>>692
漏れはどっちでも対応できるように $value =~ s/\r?\n//g; ってしてる。
0698nobodyさん
04/11/12 07:17:05ID:???思い出しました、ありがとうございます
0699nobodyさん
04/11/12 09:07:08ID:bxBJtrFyのような文字列中からアルファベット三文字のリストを抜き出そうとしています。
my(@list) = $_ =~ /(?:^|[^A-Z])([A-Z]{3})[^A-Z]/g;
foreach (@list) {
print "$_\n";
}
にしてみたのですが抜き出されるのは
AAA,DDD,FFFの3つでAAA_のマッチのあとのBBBとDDD_のあとのEEEがとれません><
0701nobodyさん
04/11/12 10:29:01ID:???これでどうよ?
my $t = "AAA_BBB ZZZZ-DDD_EEE/FFF.AAA";
my(@list) = $t =~ /(?:^|[^A-Z])([A-Z]{3})(?=[^A-Z]|$)/g;
foreach (@list) {print "$_\n";}
最後のAAAにマッチさせたくないのであれば|$の部分をカット
0702699
04/11/12 16:58:54ID:bxBJtrFyありがとうございました。
0703nobodyさん
04/11/13 12:05:38ID:???実行環境を判定して場合分けしようと思いましたが、定番の方法があれば教えてください。
一応、こんなことしか思いつかないのですが・・
$^X=~/exe$/i
0706nobodyさん
04/11/13 13:50:49ID:???my $os = $^O;
my $separator = '/';
if ($os =~ /^MSWin/i or $os =~ /^dos/i or $os =~ /^OS2/i){
$separator = '\\';
} elsif ($os =~ /^MacOS/i) {
$separator = ':';
}
でも構わないと思うけど。
# 手抜きするなら、/[:\/\\]/で区切るとか。
0707nobodyさん
04/11/13 15:05:09ID:???やりたいことをまずは書いたほうが解決は早いよ。
ディレクトリ部分を削除してファイル名のみにしたいとか。そんな感じじゃないの?
0708nobodyさん
04/11/13 17:15:37ID:OROQk2Kk方法はありますでしょうか?
0709nobodyさん
04/11/13 17:46:23ID:???はい
0710nobodyさん
04/11/13 17:49:37ID:j/c/9VEEinfoseekのwebメールサービスで本文の文字化けが起きてしまいます。
例)あああああ → ??????????
ヘッダには以下のものを設定してあります。
MIME-Version: 1.0
Content-Type: text/plain; charset=iso-2022-jp
Content-Transfer-Encoding: 7bit
ググってみたところ同じ問題を抱えているweb管理者さんがたくさんいることはわかったのですが
解決方法を見つけることはできませんでした。
文字化けさせない方法があったら教えてくださいませ。
0711nobodyさん
04/11/13 18:46:27ID:???0712nobodyさん
04/11/13 19:12:30ID:j/c/9VEEレスありがとうございます。
実は以前は""で括っていました。
これが文字化けの原因かも?と思い現在は""を外しているわけですが
やはり文字化けしてしまっているという状況です。
この問題が解決できれば、多くのWeb管理者さんが助かることになると思います。
(もちろん私もですが…)
どうか皆さん、お知恵をお貸しください。
0713nobodyさん
04/11/13 19:20:00ID:???0714nobodyさん
04/11/13 19:33:36ID:j/c/9VEEレスありがとうございます。
何度も見直しているのですが、PCのメーラから送ったものと特に違う箇所は無いのです。
(Received、Message-ID、X-Mailer等は抜かします)
Subjectは両方ともISO-2022-JPのBでエンコーディングして(されて)います。
0715nobodyさん
04/11/13 19:40:31ID:???とにかく化けたメールのヘッダを晒してみんしゃい
0716nobodyさん
04/11/13 19:42:20ID:???0717nobodyさん
04/11/13 19:56:16ID:???メール送信してみたが、文字化けはしない。
710の使っているCGIとHTMLのソースを見たら、原因が分かるかも。
0718nobodyさん
04/11/13 20:03:52ID:???>>708じゃないけど、よかったら教えてくださいな。
>>710
本文の文字コードが2022-JPかどうかをもう一度確認。
0719710
04/11/13 20:07:15ID:j/c/9VEEあまり綺麗なソースではないので恥ずかしいのですが、よろしくお願いします。
xxxの箇所は伏せさせてください。
my $mailer = '/usr/sbin/sendmail';
my $mlfr= 'xxx@xxx';
my $mlto= 'xxx@infoseek.jp';
my $mlsb= 'xxx';
my $mlmsg = "あああああ";
my $mlhd= "Reply-to: $mlfr" . "\n" . "MIME-Version: 1.0" . "\n" . "Content-Type: text/plain; charset=iso-2022-jp" . "\n" . "Content-Transfer-Encoding: 7bit" . "\n" . "From: $mlfr" . "\n" . "To: $mlto" . "\n" . "Subject: $mlsb" . "\n\n";
my $err = 0;
open( MAIL, "| $mailer -t -f'$mlfr'" ) or $err = 1;
if ( $err == 0 ) {
print MAIL $mlhd;
print MAIL $mlmsg;
print MAIL "\n";
close( MAIL );
}
なお、通常のメーラ、そしてyahooやhotmailなど他の無料メールサービスでは正常に表示されています。
0720nobodyさん
04/11/13 20:35:30ID:???0721nobodyさん
04/11/13 21:16:07ID:???でエラー出てないから、送ってるコードはiso-2022-jpじゃ無いだろ。
コード変換しろ。
0722710
04/11/13 21:17:27ID:j/c/9VEE鋭いご指摘ありがとうございます。
素晴らしく見事に見過ごしてました…orz
$mlmsgにコード変換かますことで解決しました。
皆さんありがとうございました。
0723nobodyさん
04/11/13 21:19:42ID:???- - - - - ここまで釣り - - - - -
0724nobodyさん
04/11/13 21:25:31ID:???...
0725nobodyさん
04/11/13 21:26:44ID:???|
│
/V\ J
/◎;;;,;,,,,ヽ
_ ム::::<,,゚ A゚>::| ジーーッ
ヽツ.(ノ:::::::::.:::::::.:..|)
ヾソ:::::::::::::::::.:ノ
` ー U'"U'
0726nobodyさん
04/11/13 21:33:59ID:???...
0727710
04/11/13 21:37:32ID:???でも決して釣りなどではありませんから、ええ本当に…('A`)
例えば大手サイトでもこんな感じで…
ttp://www.e-casio.co.jp/support/080.html
とにかくすみませんでしたorz
0729nobodyさん
04/11/14 00:51:05ID:???my ($err);
my $mailer = '/usr/sbin/sendmail';
my $mlfr= 'xxx@xxx';
my $mlto= 'xxx@infoseek.jp';
my $mlsb= 'xxx';
my $mlmsg = "あああああ";
my $mlhd= "Reply-to: $mlfr" . "\n" . "MIME-Version: 1.0" . "\n" . "Content-Type: text/plain; charset=iso-2022-jp" . "\n" . "Content-Transfer-Encoding: 7bit" . "\n" . "From: $mlfr" . "\n" . "To: $mlto" . "\n" . "Subject: $mlsb" . "\n\n";
if (open( MAIL, "| $mailer -t -f'$mlfr'" ))
{
print MAIL $mlhd;
print MAIL $mlmsg;
print MAIL "\n";
close( MAIL );
} else {
$err = 1;
}
関係ないけど、こんなのどう?
0731nobodyさん
04/11/14 09:59:57ID:???Reply-to: $mlfr
MIME-Version: 1.0
Content-Type: text/plain; charset=iso-2022-jp
Content-Transfer-Encoding: 7bit
From: $mlfr
To: $mlto
Subject: $mlsb
EOF
0732nobodyさん
04/11/14 10:57:46ID:???0733nobodyさん
04/11/14 13:07:57ID:???そのままprintしてもいいよね
print MAIL <<_EOF;
Reply-to: $mlfr
MIME-Version: 1.0
Content-Type: text/plain; charset=iso-2022-jp
Content-Transfer-Encoding: 7bit
From: $mlfr
To: $mlto
Subject: $mlsb
_EOF
0734nobodyさん
04/11/14 19:41:44ID:???sendmailがよきにはからってくれるが、明示的に
print MAIL <<_EOF;
Reply-to: $mlfr\r
MIME-Version: 1.0\r
Content-Type: text/plain; charset=iso-2022-jp\r
Content-Transfer-Encoding: 7bit\r
From: $mlfr\r
To: $mlto\r
Subject: $mlsb\r
\r
_EOF
とする方が望ましい。
0735nobodyさん
04/11/14 20:17:27ID:???0736nobodyさん
04/11/14 20:17:29ID:???Reply-to: $mlfr
...
EOF
0737nobodyさん
04/11/15 00:54:44ID:Pp2G7AAwperlのスクリプト中で、あるURLのhtmlファイルを取得して、そのファイルの
データを処理したいのですが、その取得方法がわかりません。
ぜひご教授お願いします。
■ このスレッドは過去ログ倉庫に格納されています