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

Perl 初心者コーナー Part23

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん03/05/16 11:18ID:zDRBc/j4
いらっしゃーい、Perlのコーディングで困ってる人のスレです。

【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。

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

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


CGIだけど、なんか質問ある? Part 10
http://pc2.2ch.net/test/read.cgi/php/1048686475/
【Perl,CGI】参考書籍 第三版
http://pc2.2ch.net/test/read.cgi/php/1030209573/
CGIに依存しないPerlの話題一般/Part2
http://pc2.2ch.net/test/read.cgi/php/1030548610/
スクリプトの改造依頼は、【 スクリプト改造工房 PART 6 】
http://pc2.2ch.net/test/read.cgi/php/1047806915/

過去ログやお勧めサイトは >>2-10
0331nobodyさん03/05/23 16:46ID:???
>>330
grep
0332nobodyさん03/05/23 16:49ID:???
$city = "tokyo";
if(grep(/$city/,@ArrayCity)){ $Flag = 1; }
0333nobodyさん03/05/23 17:29ID:???
ソートについて質問があります。

(わかりやすいようにチャンネルとテレビ局名を例にしてます)
@channel = (6,1,8,4,10)
@tvname = ('tbs','nhk','cx','ntv','asahi');


っていう配列があって、

これを、
@channelの要素の小さい順に、@tvnameの要素をソートすることって
どうすればできるのでしょう?

要は、
@new_tvname = ('nhk','ntv','tbs','cx','asahi');
を取得したいのですが。
0334nobodyさん03/05/23 17:32ID:XGb65p6n
なんで連想配列つかわないの?
キーをソートしたらいいのに・・・
033533303/05/23 18:14ID:???
>>334
あ、そうか・・・すみません
033633303/05/23 19:55ID:???
すいません、やはり、使わないでできる方法ないですか・・・?
スパゲッティ状態で、連想配列に変換しようとしても、うまくいかず。。。
033733303/05/23 19:55ID:???
>>336
訂正です
使わないでできる方法→連想配列を使わないでできる方法
0338nobodyさん03/05/23 20:39ID:???
正直できるか分からないが

my @no = sort {$channel[$a] <=> $channel[$b]} 0 .. $#channel;
my @new_tvname = @tvname[@no];
0339nobodyさん03/05/23 20:57ID:???
>>338
333じゃないけど、それできたよ、すごい。
0340nobodyさん03/05/23 21:22ID:???
@tvname[@no]
こういうのはじめてみた。勉強になった。
0341nobodyさん03/05/23 21:57ID:???
>>338
さすがperlだな・・・
0342nobodyさん03/05/23 22:15ID:???
一応ハッシュに変換する方法も書いておくと、これまた強烈なんだけど、

@tv_table{@channel} = @tvname;
@new_tvname = map $tv_table{$_}, sort {$a <=> $b} keys %tv_table;
0343nobodyさん03/05/23 23:01ID:???
use strictを使用した上での参照渡しの方法についてお聞きします。

やりたい事は、メインのスクリプトからパッケージのサブルーチンへ2つの配列を参照渡しさせたいのです
テスト用に以下のスクリプトで試してみましたが、エラーとなってしまいます。
#test.cgi
#!/usr/bin/perl
use strict;
use vars qw(@test1 @test2 @output);

require 'test.pl';

@test1 = ('abc', 'def');
@test2 = ('ghi', 'jkl');

@output = &testlib::convert(*test1, *test2);

print "@output\n";
034434303/05/23 23:02ID:???
>>343続き
#test.pl
package testlib;
use strict;
#use vars qw(@sub_test1 @sub_test2);

sub convert {
local (*sub_test1, *sub_test2) = @_;
my @line;

foreach (@sub_test1) {
$_ =~ s/abc/def/i;
push (@line, $_);
}

foreach (@sub_test2) {
$_ =~ s/ghi/jkl/i;
push (@line, $_);
}
return @line;

}

1;

