トップページ⇒php
1001コメント404KB

Perlコーディング初心者質問スレ Part 60

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2009/09/03(木) 23:51:12ID:???
Perlのコーディングで困ってる人のスレです。

【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。

1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。

最低でも1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。

お勧めサイトは >2 以降

前スレ http://pc11.2ch.net/test/read.cgi/php/1234752149/
0707nobodyさん2010/03/19(金) 16:59:18ID:+1gTM2xb
keys で全部吐き出してみれば答えが分かるかと
0708nobodyさん2010/03/19(金) 19:18:24ID:???
>>706
つ ttp://www.ksknet.net/dbi/dbi_1.html
07097062010/03/19(金) 21:47:59ID:???
>>708
ありがとうございます。
休み明けに試してみます。
0710nobodyさん2010/03/19(金) 22:07:21ID:???
JAVA でいう、
response.setHeader("Refresh", "15");
 
レスポンスヘッダを作成する方法は
Perl
ではどうやればいいでしょうか?
0711nobodyさん2010/03/19(金) 22:23:13ID:???
>>710
print "Content-Type: text/html"
とかやるだろ?
それと一緒。
0712nobodyさん2010/03/20(土) 02:35:36ID:???
エディタはみなさん何を使っていますか?
emacs?
eclipse?
0713nobodyさん2010/03/20(土) 03:28:56ID:???
eclipseはエディタなのか
0714nobodyさん2010/03/20(土) 11:51:52ID:???
エディタは基本的に脳内
最終的にファイル化するためにメモ帳使うぐらいかな
0715nobodyさん2010/03/20(土) 12:20:32ID:???
メモ帳だとエラーがでたとき場所が特定できないので、結局エディタ使ってるわ
0716nobodyさん2010/03/20(土) 13:53:37ID:???
>>712-715
Perl書くのにどんなエディタ使ってる?
http://pc11.2ch.net/test/read.cgi/php/1014357485/
0717nobodyさん2010/03/20(土) 15:56:20ID:???
メモ帳で書いてるとかぶっちゃけ書いたことない奴だろ
文字コードと改行コードは最低選べるエディタじゃないと
0718nobodyさん2010/03/20(土) 15:59:35ID:???
ネタにマジレス
0719nobodyさん2010/03/20(土) 16:25:03ID:???
>>717
はあ?
FFFTPでアップすればなんか勝手にそういうのよくしてくれるだろ?
Linuxのサーバー使ったことない初心者ですか?w
0720nobodyさん2010/03/20(土) 18:03:56ID:???
詳しい説明サンクス
これならメモ帳でも充分だな。
0721nobodyさん2010/03/20(土) 18:33:08ID:???
なんか勝手にそういうの
0722nobodyさん2010/03/20(土) 20:13:06ID:VJC6JTjm
自鯖でテストしたこと無いやつら多すぎ
0723nobodyさん2010/03/20(土) 22:19:00ID:???
「なんか勝手にそういうの」とLinux鯖使用に何の関係が。
Linux鯖使ったことない初心者じゃなければ
SSH+vimか、Samba or rsync, and so on+エディタでしょ。
0724nobodyさん2010/03/20(土) 22:28:51ID:VJC6JTjm
Windows で編集を省くなよw
0725nobodyさん2010/03/20(土) 22:30:19ID:???
わざわざ言わないでも解る
0726nobodyさん2010/03/21(日) 10:16:56ID:???
LWPのgetstoreで質問です。
特定のサーバーの画像ファイルを定期的にコピーして取ってきているのですが一度 画像が壊れていることがありました。
画像の下半分がグレーになっていました。

is_successでチェックをしていたのですが、画像ファイルが完全に取得できたかは判断出来ないでしょうか?
codeを見て200だったらと改造しようかと思っていますが、この方法でエラーチェック出来るのか不安で

