Perlコーディング初心者質問スレ Part 57
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2008/02/25(月) 19:25:51ID:???【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
お勧めサイトは >2 以降
前スレ http://pc11.2ch.net/test/read.cgi/php/1189939783/
過去ログ倉庫 ttp://user.ftth100.com/mirrorhenkan/perl/
0323nobodyさん
2008/04/08(火) 23:49:56ID:ng1N9SG/utf8::decode($str);
if ($str =~ /\P{IsASCII}/ and not (utf8::is_utf8($str))) {
### エラー
}
ってやってみましたが、あってますか?
0324nobodyさん
2008/04/11(金) 10:40:16ID:???0325nobodyさん
2008/04/11(金) 11:53:06ID:???それとも手動で?
0326nobodyさん
2008/04/14(月) 15:21:25ID:???↑の人と同じ悩みなんですが、jugem.jpのRSSをLWP::Simple::mirrorでミラーリングしようとすると、
RSSの内容ではなく、HTMLの内容が帰ってくるのは、どうしてですか?
RSSは以下のURLなのですが、引数を渡しているURLは、LWP::Simpleでは対応できないってでしょうか?
http://watalog.jugem.jp/?mode=rss
0327訂正
2008/04/14(月) 15:22:02ID:???↑の人と同じ悩みなんですが、jugem.jpのRSSをLWP::Simple::mirrorでミラーリングしようとすると、
RSSの内容ではなく、HTMLの内容が帰ってくるのは、どうしてですか?
RSSは以下のURLなのですが、引数を渡しているURLは、LWP::Simpleでは対応できないってことでしょうか?
http://watalog.jugem.jp/?mode=rss
0328nobodyさん
2008/04/14(月) 16:19:57ID:???UAで判定してる模様。
$ua = LWP::UserAgent->new(agent=>'IEみたいなUA');
でやってみ。
0329nobodyさん
2008/04/14(月) 16:25:16ID:???ありがとうございます。いやらしいことしますね…
LWP::Simple::mirrorを使っているので、全部書き直すか、例外処理を作るしかなさそうですねorz
0331nobodyさん
2008/04/14(月) 16:52:36ID:???オブジェクト指向的な話(->とか)が全くわからないので、そういうところを避けながらコーディングしてきたのですが厳しいですね。
0332327
2008/04/14(月) 19:32:33ID:???今後はSimpleではなくて、こっちを使おう…
0333nobodyさん
2008/04/14(月) 21:28:37ID:vhVZb6UQWeb上でいろいろサンプルコードを見ていたんですが、
使いたいモジュールがある場合は
CGI::Application::Plugin として利用するのがお決まりのように見えます。
実際、それが推奨スタイルなんでしょうか?
Log::Handler が使いたかったのですが、
単純に use Log::Handler; して使うと何か不都合があるのでしょうか?
0334nobodyさん
2008/04/15(火) 07:46:19ID:m7oSRbUq好きにしたらいいと思うよ
0335nobodyさん
2008/04/15(火) 11:53:04ID:7+9bkjp80336いしはら
2008/04/15(火) 18:41:44ID:y4DgL3Q4☆簡易CTIサービス(1万5千円)
http://s1s.jp/CTI/
☆自動クリックサービス
http://s1s.jp/
☆ブログ自動更新 記事投稿 コメント書き込みアプリ
http://s1s.jp/BLOG/
------------------------------------------------
ヽ('A`)ノ
( ) 大金星!!
ノω|
0337nobodyさん
2008/04/16(水) 14:37:06ID:???これらをperlかPHPで計算する方法が分かる方いましたらアドバイス頂けないでしょうか。
式は見ても理解できないのでサンプルソースを頂けると助かります。
0338nobodyさん
2008/04/16(水) 15:16:19ID:???0339nobodyさん
2008/04/16(水) 16:03:06ID:???0340nobodyさん
2008/04/16(水) 17:57:49ID:???サイコロ10000回投げて1が1666回出る確率とかだそうとする際に
数値が大きすぎるのかバグります…。
以前調べた時のソースも、数値が小さければ問題無いものの、
規模を大きくすると1.#INFというエラーが返ったり。
0341nobodyさん
2008/04/16(水) 21:19:23ID:WbXSl+I/与えられた文字列が大小文字同一視でハッシュのキーとして存在するかどうか、
調べる方法はないでしょうか。ハッシュキーは膨大な数あるので、配列にコピーとかは
したくないです。よろしくお願いし明日。
0342nobodyさん
2008/04/16(水) 21:28:03ID:???2 tieで1と同じ事を行う。
好きなほうをどうぞ。
0344nobodyさん
2008/04/16(水) 21:39:38ID:???実は、元の正しい表記を後で取り出したいんですが、
ハッシュのvalueは空いてるので、そこに元の表記を入れておいて
キーを大文字統一にしてみようと思います。
コピーするのと変わらないかもしれませんが。
0345nobodyさん
2008/04/17(木) 04:13:49ID:CjUpsUhEAll UTF-8 でやってます。
さらに USE CGI しないURLデコードをやってみたところ、マルチバイト文字が文字化けするようになりました。
全部□になります。
?#!c:/user/local/bin/perl510/bin/perl.exe
use utf8;
use encoding "utf8";
# ↓UTF8でPOSTされた情報を想定
my $str = '%E8%8C%B6%E6%B1%B2%E5%85%BC%E9%9B%91%E7%94%A8%E4%BF%82';
# ↓URLデコード(今回$strに+はないのでそのへんは省略)
$str =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack("H2", $1)/eg;
# ↓出力
print "Content-type: text/html; charset=UTF-8\n\n";
print "テスト // START // $str<br>\n";
これでHTML全体としては正しく表示されているんですが、$str部分のみが文字化けします。
ウェブで原因を調べること丸1日、これについてどこにも情報がありませんでした……
0346nobodyさん
2008/04/17(木) 07:21:16ID:???use encoding "utf8";
# ↓UTF8でPOSTされた情報を想定(内部ではワイドキャラクタとして格納されてます)
my $str = '%E8%8C%B6%E6%B1%B2%E5%85%BC%E9%9B%91%E7%94%A8%E4%BF%82';
utf8::encode($str); # 一旦UTF-8フラグを落として
# ↓URLデコード(今回$strに+はないのでそのへんは省略)
$str =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack("H2", $1)/eg;
utf8::decode($str); # UTF-8フラグを付け直す
0347nobodyさん
2008/04/17(木) 09:58:36ID:???> # ↓UTF8でPOSTされた情報を想定(内部ではワイドキャラクタとして格納されてます)
> my $str = '%E8%8C%B6%E6%B1%B2%E5%85%BC%E9%9B%91%E7%94%A8%E4%BF%82';
それデコードしたら、バイナリ(utf8フラグoff)のUTF-8文字列。
とりあえず、use utf8;とuse encoding "utf8"を外して、そのままprintしてみ。
ちゅうか、use utf8 とuse encoding "utf8"両方してる意味がわからん。
0348nobodyさん
2008/04/17(木) 14:34:42ID:FD3bsXbG解決しました。情報に感謝します。
>>346の内容を、Encode::〜でやりました。
こういうのって結構な落とし穴ですね。フラグのことはわかっているつもりでしたが……
0349nobodyさん
2008/04/17(木) 20:17:29ID:2zzFnXWLCGI::Applicationパッケージを使っているんだけど、
param() 関数で、数字だけの長い「文字列」を受け取ると
数値リテラルとして、しかも丸められた値が返されちゃうんだけど、
文字リテラルとしてそのまま受け取れるよい方法ないかな?
0350349
2008/04/17(木) 22:21:21ID:???CGI.pmにまでさかのぼって調べた結果、
query()->param()は文字リテラルで返してました。
自分が書いた、表示する際の処理のバグでした。orz
0351nobodyさん
2008/04/18(金) 00:03:02ID:qXgVgrBZ自分で作ったhash refの配列がデリファレンスできません。
$array[0]->{key}
$array[0]{key}
${$array[0]}->{key}
とか書いてみましたが様々なエラーが出ました。どう書いたらいいですか?
0352nobodyさん
2008/04/18(金) 00:07:12ID:???ソートをしようと思い、下記のように書いたらhash refを配列扱いするなと言われます。
my @sorted = sort {$array[$b]->{score} <=> $array[$a]->{score}} @array;
よろしくお願いします。
0353nobodyさん
2008/04/18(金) 00:20:08ID:???my @sorted = sort {$b->{score} <=> $a->{score}} @array;
0354nobodyさん
2008/04/18(金) 10:01:49ID:???0355nobodyさん
2008/04/18(金) 18:42:42ID:J/rLxrZJこれだけでも教えてくれると助かります…。
1.#INF の意味はなんですか?インフィニティ?
検索しても#は検索対象にならないらしく、
*.INFの設定ファイルや関係無いものが出て来るばかりで…。
0356nobodyさん
2008/04/18(金) 19:06:45ID:???0357nobodyさん
2008/04/19(土) 09:40:11ID:???それかインフォーラム
もしくはインフェルノ
0358nobodyさん
2008/04/19(土) 12:48:02ID:n4AN2xdTRNAというアンテナソフトを使っています。
すでに動作してるのですが、summary部分のhtmlタグを除去したいと思います。
http://www-kasm.nii.ac.jp/~i2k/tmp/rna/rss/recent_entry.html
のようにRSSを取得してくるCGIなのですが、
summary部分にhtmlタグが残ってしまいます。
ATOMやRSS2.0などでしょうか、
Yahoo!やexcite等RSSにhtmlタグが入ってるサイトを巡回すると
htmlタグが入ってしまいます。
template/recent_template には
<div class="summary">
<$RNAItemDescription$>
</div>
となっており、そのあたりを作ってると思われる
lib/RNA/AntennaTree.pmの1029行目、
my $encoded_descript = encode($item->{channel}->{description});
の後に
my $encoded_descript =~ s/<.*?>//g;
を追加してみたところ、サマリー部分がなくなってしまいました。
開発がストップしてるCGIなので、なんとか改造して使い続けたいと思っています。
どうかご教示願います。
0359nobodyさん
2008/04/20(日) 00:00:52ID:???>>355
備長炭 自殺方法 でぐぐれ。それでダメなら二項分布 オーバーフローとか。
0360nobodyさん
2008/04/20(日) 01:46:25ID:???現物ソース確認したわけじゃないけど
ttp://naoya.dyndns.org/~naoya/mt/archives/000611.html
の下の方にある remove_html を試してみたらどうかな。
0361nobodyさん
2008/04/20(日) 02:10:18ID:???そのモジュールについては詳しくはわからないけど、もともとのソースをいぢるんじゃなくて、
それが吐き出したものを、自前で書き換えればいいんじゃね?
0362nobodyさん
2008/04/20(日) 02:30:50ID:???> my $encoded_descript = encode($item->{channel}->{description});
> の後に
> my $encoded_descript =~ s/<.*?>//g;
> を追加
って書いてるんだから
my $str = "<strong>大切な</strong>文書";
my $str =~ s/(.)/$1/g; # 行頭の何かが余計
print length($str);
こういうことじゃないの。
0363nobodyさん
2008/04/20(日) 16:44:58ID:???$text =<<EOL;
name = $h->{'name'}
mail = $h->{'mail'}
EOL
とやっても変数が展開されません。
仕方ないのでハッシュにデリファンスしてますが、
方法があったら教えてください。
0364nobodyさん
2008/04/20(日) 17:36:03ID:???0365nobodyさん
2008/04/20(日) 20:52:48ID:tHisgd6UOUTをカウントするためなんすけど、アンカーから自前のCGIページを通過させてリンク先を表示させるにはどうすればいいですか?
0366nobodyさん
2008/04/21(月) 00:00:18ID:???0367nobodyさん
2008/04/21(月) 18:56:21ID:???my $h = {name=>'john', mail=>'[email protected]'};
my $text =<<EOL;
name = $h->{'name'}
mail = $h->{'mail'}
EOL
print $text;
こんな感じ。
0368358
2008/04/23(水) 09:11:49ID:???ありがとうございます。
remove_html、使いたいのですが使い方がわかりません...
# http://naoya.dyndns.org/~naoya/mt/archives/000611.html
sub remove_html {
my ($str) = @_;
my $ret;
if (defined $str) {
my $p = HTML::TokeParser->new( \$str ) or die "$!";
do {
my $plain = $p->get_text;
$ret .= $plain;
} while (my $token = $p->get_tag);
}
$ret;
}
を lib/RNA/AntennaTree.pm の最下部に追記して、
my $encoded_descript = encode($item->{channel}->{description});
の後に見よう見まねで
my $encodec_descript = &remove_html();
としてみましたが変わらずでした。
0369nobodyさん
2008/04/23(水) 12:47:07ID:???どこで手に入れる事ができるでしょうか?
0371↑
2008/04/23(水) 13:08:34ID:???0372nobodyさん
2008/04/24(木) 18:43:40ID:???という文字列から
ABCとDEFを削除してXXXのみを表示させたい場合はどうすればよいのでしょうか?
$moji = ABCXXXDEF;
$ans = $moji からABCとDEFを削除;
print "$ansです\n"
という具合でいいんでしょうか?
このABCとDEFを消す処理の部分がわかりません。
0373nobodyさん
2008/04/24(木) 18:47:46ID:???print $moji;
0376nobodyさん
2008/04/26(土) 13:15:07ID:flUVuiqJ区切りが/であったり\であったりとまちまちです。
perlはLinux上で動いているので、デフォルトでは、/で区切られている場合しか、ファイル名を取り出せません。
\で区切られている場合でも、取り出せるようにするにはどのようにしたらよいのでしょうか?
fileparse_set_fstypeでMSWin32を指定してしまうと今度は、Unixからアクセスしてきた場合にうまくいきません。
0377nobodyさん
2008/04/26(土) 13:19:19ID:???こんなもん中学生でも分かるぞカス死ね
0378nobodyさん
2008/04/26(土) 16:13:45ID:flUVuiqJ0380nobodyさん
2008/04/26(土) 17:01:10ID:???Perlが動いているサーバーのOSが関係する。
そして、basenameは動いているOSによって区切りを/か\か自動的に
判断してくれるので便利に使える。
サーバーがWindowsでもLinuxでもbasenameは正しく動いてファイル名を取り出せる。
取り出せない場合は、何か別の原因。
0381nobodyさん
2008/04/26(土) 19:45:43ID:???0382nobodyさん
2008/04/26(土) 21:48:20ID:vQRq4Omz時間と日数おしえてもらえませんか?時間とか1日何時間くらいしてます?
0383nobodyさん
2008/04/26(土) 22:09:54ID:???0385nobodyさん
2008/04/26(土) 22:49:57ID:???皆さんは「週何日、1日当たり何時間」なんていう時間割みたいな方式で
取り組んできたわけじゃないので、そういうのはよくわかんないのです。
そりゃ、そんな方式で堅苦しく取り組んできた人もいるかもしれないけど。
あなたが今までにちんちんを何ストロークしてきたかが不明なのと似てます。
0386nobodyさん
2008/04/27(日) 00:52:54ID:G3KB/HmGスラッシュをURLエンコードさせたくないのですが、可能でしょうか?どなたか助けてください・・
p://example.net/dir/index.cgi?name=<em>hoge</em>
このように、どうしてもタグが含まれてしまうURLなので困ってます。
見るからに初心者ですが、どうかよろしくお願いします。
0388386
2008/04/27(日) 02:55:07ID:G3KB/HmGそうですか・・
諦めて他に方法がないか試行錯誤してみます
ありがとうございました。
0390nobodyさん
2008/04/27(日) 23:35:33ID:???コード書いて1週間かかった気がする
そんな自分は C (すっかり書けないけど、ポインタで躓くまでは書いてた)、VB (アプリをいくつか作ってた) の経験ありです。
0391nobodyさん
2008/04/27(日) 23:39:03ID:???Webアプリ(cgi)は時間がかかると思う。
0392nobodyさん
2008/04/27(日) 23:44:48ID:???0393nobodyさん
2008/04/30(水) 17:01:56ID:9OxUbc+M0394nobodyさん
2008/04/30(水) 17:13:24ID:???rand(51)
0 〜 51 未満を生成 (未満は 51 を含まないので 50 以下の数字が現れる)
+100
下限値である 100 を加えてやる
以上
0395nobodyさん
2008/04/30(水) 17:14:49ID:???0396nobodyさん
2008/04/30(水) 17:19:40ID:???0398nobodyさん
2008/04/30(水) 18:11:00ID:???質問者の質問が悪いところまでフォローして手取り足取りするのが役目?
0399>>393
2008/04/30(水) 18:26:54ID:9OxUbc+M確かに>>398さんの言うとおりです。わざわざフォローして下さった親切なお二方に感謝します。
0400nobodyさん
2008/04/30(水) 18:38:47ID:???どうも下記例のforeachのループの中で、さらにwhileのループを
回せないのですが、たぶん簡単な理由だとは思うのですが、
お助け下さい。
他にもこのようなforeachのループの中で、foreachのループも回せないと
思います。
foreach $number(@number){
while (<F2>) {
print "$number\n";
if (/$number/)
{
print "マッチしました\n";
print F3;
}
}
}
0403nobodyさん
2008/04/30(水) 19:48:00ID:???0404nobodyさん
2008/04/30(水) 20:17:59ID:GavbPT5W2周目はファイルを読み込むループが発生しません
解決法は2つ
・While の直前でファイルを開くようにする
・While の直前で seek を使ってファイル位置を先頭に戻す
です。
負荷は後者の方が幾分か軽いです
0405nobodyさん
2008/04/30(水) 20:28:06ID:???場合によってはこれもありかなと思った。無駄にメモリ食うけど。
0406nobodyさん
2008/04/30(水) 20:47:41ID:???0407400
2008/04/30(水) 23:43:57ID:???1回目のforeachが終わったときに<F2>が空になる ってマジですか。
例のループにseekを追加して、動くようにしていただけませんか?
お願いします。
0409nobodyさん
2008/05/01(木) 12:48:54ID:???open(F2, "hoge.txt");
while (<F2>) {
foreach $number(@number){
〜
}
}
close(F2);
0410nobodyさん
2008/05/01(木) 13:18:21ID:???自分でやれ。
できないなら金払って業者つかえ。
代行するところじゃなく、自分で作るためのヒントを与えるところだ。
ここまでヒントがそろったらあとは調べながらできる。
0411nobodyさん
2008/05/01(木) 13:51:56ID:???ちゃんと意味がわかってから略すように汁
0412400
2008/05/01(木) 23:38:01ID:???>410 GW中くらい、自宅警備を止めてみたら?
>411 省略ハァ? 汁?
0413409,411
2008/05/01(木) 23:46:36ID:???0414nobodyさん
2008/05/02(金) 00:07:00ID:???ワロタ
0415nobodyさん
2008/05/02(金) 05:46:04ID:???「ものを学ぶ姿勢」ってやつを身に着けないと成長できないよね
0416nobodyさん
2008/05/02(金) 08:12:32ID:???これ10代だったら笑って流せるけど、20代以上で本気で言ってたら深刻ww
0417nobodyさん
2008/05/02(金) 10:22:44ID:???0418nobodyさん
2008/05/02(金) 10:32:20ID:???あと、これはおそらくは宿題だなw
0419nobodyさん
2008/05/02(金) 11:18:57ID:???とっくに質問者は消えてることに気づけよ禿げ
■ このスレッドは過去ログ倉庫に格納されています