これでstrictをコメントアウトすると問題ありませんでした。
また、strict有効状態で、パッケージ内の#use varsを有効にすると上手く行きましたが、
基本的にパッケージの方でもvarsで宣言しておかないとダメなのでしょうか?
0345nobodyさん03/05/23 23:59ID:???
>>340
配列スライスってやつだよ。
034634503/05/24 00:02ID:???
ああぁ。。俺は>>338じゃないっす。一応言っとかないと。
配列スライスは例えば($second, $third) = @array[2,3]; とかできるっす。
034734503/05/24 00:07ID:???
($second, $third) = @array[1,2]; だ・・・鬱氏
0348nobodyさん03/05/24 00:10ID:f0Btk8DH
「orgid(シリアル番号),planid(外部キー),countryid(外部キー),orgname」
っていう列を格納しているCSVファイル(DBではないのです(泣))があるのですが、
それに対して、
「select * from orgmaster where flagplan=1 ordeby planid countryid」
した結果をはき出したいと思ってますが、とんとわかりません。

どのようにすればいいのでしょうか?

なお、DBD::CSV は使えない環境です・・・
0349nobodyさん03/05/24 02:21ID:???
>>343

# test.cgi
#!/usr/bin/perl
use strict;
use TestLib;
my @test1 = ('abc','def');
my @test2 = ('ghi','jkl');
TestLib::convert(\@test1, \@test2);
print @test1, @test2;
__END__

# TestLib.pm
package TestLib;
use strict;
sub convert {
s/abc/def/i for @{$_[0]};
s/ghi/jkl/i for @{$_[1]};
return '昆布。';
}
1;
__END__
0350nobodyさん03/05/24 02:40ID:???
>>345 捕捉thx

>>343-344
Perl4?
Perl5ならリファレンスでいけると思うけど。

後、use varsは使わない方がいいと思う
0351nobodyさん03/05/24 02:42ID:???
被った__| ̄|○
0352nobodyさん03/05/24 05:09ID:???
なんで?
035334303/05/24 08:00ID:???
>>349
御指南ありがとうございます。
せっかくいただいたのですが、今は試せる時間が無いので今日の夜にでも自分トコで使ってみます。
外部にサブルーチン持たせる時はそういう使い方でしたか…
あの長ったらしい分がここまで短くなるとは、奥が深いです。

>>350
失礼しました。
環境はPerl5.008です。リファレンスというキーワードで勉強してみようと思います。

use varsは色んなperlの解説サイトで、strict宣言するときに…
みたいな事がかかれていたのですが、使わない方向で頑張ってみます。
0354nobodyさん03/05/24 17:48ID:CEfAWsDp
#!/usr/bin/perl

$file = "count.dat";

open(FILE, "+<$file");
flock(FILE,2);

$count = <FILE>;
chomp $count;
$count++;
seek(FILE,0,0);
print FILE "$count\n";
flock(FILE,8);
close(FILE);

print "location:../ip/ip.zip\n\n";
こうすると、このcgiが呼び出された回数は記録できるんですが、私はダウンロードされた数が知りたいんです。
どうすればいいですか?ダウンロードが完了したらカウントアップってのをしたいんですが・・・
0355nobodyさん03/05/24 18:03ID:???
質問です。

例:
$value1 = 'http://www.yahoo.co.jp';
$value2 = 'Copyright (C) 2003 Yahoo Japan Corporation. All Rights Reserved. ';

この場合、$value1 と $value2 には大文字小文字の違いはありますが、yahooの文字列が両方ともに存在します。
このように、$value1 と $value2 を比較して、なかに同じ文字列が存在する場合に真とすることって可能なのでしょうか?
例ではyahooが同じ文字列ですが、実際は何が同じ文字列になるのかわからないこととします。
0356nobodyさん03/05/24 18:17ID:???
>>354
Location:
で飛ばさない方法というのは如何でしょうか?

>>355
可能です。

