トップページ⇒php
984コメント309KB

【Perl】初心者コーナーPart11

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん02/03/27 12:53ID:wAXxxOxP
 
いらっしゃーい、Perlの「コーディング」で困ってる人のスレです。

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

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

参考書籍はこちら【【Perl,CGI】参考書籍 第2版 】
http://pc.2ch.net/test/read.cgi/php/988809842/
CGIの質問はこちら【CGIだけどなんか質問ある Pert 5.01 】
http://pc.2ch.net/test/read.cgi/php/1015127347/l50
その他の雑多な話題は、【CGIに依存しないPerlの話題一般】
http://pc.2ch.net/test/read.cgi/php/991313362/

過去ログ、その他の役立ち情報は>>2-10を見よう。
0396nobodyさん02/04/09 19:54ID:???
>>395
タブーがないのがPerlって気もするが…
「コピペで動いてくれない」ってコピペしたコードがuse PacTest;でエラーが出るって事か?

ところで話はずれるが@ISAとかにパッケージ名書くより
use vars qw(@ISA @EXPORT);
@ISA = qw(Exporter);
@EXPORT = qw(subtest);
の方が一般的な気がする。ourとuse baseでもいいけど。
0397 02/04/09 20:00ID:h5pnnRRd
>>396
本にでてたやり方なんですけどね
秀和だめですね
039839602/04/09 21:03ID:???
スタイルの違いだからそこはまあいいんだけど、
それより俺が聞きたいのはどうやったらエラーが出たのかという状況説明なんだが
0399 02/04/09 21:31ID:h5pnnRRd
>>398
ウェブマスターに聞けエラーです
0400nobodyさん02/04/09 21:45ID:???
ローカルでやれよ
0401nobodyさん02/04/09 22:12ID:???
>>399
やれやれ・・・
「秀和だめですね」かよ・・・
0402 02/04/09 22:42ID:h5pnnRRd
>>401
技術評論社は(゚∀゚)イイ
ソフトバンクは(´・ω・`)ショボーン
0403貴様ら教えて下さい02/04/09 22:45ID:sR6b9WNM
仕事でPerl使ってメールマガジン配信することになったんですが、
最終的には数万人規模のものにするらしいんです。(無理くせーけど。
普通にsendmailで送るのは無理っぽいですし、
どうしていいものかサッパリわかりません。

皆様ならどうやるでしょう?
0404nobodyさん02/04/09 22:47ID:???
>>403
普通にsendmailで送れ。以上。
0405nobodyさん02/04/09 23:56ID:???
http://www.fml.org/
0406貴様ら教えて下さい02/04/10 00:47ID:RNZ++qE3
マジ?sendmail数千回呼び出すの?
あ、それともBccで数万件指定するのか?
いけるのか?
どうなのか?

>>405
お、使えるかも。
ちょっと見てみる。
0407nobodyさん02/04/10 00:54ID:???
Net::SMTP
0408nobodyさん02/04/11 02:06ID:8LiumuzI
ちょっと教えてください。
単純にファイルから数字を読んで、1足して書き込むようなプログラム
(アクセスカウンタみたいな感じ)を作りたいのですがうまくいきません。
どうやら読み書き両用オープンがうまくいってないみたいなんです。

open(FILE,"+> data.txt");
$x=<FILE>;
print $x;
exit;

試しに上のようにすると、なぜか何も標準出力に出力されません。

open(FILE,"data.txt");
$x=<FILE>;
print $x;
exit;

これだと、ちゃんとファイルの中身が標準出力に出力されます。

どうしてなんでしょう?
環境は WINDOWS XP + Active Perl です。
よろしくお願いしますm(_ _)m
0409nobodyさん02/04/11 02:31ID:???
>>408
>open(FILE,"+> data.txt");
この瞬間、データが消えていることに気付いてください。
0410nobodyさん02/04/11 02:49ID:???
>408
この前もまったく同じ質問があったが、過去レスとか見てる?
+> だといきなりファイルが空になるゾ!

+< で読み込んで
seek(FILE, 0, 0); で巻き戻して
truncate(FILE, 0); でファイルを空にした上で書きこむ
0411nobodyさん02/04/11 07:32ID:???
>>408
ちなみに、>>370ね。
(あまりに質問が似ているので、ネタかと思った・・・)
0412nobodyさん02/04/11 08:32ID:8LiumuzI
激しく既出にも関わらず、ご親切に教えてくださってありがとうございます☆

本などで「+>」は「読み書き両用オープン」って説明されていますが
実際には「書き」しかできないってことですか?(オープンした瞬間データ消えるから)
0413nobodyさん02/04/11 09:27ID:???
>>412
んなこたぁない。ちゃんと読める。
「書いた直後に読みたい」場合に使える。
0414nobodyさん02/04/11 11:06ID:QakPtgEu
http://www.activestate.com/�d�j?
0415nobodyさん02/04/11 12:56ID:???
412ではないが、
実際には「書き」しかできないってことですか?
これ前から気になってた。
413の答えで納得した。
でも「書いた直後に読みたい」なんて思った事ないな、、
0416nobodyさん02/04/11 14:27ID:???
>>415
だから実際に'+>'や'+>>'がつかわれることはほとんどない。
0417nobodyさん02/04/12 01:00ID:???
すいません、ファイルハンドルをハッシュに入れたまま
使用したいのですが、STDIN が思うように動きません。
STDOUT は >>171, >>181, >>184 を参考にしてできたのですが、
<> を使う時はルールが違うのですかね。
わかる方教えて頂けませんでしょうか?

#!/usr/local/bin/perl -w
my %hash = ( in => \*STDIN, out => \*STDOUT );
while (< {$hash{in}} >) { # <= ココが STDIN の置き換えにならない
 print {$hash{out}} $_;
}
exit 1;

出力結果は GLOB(0x8103460) のみです。
0418nobodyさん02/04/12 02:10ID:???
>>417
グローバルなものをなぜハッシュに入れるのかは敢えて聞かないとして・・・
$tmp = $hash{in};
<$tmp>
とスカラーに格納すれば大丈夫みたい。
ハッシュや配列の形ではだめだった。
$tmpは間接ファイルハンドルと解釈するが、$hash{in}はファイル名グロブに
解釈される仕様のようです。試しに次のような使い方は正常に機能した。
$t{a} = "*.txt";
@txt = <$t{a}>;

ということで、スカラー変数を使いましょう。
041941702/04/12 02:54ID:???
>>418
わざわざ試して頂いて有難う御座います。
実はサブルーチンへ値を渡すのにハッシュを使っていたのですよ。

個人的に STDIN と STDOUT は同じルールで使って行きたい
ですので、実際にはこういう感じで使いましょうかねぇ。

#!/usr/local/bin/perl -w
package main;
exit &main;

sub main {
 $ARGV[0] && open(STDIN, $ARGV[0]);
 $ARGV[1] && open(STDOUT, "> $ARGV[1]");
 return &func(in=>\*STDIN, out=>\*STDOUT);
}

sub func {
 my %init = (in => \*STDIN, out => \*STDOUT, @_);
 my ($in, $out) = ($init{in}, $init{out}); # <= ●
 while (<$in>) { print $out $_; }
 return 1;
}

貰った値の正当性を、関数側でチェックしてから使うルールなら
そんなに無駄な処理でもない・・・あ、でも結局ファイルハンドルか。
0420nobodyさん02/04/12 03:07ID:???
exit(1)か・・・ハァ・・・
042141702/04/12 03:47ID:???
>>420
unix の ping コマンドとかは正常終了が 0 ですよね。
他のも一律で 0 に決まってるモンなんでしょうか。
web で 1 を見かけたので真似しだしたんですよ。最近。
スレ違いすみません。

0422stdlib.h02/04/12 04:20ID:???
真似すんなよ。
#define EXIT_SUCCESS 0
#define EXIT_FAILURE 1
042341702/04/12 04:44ID:???
>>422
ありがとうございます。そうか、ライブラリのヘッダか (汗

まだ、解らない事があっても、それを調べる方法さえ解らない
程度の知識ですので、つい真似というか見習ってしまうのですよ。
反省。ちなみに ping の戻り値も知ったのは jman からですしねぇ。
0424nobodyさん02/04/12 05:01ID:???
>423
perldocの使い方・読み方覚えるがキチ。
042541702/04/12 06:30ID:???
>>424
情報有難う御座います。早速やってみました。

% perldoc perlfaq | less
> perlfaq 砌requently asked questions about Perl ($Date:
> 1999/05/23 20:38:02 $)
> Very general, high碎evel information about Perl.
> 瞰hat is Perl?

なんかウチの環境だと文字化けする上、表示に 22sec もかかる・・。
あ、perldoc -f use とかなら化けない。
しかし英語ばかりで頭痛いですねぇ。

Perlドキュメントの読み方
http://member.nifty.ne.jp/hippo2000/perltips/podread.htm
perldoc
http://yuri.sakura.ne.jp/~propella/tips/perldoc.html

今までリスト化されて読みやすい下記サイトを聖書と崇めてましたが
http://www.namazu.org/~tsuchiya/perl/info/perl-ja_toc.html
最新版には perlpod なんて項目があったのですね。
http://www.kt.rim.or.jp/~kbk/perl5.005/index.html
.pm の中身とかを見て、ずっと頭を悩ましていましたよ。
0426nobodyさん02/04/12 07:09ID:???
最近この板でバカな奴みるとDream★じゃないかと疑ってしまう。
0427nobodyさん02/04/12 07:22ID:???
.>>426
アハハ
0428nobodyさん02/04/12 09:06ID:???
おい、<$h{in}>で困ってたやつ。下のコード試してみろ:
readline($h{in)

0429nobodyさん02/04/12 15:57ID:XFr3wilJ
うるせんだよヴぉけ!!!!!!!!!!!!!!!!!!!!!!!
043041702/04/12 19:35ID:???
>>428
ホントだ、できましたよ。有難う御座います。
しかし perldoc では説明でましたが、web 上に散乱するサイトの
日本語マニュアルには全然載っていない関数みたいですね。なんでだろ。
0431nobodyさん02/04/12 20:10ID:???
すいません、こういう事ってどうすればよいのでしょうか。。
ダウンロード用のCGIを作っているのですが、ログ形式が

日付<>ファイル名<>総DL数<>LZHのDL数<>ZIPのDL数

となっているログのファイル名が同じの総DL数、LZHのDL数、ZIPのDL数
をそれぞれ足したものを表示されるにはどうすればよいのでしょうか。
総DL数だけならハッシュ使えば出来ると思うのですが。

具体的には
20020423<>test<>5<>2<>3
20020423<>test1<>5<>2<>3
20020424<>test<>6<>3<>3
20020424<>test1<>8<>5<>3
を
test,11,5,6
test1,13,7,6
みたいな感じで出力したいのですが。
0432nobodyさん02/04/12 21:00ID:???
>>431

my %count;
while (<DATA>) {
chomp;
my ($date,$name,$all,$lzh,$zip) = split /<>/;
$count{$name}{all} += $all;
$count{$name}{lzh} += $lzh;
$count{$name}{zip} += $zip;
}
foreach (keys %count) {
print join ',',$_,$count{$_}{all},$count{$_}{lzh},$count{$_}{zip},"\n"
}
<>;
__END__
20020423<>test<>5<>2<>3
20020423<>test1<>5<>2<>3
20020424<>test<>6<>3<>3
20020424<>test1<>8<>5<>3
0433nobodyさん02/04/12 21:02ID:???
訂正
},"\n"
↓
} ."\n"
0434nobodyさん02/04/12 21:46ID:4zjuzdoC
数千行あるログファイルから
特定の位置だけを表示したい場合のスマートな方法ってどんなですか?

自分の場合は
単純に1行目から順に読み出して行って、指定行になったらループを抜ける
もしくは、配列に全部読み込んでから指定範囲だけ取り出す
ってやりかたしてるんですが、いまいちよろしくないです。
ファイルサイズによりますがカナリきついです。

また新着ログはファイルの先頭行に挿入したいのですが、この場合は
いったん全部読み込んで、先頭行にログ追加して、全行書き出す
するしかないのでしょか、、、、
0435nobodyさん02/04/12 21:54ID:???
新着ログだけ書き込んだファイルに
他のファイルを追記で書き込んでリネーム
0436nobodyさん02/04/12 22:31ID:4zjuzdoC
>>435
ほうほう、その方法でためしてみます
やはり最終的には全行を書き出す事になるんですね、がくり。
挿入とかできたら便利なのになぁとか思った
0437nobodyさん02/04/12 22:51ID:???
>>436
それは太古の昔から無理。
なので、ログは先頭に追加せず、おけつに追加していき、
表示する時とかに逆順にしたほうが吉。

もしくは、先頭に追加できるファイルシステムを考案しる。
0438nobodyさん02/04/13 00:09ID:???
といいつつDB_File::DB_RECNOはそこそこ使える。(たまにコケるが)
0439nobodyさん02/04/13 06:55ID:???
教えていただきたいことがあります。

以下の2次元配列において、列部分($data[行][列])の最大インデックスを求める
効率的な方法を何卒、ご教授ください。よろしくお願いします。

一応、以下のようにループで回して比較する方法を考えましたがもっとスマートな
やりかたがありそうな気がしていますがどうしても思いつきません。

$MAX= $#{$data[$_]}> $MAX ? $#{$data[$_]} : $MAX for ($[ .. $#data);
0440nobodyさん02/04/13 08:50ID:???
>432
ありがとうごさいました。うまくできました。
0441ゲーム房02/04/13 10:19ID:jvfE2/Zt
iswebにはFFA設置してもいいんですよね?
でも、「ゲームCGIは禁止」って書いてるんですが・・・。
0442nobodyさん02/04/13 10:28ID:???
>441
誤爆だろうけどスレ違い。
0443nobodyさん02/04/13 11:26ID:???
>>441
しかも日本語が理解できてない。
0444nobodyさん02/04/13 11:28ID:???
>>441
ゲームCGIが禁止ならFFAも禁止に決まってるだろゴルァ!
0445nobodyさん02/04/13 13:07ID:VMPYMAwG
アメリカのCGIの日本語化に挑戦しています。
が、できません。
1週間、ずーといろいろやったのですが、
どうしても、うまく行きません。
cgi-lib.plというのが悪いような気がするのですが…。
これって、定番のライブラリですが、
うまく日本語化する方法はないのでしょうか?
0446nobodyさん02/04/13 13:28ID:sQBkSIs9
>>444
うるせえんだよボケが!!!!!!!!!!!
0447nobodyさん02/04/13 13:28ID:sQBkSIs9
>>445
意味不明  氏ね!!!!
0448nobodyさん02/04/13 13:32ID:???
>>445
perlで日本語化ちゅーと、メッセージを日本語に置き換えたいってこと?
0449nobodyさん02/04/13 13:35ID:PKxqXxUL
教えてください。
ボタンをひとつだけ押して、複数のスクリプトにデータを渡すことは可能ですか?
ひとつはメールでもらって、その中のmailアドレスから自動でメルマガに登録させたい。
検索しようにもどんな語句で調べたらよいかわかりません。一応いろいろ検索したんですけど。
0450nobodyさん02/04/13 14:06ID:VMPYMAwG
>>448
フォームで入力された日本語が、
ちゃんと表示されないので、
それをちゃんと表示されるようにしたい。
jcode.plをreqireして、
&jcode…でコンバートしようとしても
うまくいかないのですが。
0451nobodyさん02/04/13 14:20ID:???
>>450
こっちでソース晒せよ。
http://pc.2ch.net/test/read.cgi/php/1012839651/l50
0452nobodyさん02/04/13 16:24ID:x6G/BIRo
正規表現で置換後の文字列を他の変数に入れる簡単な方法ありますか?

$moto = 'a1b2c3d4e5';
$kekka = $moto ;
$kekka =~ s/[\d]//g ;

これ面倒なので、
$kekka = $motoの[\d]を削除した結果
みたいに1行で書けると嬉しいんですが。
0453nobodyさん02/04/13 16:37ID:???
>452
($kekka)= $moto=~ /\d/;
0454nobodyさん02/04/13 17:28ID:???
>>449
ひとつはメールでもらって、ってのはわかるけど、
もう一つはどんなスクリプトを起動したいの?
0455nobodyさん02/04/13 17:44ID:PKxqXxUL
>>454
メルマガ登録スクリプトにアドレスを渡したいんです。
どうせならアドレス一回入力で、「登録しますか」の是非をチェックしてもらい、そのアドレスを渡せたらいいなと思って。


引数にアドレスも付けてをつけてポップウィンドウを開くってのもありかなあ?
でもjsにたよらないとならなそうだし。
0456nobodyさん02/04/13 17:46ID:???
>>449
厨的な考え方だけどLocation使ってGETでデータ渡すとか。
045745402/04/13 17:55ID:???
>>455
メールを受け取ったら、自動でスクリプトを起動するってのはだめ?

メールを受ける鯖の/etc/aliasesに
melmaga-touroku: "| /path/to/script/regist.pl"
って書いて newaliases ってコマンド実行しておけば、
メールが来た時に、スクリプト起動できるので、
漏れいつもそうやってる。
0458nobodyさん02/04/13 18:39ID:???
>>457
パイプを禁止しているサーバもあるから軽めに注意。
0459nobodyさん02/04/13 20:19ID:???
>>452
($kekka = $moto) =~ s/foo/bar/g;
0460nobodyさん02/04/14 03:22ID:???
>うるせえんだよボケが!!!!!!!!!!!
これ、はやってんだ、漏れも使お、
へへへ、まんこ
0461nobodyさん02/04/14 10:17ID:V1/8ijC1
こんにちは、
さっそく質問なのですが、
スカラーに入れた(入った)文字列をスカラー名にする方法ってあるのでしょうか?

$a = "test";
$b = "value";

として

$test = "value";

というようなことなのですが
よろしくお願いいたします。
0462${$a}02/04/14 10:38ID:???
>>461
せめてこのスレくらい最初から読んでくれ。
0463nobodyさん02/04/14 10:40ID:V1/8ijC1
ひぃーごめんなさい。
046446102/04/14 10:42ID:V1/8ijC1
でも本当に助かりました。
ありがとうございました。
0465TOM ◆98SA9XcM 02/04/14 12:23ID:Gksq2mQe
open(LOAD,"mona.dat");
@mona1 = <LOAD>;
close(LOAD);

foreach (@mona1) {
($yakin,$hiroyuki) = split(/<>/);
if($yakin eq $FORM{'yakin'}) {
(?)
next;
}
}

え〜と、(?)の部分で、現在処理中の配列を、削除したいわけです。
ようは、配列をforeachで読んでいって、$yakinと、
送信されてきた(フォームから投稿されてきた)
$FORM{'yakin'}が一致した場合、現在処理している配列を削除したいわけです。
(?)の部分に、なんと入れたらいいのか、よろしくです
0466nobodyさん02/04/14 12:32ID:???
>>465
undef $array{$yakin};
とか?
0467nobodyさん02/04/14 12:45ID:???
foreach (@mona1) {
($yakin,$hiroyuki) = split(/<>/);
if($yakin eq $FORM{'yakin'}) {
$_ = '';
next;
}
}
@mona1 = grep /\S/, @mona1;

でいいかな? なんか無駄が多そうだが。
0468TOM ◆98SA9XcM 02/04/14 12:53ID:Gksq2mQe
thank!っす。
これで、海へ行けるぞー!
0469nobodyさん02/04/14 12:55ID:???
配列を二つ受け取り、その各要素ごとの和を格納した配列を返す
サブルーチンはどのように書けばいいのでしょうか?
0470初心者02/04/14 12:58ID:GNKyG6Nl
こちとら超初心者です。質問させてください。
Apacheっていうソフトを入れて、Webサーバっつーの立てて
そこでPerlをデバッグしてみてるんですが、簡単なSSIのアクセスカウンタが動いてくれません。
HTMLで「あなたは人目のお客様です」とだけ表示されます。
エラーログには何も書いてないし、DOSプロンプトでチェックしてもSyntax OKって出るだけっす。
カウンタの数字を保存するファイルのパーミッションの問題なのかな〜とか思ってるのですが、
Apache上のファイルのパーミッションを変える方法がわからんです。
昨日はじめたばっかしなので質問の意味がさっぱりかもしれませんが、よろしくです。
0471nobodyさん02/04/14 12:59ID:???
>>465
splice使え。
0472nobodyさん02/04/14 13:12ID:???
>>470
カウンタを格納するファイルのパーミッションを、nobodyさんでも
書き込めるように汁。
047347002/04/14 13:32ID:S6NECtrZ
>>472
c:\public_htmlにファイルを置いてやっているのですが、
いろいろ調べてみてもFTP転送時のパーミッション変更方法しか載ってなかったです。
格納ファイルのプロパティでアーカイブやら読み取り専用やら(Win98SE)、いろいろ変えてみたんですが
結果は変わらず。自分のPCなのにFTP転送とか出来るんでしょうか?
説明下手でごめんなさい。
0474TOM ◆98SA9XcM 02/04/14 13:45ID:Gt4aB1lk
自分を初心者と認めるなら、ApacheよりAnHTTPdがいいよ。
KEN○さんのページでわかりやすく解説載ってたし。
ttp://www.kent-web.com
0475_gunzip02/04/14 13:47ID:???
>>469 こんなかんじ

#!/usr/bin/perl -w

use strict;
our($a, $b);

sub mapup (& \@ \@)
    #(code_ref $code, array_ref $_a, array_ref $_b)
{
    my($code, $_a, $_b) = @_;
    my @retval;
    my $max_index = (@$_a < @$_b) ? @$_a : @$_b;
    
    for (my $i = 0; $i < $max_index; $i++) {
        local($a, $b) = ($_a->[$i], $_b->[$i]);
        push @retval, $code->();
    }
    return @retval;
}

my @a = (1, 2, 3);
my @b = (0, 8, 7);
my @c = qw[ G C A T ];
my @d = qw[ C G T A ];

my @sum = mapup { $a + $b } @a, @b; # (1, 10, 10)
my @pro = mapup { $a * $b } @a, @b; # (0, 16, 21)
my @bigger = mapup { $a > $b ? $a : $b } @a, @b; # (1, 8, 7)
my @concat = mapup { $a . "-" . $b } @c, @d; # (G-C,C-G,A-T,T-A)
0476nobodyさん02/04/14 13:53ID:IPbdNQdj
imgboard v1.22 R6ってIP隠せないんですか?
丸見えなんですが。
0477nobodyさん02/04/14 14:06ID:???
>>476

> いらっしゃーい、Perlの「コーディング」で困ってる人のスレです。
>
> 1:自分はこう言う事がしたい。
> 2:それでこんな風にやってみたが・・・
> 3:それだとこんなエラーが出て上手く行かなかった。
>
> 1と3が無いと誰も答えられないよ、良い回答は良い質問から。
> 一緒に勉強しましょう。
0478nobodyさん02/04/14 14:07ID:???
>>476
で、ここ。

スクリプト改造工房 Part4
http://pc.2ch.net/test/read.cgi/php/1012839651/
047947202/04/14 14:11ID:???
>>473
あぁぁ、Windowsならパーミッションは関係なさそう。
SSIの場合は、
1.apacheの設定ファイル(httpd.conf)でSSI(Server-parsed HTML)が
有効になってるか確認。
  AddType text/html .shtml
  AddHandler server-parsed .shtml
こんなかんじ。
2.SSIを使うhtmlファイルの拡張子が .shtml になってるか確認。

あとは、>>474に従うのもありかと。
048047002/04/14 14:13ID:S6NECtrZ
>>474
ありがとうございました。本を買って入ってたのがApacheだったので、それを使ってました。
さっそくAnHTTPdを入れて勉強してみようと思います。
048147002/04/14 14:15ID:7rjAl4Ry
>>479
丁寧にありがとうございます!
shtmlにはしてあるんですが、httpd.confをも一回チェックしてきます。

みなさん、親切で泣けてきました。(今回2Ch初書きこみ)
048247002/04/14 17:23ID:???
結局いろいろやってみた結果、ソースのflockという関数をコメントアウトしたら
カウンタが動作しました。HTTPdソフトのせいじゃなかったみたいです。
いろいろありがとうございました。
0483nobodyさん02/04/14 18:32ID:lEj2Ud3E
$line =~ s/田中雅夫/田中さん/g;
$line =~ s/椎名林檎/林 檎/g;
$line =~ s/志村けん/バカ殿/g;

上のようなのをハッシュにしてまとめて処理させることできませんか?
%xx = ( "田中雅夫", "田中さん", "椎名林檎", "林 檎" ,"志村けん", "バカ殿");
$nkeys = keys %xx;
$value = values %xx;
$line =~ s/$nkeys/$value/g;
自分ではこんな感じかな?とか思ったんですが…無理でした。
ご教授お願いします。。既出だったらすいません(^^;
0484nobodyさん02/04/14 18:48ID:???
>483
$nkeysと$valueをprintしてみてなにが入ってるか見てみるとダメな理由はわかると思う。
どうするのが正しいのか俺にはわからないけど。
$line =~ s/(.+)/$xx{"$_"}/g;だとkeysの一致がされないしなぁ・・・。
0485nobodyさん02/04/14 19:02ID:???
$hoge = join "|", keys %xx;
$line =~ s/($hoge)/$xx{$1}/g;
こんなんでいいか?
0486nobodyさん02/04/14 19:36ID:???
>475
_gunzipタンひさしぶり〜
048746902/04/14 19:40ID:???
>>475
スクリプトが意味不明です。初心者ですか?
0488nobodyさん02/04/14 19:51ID:???
>>487
ネタはやめれ。
0489nobodyさん02/04/14 20:01ID:???
>488
ネタじゃないと思うよ。
理解できない負け惜しみ厨だとおもう。
そういう漏れも全然理解できてないので逝ってくる...
049046902/04/14 20:04ID:???
まっぷっぷ意味不明age
0491nobodyさん02/04/14 20:06ID:???
open(IN, "datafile.txt");
while($line = <IN>) {
chomp($line);
%xx = ( "田中雅夫", "田中さん", "椎名林檎", "林 檎" ,"志村けん", "バカ殿");
#$nkeys = keys %xx;
#$value = values %xx;
#$line =~ s/$nkeys/$value/g;
$hoge = join "|", keys %xx;
$line =~ s/($hoge)/$xx{$1}/g;
print <<EOL;
$line
EOL
}

これで試してみたんですが無理でした(^^;
0492nobodyさん02/04/14 20:32ID:???
>491
俺のところではそれでいけるけど、datafileの中身はどうなってるの?
あとPerlのバージョンは?
0493TOM ◆98SA9XcM 02/04/14 20:36ID:CWCI/F1H
もーいっこ質問、お願いです。

変数$nanashiに、
あ<>い<>う<>え<>お<>
と入ってるのですが、
この$nanashiを、
@giko = ("あ","い","う","え","お");
のように、配列に出来ますか?
0494nobodyさん02/04/14 20:39ID:???
@giko = split(/<>/, $nanashi);
0495TOM ◆98SA9XcM 02/04/14 20:44ID:CWCI/F1H
ほ〜
ありがとん
■ このスレッドは過去ログ倉庫に格納されています