Perlコーディング初心者質問スレ Part 38
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
04/10/07 23:23:08ID:kiEzDCJF【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。
過去ログやお勧めサイトは >>2-10
0113nobodyさん
04/10/14 01:31:30ID:???まずurlにマッチングさせてからinnerかouterか判定させれば?
urlの正規表現についてはググればすぐに出てくるので。
あと、エスケープする必要があるものとそうでないもの調べてくれ。
0114nobodyさん
04/10/14 02:27:52ID:???ここはアルゴリズムを質問するスレではない。
「こういうアルゴリズムを考えたので Perl で実装したいんですが
どうコーディングしたら良いですか?」
という質問形式にして出直してきたまえ。
例えば、いったん各々の個数を全部数え上げるというアルゴリズムで行くなら、
ハッシュをインクリメントしていって、数え終った後でソートする、というのが素直だろうな。
0115nobodyさん
04/10/14 05:34:49ID:???0116nobodyさん
04/10/14 06:51:34ID:ETIFZxwkNet::SSH::Perlを使ってサーバに入り、任意のメールアドレスに対してメール
を送信するスクリプトを作る。
【スクリプト】
#!/usr/bin/perl -w
use Net::SSH::Perl;
$host = "www.test.net";
$user = "hogehoge";
$pass = "2ch_test";
$cmd = "mail hoge\@hoge.ne.jp";
$body = "www.test.net is ok\n";
$ssh = Net::SSH::Perl->new($host);
$ssh->login($user, $pass);
$ssh->cmd($cmd);
$ssh->cmd($body);
【説明】
スクリプトを実行したとき、指定したサーバにログインすることはできるので
すが、それ以上処理が進まず、メール送信もされません。ただ、スクリプトを
実行させてキーボードから文字を入力してCtrl-Cで処理を中断するとメールは
配信されます。
[mona@localhosst mona]% ./test.pl<Enter>
これはテストです。<Enter>
Ctrl-C
【教えて欲しいこと】
$bodyの内容を自動的に標準入力に代入し、メールを送信する。
加えて、サーバからの切断も自動的に行ってくれる。
以上の二点を解決したいです。
よろしくお願いします。
0117nobodyさん
04/10/14 08:14:10ID:???for(@a){
@b = split / | /; #全角or半角スペースで切る
}
for(@b){
print;
}
というコードを実行すると何故か
ゼ
と表示されます。これはどういうことでしょうか?
$aの「ァー」の部分を色々変えてみましたが、
こうなるのは「ァー」と「ぁー」です。
どなたか分る方いたら教えてください。
0118nobodyさん
04/10/14 08:36:03ID:eMIY0T+Hの表はユーザーエージェントの解説なのですが、表の一番下にあるような
「J-PHONE/4.0/J-SH51/SN*********」という文字列で、
SN以降を削除し他の部分だけを残したいんです。その場合の正規表現は
どう書けばいいのでしょうか?
$abc =~ s/(.+)[SN](.+)/$1/; だとダメでした。どなたかお力添えをお願いします。
0120nobodyさん
04/10/14 10:36:01ID:???たぶんソースをeucで書いてるだろうから、
use encoding 'euc-jp';
を頭に追加すれば直ると思うが。
unicode機能を有効にしないperlでは日本語の2バイトコードは
1つの文字としては扱えず、1バイトずつバラバラのバイト列と
なってしまう。
"ァー" = "\xa5\xa1\xa1\xbc"
/ | / = /\xa1\xa1| /
なので、ァーの部分は真中の\xa1\xa1の部分を区切りとして
splitされてしまい、\xa5\xbcが出力される。これは「ゼ」。
同様に「ぁー」のときは「ぜ」になってるはず。
0121nobodyさん
04/10/14 10:38:58ID:???http://www.din.or.jp/~ohzaki/perl.htm#JP_EUC_JP
ここから下を読むことを勧める。
0122118
04/10/14 10:39:49ID:eMIY0T+Hレスありがとうございます。
でもそれではうまく行きませんでした。
SN以降が削除されずにそのまま出力されているようです。
0123118
04/10/14 10:43:11ID:eMIY0T+H感謝感謝です。ありがとう。
0125117
04/10/14 12:42:18ID:???コードはEUCで書いてるのですが
扱ってるデータがS-JISだったりします。
use encoding 'euc-jp';
したら、データが化けてしまいます。
そういう場合
:コードの文字コードと 扱ってるデータの文字コードが違う場合:
どう対処したらよいのでしょうか?
0128nobodyさん
04/10/14 13:45:02ID:???最低限の検索ぐらいはやった上で質問しなきゃ。
コーディングでググれば?
検索わからない?
http://pc6.2ch.net/pcqa/
0131117
04/10/14 14:05:05ID:???http://www.din.or.jp/~ohzaki/perl.htm#JP_Trans
にそのまんま答えが書いてありました。
お騒がせいたしました。
0132nobodyさん
04/10/14 17:55:56ID:8JHhLpH4は
my *takesi;
と同じと考えてよろしいでしょうか?
0133nobodyさん
04/10/14 18:02:41ID:???コーディング 【coding】
プログラミング言語を使ってソフトウェアの設計図にあたるソースコードを作成すること。
(e-Wordsより)
>>126は何故に>>125に対してこれを読めって言ったの?
文字コード問題は設計とは関係ないってか?そんなアホな事はないよな。
そもそもよほどのことでない限りコーディングと無関係にはなれないんだがな。
例えば俺の話とかなwww完全にすれ違いってやつだ。
まあお前ら少しは言葉の勉強もしろよ。
0136nobodyさん
04/10/14 23:56:21ID:mdncFzXxこの shift ってどういう意味なんでしょうか?
関数ですか?
0137nobodyさん
04/10/15 00:34:17ID:???$c = "にちわ"
変数$aに$bと$cを結合したもの、つまり
"こんにちわ"を代入するには
$a = $b.$c
で大丈夫でしょうか?
0138nobodyさん
04/10/15 00:39:03ID:???>>137と似てるんですが、
$b = "co"
$c = "jp"
の場合に $a に co.jp を代入するにはどうすればいいですか?
$a = $b\..$c
で合ってます??
0142nobodyさん
04/10/15 08:34:27ID:???何スレぐらいかかるだろうか。
0143nobodyさん
04/10/15 08:35:47ID:0zK8noVIlog.txtを編集するために
bbs1.cgiでflockした場合
bbs2.cgiで編集しようとした時にも
ロックされてるんですか?
0144nobodyさん
04/10/15 10:12:58ID:???shift (@data);
とかならわかるんですけど、
スカラー = shiftという意味がわからないのです。
0145nobodyさん
04/10/15 10:54:53ID:???という文のみのファイルを作って、プラウザからアクセスすると指定URLに飛びますが、
上記の文より前に
print "Content-type: text/html\n\n";
などと書かれていると、ブラウザ上に「Location: http://www.2ch.net/」という文字列が表示されてしまいます。
やりたい事は、フォームから検索をかけて、検索処理中の間は特定のページを表示して、
検索が終了したらその結果を表示する画面に遷移する、ということです。
「検索処理のリクエストを受ける → 特定のページを出す「お待ちください」など → 検索終了 → 結果表示」
要するに、1回のPerlの処理で、ブラウザ上で複数のページ間を遷移させる事は可能でしょうか。
0146nobodyさん
04/10/15 11:09:31ID:???マニュアルのshiftの項をよく読め。
ttp://perldoc.jp/docs/perl/5.6.1/perlfunc.pod とか。
0148nobodyさん
04/10/15 13:29:36ID:???例えば
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<meta http-equiv="Content-Style-Type" content="text/css">
<meta http-equiv="Content-Script-Type" content="text/Javascript">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="pragma" content="no-cache">
を、
print "Content-type: text/html; charset=Shift_JIS\n";
print "Content-Style-Type: text/css\n";
print "Content-Script-Type: text/Javascript\n";
print "cache-control: no-cache\n";
print "pragma: no-cache\n\n";
にした場合、きちんと返ってるのでしょうか?
0149nobodyさん
04/10/15 13:33:40ID:???0150nobodyさん
04/10/15 13:45:29ID:???0151nobodyさん
04/10/15 13:55:55ID:???0152nobodyさん
04/10/15 14:55:30ID:???一点目のアドバイス。
「きちんと返っているかどうか確認する方法を教えてください」と質問すれば
いじめられることもなかっただろうに。
二点目のアドバイス。
どっちにしても Perl と全く関係ない質問なので、
WebProg初心者スレなどで聞く方が正解。
0153nobodyさん
04/10/15 15:35:31ID:???bbs2.cgiがflock使うなら勿論ロックになる。
flockはセマフォでの唯一のロック獲得争いにすぎない。
そのロックしないプログラムには通用しない。
0155nobodyさん
04/10/15 16:21:08ID:???bbs.cgiでlog.txtに書き込みするためロックしました
そのままdelete.cgiでlog.txtの書き込みの一部を削除しようとした場合には
ロックはされてないということでいいんですか?
0156nobodyさん
04/10/15 16:57:04ID:???カギのかからないトイレのドアに使用中と札を下げるようなもの。
その札を見てくれる奴には効果はあるが、ハナから見ちゃいねー
奴には無効。delete.cgiがどっちの奴かはオレにはわからない。
0157nobodyさん
04/10/15 17:40:29ID:???delete.cgiが、flockでlog.txtに対するロックを獲得しようとすれば、ちゃんと排他制御がなされる。
(bbs.cgiがロックを返すまで待つか、即座に獲得失敗するかはモード次第)。
しかし、delete.cgiがflockを行っていないのなら、bbs.cgiによる排他制御は無意味。
bbs.cgiがロックを得ている・得ていないに関わらず操作可能。
flockは、お手軽なロック機構にすぎない。
(ロック用ディレクトリとか、スリープするか即座に失敗させるかを自力でやらなくて良いって程度のもの)。
0158nobodyさん
04/10/15 17:49:21ID:???http://pc5.2ch.net/test/read.cgi/php/1024795138/
0159nobodyさん
04/10/15 17:55:33ID:???>flockはセマフォでの唯一のロック獲得争いにすぎない。
これは勘違いだったようだ。perlのflockがセマフォ使ってるわけじゃないか。
もう氏ぬ。
0160nobodyさん
04/10/15 20:46:48ID:M3+xPf5Cどうしたらいいのでしょうか? 普通はブラウザのボタンから起動されると
思うのですが、ある時間が来ると自動で動かしたいのです。よろしくお願いします。
0162nobodyさん
04/10/15 23:13:44ID:???下の下の方(flock(2)やfcntl(2)の下のほう)ではセマフォつかってるよ。多分。
それでも↓は意味不明だけど。
> >flockはセマフォでの唯一のロック獲得争いにすぎない。
0163nobodyさん
04/10/16 02:52:59ID:???どちらも実行ステップは100だとしても、やはり後者の方がサーバに対する
負荷は少ないのだろうか。
0164nobodyさん
04/10/16 03:14:53ID:???0166nobodyさん
04/10/16 12:33:14ID:???計測の方法が分かりません。。。
ググったらWin鯖は無理と書いてあったんですが、Win鯖で出来るソフトありませんか?
0168nobodyさん
04/10/16 21:45:26ID:???ちゃんと排他は行われるでしょうか?
0169nobodyさん
04/10/16 23:05:32ID:???# カウントファイルの読み込み
open(FILE, "+<./count.dat") or die("エラー:カウントファイルが開けません");
eval{ flock(FILE, 2);};
$count = <FILE>;
# カウントファイルの書き込み
seek(FILE, 0, 0);
print FILE ++$count;
close(FILE);
# サーバ出力
print <<END;
Content-type: text/html
中略)
END
Apachでエラーログをみると Premature end of script headers と出てしまいます。
どの部分を訂正すればよいのでしょうか?ご存知の方、ご指導お願いします。
0170nobodyさん
04/10/16 23:13:07ID:???Content-type: text/html
中略)
0171nobodyさん
04/10/17 01:00:06ID:???このdieの部分はどこに出力されるのですか?ログとか?
0172nobodyさん
04/10/17 01:03:49ID:???0173nobodyさん
04/10/17 01:38:29ID:sz1VkLQM$dbh->{NAME}
が配列へのリファレンスだとして、
$dbh->{NAME}->[0]ではアクセスできる状態です。
foreach($dbh->{NAME})
{
print;
}
foreach($$dbh->{NAME})
{
print;
}
等とやってもうまくいきませんでした。
0174nobodyさん
04/10/17 01:39:32ID:???0176nobodyさん
04/10/17 10:10:48ID:???中略)の部分は
<html>
<head><title>perlアクセスカウンター</title></head>
<body>
<P>あなたは$count番目の訪問者です。</p>
</body>
</html>
END
Premature end of script headers
エラー:カウントファイルが開けません のエラーログが出ます。
open or die の文がおかしいのかと思ったのですが、良くわかりませんでした。よろしくお願いします。
0177nobodyさん
04/10/17 10:20:37ID:???Content-type:text/htmlの後に改行が2つ(\n\n)必要だった希ガス
0178nobodyさん
04/10/17 10:21:41ID:???0179nobodyさん
04/10/17 13:45:28ID:???双方が協調して動作するためには、同じ方式のロックメカニズムを使用する必要があるが、
perlのflockはOSが提供しているflockとは限らない、PHPは知らない。
プラットフォームインディペンデントに作るなら、昔ながらのロックファイル方式か、
OSの提供する排他制御のプリミティブを直接呼び出すのがいいだろう。
0180nobodyさん
04/10/17 22:56:51ID:???0183180
04/10/18 01:23:59ID:???0184nobodyさん
04/10/18 04:17:33ID:???sub a
{
my $daskin;
$daskin="かきくけこ";
&b;
&c;
}
sub b
{
my $daskin;
$daskin="あいうえお";
}
sub c
{
print "$daskin";
}
こういったスクリプトを書いた時、&a、&b、の中で$daskinは局所化されているので
&c内のprintの表示が空になることを期待していたのですが、「あいうえお」と表示されてしまいます。
変な質問ですが、みなさんにとっては納得のいく結果でしょうか?
私の局所化処理が間違っている場合、教えて下さいm(__)m
0185nobodyさん
04/10/18 05:07:01ID:???自己解決いたしました。
上記のスクリプト、ここへの転載も含め、私の記述が間違っていたようです。
0186nobodyさん
04/10/18 13:44:39ID:???メッセージ:
$message
ここまで
EOF
こういう記述があるとして、$messageにはランダムにメッセージが入るのですが、
ここに何も文字列が入らなかった場合、HTMLで見ると
メッセージ:
ここまで
このように、間が空行になってしまいます。
ここを上手く詰められるような記述方法は無いでしょうか。
0187nobodyさん
04/10/18 13:54:10ID:???メッセージ:
$messageここまで
EOF
0189nobodyさん
04/10/18 18:54:11ID:???sprintf("%s, %02d-%s-%4d %02d:%02d:%02d GMT",
$day,$mday,$mon,$year+1900,$hour,$min,$sec);
というような形にしたいのですが、曜日だけが変換のネックと
なっています。どのようにこの日の曜日を計算させればよいの
でしょうか?
0191nobodyさん
04/10/18 21:38:36ID:???2.http://bbb.b.b/b/cgi
1のプログラム上から引数を渡して2のプログラムを動作させて
結果を1のプログラムに返すようなことって可能でしょうか?
2のサーバーのローカルにあるデータベースからデータを取得して
1のサーバーのローカルにあるデータベースにデータを保存したいと
おもっております。 言語はperl使用です。
0193nobodyさん
04/10/19 10:09:36ID:???何スレも前で既出のもんとかを既出の一言で片付けられたってわかるわけねーだろアフォ
どうせ本当に既出かどうかの確認もしてねぇんだろ?(pp
ん?何スレ目で話題が出たか言えるか?無理だろうなぁ日本語読めてないっぽいもんなぁ(・∀・)ニヨニヨ
0196nobodyさん
04/10/19 14:27:41ID:IcRPasE8request() とrequest()の間ってやっぱsleepとか入れて間を開けた方がいいのでしょうか?
具体的には ヤフーの株価データなんですけど
0198nobodyさん
04/10/19 17:42:02ID:6g0jZqZR0199nobodyさん
04/10/19 17:45:10ID:???0200nobodyさん
04/10/19 19:19:06ID:???0201nobodyさん
04/10/19 20:44:07ID:AGmXypRw現在、ADSLですが、DDNSは使っていないので、固定Webアドレスが保証できない状態です。
ADSLモデムのルーター機能を通していますので、当然ルーターにグローバルIPが振られてます。
では、プライベートIP上のCGI実行Progでこのルーターのグローバル
IPを得ることはできます?
あるperlのCGI実行スクリプトがWebサーバー上のフォルダへのフルパス(http://〜)
を要求しているので、グローバルIPが固定でない場合ですから、その都度prog的にIPを取得すれば使えるのでお願いします。
win me
AN HTTPD
ActivePerl5.8.4
です。
0202nobodyさん
04/10/19 20:57:26ID:???ページの取得にはLWP使用。
0203nobodyさん
04/10/19 21:25:04ID:???片方ではcommon.plというところでとまってしまいます
片方ではすんなり動きます
おそらく何か重要な部分を設定ミスしてると思うのですが
わかる範囲でチェックをしたつもりなのですが
1から重要な場所をチェックできるようなサイトをどなたかしりませんか?
もしくは直感的にどこが悪いか指摘していただいても結構ですので
よろしくお願いいたします。
0204nobodyさん
04/10/19 21:36:22ID:???0205201
04/10/19 22:15:51ID:???ありがとうございます。
ルーター設定ページを読み込んで、読み取る方法も確かにそれもありですね
ベタですね。確かに^^
おそらくActivePerlなので、Win用ActiveXコンポーネント(dllなど)が利用できるので
できますよね。WIN32APIも呼べるはずですが、…そのサンプルを今探しております。
P…面倒だからやはりDDNSか固定IP…
いやがんばります。できたら報告致します・
0206nobodyさん
04/10/19 23:13:46ID:???0208nobodyさん
04/10/20 04:50:52ID:aP/RN7icそれだけじゃわかんない。
0209nobodyさん
04/10/20 10:36:58ID:???for($i=2;$i>0;$i--){
if (rename("file.unlock","file.lock")) {last;}
}
if($i<0){
die "Failed file lock";
}
処理
rename("file.lock","file.unlock");
これに「異常終了しファイルロックが1分以上かかっていたら修正する」という処理を入れたいんですが、どんな方法がありますか。
0210nobodyさん
04/10/20 10:41:01ID:???条件が $i>=0 です。
0211nobodyさん
04/10/20 11:05:53ID:???http://www.din.or.jp/~ohzaki/perl.htm#File_Lock
http://pc5.2ch.net/test/read.cgi/php/1097158988/
■ このスレッドは過去ログ倉庫に格納されています