と、答えると逆ギレされるのだろうか?
この世の中ってば、ほんと怖いです。
ま、「1文字一致」っていうのもあるから許されますよね?ね?ね?
0357nobodyさん03/05/24 18:18ID:LfXTm2oZ
http://cgi.ma.nma.ne.jp/~josf1332/daycount/daycount.cgi?gif
035835403/05/24 18:20ID:CEfAWsDp
>>356
ロケーションで飛ばさない、、といいますと??
ほかに方法がありますか?あればぜひご教授ください。
0359nobodyさん03/05/24 18:29ID:???
>>358
:../ip/ip.zipの内容をCGIで吐けってことだろ。
最後まで吐ききればダウンロード完了っつーことで。
036035403/05/24 18:32ID:CEfAWsDp
>>359
ファイルの中身をcgiに記述する、、、ということでしょうか?
ぜんぜんわかりません、ごめんなさい。
もう少しわかりやすくお願いできますか?
0361nobodyさん03/05/24 18:36ID:???
>354
どちらにせよ、「DLを試みた回数」はわかっても、「DLを完了した回数」はわからないよ?
途中で回線切断されたら終わりだし。
036235403/05/24 18:41ID:CEfAWsDp
>>361
そうですか。。。
途中で切断でもいいので、「保存」を押して転送が開始された時点でのカウントでもいいのですが・・・
0363nobodyさん03/05/24 18:42ID:???
>>360
ダウンロードカウンタでも落としてきて参考にしなよ
036435403/05/24 18:44ID:CEfAWsDp
>>363
わかりました。探してみます
036535403/05/24 18:56ID:vyZFmtfU
うーん、5.6個みてまわったんですけど、cgiのクリックされた時点でカウントするタイプみたいですね。
、、これであきらめます。
0366nobodyさん03/05/24 18:56ID:???
>362
CGI使わずに、鯖のアクセスログとか見た方が鯖に優しいぞ。
0367nobodyさん03/05/24 19:16ID:4X2MnE2O
【ITスクール】

ITスクールを開催しています。
スクール形式は1dayパックで3時間だけです。
授業料金は安く、即、実践へ活用できます!

http://homepage3.nifty.com/it3s/index.htm
0368nobodyさん 03/05/24 19:58ID:???
>>362
formを使って、ソレをカウントしてそれからロケーションに飛ばせばいいんじゃないの?
036935503/05/24 20:11ID:???
>>356
> 可能です。
そうですか。。。
漏れにはその方法がわからないけど、こんな風なのはどうか評価してください。

連続する5文字が両方にあったら真とするということに勝手にします。
で、$value1、$value2とも最初の5文字を@value1、@value2に入れる。
次に2文字目から6文字目までの5文字を配列に入れる。
以下繰り返し。
最後に@value1、@value2の比較。

駄目でしょうか?
2バイト文字があったら、、、ダメミタイダナァァァァァアアアアアアアアアアああああああ!!!!!
0370nobodyさん03/05/24 21:11ID:???
>>369
頼むから本一冊買って勉強してくれ。
http://www.google.co.jp/search?num=100&hl=ja&q=Perl+%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3%E3%83%9E%E3%83%83%E3%83%81&lr=lang_ja
0371nobodyさん03/05/24 22:21ID:???
>>360
ちょっと俺が間違ってた。
CGIで吐くんじゃなくて別のポートを見張るサーバを別に立てて、そこへ向けてLocationで飛ばす。
で、送出できたバイト数を数えればダウンロードできたかどうか分かる。
簡易HTTPサーバ作るってこと。
037235603/05/24 22:27ID:???
>>369
> で、$value1、$value2とも最初の5文字を@value1、@value2に入れる。
あのぉ、、、(汗)
> 駄目でしょうか?
さすがに「しゃーねーなぁ、、、それでいこか。」とは口が裂けても云えませんm(_ _)m
> 2バイト文字があったら、、、ダメミタイダナァァァァァアアアアアアアアアアああああああ!!!!!
さんざん既出だとは思うが、文字コードを云々・・・

「検索アルゴリズム」
いっぺんこれでググってみると新しい道が見つかるかもよ。道は険しいけれども。
(「木」「ハフマン」「辞書」とか出てくるかもしれんが@「圧縮」も似たようなもん)
0373nobodyさん03/05/24 22:46ID:???
>>355
if ($value1.$value2 =~ m/(.+).*\1/i) {
my $word = $1;
if ($value1 =~ /$word/i && $value2 =~ /$word/i) {
print $word,"\n";
}
}

こういうのはいかが?
0374nobodyさん03/05/24 22:47ID:???
藻前、自分ができないからって、逃げるなよ。
0375nobodyさん03/05/24 22:48ID:???
>>373のままでは色々問題あるのでその辺は適当に処理してくれ
0376nobodyさん03/05/24 22:49ID:???
>>355
あなたが、何を文字列として定義するか(重要)で
難しさは極端に変わりますが、簡単な \w+ を例に
するとこんな感じでしょうか。

my $value1 = 'http://www.yahoo.co.jp';
my $value2 = 'Copyright (C) 2003 Yahoo Japan Corporation. All Rights Reserved. ';

if ( reword($value1, $value2) ) {
print '重複した単語がある';
} else {
print '重複した単語はない';
}

