>>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);
ぐらいで再現するから作者にバグレポしてみれば?
utf8が入る以前の遺物なのかなぁ。今ならsjisとeucで同じような
関数を並べて書くなんて無駄なことしないでutf8決めうちで最後
の出力の時に変換してねでいいと思う。
2006年にプロトタイプをファーストリリース。
対して Encode.pm が標準モジュールになったのは、
2002年の perl5.8 から
作った奴の脳が旧時代だったんだろうな
eucなら動くんなら、配列にsjisだとメタ文字を含む日本語が使われてるんじゃ?
>>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/(.)//;
って直したら自分のところではうまくいった
948 :
934:2010/02/17(水) 11:40:11
>>947 こちらでもうまくいきました。エスパー様ありがとう。
その他協力いただいた方もありがとうございました。
ちゃんと作者にフィードバックしとけよ
934のように最低限の訊き方、礼儀をわきまえた奴がゆとり新人にいないのは
仕様ですか?
>>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;にしています・・・。
インターネットの質問コーナーは、どれもこれもいずれ礼儀に関する説教に
埋め尽くされる状態に至る。
こんばんは。ハッシュの渡し方について質問です。
&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 レス有り難うございます。
fieldsは%item_listを参照してね、という表記が必要なのですね。
ハッシュリファレンスについて調べて見たのですが、
Mechanizeのドキュメントでも「fields => \%fields」と記載が合ったので
fields => \%item_list としてみましたがエラー吐いちゃいます。
うーん。。
959 :
958:2010/02/17(水) 20:48:55
すみません
$fields => $item_list で自己解決しました!
お騒がせして申し訳ありません。有り難うございました。
いや、>956 に書いてある事をそのまま読んだらそれはおかしくね?
fields => \%item_list
これで、通らないほうがわからん。色々変更したのかな。
follow_form( { key1=>'hoge', key2=>'foo', ...} );
引数をこうしたんじゃないかな。
963 :
sage:2010/02/18(木) 11:35:00
がんばりが足りませんでした!CGI質問板にいきます・・・ズミマゼン
...sky-blue...という文字が含まれている文字列を、
...<A>sky-blue</A>...
に置換する場合です。
$txt =~ s/$term/<A>$term</A>/g
だと-をエスケープしないとマッチしないのですが、
エスケープすると置換後...<A>sky\-blue</A>...
になってしまいます。
回避の仕方教えてください。
言っている意味がわからない
$termの中に、sky-blueが含まれてるんです。
$txt =~ s{sky-blue}{<a>$1</a>}g;
miss
$txt =~ s{(sky-blue)}{<a>$1</a>}g;
>968
おお、超thx。
そんな方法全然知らなかったです。
後方参照でググればいいと思う
どしてその場合、
/ / /
が要らないの?
>>968じゃないけど、///が要らないというか、///を{}{}に変えてる。
元のやり方だと、</a>に使われているスラッシュもエスケープしなきゃいけないし、
どこが区切りなのかがちょっとわかりづらい。だから変えたんだろう。
{}{}じゃなくても、たとえば|||なんかでもいい。
$txt =~ s|(sky-blue)|<a>$1</a>|g;
こんなのもいけたよね?
$txt =~ s@(sky-blue)@<a>$1</a>@g;
いける文字、いけない文字ってなんだっけ。
↑は確かいけたはずだけど、@は配列で使うのになーと思いつつ・・・
できるのシェルの方だっけ?
演算子が明示されているときはどんな文字で区切っても良かったはず
うぉ、マジだ。\でも#でも;でもいける。
Perlしか知らんのだけど、RubyとかPythonでも普通に出来ること?
昔は文字化けするから、パターンマッチはeucとか
決まりだったが、
最近は、unicodeのテキストファイルを扱わなくてはいけない場面が多々あって、
open(FH, "<:utf8", $filename);
とかを使い出したのですが、
パターンマッチとか、出力とかで、特に文字化けとか不具合とかないですよね?
今のところ大丈夫そうなんだけど・・・。
区切り文字って、万能に使えるのって無いよな
大抵何かとぶち当たって、その時にいいのを選ぶ
一度DBを経験すると戻れなくなるよね
そろそろ次スレを誰か頼む
次スレ立てて来ます。
983 :
デフォルトの名無しさん:2010/02/19(金) 16:48:34
A B C
D E F
・
・
という複数スペース区切りのものを
while(<IN>){
chomp;
($a,$b,$c) = split(/\s+/,$_);
というふうに取り出そうとすると、先頭の$aに何も入らず
一つづつズレてしまいます。
回避方法はありますでしょうか?
(undef, $a, $b, $c) split /\s+/;
=が抜けた
($a, $b, $c) = split;
($a, $b, $c) = split ' ', $_;
988 :
984:2010/02/19(金) 20:14:37
>>985 ありがとうございます。undefというモノが使えたのですね。
できないときは、($nasi,$a,$b,$c)とかしていたのですが。
基本的に複数スペース区切りを分けるときに、行先頭に複数スペースが有った場合に
先頭に空文字が入るのは避けれないんでしょうか?
どうもスマートでは無いような気がして。
($a, $b, $c) = /(\S+)/g;
990 :
984:2010/02/19(金) 20:18:39
>>987 リロしてなくてすみません。
そんな方法があるのですか。
どいういう仕組みか分かりませんが、ありがとうございます。