Perlについての質問箱 42箱目

このエントリーをはてなブックマークに追加
942デフォルトの名無しさん:2010/02/16(火) 18:32:32
>>940
無限ループなのかどうかはわからないけど、
CPU100%に張り付いたままいつまで待っても
終わらんね。

最初のshorterの呼び出しの

$dot_R = $aart -> shorter(@TeamRanking);

が帰ってこない。

use strict;
use HTML::AA;
my $aart = new HTML::AA;
$aart->code('sjis');
my @x = qw(foo 1 10);
$aart->shorter(@x);

ぐらいで再現するから作者にバグレポしてみれば?
943デフォルトの名無しさん:2010/02/16(火) 18:50:50
utf8が入る以前の遺物なのかなぁ。今ならsjisとeucで同じような
関数を並べて書くなんて無駄なことしないでutf8決めうちで最後
の出力の時に変換してねでいいと思う。
944デフォルトの名無しさん:2010/02/16(火) 19:03:14
2006年にプロトタイプをファーストリリース。

対して Encode.pm が標準モジュールになったのは、
2002年の perl5.8 から
945デフォルトの名無しさん:2010/02/16(火) 19:12:56
作った奴の脳が旧時代だったんだろうな
946デフォルトの名無しさん:2010/02/16(火) 23:16:26
eucなら動くんなら、配列にsjisだとメタ文字を含む日本語が使われてるんじゃ?
947デフォルトの名無しさん:2010/02/17(水) 02:49:14
>>934
文字列の"0"を数値とみなしちゃって起きるバグだと思う
HTML/AA.pm の271行目の

    270         my @array;
    271         while($str) {
    272                 $str =~ s/(.)//;



    270         my @array;
    271         while($str ne '') {
    272                 $str =~ s/(.)//;

って直したら自分のところではうまくいった


948934:2010/02/17(水) 11:40:11
>>947
こちらでもうまくいきました。エスパー様ありがとう。
その他協力いただいた方もありがとうございました。
949デフォルトの名無しさん:2010/02/17(水) 13:53:24
ちゃんと作者にフィードバックしとけよ
950デフォルトの名無しさん:2010/02/17(水) 14:32:17
934のように最低限の訊き方、礼儀をわきまえた奴がゆとり新人にいないのは
仕様ですか?
951デフォルトの名無しさん:2010/02/17(水) 14:34:50
>>950
仕様。それをできるように仕込むのがおまえの仕事。
952デフォルトの名無しさん:2010/02/17(水) 16:46:41
★自分のサイトのperlスクリプト場所
 www.samohan.jp/cgi-bin/form.cgi
★買い物カゴシステムのPOST送信先(買物カゴ中身画面のアドレスと同じ)
 https://www.jacky.jp/cgi/kago.cgi?user=samohan
とします。
htmlやphpのFORMで買い物カゴシステムへPOSTせずにform.cgiでPOSTデータをkago.cgiへ送信し、送信したらkago.cgiが表示する買物カゴ中身画面へと移動させたいです。
買物カゴシステムを乗り換えるときカンタン移行できるよう、ワンクッションかませたいとおもっているのです。
今はform.cgiでフォームを表示して「送信」ボタンを押してもらい、kago.cgiへPOSTしているのですが、押さずに済ませたいのです。
★form.cgi内のpost送信ソース
 my $url = 'https://www.jacky.jp/cgi/kago.cgi?user=samohan';
 use LWP::UserAgent;
 use HTTP::Request::Common qw(POST);
 my %formdata = ('user' => 'samohan', 'item' => $item, 'price' => $price, 'kazu' => $kazu);
 my $request = POST($url, [%formdata]);
 my $ua = LWP::UserAgent->new;
 my $res = $ua->request( $request);
 print $res->as_string;
としてみました。
しかし
★結果(www.samohan.jp/cgi-bin/form.cgiの結果表示画面)
 Found
 The document has moved here.
となります。
'here'はリンクとなっており、リンク内容は'http://www.samohan.jp/cgi-bin/kago.cgi?user=samohan'となっています、どうしていいのかわかりません、がんばりが足りないのでしょうか。
953デフォルトの名無しさん:2010/02/17(水) 16:49:56
すみません、post送信ソースの最後はprint $res->as_string;ではなくprint $res->content;にしています・・・。
954デフォルトの名無しさん:2010/02/17(水) 16:58:53
>>1を読むがんばりは欲しいな
955デフォルトの名無しさん:2010/02/17(水) 17:25:09
インターネットの質問コーナーは、どれもこれもいずれ礼儀に関する説教に
埋め尽くされる状態に至る。
956デフォルトの名無しさん:2010/02/17(水) 17:50:11
こんばんは。ハッシュの渡し方について質問です。

&follow_form ( key1 => 'hoge', key2 => 'foo', key3 => 'bar'......);
(keyとvalueの名前と要素数は可変)といった関数を作成したいのですが、
submit_form内のfieldsへのデータの渡し方が分かりません。

何卒お願い致します。
-----------------
my $mech = WWW::Mechanize->new();
sub follow_form {
  my %item_list = @_;
  #ここでなんらかの処理?
  $response = $mech->submit_form(
    fields => {
      "key1" => "hoge",
      "key2" => "foo",
      "key3" => "bar",
      ........
    },
  );
  #エラー処理

-----------------
957デフォルトの名無しさん:2010/02/17(水) 17:57:32
ハッシュリファレンスにすりゃいいだけじゃないの?
958デフォルトの名無しさん:2010/02/17(水) 20:39:57
>>957
レス有り難うございます。
fieldsは%item_listを参照してね、という表記が必要なのですね。

ハッシュリファレンスについて調べて見たのですが、
Mechanizeのドキュメントでも「fields => \%fields」と記載が合ったので
fields => \%item_list としてみましたがエラー吐いちゃいます。

うーん。。
959958:2010/02/17(水) 20:48:55
すみません
$fields => $item_list で自己解決しました!
お騒がせして申し訳ありません。有り難うございました。
960デフォルトの名無しさん:2010/02/17(水) 21:53:43
いや、>956 に書いてある事をそのまま読んだらそれはおかしくね?
961デフォルトの名無しさん:2010/02/17(水) 22:30:33
fields => \%item_list
これで、通らないほうがわからん。色々変更したのかな。
962デフォルトの名無しさん:2010/02/18(木) 00:02:24
follow_form( { key1=>'hoge', key2=>'foo', ...} );

引数をこうしたんじゃないかな。
963sage:2010/02/18(木) 11:35:00
がんばりが足りませんでした!CGI質問板にいきます・・・ズミマゼン
964デフォルトの名無しさん:2010/02/18(木) 17:31:36

...sky-blue...という文字が含まれている文字列を、

...<A>sky-blue</A>...
に置換する場合です。

$txt =~ s/$term/<A>$term</A>/g

だと-をエスケープしないとマッチしないのですが、
エスケープすると置換後...<A>sky\-blue</A>...
になってしまいます。

回避の仕方教えてください。
965デフォルトの名無しさん:2010/02/18(木) 17:35:19
言っている意味がわからない
966デフォルトの名無しさん:2010/02/18(木) 17:37:07
$termの中に、sky-blueが含まれてるんです。
967デフォルトの名無しさん:2010/02/18(木) 17:41:32
$txt =~ s{sky-blue}{<a>$1</a>}g;
968デフォルトの名無しさん:2010/02/18(木) 17:41:58
miss
$txt =~ s{(sky-blue)}{<a>$1</a>}g;
969デフォルトの名無しさん:2010/02/18(木) 17:57:54
>968

おお、超thx。
そんな方法全然知らなかったです。
970デフォルトの名無しさん:2010/02/18(木) 18:20:29
後方参照でググればいいと思う
971デフォルトの名無しさん:2010/02/18(木) 20:37:01
どしてその場合、

/ / /
が要らないの?
972デフォルトの名無しさん:2010/02/18(木) 20:42:32
>>968じゃないけど、///が要らないというか、///を{}{}に変えてる。
元のやり方だと、</a>に使われているスラッシュもエスケープしなきゃいけないし、
どこが区切りなのかがちょっとわかりづらい。だから変えたんだろう。

{}{}じゃなくても、たとえば|||なんかでもいい。
$txt =~ s|(sky-blue)|<a>$1</a>|g;
973デフォルトの名無しさん:2010/02/18(木) 22:23:59
こんなのもいけたよね?
$txt =~ s@(sky-blue)@<a>$1</a>@g;

いける文字、いけない文字ってなんだっけ。
↑は確かいけたはずだけど、@は配列で使うのになーと思いつつ・・・
できるのシェルの方だっけ?
974デフォルトの名無しさん:2010/02/18(木) 22:38:44
演算子が明示されているときはどんな文字で区切っても良かったはず
975デフォルトの名無しさん:2010/02/18(木) 22:56:37
うぉ、マジだ。\でも#でも;でもいける。
Perlしか知らんのだけど、RubyとかPythonでも普通に出来ること?
976デフォルトの名無しさん:2010/02/18(木) 23:10:54
昔は文字化けするから、パターンマッチはeucとか
決まりだったが、
最近は、unicodeのテキストファイルを扱わなくてはいけない場面が多々あって、
open(FH, "<:utf8", $filename);
とかを使い出したのですが、
パターンマッチとか、出力とかで、特に文字化けとか不具合とかないですよね?

今のところ大丈夫そうなんだけど・・・。
977デフォルトの名無しさん:2010/02/18(木) 23:38:06
区切り文字って、万能に使えるのって無いよな
大抵何かとぶち当たって、その時にいいのを選ぶ
978デフォルトの名無しさん:2010/02/19(金) 01:40:59
>>976
use utf8;のことかな>
979デフォルトの名無しさん:2010/02/19(金) 02:00:05
980デフォルトの名無しさん:2010/02/19(金) 02:58:05
一度DBを経験すると戻れなくなるよね
981デフォルトの名無しさん:2010/02/19(金) 08:01:42
そろそろ次スレを誰か頼む
982デフォルトの名無しさん:2010/02/19(金) 16:46:05
次スレ立てて来ます。
983デフォルトの名無しさん:2010/02/19(金) 16:48:34
次スレです。
Perlについての質問箱 43箱目
http://pc12.2ch.net/test/read.cgi/tech/1266565626/
984デフォルトの名無しさん:2010/02/19(金) 19:53:23
  A   B   C
  D   E   F
      ・
      ・

という複数スペース区切りのものを
while(<IN>){
chomp;
($a,$b,$c) = split(/\s+/,$_);
というふうに取り出そうとすると、先頭の$aに何も入らず
一つづつズレてしまいます。
回避方法はありますでしょうか?
985デフォルトの名無しさん:2010/02/19(金) 19:56:00
(undef, $a, $b, $c) split /\s+/;
986デフォルトの名無しさん:2010/02/19(金) 19:56:10
=が抜けた
987デフォルトの名無しさん:2010/02/19(金) 20:11:04
($a, $b, $c) = split;
($a, $b, $c) = split ' ', $_;
988984:2010/02/19(金) 20:14:37
>>985
ありがとうございます。undefというモノが使えたのですね。
できないときは、($nasi,$a,$b,$c)とかしていたのですが。

基本的に複数スペース区切りを分けるときに、行先頭に複数スペースが有った場合に
先頭に空文字が入るのは避けれないんでしょうか?

どうもスマートでは無いような気がして。

989デフォルトの名無しさん:2010/02/19(金) 20:16:33
($a, $b, $c) = /(\S+)/g;
990984:2010/02/19(金) 20:18:39
>>987
リロしてなくてすみません。

そんな方法があるのですか。
どいういう仕組みか分かりませんが、ありがとうございます。
991デフォルトの名無しさん
ttp://perldoc.jp/docs/perl/5.10.1/perlfunc.pod#item_split
こんな動作もするんだな。
勉強になった。