sub reword {
my $str = shift;
my $substr = shift;
my (%word); # 単語用ハッシュ
$word{"\L$1"}++ while $str =~ /(\w+)/g; # 単語をキーに登録
$word{"\L$1"} && return 1 while $substr =~ /(\w+)/g; # 登録済みなら真を返す
return 0; # 無かった
}
037734303/05/25 00:49ID:???
>>349
お礼が遅くなり、申し訳ございません。
無事にサンプルスクリプトを動かす事が出来、それを踏まえて自分のスクリプトでやりたい事が実現できました。ありがとうございます。
しかし、上記のサンプルコードでプラス変数を追加し、文字列変換の def 部分をその変数で置き換えた場合にエラーが出てしまいました。
変数を表す場合は、@{$_[3]}ではダメだとまでは判別できるのですが、実際の表記の仕方が見当もつかない状況です(連想配列の場合もそうなんですが)

そこで、答えそのものではなくても、strict使うのであればここを読め、の様なサイトはないでしょうか?
>>4のサイトを全て回りましたが、普通に*で渡すようにとの解説ばかりでした。
037834903/05/25 01:32ID:???
>>377
use strict 以前の話なのですよ。343さんがハマってる部分は。
むしろ use strict は全然関係無し。

まず * が何を表していて、何故 \ が出てきたか、@{ } は何を
しているのか、どうしてこのコードで引数に渡した配列そのもの
の値を置換する事ができるのか。そういう点を全部読み解き、
理解しましたか?

あと、エラーが出た場合はどんなエラーが出たのか言って
くれないと、何が悪いのかサッパリ見当付かないですよ。
0379nobodyさん03/05/25 01:54ID:???
>>4のサイトでなくて個人的にお勧め っ・∀・)っ ttp://www.rfs.jp/
038034303/05/25 02:15ID:???
>>378
ご指摘ありがとうございました。
ご指摘いただいている箇所の理解が全然足りないようです。
先ほどから検索をかけて、
http://www.kt.rim.or.jp/~kbk/perl5.005/perlref.html
あたりが見つかりましたので、そこを熟読して、あと手元に青ラクダ本がありますので、
シンボリックリファレンス項目あたりも熟読してから再度チャレンジしてみようと思います。

それと質問をする側として必要な情報の提示を怠り、申し訳ありませんでした。

自分の理解を深めてから再度頑張ってみます。

>>379
お勧めサイトありがとうございます。
色々と載っていて、とても役に立ちそうです。
0381nobodyさん03/05/25 13:54ID:sMN/Ic1b
日記のスクリプトを組みたいと思っています。
そこで長い間つかえるように日記のログを年、月と階層的にディレクトリを
作り、ユニークなログを実現したいです。
そこで、
opendir(LOG,"./Log") || die mkdir("./Log", 0755);
opendir(YEAR,"./Log/$year") || die mkdir("./Log/$year/",0755);
opendir(MONTH,"./Log/$year/$month") || die mkdir("./Log/$year/$month",0755);
のようなスクリプトを実行してみました。
./Log/$year/で$monthディレクトリ1つが無い時は正常に動作しましたが、
ディレクトリを2つ以上作成したい時でも1つしか作る事ができませんでした。
これを解決するための原因をご存知の方がいらっしゃいましたらよろしくお願いします。

環境:OS  Win2000
   Perl 5.6.1
0382nobodyさん03/05/25 15:17ID:???
>>381
困ったことに同一環境で正常に動作しました。
テスト方法は、上記のスクリプトの先頭に、
print "Content-type: text/html\n\n";
$year = "2003"; $month="5"; print "$year $month\n";
を追加して、$monthを変更しつつ数回実行。
038338103/05/25 15:37ID:sMN/Ic1b
>>382
試していただき、ありがとうございます。
上記の時間はlocaltime()で取得したものです。
書き方がとても下手ですみません。
例えば、今年の2003年1月のログが/Log/2003/1に格納されていた場合、
年が明け、来年の2004年1月になった時/Log/2004/1とLogディレクトリ下に2004ディレクトリ、
そのまた下(Logから見て2階層下)に1ディレクトリを作りたいです。
しかし、上記のスクリプトでLog以下のディレクトリを作成せずに実行すると、一回目は「Logディレクトリ」、
二回目は「5ディレクトリ」と、一回の実行で一つのディレクトリしか作れません。
>>382さんのコードですと、同階層のディレクトリを複数個作っているんですよね。
もしまだお付き合い頂けるのでしたらまた宜しくお願いします。

