【Perl】初心者コーナーPart9
■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。
01/12/28 23:21ID:SPLRvqQi1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
1と3が無いと誰も答えられないよ、良い回答は良い質問から。
一緒に勉強しましょう。
参考書籍はこちら【【Perl,CGI】参考書籍 第2版 】
http://pc.2ch.net/test/read.cgi/php/988809842/
CGIの質問はこちら【CGIだけど、なんか質問ある?part5】
http://pc.2ch.net/test/read.cgi/php/1009331505/
その他の雑多な話題は、【CGIに依存しないPerlの話題一般】
http://pc.2ch.net/test/read.cgi/php/991313362/
過去ログ、その他の役立ち情報は>>2-10を見よう。
0367名無しさん@お腹いっぱい。
02/01/24 15:40ID:???@ary = (@ary[0 .. 1] , $newdata , @ary[2 .. $#ary]);
とかいう方法は?
0368名無しさん@お腹いっぱい。
02/01/24 15:49ID:???とりあえず(2)だけ
splice @hoge, 1, 0, 'B';
0369名無しさん@お腹いっぱい。
02/01/24 15:51ID:???こういうことかな?
join ',', @hoge;
0370名無しさん@お腹いっぱい。
02/01/24 15:53ID:nUVwgo4z0371配列
02/01/24 15:53ID:RS3bsnfpなるほどぉ、そういう風にするのかぁ。
できました、できました。ありがとうございます。
>>368
あっ、こんなやり方も・・・これから試してみます。
ありがとうございます。
>>369
そんなに簡単に・・・試してみます。
0373名無しさん@お腹いっぱい。
02/01/24 16:03ID:???my @hoge = qw(hoge fuga foo bar);
my $i;
print join " ", map { $_->[0] } grep { $_->[1] =~ /f/ } map { [ $i++, $_ ] } @hoge;
#=> 1 2
0374名無しさん@お腹いっぱい。
02/01/24 16:10ID:???インデント崩れるかな。
use Benchmark;
timethese(10000, {
A => sub {
my @hoge = qw(hoge fuga foo bar);
my $i;
my @res = map { $_->[0] } grep { $_->[1] =~ /f/ } map { [ $i++, $_ ] } @hoge;
},
B => sub {
my @hoge = qw(hoge fuga foo bar);
my @res;
for (my $i = 0; $i <= $#hoge; $i++) {
$hoge[$i] =~ /f/ or next;
push @res, $i;
}
},
});
0375名無しさん@お腹いっぱい。
02/01/24 16:12ID:nUVwgo4z0376配列
02/01/24 16:13ID:RS3bsnfpスゴ!ここまでになると僕には記号の羅列にしか見えませんが
出来ました。
う=ん。perlは深すぎる。
0377名無しさん@お腹いっぱい。
02/01/24 17:37ID:???めっちゃなごんだ
0378352
02/01/25 00:02ID:???えと、これを実行したところ、
($number,$text) = split(/<>/,$_);
の行でエラーが出ました…。
何か変えないといけないんでしょうか…。
0379名無しさん@お腹いっぱい。
02/01/25 00:06ID:???まさか全角スペースそのままでコピペとかしてないよな?
0380名無しさん@お腹いっぱい。
02/01/25 00:17ID:PBLVziZQそれだな・・・・
>378
インデント使えないから全角スペースはいってます。
半角スペースに直して下さい。
0381352
02/01/25 01:47ID:???半角にしてやったらうまく動きました。
今度こそ…。
ありがとうございました。
0382配列
02/01/25 12:07ID:IeC8qMZZ僕のような初心者がもう一歩踏み出す為の本ってなんかお
勧めありますか?
あと、思うのは英語がわかれば、プログラム言語の収得の
時間は半分くらいに短縮できるんじゃないだろうか?文献
もイパーイあるし、そもそも構文が英語だし、その点日本人っ
てかなり不利な様な・・。
関係ないけど今、Apacheの設定してんだけど、もう、この
コメントがスラスラ読めたらどんなに楽だろう・・・と・・・
ふ=。
0383名無しさん@お腹いっぱい。
02/01/25 12:51ID:???そんな君の為に http://www.scripts-lab.co.jp/qa/whatsmind.html
0384名無しさん@お腹いっぱい。
02/01/25 13:40ID:r3/rqZp3絶対に、わかりずらいぞ。
日本語記述プログラム
0385名無しさん@お腹いっぱい。
02/01/25 14:55ID:eF69uSNxwhile (read FILE, $_, 1024) {
unless ($Count % $DivSize) {
$FCount = sprintf("%04d", ++$FCount);
open(OUT, ">${FileName}_$FCount$AddExt");
binmode(OUT);
}
print OUT $_;
$Count++;
}
これは $DivSize に 500 とか指定して指定KB単位で
ファイルを分割する(昔DOSで使っていたkitcutみたいな)のですが、
Active Perl for Linuxでは期待通りに動くのに
Active Perl for Win32(Win98SE)では失敗します。
直接の原因は読み込むファイルに"0x1A"があると
そこで処理が終了してしまうようですが、
なぜそうなるのかは分かりません。
Windows系OSでも正常に動かすにはどうすればよいのでしょうか?
0386名無しさん@お腹いっぱい。
02/01/25 15:08ID:79BxtF4Tmy @array;
my @some_array = (1, 2, 3);
%hash = {'key' => @array};
for (@some_array){
push $hash{key} $_;
}
print $hash{key}[0]; #出力は「1」
となるようにしたいのですが、「push $hash{key} $_;」ここで
compilation errorが出てしまいます。
希望通りの結果を出すにはどのようにすればよいのでしょう?
my %hash = ("key" => \@some_array);
print $hash{"key"}[0];
0388■■■■■
02/01/25 17:52ID:xsDEBfwk↑の-wはどういう意味なのでしょうか?
0389名無しさん@お腹いっぱい。
02/01/25 17:57ID:???0390名無しさん@お腹いっぱい。
02/01/25 18:02ID:???#!/usr/local/bin/perl -プ
にすると警告メッセージの文体がうざくなります
0391名無しさん@お腹いっぱい。
02/01/25 18:03ID:/7cgUOJjワーニングのwだよ。
0392■■■■■
02/01/25 18:07ID:xsDEBfwkマジ質問なんですが。-wはキーワードにならないもので。
0393名無しさん@お腹いっぱい。
02/01/25 18:08ID:???http://www.google.com/search?hl=ja&q=perl+%83X%83C%83b%83%60+w&lr=
0394■■■■■
02/01/25 18:08ID:xsDEBfwk0395名無しさん@お腹いっぱい。
02/01/25 18:17ID:???0396名無しさん@お腹いっぱい。
02/01/25 18:21ID:???0397名無しさん@お腹いっぱい。
02/01/25 18:28ID:S6WZ3j03何か定石になっている方法等はないでしょうか。
0398親切な人
02/01/25 18:42ID:???ヤフーオークションで、幻の人気商品、発見!!!
今は無き「コピーガードキャンセラー」↓
http://page5.auctions.yahoo.co.jp/jp/auction/e5843828
ヤフーオークション内では、現在、このオークション
の話題で、持ちきりです。
0399名無しさん@お腹いっぱい。
02/01/25 18:52ID:???$$
0400名無しさん@お腹いっぱい。
02/01/25 18:52ID:???0401名無しさん@お腹いっぱい。
02/01/25 20:53ID:???これは、0x1A(=^Z)がDOSでEOFだったという歴史的経緯によるもの。
純粋に入力をバイナリとして扱うには、FILEについても
openの直後にbinmode(FILE)とすることで解決するはず。
0402名無しさん@お腹いっぱい。
02/01/25 21:24ID:Y6CV5/iRやはり$$が定石なのですね。
ありがとうございました。
0403名無しさん@お腹いっぱい。
02/01/25 21:56ID:79BxtF4T置かずに、使用する方法はあるのでしょうか?
0404名無しさん@お腹いっぱい。
02/01/25 22:02ID:/7cgUOJjuse lib
0405名無しさん@お腹いっぱい。
02/01/25 22:05ID:???ていうか、モジュール自作できるのに、そのモジュールの使い方がわからないなんて事あり得るのだろうか?
0406403
02/01/25 22:36ID:79BxtF4Tで、
use lib '/path/to/my_module_dir';
を加えたら、とりあえず動いたんだけど、
use lib 'ディレクトリパス';
とすれば @INC にここで指定した'ディレクトリパス'が
加わったのと同様と考えていいのですか?
0407名無しさん@お腹いっぱい。
02/01/25 22:57ID:???print @INC;
で分かるだろが。自分で調べろヤ。
0408名無しさん@お腹いっぱい。
02/01/25 23:02ID:???0409名無しさん@お腹いっぱい。
02/01/25 23:10ID:XMaI9lFdありがとうございます。
入力側もバイナリモードにすることにより期待通りに動きました。
出力に関しては以前引っかかったことがあったので
気にしていたのですが入力も、とは・・・やられました。
0410名無しさん@お腹いっぱい。
02/01/25 23:39ID:???これって教えて君を増やす為なの?
0411名無しさん@お腹いっぱい。
02/01/26 00:51ID:OfzJhL7vこれって、ブラウザからは出来ないんですか?500エラーになるんですが…。
結果の数値を表示させるにはどうしたら良いでしょう?
0412名無しさん@お腹いっぱい。
02/01/26 02:20ID:WUMSdJPW文字コード、例えば「あ(2422)」の2422という数字)
をEUCの文字に変換して出力するにはどうしたらよいのでしょうか?
print &convert(2422);
(表示)
あ
見たいな感じにしたいんですが・・・。
0413agege
02/01/26 03:19ID:???use benchmark; ⇒ use Benchmark;
0414名無しさん@お腹いっぱい。
02/01/26 16:03ID:???packを使ってみ
0415名無しさん@お腹いっぱい。
02/01/26 18:44ID:4vbo6FDePerlで、配列を一つのスクリプト内で何度も再利用することで、
その都度、別の名前の配列を複数作る場合に比べて
メモリ消費は低減できるのでしょうか?
0416ループに関して
02/01/27 23:58ID:y07CruPJハッシュにして…ってところ何ですけど。
require './cgi-lib.pl';
&ReadParse(*form);
$A1="$form{'A1'}";
$B1="$form{'B1'}";
$A2="$form{'A2'}";
$B2="$form{'B2'}";
$A3="$form{'A3'}";
$B3="$form{'B3'}";
・
・
・
$A50="$form{'A50'}";
$B50="$form{'B50'}";
っていう感じにしたいんです。
まあ「動く」ってだけなら気合いで書けば問題ないんですけど、
ループとか使ってきれいに書く方法を教えていただきたいのです。
どうもループは苦手でして。。。よろしくお願いします。
0417名無しさん@お腹いっぱい。
02/01/28 00:45ID:i9Ky8+Oxwhile (($key,$value) = each(%form)) {
$$key = $value;
}
なんのためにこんな事をするんだろう?・・・・
0419http://nara.cool.ne.jp/mituto
02/01/28 15:08ID:Ye799Ifrhttp://210.172.69.179/jps_search_02au
http://nara.cool.ne.jp/mituto
0421名無しさん@お腹いっぱい。
02/01/28 15:29ID:???いいようんこ見つけたくらいでいちいち騒がなくて。
小学生じゃあるまいし。
0422うんこ
02/01/28 16:35ID:???厨房だからっていじめないでおくれよ。
頑張ってプログラミングしてます。
0423名無しさん@お腹いっぱい。
02/01/29 00:28ID:4QGFGOvyconfig.txt did not return a true value at test.pl line 4.
と言われてしまいます。しかも
print "$board\n";以下が表示されません。
どうしたものでしょうか。
config.txtに
$board = "文字列01";
$dir = "文字列02";
$limit = "文字列03";
$down = "文字列04";
を書き込んでいます。
======test.plの内容======
#!/usr/bin/perl -w
if ($#ARGV < "0") { print "[ERROR]\tUsage: perl test.pl config.txt\n"; exit; }
if (-e $ARGV[0]) { require ($ARGV[0]); }
if (!defined($board) || !defined($dir) || !defined($limit) || !defined($down)) {
print "[ERROR]\n";
exit;
}
print "$board\n";
print "$dir\n";
print "$limit\n";
print "$down\n";
0424名無しさん@お腹いっぱい。
02/01/29 00:34ID:kF9Gt4SCconfig.txtのお尻に
1;
と書いてみる。
0425名無しさん@お腹いっぱい。
02/01/29 01:05ID:aDiD5uGUif ($sentence =~ /([\d]+)/) {
$sentence .= "\n・$1";
}
print $sentence;
この結果
> 今日は29日だ。01:45分
> ・29
が出力されますけど、
いくつ含まれているか判らない数字列を全部取り出して、
それを全部後ろにくっつけて、
> 今日は29日だ。01:05分
> ・29
> ・01
> ・05
と出すにはどうすればいいでしょう。
0426名無しさん@お腹いっぱい。
02/01/29 01:11ID:???$sentence .= "\n・$1";
}
間違えると無限ループになるから注意。
0427名無しさん@お腹いっぱい。
02/01/29 01:14ID:???$sentence2 = $sentence;
while($sentence =~ s/([\d]+)//) {
$sentence2 .= "\n・$1";
}
$sentence .= join "\n", '', map { '・' . $_ } @number if @number > 0;
0429名無しさん@お腹いっぱい。
02/01/29 01:23ID:qEiE9m0V$yyyy = "2002";
$mm = "01";
$dd = "29";
$h = "01";
$m = "21";
$s = "55";
こうしたいんですが、スマートなやり方はないでしょうか?
今は
@date = split //,$date;
for (1..4) {$yyyy .= shift @date;} for (1..2) { $mm .= shift @date;}
こんなのを書いてるんですがいかんせん汚い・・・
0431名無しさん@お腹いっぱい。
02/01/29 01:44ID:jKfeCUaQいや、充分綺麗(ワラ
0432429
02/01/29 02:10ID:mntfCIt4ありがとうございました。
0433名無しさん@お腹いっぱい。
02/01/29 03:11ID:???unpack ('A4A2A2A2A2A2', $str);
0435名無しさん@お腹いっぱい。
02/01/29 06:48ID:yBBFlrS0htmlファイル中にある&を%44になおすプログラムを作っているのですが
そのファイルの中には&が8個あって1番目の&だけを修正したいのです。
#!/usr/local/bin/perl
while(<stdin>){
s/&/%44/o;
print;
}
上記の状態から修正したいのですが、どうしたらよいでしょうか??
0436340=435
02/01/29 07:13ID:yBBFlrS0色々やってみたのですがうまくいきません。
おちから貸してください。
0437・・・
02/01/29 07:29ID:???while(<stdin>){
unless ($this_scalar_means_flag == 3.14159265358979){
$this_scalar_means_flag = 3.14159265358979;
s/&/%44/o;
print;
}
}
0438名無しさん@お腹いっぱい。
02/01/29 07:35ID:???0439340
02/01/29 07:43ID:yBBFlrS0わたしなりには考えたのですがどうしてもうまくいかなくて。。。
0440名無しさん@お腹いっぱい。
02/01/29 09:32ID:/LeYWjfo以前作ってるとか聞いたことあるんだけど。。
0441名無しさん@お腹いっぱい。
02/01/29 10:58ID:???0442名無しさん@お腹いっぱい。
02/01/29 11:50ID:???0443名無しさん@お腹いっぱい。
02/01/29 12:43ID:F543ET41$iのiとはなんのi?
あと$1とか……
色々しらべてみても、これ? つーのが。
0444あぼーん
NGNG0445名無しさん@お腹いっぱい。
02/01/29 13:00ID:???どれにレスしているのか引用しなさい。
わからないことが馬鹿なんじゃなくて、他人に自分の意志を
伝えられる文章を書けないのが、馬鹿。
0446名無しさん@お腹いっぱい。
02/01/29 13:11ID:???言ってる意味がよくわからないが、
$1とかに関しては正規表現の際に使う特別な変数。
http://tohoho.wakusei.ne.jp/wwwperl1.htm#Expr
$iのiってのは、プログラムの世界で、一時的なカウントの変数とかに
一般的にi、j、kなどが使われる理由を知りたいって事?
こっちに関しては俺も知らないからなんとも言えないけど。
0447名無しさん@お腹いっぱい。
02/01/29 13:44ID:F543ET41すんまへん。引用じゃなかったんで。
>>446
>一般的にi、j、kなどが使われる理由を知りたいって事?
そ、そういうことです(苦笑)。
vは valueなのかな、とオボロゲにゃー思うんですが。
0448名無しさん@お腹いっぱい。
02/01/29 14:16ID:???i はイテレータの頭文字じゃないかな?
0449447
02/01/29 15:00ID:???これのことですかね?
0450名無しさん@お腹いっぱい。
02/01/29 15:14ID:JIM4MzqNopen(DAT,"foo.dat");
@foos = sort <DAT>;
close(DAT);
foreach (@foos) {
print;
}
これだとファイルが大きいとメモリを使いすぎるみたいなのでやめようと思って、
下のように書き直したんですが
open(DAT,"foo.dat");
foreach (sort <DAT>) {
print;
}
close(DAT);
この場合も結局、一旦<DAT>を全部読み込んでからsortしてるんでしょうか?
@foosにコピーしないだけマシですか?
0451名無しさん@お腹いっぱい。
02/01/29 15:29ID:7v+0Ir290452450
02/01/29 18:58ID:???じゃああまり気にしないことにします。
0453名無しさん@お腹いっぱい。
02/01/29 20:12ID:GCzt07oL特定文字列を置き換える、という処理をしたいのですが
どうしたらよいのでしょうか?
a.txt
b.txt
c.txt
と渡すと、
a.txtのmonaをgikoに、
b.txtのmonaをgikoに、
c.txtのmonaをgikoに、置き換えるという処理をしたいのです。
0454453
02/01/29 20:21ID:GCzt07oL0455名無しさん@お腹いっぱい。
02/01/29 20:27ID:7v+0Ir290456453
02/01/29 20:31ID:GCzt07oLリストになって渡されるのです。
Linuxみたいに`cat list`とかできるとよいのですが…
0457453
02/01/29 20:35ID:GCzt07oLやりかた間違ってるんでしょうか?
0458名無しさん@お腹いっぱい。
02/01/29 20:39ID:???Can't do inplace edit without backup.
0459名無しさん@お腹いっぱい。
02/01/29 20:44ID:???Windowsにcat入っているの?
0460名無しさん@お腹いっぱい。
02/01/29 20:45ID:7v+0Ir29だけど。今思ったらWindowsなんだね。
じゃあ、自分でファイルオープンして置換しながらtmpファイルに出力して
renameで。
0461453
02/01/29 20:58ID:GCzt07oL1行ずつ「exec perl」で呼び出すってのはだめでしょうか?
type list | perl -e "while(<>){exec \"perl -e's///'\"}みたいに
やってるんですが…うううむ
0462名無しさん@お腹いっぱい。
02/01/29 21:05ID:???foreach $file(@files) {
@DATA = ();
open(FILE,"$file");
while (<FILE>) { $_=~ s/mona/giko/g; push (@DATA,$_); } close (FILE);
open(FILE,">$file");
print FILE @DATA;
close (FILE);
}
0463名無しさん@お腹いっぱい。
02/01/29 21:23ID:???ってのはどうかな。何故かlist.txtが破壊されるけど。
0464名無しさん@お腹いっぱい。
02/01/29 21:27ID:???なら破壊されないか。
0465453
02/01/29 21:28ID:GCzt07oL0466462
02/01/29 21:31ID:9LBydpPt■ このスレッドは過去ログ倉庫に格納されています