ほとんどの場合コピーに成功しているので再現が出来ていないです。
0727nobodyさん2010/03/21(日) 11:05:05ID:???
getstore って勝手に binmode してくれたっけ?
ステータス見てもその続きで届く画像が壊れてるかどうかはわからないよ。
07287262010/03/21(日) 11:45:10ID:???
ありがとうございます。
LWP mirror というのがあるようですがこちらはcontents-lengthなども比較してくれるようなので
ファイルが壊れてファイルサイズが違う場合のエラーはとれると考えてよいのでしょうか
07297262010/03/21(日) 12:05:21ID:???
mirrorは、ローカルにあるファイル(キャッシュ)とサーバー上のファイルの更新日時やサイズを見てダウンロードするかを決めているだけで
ダウンロードの処理自体は getstoreと同じという考えてあっていますか?
0730nobodyさん2010/03/21(日) 18:55:46ID:???
use Net::SMTP;を使用してメール送信を行っています。

特定のメールアドレス宛にのみ、メールが送信できない状況ですが、
my $ret = $smtp->dataend();
で1が返ってきます。

これは正常に送信できているということで良いのでしょうか?
受信側の問題でしょうか?
0731nobodyさん2010/03/21(日) 20:24:00ID:???
メールのログを見た方がいいと思う。
たぶん550 mailboxが無いとかそんなエラーが書かれてるんじゃないかな
0732nobodyさん2010/03/22(月) 14:13:32ID:???
$string =~ s/(hoge)// で置換したとき、置換に成功した個所のhogeを戻り値で得たいのですが、$1を使う以外に方法はありますか?
0733nobodyさん2010/03/22(月) 15:53:22ID:???
$&でもいいし

$string=~ s/((hoge))//;
にすればあら不思議、$2も使える
0734nobodyさん2010/03/22(月) 17:06:11ID:2ZzVyfyy
$cnt = $string =~ s/(hoge)//isg;

でどう?
0735nobodyさん2010/03/23(火) 17:33:46ID:E0uSL26K
perlのモジュール「RTF::Writer」についての質問です。

RTF::Writerを使い、日本語を出力しています。
このモジュールに%sで出力すると、何故か「く」という文字が「,」に置き換えられてしまいます。
この不具合の解消法をご存じの方いましたら教えていただけませんか?
0736nobodyさん2010/03/23(火) 21:42:53ID:22je5/ss
質問です。
あるファイルの一行が以下のようになっています。

[SA_Pre]perl[SA_BORY]hoge[SA_2323BO]

これをパターンマッチで「perlhoge」を抽出するようにしたい。[]で囲んだキーワードを取り除く
s/\[SA.*?\]//eで[]で囲んだキーワードを削除できません。
サクラエディタの置換機能なら、検索キーワードを「\[SA.*?\]」とすることでうまくいくようですが…
07371672010/03/23(火) 21:48:12ID:???
s/\[\w+\]//g
0738nobodyさん2010/03/23(火) 21:56:31ID:22je5/ss
>>737
ありがとう。感動しました
0739nobodyさん2010/03/23(火) 22:55:28ID:???
>>733
ありがとうございます。
>>734
すいませんカウントじゃないんです。
0740nobodyさん2010/03/23(火) 23:24:25ID:LM1mmRsS
my @data = $string =~ s/(hoge)//isg;

じゃぁこれで
0741nobodyさん2010/03/23(火) 23:32:04ID:???
s///gの返り値はコンテキスト関係なく置換回数じゃなかったっけか

my @data;
$string =~ s/(hoge)/push @data, $1; ""/ge;
とか
0742nobodyさん2010/03/24(水) 12:52:57ID:???
>>735
できるだけ詳しくソース、環境書いてみて
0743nobodyさん2010/03/24(水) 17:37:14ID:gXJd/117
>>742
おぉ、やっと返信が!

環境はwindows vista、active perl version 5.10.1をソースコードに使ってます。

以下ソースコード(TestRTFWriter.pl)
--
&useRTFWriter();

sub useRTFWriter(){

use RTF::Writer;
my $rtf = RTF::Writer->new_to_file("RTFsample.rtf");
$rtf->prolog('fonts' => ["MS Pゴシック"]);

$testStr = "くが表示できません。";

$rtf->printf(\'{\fs40 %s}',$testStr);
$rtf->print("\n\n");
$rtf->close;
}
--