#現在はとりあえず200Xディレクトリと1〜12ディレクトリを予め複数個用意して他の部分を作っています。
コンソールからmkdir /Log/$year/$month で$yearと$monthのディレクトリが作成できるのに
なぜスクリプトからだとできないのだろう・・・
0384nobodyさん03/05/25 16:33ID:???
>>383
die使わなければいいだけでしょ。
エラー処理じゃなく分岐したいだけでしょ?
ファイルテスト演算子の-eでディレクトリがあるかどうか判別したら?
0385nobodyさん03/05/25 16:42ID:???
質問です。
以下のURLにある、商品名とメールアドレスを入力してボタンを押すと、検索結果を入力した
メアド宛てに送信するというシステムがあるのですが。

該当ページURL
ttp://www.hakuraiya.way.cc/quote.html(海外の薬を個人輸入代行する業者のページです)

で、ソースを見ると
http://www.hakuraiya.way.cc/cgi-local/order/quotemail.cgi
こういうCGIに入力データが送られ、検索処理後にメール送信しているようなのですが、これは
どういう風に動いているんでしょう?
入力されたデータを処理し、予め用意した商品リストと照合・検索して、結果をメール送信する
わけなので、最低でも処理用CGIスクリプトと商品データファイルが必要なところまでは理解
出来るのですが、仕組みがイマイチわかりません。

スクリプト名等で検索しましたが全くHITしないし、こういうシステムは商用&有償なのは想像が
つきます。私自身はこれで商売をしようという気持ちはなく、自分のCGIの勉強の教材にしたいと
考えているので、以上のシステムに心当たりがある方、または「こういう風にスクリプトを組んで
いるんじゃないか?」という風に教えてくださる方、どうかご助力ください。
よろしくお願いします。
0386nobodyさん03/05/25 16:48ID:???
>>385
>入力されたデータを処理し、予め用意した商品リストと照合・検索して、結果をメール送信する
仕組みは自分で答えを言っちゃってるじゃん
検索スクリプトの結果をブラウザに返す替りにメール本文にするって
そんなに難しく考えることじゃないと思うけど

こんなCGI探してますスレッド ver.9
http://pc2.2ch.net/test/read.cgi/php/1051456859/l50
ここのリンク集を探せばあるかも、あるいはないかも
0387nobodyさん03/05/25 17:20ID:???
>>385 >>386
>いらっしゃーい、Perlのコーディングで困ってる人のスレです。
0388nobodyさん03/05/25 17:29ID:???
>>387
アルゴリズムに関する質問はスレ違いじゃないみたいよ。
最終的にはコーディングを目標にしてるみたいだからいいじゃん。

>>385
リンク元は見てないけど、結果を表示しつつsendmailでメールを送ればよろしい。
難しいことじゃないよ。
0389nobodyさん03/05/25 17:30ID:LMu0ezCc
if($_ =~ /filename\=.+?\.(.+)?\n/i || $_ =~ /name\=.+?\.(.+)?\n/i){
}
こういうif文を書くと、1番目と2番目の(.+)はそれぞれ$1、$2と
なるのでしょうか。
それとも両方とも$1となるのでしょうか。
すみませんが教えていただければ幸いです。
0390nobodyさん03/05/25 17:37ID:???
>389
なぜ試さない?
039138903/05/25 17:53ID:???
>>390
あぁ?知らねぇよ。お前アタシが敬語使ってんだから敬語使えよ。
バカじゃねぇの?つかお前書き込むなよ。キモい。

0392nobodyさん03/05/25 18:04ID:???
>>383
>>384の言うとおり、dieを使うとその時点でスクリプトが終っちゃう。
手元のリファレンスによると、孫ディレクトリは子ディレクトリが無いと作れないみたい。
どうしてもやりたい場合は、File::Pathモジュール使うとよい、とあった。
0393nobodyさん03/05/25 18:35ID:???
>>390
そこに試す環境がなかったので、質問させていただきました。
友達に聞かれて答えられなかったので。
会社にに戻って試してみましたので、すみませんでした。
おっしゃるとおりです。
ちなみに。>>391は偽者ですので。
この書き込みも、会社から書き込めないことから、友達の家
より代理書き込みしてもらってるので、IDでわかるかと思います。
039438503/05/25 18:48ID:???
>>386&>>388
レスどうもありがとうございます。

