Perlコーディング初心者質問スレ Part 56
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2007/09/16(日) 19:49:43ID:???【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
お勧めサイトは >2 以降
前スレ ttp://pc11.2ch.net/test/read.cgi/php/1180492441/
過去ログ倉庫 ttp://user.ftth100.com/mirrorhenkan/perl/
0348336
2007/10/14(日) 00:16:57ID:???諦めてUAで判定します。
0349nobodyさん
2007/10/14(日) 03:31:42ID:???0350nobodyさん
2007/10/14(日) 06:50:16ID:???0352nobodyさん
2007/10/14(日) 07:54:34ID:???別サーバーにあるファイルの情報を参照する方法はあるのでしょうか?
あるのでしたら方法をお教え下さいますようお願いします。
0353318
2007/10/14(日) 08:50:07ID:a8OZDemC別にバカにしてるわけでもないのに、どうしてすぐそうムキになるかね。
逆に聞きたいが、自分は頭が固くないとでも思ってるのかい?
0354nobodyさん
2007/10/14(日) 09:23:55ID:???日雇いで次の日に来るかどうか解らない奴を雇う?
スキルレベルも解らずに雇う?
つか、銭もらえるだけのスキルはあるのか?
0355318
2007/10/14(日) 12:02:37ID:a8OZDemC>日雇いで次の日に来るかどうか解らない奴を雇う?
もしかして日雇い知らない?
プログラミングに関わらずどんな仕事でも適当なやつはいらないし雇わないよ。
>スキルレベルも解らずに雇う?
どんな職業でも同じ。
君は雇う側になったことがなさそうだ。
0356nobodyさん
2007/10/14(日) 12:10:23ID:???ま、いちばん悪いのは病院に連れて行かない親なわけだが
0357nobodyさん
2007/10/14(日) 13:05:35ID:9kSbwdFLところが、特定の人だけ同時に3回記録されています
WindowsNT5.1 ブラウザが「Sleipnir」
たぶんブラウザのせいだと思いますが、
1回のアクセスでサーバに3回の動作をさせている事になります
一体どういう事なのでしょう? perlの書き方のせいでしょうか?
0358nobodyさん
2007/10/14(日) 13:19:59ID:???0360nobodyさん
2007/10/14(日) 18:22:36ID:9kSbwdFL画像付きといってもファイルをたまにアップするだけで
ほとんどの利用はテキストの書き込みと、BBSの読み込みです
会員制サイトなのでアクセスの数は少ないです
サイトの関連ログが飛ぶトラブルがあって原因の一つと思います
まず、なぜこの環境の人がアクセスすると、同時刻に3回CGIが動作して
しまうのか、その原因を知りたいです
BBSのスクリプトでは、@の配列に入れたものをforeachで展開しながら
html表示します、アクセスログはこのプロセスに入れ込んでます
0361nobodyさん
2007/10/14(日) 19:25:16ID:???なんかをしてるんじゃね?
本人に聞いたらいいよ。
0362nobodyさん
2007/10/14(日) 19:59:35ID:RGItsPbeCPANモジュールまとめサイトってないですかね?
いろいろググったけどそれらしきものがなかったので。
0363nobodyさん
2007/10/14(日) 20:01:11ID:RGItsPbe追記
日本語モジュール解説 まとめサイトです
0364nobodyさん
2007/10/14(日) 20:37:02ID:???0365nobodyさん
2007/10/14(日) 20:42:54ID:???のですがまずcgiでアクセスするにはどうすればいいでしょうか?
0366nobodyさん
2007/10/14(日) 20:49:09ID:RGItsPbeそこで全部見れるんだ。
ありがとー
結構数すくないっすね
ありがっつ
0367nobodyさん
2007/10/14(日) 22:03:04ID:5YQaKvWDuse LWP::Simple;
$buff = get("http://www.....");
print $buff;
これでとりあえずソースだけは取ってこれたのですが、テキスト(記事)の部分だけ取り出す方法がわかりません。
よろしくお願いします
0368nobodyさん
2007/10/14(日) 22:05:45ID:RGItsPbe正規表現でちょちょいのどんじゃないですかね?
一度調べてみることをおすすめします。
0369nobodyさん
2007/10/14(日) 22:15:05ID:9kSbwdFLなるほど
当方MacなのでParallelsのWinに「Sleipnir」入れてみましたが、
プラグインかなにかなんでしょうね
有り難うございました
0370nobodyさん
2007/10/15(月) 00:22:13ID:???最近はこういうのが流行みたいです
Web::Scraper
http://search.cpan.org/~miyagawa/Web-Scraper/
0372nobodyさん
2007/10/15(月) 00:44:21ID:???0373nobodyさん
2007/10/15(月) 01:06:24ID:???http://www.nicovideo.jp/watch/sm1237738
0374nobodyさん
2007/10/15(月) 03:46:48ID:???0375nobodyさん
2007/10/15(月) 05:35:56ID:???改善案を出す
パッチ送る
0376nobodyさん
2007/10/15(月) 12:15:17ID:???scrAPIは女の様な軟弱者が使う物
0377nobodyさん
2007/10/15(月) 14:20:07ID:???ニコニコ垢なんかもってないし使いたくも無い。
0378nobodyさん
2007/10/15(月) 21:15:14ID:???0379nobodyさん
2007/10/15(月) 22:05:51ID:???http://search.cpan.org/search?m=all&q=Cal&n=100
0380nobodyさん
2007/10/15(月) 23:41:31ID:???一定期間ごとにファイルに書き込むことしか思い付きません。
0382nobodyさん
2007/10/16(火) 06:05:03ID:???って何かいいことあるの?
0383nobodyさん
2007/10/16(火) 08:47:04ID:???それとも意味を聞いてるのか?
とりあえず「perl コマンドバッファリング」あたりでググれ。
0384nobodyさん
2007/10/16(火) 10:56:39ID:???ローカルではちゃんと動くのにサーバーにアップすると凍ってしまいます。
リストにある複数のブログのrss取得して最新のブログ3件の記事表示、みたいなのがやりたいんですが、
サーバーがLWPの許可してないと難しいですか?
なにかいいやり方あったらお教えください。
0385nobodyさん
2007/10/16(火) 11:11:22ID:???input.txtという名前に下のようなfpingの出力を入れ
www.yahoo.co.jp:[0], 84 bytes, 18.1 ms (18.1 avg, 0% loss)
www.yahoo.co.jp:[1], 84 bytes, 23.2 ms (20.7 avg, 0% loss)
18.1
23.2と出力したいです。
bytes,より前を切り取り、ms ( も切り取ろうとして
$fping = "./input.txt";
open(A,"$fping")|| die "Can not open file";
@b = <A>;
close (A);
foreach $c(@b){
$c = grep(/(.*?)bytes, (\d{1,4}\.\d{1,2} ms) \(/,$c);
}
foreach $c(@b){
print "$c\n";
}
というプログラムを作ったんですが、うまくいきません。
どこを直せばいいでしょうか?
0388nobodyさん
2007/10/16(火) 12:40:52ID:???出遅れた…。
perl -lne "print /(?<=bytes, )(.+?)(?= ms)/" input.txt
0389nobodyさん
2007/10/16(火) 13:22:24ID:???どこの鯖使ってるか知らんが、LWP使えないようにしてるってことは
FWでoutboundが遮断されてる可能性が高く、だとすればどうしようもない
0390nobodyさん
2007/10/17(水) 00:29:17ID:7VxwUF8E0391nobodyさん
2007/10/17(水) 00:37:06ID:???0393nobodyさん
2007/10/17(水) 08:03:38ID:BedUMdjt下のような流れのcgiで
複数のクライアントから接続された場合
変数$gHogeはクライアント毎に保たれますか?
それとも上書きされちゃいますか?
my $gHoge = ""; #クライアントからポストされた値が入る。
〜$gHogeを扱う長めの処理が続く。
0396nobodyさん
2007/10/17(水) 23:05:49ID:7VxwUF8Eわからないので要望スレに逝ってきますorz
0398nobodyさん
2007/10/18(木) 01:48:20ID:???0399バターズ
2007/10/18(木) 22:40:14ID:???ダブルコロンって言うんだよ
0400nobodyさん
2007/10/20(土) 00:37:33ID:Ja84SJeF属性は生きるってどこかに書いてありました
どういうことでしょう
ssiのhtmlファイルの中に書いた、iframeのCGIまたは#exec cgiで
クッキー認証できなかったら全画面を再認証画面に飛ばしたいのですが、
やはり無理でしょうか?
0401nobodyさん
2007/10/20(土) 05:18:19ID:VLTga6QI<a href="hoge.html">hoge</a>
EOM
と、
print "<a href=\"hoge.html\">hoge</a>\n";
ではどちらの方が実行速度が速いですか?
0402nobodyさん
2007/10/20(土) 06:50:46ID:???ほぼ同じ。
http://boobar.hp.infoseek.co.jp/bench/print.txt
0403nobodyさん
2007/10/20(土) 07:40:43ID:VLTga6QI大変参考になりました。
0404nobodyさん
2007/10/20(土) 07:47:37ID:x+Q9ulv4以下のスクリプトについて質問です。
outフォルダ内の.txtファイル全てに対して
ある作業をするというスクリプトなんですが、
ファイルオープンのところでそんなファイルはないから
開けないというエラーが出力されます。
例:hoge.txtがある場合
OPEN ./out/hoge.txt file: No such file or directory at check line 22.
どこが間違ってるか教えてください。お願いします。
OSはWindowsXPです。
my @directories_to_search = ('./out/'); #対象のフォルダ
find(\&wanted, @directories_to_search);
sub wanted{
my $filePath = $File::Find::name;
my $find = index( $filePath, ".txt" ); #.txtを対象
unless ($find >= 0) {
return 1;
}
open FH_READ, "<$filePath"
or die "OPEN $filePath file: $!";
#ある作業をする。
close FH_READ;
}
0406404
2007/10/20(土) 08:33:09ID:???え?open文のor dieのエラーメッセージが出力されているから
open文でエラーが発生していると思うんですが・・・
0407nobodyさん
2007/10/20(土) 10:42:05ID:???まさかmod_perlじゃないよな?
0409半角全角が混在する行が一定の文字数を超えたら折り返すようにしたい
2007/10/20(土) 14:21:49ID:g/E6yd0f送信するメールの本文において、半角全角が混在する行の文字数を数え、
一定の文字数(例えば半角72文字、全角36文字)を超えた行だけを
強制的に折り返したいと考えています。
どのようにするのがよいでしょうか?
lengthはバイト数を返す関数なので、
全角文字の真ん中で折り返されると困ることになると考えてます。
もしかすると、長い行はsendmail側が自動で折り返してくれたりするのでしょうか?
それとも、何かほかの関数で簡単に数えたりできるのでしょうか?
なお、カスタマイズの自由度を考えて自作しているので、
「どこそこのメールフォームを使え」というのは勘弁してください。
以上、よろしくお願いします。
0410nobodyさん
2007/10/20(土) 14:28:07ID:o1wAy6B9$@ だと、evalでのエラーの値が入る
でも、実行値は...?
お願いします。
0411nobodyさん
2007/10/20(土) 14:37:23ID:???$result = eval($hoge);
じゃダメなん?($resultに実行結果、$@にエラーメッセージ)
参考
ttp://www.tohoho-web.com/wwwperl2.htm#eval
0412nobodyさん
2007/10/20(土) 14:55:48ID:o1wAy6B9短い$hogeだと関数が成功した1しか返さないことがあるようでアレ違うわと思っていました。
>>409
ちょっと離れるので投げっぱなしになってしまいそうだけど
解答してくれる人が現れる間に考えていました
use utf8;
use Encode;
$str = '
eval ($hoge); の実行した値を変数に入れるにはどうしたらいいでしょうか?
$@ だと、evalでのエラーの値が入る
でも、実行値は...?
お願いします。
';
@stream = split(/\n/,$str); #最初に渡された文字列を 改行 を区切りとして @stream に配列として読み込んだ
map{ s{(.......)}{$1\n}g } @stream; #”8文字”単位で改行を入れてる
map{print encode(sjis,$_)}@stream; #各行を出力するときにsjisに変換してる
とか、なかんじでどうよ?
ただし1バイト文字の扱いがなんか変。
*たぶんutf8でけつまずいてるかんじ。
0414409
2007/10/20(土) 17:45:16ID:???これです。こういう機能がほしかったんです。
jcode.plにはありませんでしたが、Jcode.pmにはありました。
これまで使っていたのがjcode.plだったのでが、
MIMEヘッダの機能も強化されているようなので、Jcode.pmに乗り換えようと思います。
どうもありがとうございました。
0415nobodyさん
2007/10/20(土) 18:24:36ID:???0417nobodyさん
2007/10/20(土) 19:44:36ID:???0418nobodyさん
2007/10/20(土) 20:12:44ID:???0419nobodyさん
2007/10/23(火) 05:26:38ID:???0420nobodyさん
2007/10/23(火) 14:21:34ID:???0421nobodyさん
2007/10/23(火) 15:27:18ID:???UTF8な日本語テキストの半角カナを全角にしたいと思ってEncode::JP::H2Zを使おうと思いました。
しかし、一部の文字(〜など)がEUCに変換する段階で?に変換されてしまい、困ってしまいました。
とりあえず、コードポイントにフォールバックできることがわかったので、
以下のように書いてその場をしのぎましたが、コードポイントを検索して文字に置換するという
作業が入ってしまい(しかも無駄に複雑)、どうもしっくりきません。
もっと簡単にする方法はありますか?
$text = encode("eucjp", $text, Encode::FB_PERLQQ); # EUCに変換
Encode::JP::H2Z::h2z(\$text); # 全角変換
$text = decode("eucjp", $text);
$text =~ s/\\x\{([0-9A-Fa-f]+)\}/pack("U*", hex($1))/eg; # コードポイントを文字に
0422nobodyさん
2007/10/23(火) 17:42:25ID:???#!/usr/local/bin/perl -w
use strict;
use Encode qw(from_to);
use Encode::JP::H2Z;
my $text = 'このファイルはUTF-8で〜半角カナ混じりの文字列';
from_to($text, utf8 => 'cp932');
from_to($text, shiftjis => 'euc-jp');
Encode::JP::H2Z::h2z(\$text);
print $text;
__END__
別解。
use Unicode::Japanese qw(unijp);
print unijp($text)->h2zKana->euc;
0423421
2007/10/23(火) 20:32:44ID:???ありがとうございます。その変換法で化けなくなりました。
後学のためお聞きしますが、Encodeではutf8を直接EUCにマップできないのでしょうか。
SJISを経由するのはわかるのですが、cp932をshiftjisに読み替えるなど、
トリッキーなことをやっていますね。
機種依存文字(�@など)がある場合もそうですが、utf8とEUCの変換法は
どうもよくわからないです。
機種依存文字とか、どうやってEUCに変換するんでしょうか
0424nobodyさん
2007/10/23(火) 22:43:56ID:???ttp://search.cpan.org/dist/Encode-EUCJPMS/
0425nobodyさん
2007/10/24(水) 01:04:04ID:???メールフォームを使っててブラウザとサーバの間はSSLで暗号化してます
でもサーバからsendmailで送信するメールも暗号化してないと意味ないですよね?
Perlでどうやってやってます?S/MIMEかPGPが使えるの?(´・ω・`)
0426nobodyさん
2007/10/24(水) 01:05:27ID:???0427421
2007/10/24(水) 02:01:47ID:???なるほど、ぐぐってみてわかりました。
EncodeーEUCJPMSでcp51932も使えるようになるんですね。
標準のEncodeになんで実装しないんだろ、これ。
0428nobodyさん
2007/10/24(水) 06:10:09ID:???http://search.cpan.org/search?m=all&q=PGP&n=100
http://search.cpan.org/search?m=all&q=S%2FMIME&n=100
求められる安全度、対象ユーザのITリテラシ、かけられるコスト
等を検討すると、暗号化メールの使えるシチュエーションは
かなり限られてそうだ。金融機関やNSPだと大抵郵送だな。
0429nobodyさん
2007/10/25(木) 16:41:10ID:???これの実装がうまくいきません。
例えば
tenis ball は tenis or ball に変換するけど
'tenis ball' はそのままっていうのはなんとか出来たんですが、
'tenis ball' 'base ball' のときは
'tenis ball' or 'base ball' にするのがどうしても出来ません。
orを入れたい場所もクォートに囲まれてると判断されてしまうのです。
どなたか助けてください。
0430nobodyさん
2007/10/25(木) 17:03:22ID:???my @list = (
q{tenis ball},
q{'tenis ball'},
q{'tenis ball' 'base ball'},
) ;
for my $line ( @list ){
print join ' or ',
map{ /'/ ? $_ : split /\s+/, $_ }
split /\s+(?=')/, $line ;
print qq{\n} ;
}
0431nobodyさん
2007/10/26(金) 05:03:54ID:???my @token = m/('[\w\s]*'|\w+)(?:\s+|$)/g;
print join (' or ', @token), "\n";
}
0432429
2007/10/26(金) 15:02:18ID:???すみません、できるだけワードは固定してない方がいいのですが・・・うまく動きませんでした。
>>431
おぉ、なんかうまく動きそうです。
でも、クォートの部分を除外して配列に納めたいのですが、どうしたらいいのでしょうか?
0433nobodyさん
2007/10/26(金) 23:17:20ID:???430は全角文字(スペースも含め)を半角に変換してもダメか?
それと「クォートの部分を除外」って意味が分らん。単に
クォートを削除したいだけなら、そのぐらいは自力で考えてみたら?
0434nobodyさん
2007/10/27(土) 10:01:02ID:???ってなんでeucjpの糞使用なの?
ユニコードのまま渡せて処理出来ればいいのに。
0435nobodyさん
2007/10/27(土) 11:34:06ID:???そういうことはdankogaiに直接文句つけて来い
0436nobodyさん
2007/10/27(土) 13:36:03ID:???じゃあお前さんがそういうの作れば?
0438nobodyさん
2007/10/27(土) 18:53:28ID:???「〜」の文字だけがなぜか正常に送信されないのですが、なぜでしょうか?
0439nobodyさん
2007/10/27(土) 22:19:08ID:jIrqvOa/という記述の意味を教えて下さい
空ハッシュを返すという事でしょうか?
0440nobodyさん
2007/10/27(土) 22:50:14ID:???何を以て「正常に送信されない」と判断したのか。
http://ja.wikipedia.org/wiki/%E6%B3%A2%E3%83%80%E3%83%83%E3%82%B7%E3%83%A5
http://euc.jp/i18n/ucsnote.ja.html
http://www.asahi-net.or.jp/~hc3j-tkg/unicode/
>>439
http://perldoc.jp/docs/perl/5.8.8/perlop.pod
> 単項演算子の "+" は、たとえ文字列に対して用いられた場合にも、
> 何もしません。関数名に続けて括弧付きの式を書く場合に、関数の
> 引数リストと解釈されないようにするために用いることができます。
0441nobodyさん
2007/10/27(土) 23:21:31ID:jIrqvOa/ありがとうございます、単項演算子についてはわかったのですが
とあるCPANモジュールのコードで
return +{} unless $data;
というコードがあったのですがこれを
return {} unless $data;
と書かずに単項演算子の+をつけるのは
何か意図があるのでしょうか
戻り値自体はどちらでも同じような気がするのですが、、
0442nobodyさん
2007/10/28(日) 00:49:00ID:???0443nobodyさん
2007/10/28(日) 04:52:46ID:???{; } :コードブロックでコンパイル
0444nobodyさん
2007/10/28(日) 08:38:20ID:???Perlで予約語プログラミング
0445nobodyさん
2007/10/28(日) 08:48:47ID:???Perl Programming: Web::Scraperモジュールの利用
↑これ何やってるの?
0446nobodyさん
2007/10/28(日) 08:54:29ID:???Perl Catalyst Programming (入門編)
↑これも何をやっているのか、
さっぱりわからんよ
0447nobodyさん
2007/10/28(日) 09:22:22ID:???0448nobodyさん
2007/10/28(日) 09:30:40ID:???この動画だけは「何をやろうとしてるか」だけは伝わるぞ
ttp://www.youtube.com/watch?v=KyLqUf4cdwc
■ このスレッドは過去ログ倉庫に格納されています