そんでRTFSample.rtfの内容

?¬が侮ヲできません。

--

他の文字も化けてるね。。

0744nobodyさん2010/03/24(水) 17:55:26ID:JL5BpxOE
Perlマニュアル
http://douseidoumei.com/perlman2/
0745nobodyさん2010/03/24(水) 19:02:04ID:???
>>743
use utf8;
を先頭につけて文字コードをutf8にして保存するのが無難な気がするなぁ

use Encode;
$testStr = decode('sjis', "くが表示できません。");
でやってみたんだけどダメだった。
これはこれで誰か知ってたら教えて欲しい

==== utf8版Dump
PV = 0xa74bdc "\343\201\217\343\201\214\350\241\250\347\244\272\343\201\247\343
\201\215\343\201\276\343\201\233\343\202\223\343\200\202"\0
[UTF8 "\x{304f}\x{304c}\x{8868}\x{793a}\x{3067}\x{304d}\x{307e}\x{305b}\x{3093}\x{3002}"]

==== Encode版Dump
PV = 0xb3a2ec "\343\201\217\343\201\214\344\276\256\357\275\246\343\201\247\343
\201\215\343\201\276\343\201\233\343\202\223\343\200\202"\0
[UTF8 "\x{304f}\x{304c}\x{4fae}\x{ff66}\x{3067}\x{304d}\x{307e}\x{305b}\x{3093}\x{3002}"]
07467432010/03/24(水) 21:28:05ID:???
>>745

utf8にしたら上手く行きました。
ありがとう。

自分の環境でもencode版はだめでした。
後学のためになぜUTF-8だと上手く行くのか(UTF8と他の文字列の違い)を教えてくれませんか?

UTF-8は2バイト文字っていう認識しかないんだけど。
0747nobodyさん2010/03/25(木) 00:26:57ID:2wRnf0pF
質問です。
ファイルを処理する際、ファイルの先頭から一行ずつ処理していくのが一般的ですが
これを2〜3行ずつ読み込んで処理することは可能でしょうか。
たとえば以下のようなプログラムを処理した場合
---------------------------
#include <stdio.h>

int main(void)
{
return 0;
}
-------------------------
// int main(void)
// {
// return 0;
// }
-------------------------
といったように特定の関数をコメントアウト化したいです。
0748nobodyさん2010/03/25(木) 01:09:18ID:???
>>747
そのコメントアウト化ってどういうアルゴリズム?
ルールさえ決まってるなら1行ずつ処理していく方法でも上手くいきそうな気がするけどそれじゃダメそう?
0749nobodyさん2010/03/25(木) 01:16:51ID:???
$/=適当な区切り文字列
0750nobodyさん2010/03/25(木) 09:47:05ID:???
undef $/;
my $file = <$fh>;

これでファイルが丸ごとスカラに入る。
0751nobodyさん2010/03/25(木) 11:11:15ID:???

use CGI::Lite;
を付け加えると、
下記のエラーが出ます。
どうすれば解決できますか?

[user@aaa ~]$ ./test.pl
Can't locate CGI/Lite.pm in @INC (@INC contains:
/usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi
/usr/lib/perl5/site_perl/5.8.8 /usr/lib/perl5/site_perl
/usr/lib/perl5/vendor_perl/5.8.8/i386-linux-thread-multi
/usr/lib/perl5/vendor_perl/5.8.8 /usr/lib/perl5/vendor_perl
/usr/lib/perl5/5.8.8/i386-linux-thread-multi /usr/lib/perl5/5.8.8 .)
at ./Extension_Mobility_test2.pl line 30.
0752nobodyさん2010/03/25(木) 12:43:51ID:???
>>751
root権限でcpan CGI::Lite
0753nobodyさん2010/03/27(土) 12:20:26ID:???
>>751
CGI::Lite をCPANからDLして、
http://search.cpan.org/dist/CGI::Lite/