>>386
>検索スクリプトの結果をブラウザに返す替りにメール本文にする
ああ、なるほど!そうすればいいのか。仰るとおり、難しく考えすぎていました。

>>388
こちらも、ヒントありがとうございます。上に書いたとおり、難しく考えすぎていたので
胸のつかえが取れたような気分です。助かりました。

お二方のレスを参考に、検索+sendmailのスクリプトを探して、組み込み改造など
頑張ってみたいと思います。本当に、どうもありがとうございましたm(_ _)m
039538103/05/25 22:28ID:???
>>384
>>392
丁寧にありがとうございました。
if文などで試してみます。
0396nobodyさん03/05/25 23:52ID:???
K0NTタンのCGIはグローバル変数を使いまくって
そして使わなくなったものを undef していないから
メモリを大量に使ってしまうのですか?
0397nobodyさん03/05/26 00:21ID:???
>>396
変数のスコープを抜けたら、OSにメモリを返すとでも言いたいのか?
0398nobodyさん03/05/26 00:24ID:6A9UvBAu
<FORM ENCTYPE=multipart/form-data>
<INPUT TYPE=FILE NAME=file>

のファイル本体部分を取り出すのに

$buf =~ /(\r\n)$1(.+)\1-{10,}/;
$date = $2;

と書いてバッチシいくでしょうか?

$buf =~ /Content-.+(\r\n)$1(.+)\1-{10,}/;
上はどうでしょう?
ご意見おながいします。
039939803/05/26 00:27ID:???
間違えました

誤 \1
正 $1

です。
0400nobodyさん03/05/26 00:33ID:???
>>398
CGIモジュール使えよ。
CGI_Liteでもいいけどさ。
そんなくだらないことで悩まなくてすむようになるんだから。
040139803/05/26 00:39ID:???
知りませんですた。
ググってきます。
040239803/05/26 01:20ID:???
>>400
CGI.pm がこんなに素敵なヤツだったなんて
正直、感動しますた。
ありが�d
040339803/05/26 01:27ID:???
さらに質問でつ。
http://pc2.2ch.net/test/read.cgi/php/1024795138/383
で質問したんですが誰もいないみたいなので
こちらで誰か教えてください。
おながいします。
040439803/05/26 01:43ID:???
もっと質問でつ。

use CGI;
$query = new CGI;

と書いたときモジュールが使えなかったらエラーになりますか?
それとも

if($query){}

と、できますか? どうなんでしょう?
0405nobodyさん03/05/26 03:14ID:???
>>404
自分の環境で実際に動かしてみればわかるだろ

use CGI;
の時点でエラーが出る。
0406nobodyさん03/05/26 03:15ID:???
今時CGI.pmが入ってないなんてことは無いか
俺も相当アフォだな、、、逝ってこよう。
0407nobodyさん03/05/26 03:45ID:???
>>403
evalを使うのにそういう書き方自体が無駄
040838003/05/26 04:00ID:tTZ2AIlQ
linuxサーバ上でSJISファイルを読み取って
chompを実行させても\r\nを改行と見なしてくれないのですが、
読み取られファイルをEUCにするのとchompの代わりに↓
$data =~ s/\r\n//g;
$data =~ s/\r//g;
$data =~ s/\n//g;
を使う。という方法以外で一般的な方法というのは無いのでしょうか?

0409380じゃないです03/05/26 04:07ID:???
あらっ?
名前入力してしまいましたが380は間違えです。
0410_03/05/26 04:16ID:???
http://homepage.mac.com/hiroyuki43/jaz_b01.html
0411nobodyさん03/05/26 05:14ID:???
>>408
改行コードと文字コードは別物だぞ。
文字コードは、SJIS。 改行コードは、LFにすれば問題解決。
0412nobodyさん 03/05/26 05:19ID:???
>>408 $dataつーのが、最後に改行が有るものと仮定するとして・・・

$data =~ tr/\x0d\x0a//d;
が高速。
0413nobodyさん03/05/26 06:37ID:qholo4T7
ユーザごとにリストボックスの項目数を変えるよな
ことを考えてるのですがこれって実現可能ですか。
リストで表示させる項目を一つの変数の中にまとめて
"a","b","c"と書いても実行するとリストは"a","b","c"と
繋がって表示されてしまい1項目しかでなかったものでして。
ある人は10個項目でててある人は5項目でてるような
ことがしたいのです。
0414nobodyさん03/05/26 09:30ID:???
>>413
マルチポストはやめましょう。
0415nobodyさん03/05/26 10:06ID:???
>>413
言ってる意味がよーわからんので推測でだが、出来る。
ユーザごとに指定した数を指定しておいて、配列をその数だけ
回すなりなんなりでいいんじゃん?
0416nobodyさん03/05/26 10:19ID:???
>>114
添付ファイルはどこに誰が保存しているのか?
そのファイル名はメール内でのファイル名だと思うのだが

