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

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

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2005/05/25(水) 06:36:28ID:PVpWgcdf
Perlのコーディングで困ってる人のスレです。

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

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

最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。

過去ログやお勧めサイトは >>2-10
0754nobodyさん2005/07/20(水) 22:52:11ID:???
おまいの言ってる%inと%FORMの違いは何よ
07557422005/07/20(水) 22:54:20ID:???
>>754
正直、よくわかりません(^^;
<form〜>を使ってれば$FORM〜になるという理解。
#それでも$inになってることもあるので自信は0%。
07567422005/07/20(水) 22:58:28ID:???
$FORM{'no'}にしたところ動作しました。
・・・なんでだろう。
ぐぐりの旅へイッテキマス。
さんきゅーでした>ALL
07577492005/07/20(水) 23:07:02ID:???
気のせいでした。全角スペースとか@とかでした。
0758nobodyさん2005/07/20(水) 23:07:39ID:???
君は get と post の違いから勉強するべきだ。
07597582005/07/20(水) 23:08:25ID:???
>>756宛
0760nobodyさん2005/07/20(水) 23:45:25ID:???
>>742 てーか perl は PHPみたいに勝手に %FORM とか %in とかに値が設定されたりしないから。
0761nobodyさん2005/07/21(木) 06:13:37ID:???
すげぇがっくりきた…。
0762nobodyさん2005/07/21(木) 10:15:20ID:???
ほぼ丸一日かけてそんなオチか・・・。
0763nobodyさん2005/07/21(木) 19:16:23ID:00deyUp9
perlを覚えたくてこのスレに来ました。
初心者向けのperlの本を買って、カウンタや掲示板が作れる事は分かったのですが、そういう類のものは別に作りたくありません。
というか、perlを覚えるとどんな便利な事があるのか
本を読んでもいまいちピンときません。でも覚えたいです。
皆さんは「あぁ、perlを覚えてよかったな〜」と思ったのはどんな時ですか?
また、最も簡単にその気分を味わう方法があったら教えてください。
0764nobodyさん2005/07/21(木) 20:05:00ID:???
昔っから夏になると掲示板でアンケート取りたがるのが出るんだよな。
0765nobodyさん2005/07/21(木) 20:10:56ID:???
⊂二二二( ^ω^)二⊃ブーン
0766nobodyさん2005/07/21(木) 20:11:24ID:???
>>763
質問には答えないが、「初めてのPerl」を勧める。
0767nobodyさん2005/07/22(金) 09:52:47ID:???
>>763
Perl は手段の一つであり、目的がないのに覚えても無駄。
0768nobodyさん2005/07/22(金) 12:55:10ID:Nv8MLct4
指定時間に起動するCGIを作成したいのですが、
どのように作れば良いかご存知でしょうか

『1時間に一度データを集計し、その結果によってデータベースを作成。
 その結果をあらかじめ登録してあったメールアドレスに転送する』
というものを作成したいのです。

メールアドレスへの転送や、集計などは出来ているので
『1時間に1度CGIを起動する方法』を教えてください。
よろしくお願いします
0769nobodyさん2005/07/22(金) 13:29:40ID:???
1時間ごとにそのCGIにアクセスするスクリプトを書いて、
タスクスケジューラなりcronなりに登録する。以上。
0770nobodyさん2005/07/22(金) 15:09:15ID:???
寝ろ!どっとしーじーあい

#パールのパス
無限ループ{
&ここで集計してメール;
寝る(参千六百秒);
}

テストするには
ぱーる 寝ろ!どっとしーじーあい & で起動。
0771nobodyさん2005/07/22(金) 15:40:28ID:???
なんで CGI でやらなあかんのやろ?
0772nobodyさん2005/07/22(金) 21:21:31ID:zirnRNb/
超アホな質問でごめんなさい。
BBSを晒しまくるアホがいるので、ダミーのCGIを置きたいのです。
で、その内容なのですが、

#!/usr/bin/perl

print <<"_HTML_";

   HTMLの案内文章

_HTML_

と、たったこれだけです。
サーバーにアップするとエラーになります。
パーミッションは755にしました。
ちゃんとアスキーモードで転送しています。

コードがおかしいのでしょうか?すみませんが助力お願いします。
0773nobodyさん2005/07/22(金) 21:28:52ID:???
>>772
>>1
> 3: こんなエラーが出て上手く行かなかった。

http://www.harukaze.net/~mishima/perl/cgi-debug-env/deb-tech.html
0774nobodyさん2005/07/22(金) 21:32:38ID:???
現在、下記のように全角ひらがな、カタカナを許容しているのですが(このソース自体
怪しいかもしれませんが)、これに「全角、半角スペース」を追加する場合、「|$nobashi」
のあとに「|$space」といったものを追加すれば問題ございませんでしょうか。
また、スペースのコードを教えていただけますと幸いです。


$eucpre = qr{(?<!\x8F)};
$eucpost = qr{
(?=
(?:[\xA1-\xFE][\xA1-\xFE])* # JIS X 0208 が 0文字以上続いて
(?:[\x00-\x7F\x8E\x8F]|\z) # ASCII, SS2, SS3 または終端
)
}x;

$hiragana = '\xA4[\xA1-\xF3]'; # ぁ〜ん
$katakana = '\xA5[\xA1-\xF6]'; # ァ〜ヶ
$kanji = '[\xB0-\xFE][\xA1-\xFE]'; # 漢字(実際に割り当てのない領域も有るが問題はない)
$nobashi = '\xA1[\xBC\xBD\xC1]'; # ー−〜

if($name !~ m/^$eucpre(?:$hiragana|$katakana|$kanji|$nobashi)+$eucpost$/){}
0775nobodyさん2005/07/22(金) 21:33:22ID:???
>772
ヒント。
えーとね、ブラウザに表示する内容はそれだけなんだけど、
その前にまずその内容が「どういったものか」をブラウザに伝える必要があるのだよ。
0776nobodyさん2005/07/22(金) 21:41:20ID:zirnRNb/
>>773
指摘ありがとうございます。
URL、よく読んでみます。

>>775さん
ヒントありがとうございます。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
とかじゃ……ないですよね?
他のスクリプトがどうやっているかよく見てみます。
0777nobodyさん2005/07/22(金) 21:42:19ID:???
パールなんかやめとけ、
pHPがずっといいぞ。
二日で理解できた。
07787752005/07/22(金) 21:53:12ID:???
>776
><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
>とかじゃ……ないですよね?
じゃないっす。

> 他のスクリプトがどうやっているかよく見てみます。
うむ、これは非常にいい心がけだ。
いくつかのスクリプトでhtml出力(とくに最初のヘッダあたり)をしてる部分を
眺めてみれば、すぐ見当がつくと思うぞ。ガンバレ。
0779nobodyさん2005/07/22(金) 21:55:12ID:???
PHPならヘッダも自動で出してくれるから>>772みたいに悩まずにすむ
07807722005/07/22(金) 22:02:16ID:???
判明しました!
print "Content-type: text/html\n";
これですね!

>>778
さらなるアドバイスありがとうございました。
本当に助かりました。
0781nobodyさん2005/07/22(金) 23:57:16ID:???
>>780
\nが一個足らん。
0782nobodyさん2005/07/23(土) 00:06:44ID:???
772がちょっとかわいい。
0783nobodyさん2005/07/23(土) 00:08:31ID:???
にげr(ry
0784nobodyさん2005/07/23(土) 11:31:34ID:???
テキストファイルの任意の行を取り出すのはどうすればよいですか?
0785nobodyさん2005/07/23(土) 12:54:43ID:???
>>784
#!/usr/local/bin/perl -w
# usage: perl script file line_num
use strict;
my($file, $target) = @ARGV;
-f $file || die "No such file: $file";
open FILE, '<' . $file or die $!;
my $line;
do { $line = <FILE> } until $. == $target;
close FILE;
print $line;
__END__
0786nobodyさん2005/07/23(土) 18:26:12ID:???
HTML文書を書くプログラムを作っていてサブルーチンで表を書かせようとしたのですが、
$table = '<table>'を読み込んでくれず、空白になっています。
$table = '< table>'なら読み込んでくれるしまた別の箇所なら$table='<table>'を読み込んでくれます。
print "Content-type: text/html\n\n";も最初に記述しています。
タグを消すようなサブルーチンも入れておらず頭を抱えています。
原因が分かず、変な質問文ですが考えられる原因はどういったものがあるでしょうか?
0787nobodyさん2005/07/23(土) 18:27:32ID:???
$table = '<table>';
$table = ''<tr><td>めいーん</td></tr></table>';
↑上書きしている
0788nobodyさん2005/07/23(土) 18:36:08ID:???
>>787さん
sub table {
$table = '<table>';
$nottable = '< table>';
print $table;
print $nottable;
}
の結果が< table>のみなんです。
0789nobodyさん2005/07/23(土) 18:42:54ID:???
>>788
そうか?うちでは、
$ perl
sub table {
$table = '<table>';
$nottable = '< table>';
print $table;
print $nottable;
}
&table();
<table>< table>
だけどな。
0790nobodyさん2005/07/23(土) 18:48:31ID:???
>>789さん
上のサブルーチンだけを別のファイルに移して書くと結果はそうなるのですが
そのファイルを今書いてるやつで書くとそうなるので訳が分からないのです・・・
タグを消すプログラムなんて入れてないし別のファイルを参照もしてないのですが・・・
0791nobodyさん2005/07/23(土) 18:57:01ID:???
<table>はブラウザ表記されない、ということでperlとしては出力してます。
説明足らなくてすみません。
0792nobodyさん2005/07/23(土) 19:11:32ID:???
>>791
何かとんでもない勘違いをしている希ガス。
思ったとおりに動かないように、最低限までコード削って晒せ。
0793nobodyさん2005/07/23(土) 19:47:25ID:???
>>792
自己解決しました。原因は#の消し忘れです。
つまらないミスでお騒がせして済みませんでした。
0794nobodyさん2005/07/23(土) 20:12:58ID:???
頭の悪い人が大量発生するスレでつね。
0795nobodyさん2005/07/23(土) 20:21:46ID:???
でもまあ、グローバル変数を多様すると、ポインタが衝突するのか知らないけど、変なことが起きた経験はあるよ。
とりあえず use strict; と perl -w しておけ、って感じ。
0796nobodyさん2005/07/23(土) 23:11:05ID:???
>>795
おいこれ大問題じゃねーか perl は糞だな
よくこんな糞実装使ってられるなバカじゃねーのか
0797nobodyさん2005/07/23(土) 23:17:28ID:???
はい、バカです。だから、使う。
0798nobodyさん2005/07/24(日) 00:37:08ID:???
変数の名前の付け方をちゃんと考えてやっておけばいいだけのこと
0799nobodyさん2005/07/24(日) 06:19:52ID:???
RSSをHTMLで出力したくて とりあえずこのサンプルをcgiにして実行してみた。

ttp://allabout.co.jp/career/cgiperl/closeup/CU20050131A/index4.htm

500エラーがでますた。
鯖はxrea パ−ミッションは755

どのへんが問題でしょうか?
0800nobodyさん2005/07/24(日) 07:27:11ID:???
何も検証できないスキルのくせに、でしゃばって rss なんか使おうとしている点が問題。
0801nobodyさん2005/07/24(日) 07:51:29ID:???
>>799
xreaのパーミッション・・・
08028012005/07/24(日) 08:48:27ID:???
スマソ いまやってみたらxrea755でも動くな。
モジュールも入ってるし。
恐らくdataディレクトリとか作ってないんだろ。
0803nobodyさん2005/07/24(日) 08:51:23ID:???
馬鹿は放っておけって。
0804nobodyさん2005/07/24(日) 12:28:38ID:???
ログみれよ
0805nobodyさん2005/07/24(日) 18:07:55ID:???
.htaccessで
AddType cgi-script-debug .cgi
これでデバッグモード
スペルは違う鴨
08067992005/07/24(日) 19:04:15ID:???
チェックしたところこのような文がでました

Can't locate XML/RSS.pm in @INC (@INC contains: ./mylib /usr/lib/perl5/5.00503/i686-linux /usr/lib/perl5/5.00503 /usr/lib/perl5/site_perl/5.005/i686-linux /usr/lib/perl5/site_perl/5.005 .) at tmp.pl line 6.
BEGIN failed--compilation aborted at tmp.pl line 6.

dataディレクトリは作ってあります

モジュールがないってことなんでしょうか?
でもxreaではインストールしてあるみたいですが。

0807nobodyさん2005/07/24(日) 20:16:20ID:???
うんこ
0808nobodyさん2005/07/24(日) 21:14:47ID:???
>xreaではインストールしてあるみたいですが。
この根拠は?
0809nobodyさん2005/07/24(日) 21:24:43ID:???
これです
ttp://sb.xrea.com/showthread.php?t=9748
0810nobodyさん2005/07/24(日) 21:42:23ID:???
>>809
799 の使っているサーバは s151 なのか? s151 には Perl 5.8.7 が
入っている筈だが、何故 @INC には 5.005 のディレクトリしか無いんだ?
http://www.s151.xrea.com/server_info.cgi

XML::RSS は Pure Perl な一ファイルのモジュールなんだから、
無ければ自分のスペースに置いて use lib すればよかろうに。
http://search.cpan.org/~kellan/XML-RSS-1.05/

スレ違いな話題なんでこれ以上続けたいなら下のスレへでも行ってくれ。

CGI設置について質問 【Part2】
http://pc8.2ch.net/test/read.cgi/php/1104624784/
0811nobodyさん2005/07/24(日) 21:56:39ID:???
わかりましたやってみます。サンクスコ
0812nobodyさん2005/07/24(日) 22:08:41ID:???
おまえらやさしいな
0813nobodyさん2005/07/25(月) 03:20:51ID:???
>>800 書いたオレは勝ち組。
0814nobodyさん2005/07/25(月) 03:28:32ID:???
http://pc8.2ch.net/test/read.cgi/php/1078216600/317-
ここの 318 書いた俺の方が勝ち組
0815nobodyさん2005/07/25(月) 15:03:30ID:???
use strictで書いています。

local ($hogehoge , %hoge2);
というふうに、local宣言をしても、有効範囲の宣言がされていないぞ
(゚Д゚)ゴルァと言われてしまうのですが、localを使うにはstrictをあきらめ
なければいけないのでしょうか?

尚、my ($hogehoge ,%hoge2);だとうまくいきます。
0816nobodyさん2005/07/25(月) 15:22:26ID:???
localとmyの違いはわかってんのか?
0817nobodyさん2005/07/25(月) 15:28:18ID:???
>>815
http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlfaq7.html#What_s_the_difference_between_dy
http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlsub.html
0818nobodyさん2005/07/26(火) 01:51:12ID:???
ajaxを用いてある程度インタラクティブなweb telnetみたいな物を作りたいのですが
持続的なコネクションを確保する場合方向性としては、どっかのPORTにlistenする
デーモン的なプログラムとユーザーからのアクションやセッションを司るプログラムを
組み合わせるような方法がベターなのでしょうか。
mod_perlもいいかなと思ったのですが必ず前回アクセスしたプロセスにアクセス出来るとは
限らないので無理そうです。
listenしなくても常駐させてpidを記録しておき、別プログラムからpidの情報を元に操れたり
する事は出来ますか?
0819nobodyさん2005/07/26(火) 01:54:16ID:???
ヒント:セッション管理
0820nobodyさん2005/07/26(火) 03:48:28ID:???
J-PHONE時代の端末等、Basic認証に対応していないものを
なんとか通過させたく、用意したフォームからフォームから
Basic認証情報を入力させて、環境変数のAUTH_USER、
AUTH_PASSWORDを強制的にセットさせるようなスクリプトを
考えております。

環境変数をCGI側で設定してBasic認証領域内にアクセスさせる
ような仕組みは可能でしょうか。
もしも可能であれば、ご教示いただきたく思っております。

まとまりのない文章ですみません。
0821nobodyさん2005/07/26(火) 16:42:49ID:EJMHsz5R
@array = (0..9);
$hara =1;
while ( 1 ){
for ( $i = 1; $i <= 3; $i++ ) {
$index0= rand @array;
$index1= rand @array;
$index2= rand @array;
my $tmp0=$array[$index0];
my $tmp1=$array[$index1];
my $tmp2=$array[$index2];
$shibi0 = $tmp0;
$shibi1 = $tmp1;
$shibi2 = $tmp2;
}
if( $shibi0 != $shibi1 && $shibi0 != $shibi2 && $shibi1 != $shibi2 &&
$hara != $shibi0 && $hara != $shibi1 && $hara != $shibi2
){last;}
}

0〜9の中から3つの数字をランダムで選びだし、
重複せず、かつ$haraに代入されている数字とは異なる物が3つ揃った時に
ループを抜けるというスクリプトです。
これで動作はするのですが、あまりにも原始的というか
もう少しスマートなやり方だと、どういう風に組めるでしょうか?
自分の頭だとこれでいっぱいいっぱいでした。
0822nobodyさん2005/07/26(火) 17:06:05ID:???
>>821
過去ログで似たのでてきた気がする。 どこだかは知らないけど。

まあ、取得した値の要素を、一度配列から抜くとか、ハッシュでフラグたてたりしたら、絶対重複しないと思うけど?
>>821 の $shibi0-2 を出したいだけじゃなかったら意味ないけど、例えば

my @array = (0 .. 9);
my @shibi = ();
my %flag = ( 1 => 1 ); # >>821 の $hara の "1"
for (my $i = 0; $i < 3; $i++) {
    my $tmp = $array[ rand @array ];
    redo if (exists $flag{$tmp});
    $flag{$tmp} = 1;
    push (@shibi, $tmp);
}
print @shibi;
0823nobodyさん2005/07/26(火) 17:17:17ID:???
>821
標準モジュールのList::Util使ってこういうのも。

use List::Util 'shuffle';
@array = (0..9);
$hara = 1;
($shibi1, $shibi2, $shibi3) = splice @{[shuffle grep { $_ != $hara } @array]}, 0, 3;
08248212005/07/26(火) 17:18:07ID:???
補足なんですが、上のスクリプト、このセットを×5繰り返します
@array( 0..50 )とあるとしたら
0〜10、11〜20、21〜40、41〜45、46〜50それぞれ5セットで上のスクリプトを繰り返して
セット1からは$shibi0〜$shibi2、セット2は$shibi3〜$shibi5のそれぞれ3コ
セット3から$shibi6〜$shibi9の4コ、セット4と5は$shibi10、$shibi11の1つずつ
セットごとに、合計12コの変数を・・・これもforで繰り返させる方法があるんでしょうか?
0825nobodyさん2005/07/26(火) 18:20:53ID:???
あるよ。
つーか何が"補足"だよ。"付け足し"じゃねーか。

>>822 や >>823 使って、考えればできるだろ。
付け足すなら考えて試してから書けよな。

まあ、答えるなら、そのセットと繰り返しを関連付ければいいだけ。

>>822 で言えば、
@hoge = (
{ array=>[0..10], times=>3 },
・・・
[ array=>[46..50], times=>1 ],
);
とかやって、
for (my $h = 0; $h < @hoge; $h++) {
    my $set = $hoge[$h];
    # ここから >>822 のソースを参考
    my @array = @{ $set->{array} };
    # 中略
    for (my $i = 0; $i < $set->{times}; $i++) {
    # 以下略
って置き換えたりするだけだべ。
細かいところはもう知らん。
0826nobodyさん2005/07/26(火) 19:07:57ID:???
まさか宿題じゃないだろうな・・
0827nobodyさん2005/07/26(火) 20:37:18ID:W0GVg4kD
掲示板の本文中のURL表記の処理について質問です

$value とした本文中のURL表記を正規表現で拾って自動リンクさせているのですが

1.この中に自分のサーバ(プロバイダ)内のURLはそのままHTMLタグでリンク、
2.外部のURLは一旦別のcgiに「別のcgi?x=URL」として送るHTMLタグにしたい
3.さらに、「=」がある場合は別変換してから「別のcgi?x=URL」とする必要があると気づきました

これまで、1.2.まではifで分けてやっていたのですが、複数のURLがあると
当然ですが一緒の条件内に組み込まれてしまいます

$value~s//g ; を複数並べることで正規表現でできるでしょうか?

本文$valueを分割して一度配列に入れ、1行ずつ処理させる方法しかないとすれば、
URLがあるごとにsplitするにはどうしたらよいでしょうか?
0828nobodyさん2005/07/26(火) 22:24:08ID:???
>>827
言いたいことがよくわからんのだが。
具体例を挙げれ。
0829nobodyさん2005/07/27(水) 01:21:21ID:???
よくあるこういうのです
投稿記事中にURLがあった場合にhtmlのリンクタグを書きます

$value =~ s/(http\:[\w\.\~\-\/\?\+\=\:\@\%\;\#;\&\d]+)/<a href=$1 target=_blank>$1<\/a\>/g;
$value =~ s/(http\:[\w\.\~\-\/\?\+\=\:\@\%\;\#;\&\d]+)/<a href=..\/tx.cgi\?tx=$1 target=_blank>$1<\/a>/g;

2行目の転送でURL中に「=」があると、tx.cgiで誤動作がでるので
さらに「=」→「hidarimigi」などに変換して転送しなければならなかったのです

今回は改行の<br>で区切り、配列に入れ、
@NewValue = split(/<br>/,$value);
一行ずつ取り出して、If分岐して3つ以上の分類作業しました
しかし、一行に2つ違うURLがあると同じタグ表記をしてしまいます

なんとか自己解決はしましたが、
今後のため、もしか、もう少しクールな方法があったらお知らせください
0830nobodyさん2005/07/27(水) 01:24:03ID:???
言い忘れました、分ける理由はreferer対策です
0831nobodyさん2005/07/27(水) 01:38:24ID:???
どういう入力があって、
それをどういう形で出力したいのか
がイマイチわからない
0832nobodyさん2005/07/27(水) 01:52:15ID:???
urlエスケープしろよ
0833nobodyさん2005/07/27(水) 02:29:27ID:???
hidarimigi...
08348212005/07/27(水) 08:41:51ID:???
>824はリロードせずに書き込んでしまいました
鯖重くて昨日は見れなかったので、これから試してみます
レスありがとうございました。

>826
違いますよ
0835nobodyさん2005/07/27(水) 13:04:59ID:???
まさか href="$1" とすればいいだけなんじゃ…。

だとしたらアホすぎる…。
0836nobodyさん2005/07/27(水) 13:16:24ID:???
>>829
エスケープしすぎマロスwww

> 一行に2つ違うURLがあると同じタグ表記をしてしまいます
これの意味がよくわからんが、最短一致が抜けてるとかそういう問題かな?
0837nobodyさん2005/07/27(水) 16:31:30ID:???
>>829
$value = "http://yahoo.com/ http://mydomain/ http://pc8.2ch.net/test/read.cgi?bbs=php&key=1116970588&st=829&to=829&nofirst=true";
$value =~ s!(s?https?://[-_.\!~*'()a-zA-Z0-9;/?:@&=+$,%#]+)!'<a href="'.($1=~m|^http://mydomain.+$|?'':'../tx.cgi?').$&.'" target="_blank">'!eg;
print $value;

・要するに eg オプションつけて s/(略)/make_anchor_tag($1)/eg; のようにサブルーチン呼び出してその中でif文使えばURL1個ごとの振り分けができる。
・tx.cgi?http://... のようにすれば $ENV{'QUERY_STRING'} から読み出すだけなので楽。
08388372005/07/27(水) 16:39:37ID:???
$と@修正と[_a-zA-Z0-9]省略
[-_.\!~*'()a-zA-Z0-9;/?:@&=+$,%#]
 ↓
[-.\!~*'()\w;/?:\@&=+\$,%#]
0839nobodyさん2005/07/27(水) 17:55:59ID:???
てーか、
http://hoge.com/hoge.cgi?
  key=123&url=http://foo.com/foo.cgi?key=456&;value=789

とかあった場合に、スクリプト内で

url=http://foo.com/foo.cgi?key=456&;value=789

が & と = のせいで、正しくとれないのでどうすれば、って話だったんじゃねーの?

だから、>>832 の言ったように、

http://foo.com/foo.cgi?key=456&;value=789

の部分を URLエンコード (英数字以外を %** 形式に) すればいい、ってゆー。
0840nobodyさん2005/07/27(水) 18:08:50ID:5H9/gz8d
>>836
一行ごとに作業させたので、自ドメインと違うのが同じ行にあると
同じ分類として処理されてしまうということです

>>837 >>838
有り難うございます
正規表現からサブルーチンを呼び出すことができるとは
ちょっと頑張って理解してみます
0841nobodyさん2005/07/27(水) 18:11:03ID:5H9/gz8d
>>839
それも参考にします、有り難うございました
0842nobodyさん2005/07/28(木) 12:09:05ID:nWZS31ut
配列「@HAIRETSU」の全ての要素「1 2 3 4 5 6 7 8」の前後に
それぞれ特定の文字列「mae」「ato」付けて「mae1ato mae2ato mae3ato ...」
としたいんですが、

$A = '',1,2,3,4,5,6,7,8,;
$A =~s/,/ato,mae/g;
@HAIRETSU = split(/,/,$A);
pop(@HAIRETSU);
shift(@HAIRETSU);

こんな感じでやるのがベスト・・・なわけないと思いつつもどうすべきか分かりません。
何か助言あればお願いします。
0843nobodyさん2005/07/28(木) 12:12:25ID:???
???よく分からんがこういう事か?
foreach (@HAIRETU) { $_ = 'mae' . $_ . 'ato'; }
0844nobodyさん2005/07/28(木) 12:29:08ID:???
>>843
おぉ・・・ずばりそういうことです。
稚拙な落書きを読んでもらった上にスマートな回答
本当にありがとうございました。もっとベンキョしてきます。
0845nobodyさん2005/07/28(木) 14:18:32ID:???
@HAIRETSU = map { 'mae' . $_ . 'ato' } @HAIRETSU
ってのもある。
0846nobodyさん2005/07/28(木) 15:24:11ID:???
>>845
といっても効率の面では>>843に軍配が上がるがな。

新しい配列を作りたいなら問答無用でmapだが。
08478422005/07/28(木) 16:08:55ID:???
>>845
>>846
なるほどなるほど、勉強になります。
言われてみたり、本読んだりしたら「あぁ、そっか」と分かるんですけど
白紙の状態から組むとなると、なかなかひらめかず妙な文字列が…という感じです。
それだけまだ理解が足りていないということだと思うので精進精進です。
ありがとうございました。
0848nobodyさん2005/07/29(金) 17:12:28ID:DFTdnFF9
初歩的な質問で恐縮ですが、サブルーチンに2つの配列を渡しすには
どのようにしたら良いでしょうか?

連想配列 UserParam{hoge}と通常の配列@Paraparaを同時に渡そうと
しております。

以下のように1つだけのときはうまくいきました。

&xxx(%Param);

sub xxx
local (%Param) = @_

で1とつめはうまくいきました。

が、2つ渡すと、1つ目の配列に入ってしまうようでうまくいきません。
&xxx(%Param,*Parapara);

sub xxx
local (%Param) = @_
local (*Parapara) = @_

宣言方法がいまいちわかりませんので、教えていただければ幸いです。
参考になるサイトもありましたらお教えください。
0849nobodyさん2005/07/29(金) 17:15:16ID:???
普通に入門書買って読むか、CPAN にあるコードを読むか、
どちらかしか選択できないでしょうね。
0850nobodyさん2005/07/29(金) 17:17:25ID:???
リファレンス
08518482005/07/29(金) 17:24:38ID:???
困ってるんだから教えてください!
あなたたちだって最初からわかってたわけではないんでしょ?
0852nobodyさん2005/07/29(金) 17:31:06ID:???
>848
sub xxx(\@\@) {
my ($array_ref_1, $array_ref_2) = @_;
}

これでわからないなら駱駝本でも読んどけ。つーかこんな基本的なことで質問するな
0853nobodyさん2005/07/29(金) 17:43:50ID:DFTdnFF9
>>852
わかりました。
もう少し勉強して出直します。
0854nobodyさん2005/07/29(金) 18:18:51ID:???
出直さなくていいよ。
■ このスレッドは過去ログ倉庫に格納されています