使いたいCGIのあるディレクトにCGIってフォルダ作って中にLite.pm置くだけで使えるんじゃね?
試してないけど。
0754nobodyさん2010/03/27(土) 13:37:23ID:???
use lib がどうこう
依存関係がうんぬん
0755nobodyさん2010/03/27(土) 13:42:43ID:???
>>754
CGIのサブセットっぽいから動くんじゃね?
use libしなくても実行ファイルのルートからはたどってくれなかったっけ?
0756nobodyさん2010/03/29(月) 09:22:31ID:???
751のエラーを見る限りでは . が含まれてるようだけど、
コマンドラインで試すときとCGIとして起動されるときは
また環境が違うから、置き場所決めてuse libしといた
方がいいんじゃないかな。
0757nobodyさん2010/03/29(月) 14:57:28ID:???
ttp://www2u.biglobe.ne.jp/~MAS/perl/waza/authbasic.html

LWP::UserAgent->new;
を使っているのは理解しております。

HTTP::Requestもプログラム中では使っていますが、
なぜ、モジュール利用の宣言で
use LWP::UserAgent;
だけで、
use HTTP::Request;
となっていないのでしょうか?
0758nobodyさん2010/03/29(月) 15:23:53ID:???
LWP::UserAgentの中でuseしてるから
0759nobodyさん2010/04/02(金) 14:04:38ID:???
true と false を使いたいのですが定数でできますか?
0760nobodyさん2010/04/02(金) 15:26:59ID:???
>>759
1と0を使うのが習わし
0761nobodyさん2010/04/02(金) 15:33:40ID:???
マッチ演算子と置換をセットですることはできるのでしょうか?
イメージは下記のようにしたいのですが、エラーになります。


my $a = "aaa/bbb/ccc";
$a =~ sm|aaa/bbb|zzz|g;
0762nobodyさん2010/04/02(金) 15:44:52ID:???
>761
sm///演算子なるものはない。
s///のセパレータに/以外を使いたいという意味なのか?
であれば、s|aaa/bbb|zzz|g でよいのではないか?
07637612010/04/02(金) 16:01:28ID:???
>>762
エスパー回答ありがとうw

セパレータを変えたかったんです。
mはいらなかったんですね。
ありがとうございました。
0764nobodyさん2010/04/02(金) 16:44:23ID:???
知っているとは思うが、$aはmyの対象外だからねっ
0765nobodyさん2010/04/02(金) 20:09:24ID:TSIkzIjB
そ、そうだったのかw
0766nobodyさん2010/04/03(土) 02:45:47ID:???
$b too.
0767nobodyさん2010/04/03(土) 18:36:58ID:???
<更新情報>========================
〜内容〜
==============================

テキストファイルに上記のように囲まれた部分があり、HTML として整形して
表示する際にこの部分を blockquote で囲んで出力したいと思ってます。

単純に 「===」 を </blockquote> にしたら、1行目でいきなり閉じちゃうので駄目でしたw。

今は1行目をテキストファイルに存在しえない様な文字列に置換してから、
「===」 を </blockquote> に置換してから、1行目を置換するといったことをやってます。

しかしどう考えても正規表現で1行で済むように思えてならないんです。

ちなみに 「=」 の個数は2〜3ほどのバラつきがあります。
0768nobodyさん2010/04/03(土) 18:53:47ID:???
>>767
内容中に=がないことが前提だが。

use utf8;
use Encode;

$str = <<EOF;
<更新情報>========================
〜内容〜
==============================
EOF

$str =~ s|=+([^=]+)=+|<blockquote>$1</blockquote>|sg;
print $str;
0769nobodyさん2010/04/03(土) 20:22:50ID:???
ありがとうございます。

使わせていただきます m(_ _)m
0770nobodyさん2010/04/03(土) 21:16:07ID:???
>>768さんのがまったく動作しなかったので、30分悩んでたら出来たので報告
(<更新情報>[=]+.*?=[=]+)