>>119
$?
0417nobodyさん03/05/26 10:20ID:???
レス番号激しく間違えた…スマソ

>>414
添付ファイルはどこに誰が保存しているのか?
そのファイル名はメール内でのファイル名だと思うのだが

>>419
$?
0418nobodyさん03/05/26 10:36ID:???
>>417
で、今度は誤爆?
0419nobodyさん03/05/26 10:36ID:???
>406
未だにPerl4の鯖だってあるんだよ。
0420nobodyさん03/05/26 11:01ID:X5HT6fof
@orgmaster= ("orgid","countryid","orgname");
$orgid = $line{'orgid'};
$countryid = $line{'orgname_ja'};
$orgname = $line{'orgname'};


っていうのを、後ろの3行をベタにこういう風↑に書かないで、
foreach $value (@orgmaster) {
★ここが不明★ = $line{$value};
}

というようにまわしたいのですが、
★ここが不明★の部分がわかりません。どうすればいいのでしょうか?
0421bloom03/05/26 11:08ID:gUjk1KcM
http://homepage.mac.com/ayaya16/
0422nobodyさん03/05/26 11:13ID:???
>>420
ソフト・リファレンスでググってみ。
042342003/05/26 11:42ID:???
>>422
がってんわかりました。ありがとうございます。
0424nobodyさん03/05/26 12:52ID:???
$ORG{'person'}[1]、$ORG{'adana'}[1]、$ORG{'adanaid'}[1]
$ORG{'person'}[2]、$ORG{'adana'}[2]、$ORG{'adanaid'}[2]
$ORG{'person'}[3]、$ORG{'adana'}[3]、$ORG{'adanaid'}[3]
$ORG{'person'}[4]、$ORG{'adana'}[4]、$ORG{'adanaid'}[4]
$ORG{'person'}[5]、$ORG{'adana'}[5]、$ORG{'adanaid'}[5]

という変数があるのですが、これを、
$ORG{'adanaid'}[n]の値でソートして、例えば、

$ORG{'person'}[2]、$ORG{'adana'}[2]、$ORG{'adanaid'}[2]
$ORG{'person'}[5]、$ORG{'adana'}[5]、$ORG{'adanaid'}[5]
$ORG{'person'}[4]、$ORG{'adana'}[4]、$ORG{'adanaid'}[4]
$ORG{'person'}[3]、$ORG{'adana'}[3]、$ORG{'adanaid'}[3]
$ORG{'person'}[1]、$ORG{'adana'}[1]、$ORG{'adanaid'}[1]

みたいに表示さすにはどうすればいいのでしょうか?
042540803/05/26 13:58ID:???
>>411
そーだったんですか・・・知らなかった(-_-;)
>>412
それ使わせてもらいます。
どうもありがとうございました。
0426nobodyさん03/05/26 14:22ID:???
Perlのgrepって、小文字大文字の区別をなくすオプションってないんでしょうか?
042742603/05/26 14:23ID:???
すいません、ありましたね。iオプションで。
手元のリファレンスには何にもかいてなかったもんで
0428nobodyさん03/05/26 15:09ID:ave5j164
例えば、
http://www.2ch.net/dir/file.txt
という文字列を、
/dir/file.txt
のようにするにはどちらが効率的なんでしょうか?

# 正規表現のみの場合
$url =~ s/http:\/\/.*?\//\//i;

# 関数も使う場合
$url =~ s/http:\/\///i;
@temp = split(/\//, $url);
shift(@temp)
$url = "/" . join("/", @temp);
0429nobodyさん03/05/26 15:32ID:???
>>428
どちらでも好みの方を。
速度が速い方が良いなら、100回くらいループさせてベンチ取ればいい。
0430nobodyさん03/05/26 15:49ID:???
>>424
http://flex.ee.uec.ac.jp/texi/perl/perl_54.html
■ このスレッドは過去ログ倉庫に格納されています