=[=]+ とやらずに [=]+ とすると文字化けするので、こうなった次第。
euc-jp をやめて utf8 にした方がいいのだろうか?
0771nobodyさん2010/04/03(土) 21:17:14ID:???
20%の確率であたりが出るといった処理を書いてみたのですが、
下記の考え方であってますでしょうか。

当たりカードを20枚発行し、100枚の中から抽選して一つでも
発行カード番号が入っていれば当選、としたかったのですが、
スマートな方法が見つからなかったので、このように書いて
みました。


# $rate%の確率で当選者が決定。
my $rate = 20;

# 抽選カード番号を100枚の中から発行
my $rand_num = int((rand(100))) + 1;

# 抽選カード番号が設定値($rate)以下であれば当たり(1〜$rateまでに含まれている)。
if($rand_num <= $rate){ 当選処理; }
07727682010/04/03(土) 22:13:10ID:???
>>770
Perlは内部ではutf-8を扱うのが基本
ソースももちろんutf-8
そして
use utf8;
という一文を最初のほうに加える (こうしないと2バイト文字を2文字としてカウントしてしまう)
入力と出力もutf-8であるべきだけど、
もし他の文字コードを用いたい場合には Encode.pm でデコード・エンコードしてやり、
常に内部ではutf-8を扱っている状態にしてやるのがよい

あと内部で扱う utf-8 と入出力で扱う utf-8 は別物だったりするので要注意
0773nobodyさん2010/04/03(土) 22:29:35ID:???
>>771
同じこと書いてるけどこれじゃだめなの?

if(rand() <= 0.2){ ... }
0774nobodyさん2010/04/03(土) 22:52:36ID:???
CGIとコマンドラインで実行したことを実行中のスクリプトから知るにはどうすればいいんでしょう?
ENV{'HTTP_HOST'}の有無で判別しても問題はないでもんでしょうか?
0775nobodyさん2010/04/03(土) 23:02:47ID:???
my $urldata = {
'1' => { 'name' => 'TEST1', 'url' => 'http://〜', 'file' => 'test1.txt' },
'2' => { 'name' => 'TEST2', 'url' => 'http://〜', 'file' => 'test2.txt' },
'3' => { 'name' => 'TEST3', 'url' => 'http://〜', 'file' => 'test3.txt' }
};

foreach my $targetinfo (sort keys(%{$urldata})){
my $req = HTTP::Request->new(GET => $urldata->{$targetinfo}->{'url'});

上記のようなことをしたら

index.cgi: Argument "" isn't numeric in sprintf at [PATH] line 45.

とエラーが出たのですが、今いじってるスクリプトに sprintf を使っていないのでエラーの言ってる意味がわかりません。
それとも、そもそも間違ったことをしてるのでしょか?
0776nobodyさん2010/04/03(土) 23:18:09ID:???
>>775
ごめんなさい別のファイル見てましたw
質問の仕切り直しです。
@mediainfo = map { $_->[0] } sort { sprintf("%02d", $a->[3]) cmp sprintf("%02d", $b->[3]) || $b->[2] cmp $a->[2] } map { [$_, split /\t/] } @mediainfo; # レギュラー (曜日設定) と日付でソート

こうしたとき、[3] には曜日を表す 0-7 の数字が入ってるのですが、毎週無い予定に関しては曜日設定を入れてません。
そこで sprintf でエラーが出てる状況です。
split した結果、配列の中で値の無い部分に対して 0 を代入することって出来るのでしょうか?
データに -1 でも入れておけと言われればそれまでなのですがw
0777nobodyさん2010/04/03(土) 23:27:56ID:???
>>776
それ、エラーじゃなくてwarning。
その後、文字列"00"としてちゃんと実行はされている。
どうしてもその表示を消したければ、その部分で
no warnings "numeric";
0778nobodyさん2010/04/03(土) 23:43:36ID:???
とりあえずそれを指定してwarnを消そうと思います
0779nobodyさん2010/04/03(土) 23:59:36ID:???
no warnings でも消えなかったので
@mediainfo = map { $_->[0] }
sort { sprintf("%02d", ($a->[3] ? $a->[3] : 0)) cmp sprintf("%02d", ($b->[3] ? $b->[3] : 0)) || $b->[2] cmp $a->[2] }
map { [$_, split /\t/] } @mediainfo; # レギュラー (曜日設定) と日付でソート
こうしました。
強引且つ見栄えが汚いですがww
0780nobodyさん2010/04/04(日) 00:13:51ID:???
sprintf "%02d", $a->[3] || 0
とかでいいじゃん
あと @mediainfo の要素数がかなり多いようだったら sprintf とかは事前にすませといて sort ブロックの中はなるべく単純な比較だけにするようにしたほうがいいかも
0781nobodyさん2010/04/04(日) 13:38:51ID:???
そもそもsprintfいるのかとか、数字の比較なら<=>だろうが、とか
0782nobodyさん2010/04/06(火) 18:12:36ID:???
# 設定の読み込み
open(INFH, '<', $config->{'file_mailform_config'});
my $config;
my $cnt = 0;
while (my $line = <INFH>){
  chomp $line;
  my ($tmpNAME, $tmpTITLE, $tmpALLOWVAL) = split(/\t/, $line);
  $config->{$cnt}->{'name'} = $tmpNAME;
  $config->{$cnt}->{'allowval'} = $tmpALLOWVAL;
  $config->{$cnt}->{'title'} = $tmpTITLE;
  $cnt++;
}
close(INFH);

この様にデータ内容を読み込んで、データの1行目はヘッダなので
undef $config->{0};
として削除したつもりでしたが、

foreach my $inputitem (sort keys %{$config}){
  print "$config->{$inputitem}->{'name'}<br>\n";
}

としたら、1行目があった場所 (undef する前に表示されてた場所) が空行で出力されました。
undef では連想配列の要素を削除することは出来ないのでしょうか?

undef を外すとヘッダ行が表示されます。
0783nobodyさん2010/04/06(火) 18:21:25ID:???
>>782
つ delete
0784nobodyさん2010/04/06(火) 18:55:48ID:???
そ、そんなのが用意されてたのか
無事、期待度通りの動作になりました。
0785nobodyさん2010/04/07(水) 23:42:24ID:???
use threads;

にて
Software error:
This Perl not built to support threads
とのメッセージ

さくらのレンタルサーバーなんですがthreadsはサポートしてないのでしょうか・・・
0786nobodyさん2010/04/08(木) 00:04:18ID:???
>>785
そう書いてあるようにしか見えないが
07877852010/04/08(木) 00:20:24ID:???
>>786

ありがとうございます。
0788nobodyさん2010/04/14(水) 01:52:36ID:???
CGI::Applicationにてチェックボックスの値を受け取るのに苦戦しています。

my @check = $self->query->param('check');
foreach $temp(@check){
print $temp;
}

チェックボックスを何箇所チェックしようが、一つ目の値しか取り出せません。
URLにはキチンと &check=xxx&check=yyy〜 と渡ってきているように見えるのですが、、、
0789nobodyさん2010/04/14(水) 01:53:37ID:???
[]
07907882010/04/14(水) 02:06:40ID:???
>>789
どういうことでしょうか?

foreach $temp(@check)の部分で配列から1要素取り出せてるので[]は必要ないという認識なんですが、
間違ってますか?
0791nobodyさん2010/04/14(水) 02:20:18ID:???
name属性に[]つけるんだっけか
07927882010/04/14(水) 02:30:47ID:???
&check[0]=xxx&check[1]=yyy〜

という形で渡せればいいということでしょうか?
試してみましたが、
my @check = $self->query->param('check')
で値がひとつも取れなくなりました。。。

というか、基本的なことなんでしょうがググっても情報得られず。。。
調べ方が悪いのかな・・
0793nobodyさん2010/04/14(水) 02:49:00ID:???
Perlはエスパーじゃないからパラメタが配列かそうじゃないかは解らない
0794nobodyさん2010/04/14(水) 02:58:53ID:???
>>792
ごめん、name="check[]"とやるのはPHPだったかも
07957882010/04/14(水) 03:23:59ID:???
うーん、、、もうお手上げでございます。。

my @check = $self->query->param('check');
print "@check";

見事に一つ目しか取れてませんね。。。
0796nobodyさん2010/04/14(水) 03:56:01ID:???
use CGI;

my $q = new CGI;
my @check = $q->param('check');

foreach $a(@check) {
print $a . "<br>\n";
}

とりあえずこれは動くんだけど、CGI::Applicationだとだめなんかね
07977882010/04/14(水) 04:00:45ID:???
>>796
うーん、、、一つ目しかとれないっすね。。。

HTML部分が悪いんでしょうか?

<input type="checkbox" value="xxx" name="check"/>
<input type="checkbox" value="yyy" name="check"/>

HTML部分はこんな感じです。
0798nobodyさん2010/04/14(水) 04:17:49ID:???
〜.cgi?check=a&check=b
でやってんでしょ?
なんでいまさらHTMLを疑うのか。。
07997882010/04/14(水) 04:22:31ID:???
>>798

仰るとおり、、申し訳ない。
0800nobodyさん2010/04/14(水) 04:27:42ID:???
>>796でもだめだったんだよね?
久しぶりにPerlインスコして書いてみたら動いたというだけなので、これ以上はサポートできず申し訳ない
環境はWS2003+IIS6+Perlis.dll
08017882010/04/14(水) 04:33:19ID:???
>>800他、アドバイスしてくださった皆さん

どうにもならなかったので力業ですが解決させました。

name要素をcheck_1,check_2に変更した上で、
my $i = 0;
while ($self->query->param("check_$i")) {
# 処理
$i = $i + 1;
}

とすることで無事に取り出せました。

解決しましたが頭の中は?でいっぱいでございます。。。

ありがとうございました。
0802nobodyさん2010/04/14(水) 22:49:50ID:???
CGI::Application のparam()とCGI.pmのpara()が違ってて、
CGI::Applicationの方はhashにしか対応してないからじゃない??
Applicationは使ったことないからどういう使い方をするのかあまり知らないが、
そもそも重複したparam名を使用すべきではないとか。。

CGI::Application こっちのsub array はハッシュのみ。
http://cpansearch.perl.org/src/MARKSTOS/CGI-Application-4.31/lib/CGI/Application.pm

CGI.pm こっちのsub paramは、arrayに対応。
http://cpansearch.perl.org/src/LDS/CGI.pm-3.49/lib/CGI.pm
0803nobodyさん2010/04/14(水) 23:02:13ID:???
俺も使ったことないんだけど、CGI.pmでもだめらしいからね
>>796がうまく動かないらしい。

まぁ何かの間違いだと思うけど
0804nobodyさん2010/04/23(金) 00:45:52ID:???
配列A と 配列B があって
それぞれ先頭から順番に値がセットになるような感じで並んでいたとします
また、それぞれに同じ値はないものとします

配列Aから条件式でマッチングを行い
必要なデータを取り出します

この条件式は配列Bでは使えないのですが
同じ条件で配列Bから抜き出すにはどうしたらいいでしょうか?

@a = (あ,い,う,え,お);
@b = (1,2,3,4,5);

@aのみ条件式でマッチング

最終的に
あ&1、う&3、お&5
みたいな感じで取り出したいんです
0805nobodyさん2010/04/23(金) 01:01:20ID:???
@results = map { $a[$_] =~ /あ|う|お/ ? "$a[$_]&$b[$_]" : () } 0..$#a
0806nobodyさん2010/04/23(金) 01:04:47ID:???
SQL だったら WHERE a.id = b.id と書くところだな
マッチング時に要素番号と要素をセットにした連想配列を作って
さらにその連想配列のkeyでループを回せばいいんじゃないかな
0807nobodyさん2010/04/23(金) 01:06:19ID:???
s/WHERE/JOIN b WHERE/
■ このスレッドは過去ログ倉庫に格納されています