トップページ⇒tech
1001コメント317KB

Perlについての質問箱 10箱目

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさんNGNG
"The duct tape of the Internet"こと、
Perlについての質問箱です
"There's more than one way to do it"ということで
Perlの奥深さについて皆で語り合い、追求してまいりましょう。

CGIについての質問は板違いです。WEBプログラミング板でどうぞ。
CGIとPerlの区別がつかない人もWEBプログラミング板に行ってください。
(WEBプログラミング板 http://pc2.2ch.net/php/ )

CGIの質問は答えがPerlと全然関係ない話に帰着する場合が多かったりするので
WEBプログラミング板に行って聞いたほうが得ですよ。
このスレでは(CGI以外の)純粋にPerlのみに関係する質問を取り扱っていこうと思います。

過去ログは>>2-4あたり
0002デフォルトの名無しさんNGNG
2get
1 http://pc.2ch.net/tech/kako/1017/10177/1017736187.html
2 http://pc3.2ch.net/tech/kako/1033/10336/1033688230.html
3 http://pc2.2ch.net/tech/kako/1041/10412/1041205885.html
4 http://pc2.2ch.net/tech/kako/1048/10485/1048519394.html
5 http://pc2.2ch.net/tech/kako/1053/10530/1053053082.html
6 http://pc2.2ch.net/tech/kako/1060/10606/1060689008.html
7 http://pc2.2ch.net/test/read.cgi/tech/1068051036/l50
8 http://pc2.2ch.net/test/read.cgi/tech/1074151549/l50
9 http://pc5.2ch.net/test/read.cgi/tech/1079114157/l50
0003デフォルトの名無しさんNGNG
3get

[プログラミング自体の経験が無い奴はまずココを読め]
Perlプログラミング講座: http://www5a.biglobe.ne.jp/~n_rieko/perl/

[本]
リャマ: http://www.oreilly.co.jp/BOOK/lperl3/
駱駝: http://www.oreilly.co.jp/BOOK/pperl3v1/
Effective Perl: http://www.ascii.co.jp/books/detail/4-7561/4-7561-3057-7.html
クックブック: http://www.oreilly.co.jp/BOOK/pcook/

[オンラインマニュアル]
Perldoc.com: http://www.perldoc.com/
perldoc.jp: http://www.perldoc.jp/
perl5.005_03 のドキュメント: http://www.kt.rim.or.jp/%7ekbk/perl5.005/

[モジュール]
CPAN.com: http://search.cpan.org/
河馬屋二千年堂: http://member.nifty.ne.jp/hippo2000/

[テクニック]
Perlメモ: http://www.din.or.jp/~ohzaki/perl.htm
Perlのページ: http://homepage1.nifty.com/nomenclator/perl/
0004デフォルトの名無しさんNGNG
4get
0005デフォルトの名無しさんNGNG
search.cpan.jpにリンクがないのはなじぇ?
0006デフォルトの名無しさんNGNG
本スレage!
0007デフォルトの名無しさんNGNG
PERLってJAVAみたいにバックグラウンドでリアルタイム処理ってできますか?
ブラウザでページを表示したときにしか動作しないんですか?
0008デフォルトの名無しさんNGNG
>>7
http://www.kt.rim.or.jp/%7ekbk/perl5.005/perldata.html#Chubo_ha_Shine
http://perldoc.com/perl5.8.4/pod/perlop.html#Itteyoshi
0009デフォルトの名無しさんNGNG
>>7
Unix 系だったら fork
Windows系だったらMT(マルチスッドレ)Perlがええんでネーノ

と、やりたいことを具体的に訊かずにカキコ
0010デフォルトの名無しさんNGNG
すいません。
perlでタイムスタンプの情報を知りたいのですが
取得する方法あるのでしょうか?

やっぱり$kekka = `ls -l file_hoge`;
とやってその結果を解析するしかないのでしょうか?
0011デフォルトの名無しさんNGNG
($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,
$atime,$mtime,$ctime,$blksize,$blocks) = stat($filename);

0 dev device number of filesystem
1 ino inode number
2 mode file mode (type and permissions)
3 nlink number of (hard) links to the file
4 uid numeric user ID of file's owner
5 gid numeric group ID of file's owner
6 rdev the device identifier (special files only)
7 size total size of file, in bytes
8 atime last access time in seconds since the epoch
9 mtime last modify time in seconds since the epoch
10 ctime inode change time in seconds since the epoch (*)
11 blksize preferred block size for file system I/O
12 blocks actual number of blocks allocated
001210NGNG
おおおおっ
statという関数あったのですね。
ありがとーございます。

使用してみますです。
0013デフォルトの名無しさんNGNG
>>1
スレ立て乙。
そしてPerlスレ10箱達成おめ。
0014デフォルトの名無しさんNGNG
かなり悩んでます、お願います

htmlからform のpostでcgiにデータを渡すのですが、

form method=post action=cgi
input type=checkbox name=mail_to value=a
input type=checkbox name=mail_to value=b
/form

で、タイプをチェックボックスとして、cgiに渡します。
この場合、cgiで受け取るデータはどの様な形式で入ってくるのでしょうか?
name が同一の名前なので、 配列 $mail_to[0] $mail_to[1]
かと思ったのですが、違うようですし、 データの内容がカンマで区切られて入ってくるでもないようですし・・

尾永井します

0015デフォルトの名無しさんNGNG
CGIの話は受けつけておりませぬ。
でも、環境変数とか調べたらきっと答えは出てきます。
0016デフォルトの名無しさんNGNG
>>14
WebProg板の

Perl コーディング初心者質問コーナー Part35
ttp://pc5.2ch.net/test/read.cgi/php/1085557731/l50

あたりに行った方がいいと思うよん。移動ついでに
どういうプログラム書いたか要点を明らかにすること。
最低どのcgiライブラリ使ってるかぐらいは言わないと
誰も答えられないと思われる。
001714NGNG
>>15
>>16
スレ違いでしたが・・・サンクス
0018デフォルトの名無しさんNGNG

俺のperlプロセス君が、10秒以上処理が長引いたら
どんな状態だろうと自殺したいと言っています。

さて、飼い主として俺はどーしてやったらいいもんかね?
0019デフォルトの名無しさんNGNG
fork しまくるとか
0020デフォルトの名無しさんNGNG
1,ファイルから一行づつ読み込む
2,if(空行なら) {
3, 配列xをソートして出力;
4, 配列xは初期化;
5,} else {
6, 読み込んだ行を配列xに追加;
7,}
というのが作りたいんですが、なかなかうまく逝きません。
とりあえず中間的に
@xx = ();
while(<>) {
push(@xx, <>);
}
print $xx[2];
と書いてみて、二行目を出力するかどうか試したんですが、駄目です。
どなたかお助けください。
0021デフォルトの名無しさんNGNG
while (<FILE>) {  # ファイルハンドルを使う
push @xx, $_;   # $_ に入ってるから
0022未承諾広告※ ◆aiY4htt2.2 NGNG
my @buffer;
while (<>) {
push @buffer, $_ if $_;
print splice @buffer, 0;
}

こんなかんじ?
0023未承諾広告※ ◆aiY4htt2.2 NGNG
>>22
あかんやん。
my @buffer;
while (<>) {
push @buffer, $_ and next if $_ ne "\n";
print sort @buffer;
@buffer = ();
}
あかんわ。。。鬱
0024デフォルトの名無しさんNGNG
>>20
そのまま書くんじゃダメなの?
my @x;
while(<>){ #    1,ファイルから一行づつ読み込む
if($_ eq "\n"){ #  2,if(空行なら) {
print sort @x; #  3, 配列xをソートして出力;
@x = ''; #      4, 配列xは初期化;
} else { #      5,} else {
push @x, $_; #   6, 読み込んだ行を配列xに追加;
} #          7,}
}
0025デフォルトの名無しさんNGNG
@x = (); #      4, 配列xは初期化;
だね。すっかり忘れてる^^;
0026デフォルトの名無しさんNGNG
>>20
while(<>)内でもう一度<>を使っちゃだめ。

while(<>) {      #ファイルのn行目が$_にセットされる。
push(@xx, <>);    #ファイルのn+1行目@xxにpushされる。
}
とゆーわけで、読み込んだファイルの奇数行は処理されなくなる。

あとロジックもちょっと変。もし読み込むファイルの最終行が
空白じゃなかったらどうなる?空白行が連続してたくさん続くような
ファイルを読み込ませたら?

ファイルの空白行を飛ばして出力するスクリプトだったら
こういう書き方もできる。

while(<>){print if !/^\n$/;}
002726NGNG
s/奇数行目/偶数行目/
002827NGNG
s/偶数行目/奇数行目/
ゴメン アッテタ
0029デフォルトの名無しさんNGNG
while(<>){# 一行読み込む
push(@xx, <>); # @xxに<>の残りの全ての行を追加する。――ダイヤモンド演算子はリストコンテキストでは残り全てを読み出すため。
}
0030デフォルトの名無しさんNGNG
さて、以下の命令文はどんな効果を得ることができるでしょうか?

<>;
0031デフォルトの名無しさんNGNG
心が安らぐ。
 <>;
↓
(^<>^;)
0032デフォルトの名無しさんNGNG
すみません、お教えください。
UNIXでCPANモジュールのアンインストールって
コマンドか何かでできるのでしょうか?

それともモジュールをファイル削除するしかないのでしょうか。。。
0033デフォルトの名無しさんNGNG
>>30
1行捨てる
0034デフォルトの名無しさんNGNG
たおれたキャンチョメ
0035デフォルトの名無しさんNGNG
元は糞スレだったのか。
0036デフォルトの名無しさんNGNG
>>31
$ perl foo.pl
syntax error at b.pl line 1, near "(^"
Execution of foo.pl aborted due to compilation errors.

ゴルァ(゚Д゚)




以下おまけ。有名なネタ。要 Windows2000以上。

C:\>(;´Д`)ハァハァ
ハァハァ の使い方が誤っています。
0037デフォルトの名無しさんNGNG
ymdhis形式の時刻をunixtimeに変換する関数とかどこかにありませんか?
要するに2つの時刻の差を知りたいわけですが。
ただしCPANは使えない状況です。
0038デフォルトの名無しさんNGNG
>>37
http://perldoc.com/perl5.8.4/lib/Time/Local.html
0039デフォルトの名無しさんNGNG
Time::Local
0040デフォルトの名無しさんNGNG
>>39
ありがとうございました。
0041デフォルトの名無しさんNGNG
>>31
死ね
0042デフォルトの名無しさんNGNG
thanks!
0043デフォルトの名無しさんNGNG
「初めてのPerl(3版)」で勉強しています。

P69にて
“サブルーチンの中で最後に行われた計算の結果が、自動的に戻り値になる”
と書かれていますが、以下のような処理を行っても値が戻りません。

sub max {
my($max_so_far) = shift @_;
foreach (@_) {
if ($_ > $max_so_far) { $max_so_far = $_; }
$max_so_far; # ここだと値が返らない。
}
# $max_so_far; # ここだと値が返る。
}
$maximum = &max(1,2);
print "maximum number : $maximum";

sub maxで、最後に行われる計算は、
コメントアウトしていない$max_so_far;だと思うのですが、
間違っていますでしょうか?
0044デフォルトの名無しさんNGNG
最後が for (@_) になるからでは?
perl -d とかして、step 実行するとよくわかるよ。
004543NGNG
>>44
レスありがとうございます。

ステップ実行を行ってみましたが、
やはり、print出力の前の動作(sub maxの最後の動作)は、
$max_so_far; # ここだと値が返らない。
のようです。

コメントアウトしている
# $max_so_far; # ここだと値が返る。
と入れ替えて、ステップ実行してみた結果も同じ動作でした。

おそらく僕が致命的な勘違いをしているような気がするのですが、
なにぶん未熟なせいか、分からずにいます。
もう少し頑張って調べてみます。

>>44さん、ステップ実行自体まだ知らなかったので大変参考になりました。
ありがとうございました。
0046デフォルトの名無しさんNGNG
main::max(_.pl:4): if ($_ > $max_so_far) { $max_so_far = $_; }
DB<1> s
main::max(_.pl:5): $max_so_far; # ここだと値が返らない。
DB<1> s
main::max(_.pl:3): foreach (@_) {
DB<1> s
main::(_.pl:10): print "maximum number : $maximum\n";

ほら、foreach (@_) が最後じゃん
0047デフォルトの名無しさんNGNG
おお。コレは知らなかった。
つかこういう記述しないし。

>>43の場合
for(@_){
  ...
}
でforを抜ける"}"が最後だっつー事やね。

return(...)をつけとくほうが確実か。
sub max {
  my($max_so_far) = shift @_;
  foreach (@_){
    if ($_ > $max_so_far){
      $max_so_far = $_;
    }
    return($max_so_far); # ここだと値が返らない。
  }
  # return($max_so_far); # ここだと値が返る。
}



004847NGNG
forじゃねぇや。
foreachだった。
0049デフォルトの名無しさんNGNG
ちうか、おかしなプログラムだな
0050デフォルトの名無しさんNGNG
返らない原因を指摘したまで。
そのプログラムがおかしいとか、
普通そうは書かねぇよなどは
また別の問題かと。
0051デフォルトの名無しさんNGNG
Perlでリストの最大値取得するもっとも速い方法はどんなの?
0052デフォルトの名無しさんNGNG
>>51
sortじゃだめなん?
@sorted = sort @_;
$sorted[0]; # 最小値
$sorted[-1] # 最大値
0053デフォルトの名無しさんNGNG
手っ取り早くファイルの行数を調べたいときはどのようにすればいいですか?
調べるファイルはかなり巨大で、ン拾萬行に及びます。
005443NGNG
いろいろ調べたりしてたらスレが進んでる…

>>46
たぶんというか間違いなく、>>46さんの言ってることが正しいとは思うのですが、
Windows環境のせいなのか、僕がくだらんミスしてるのか分かりませんが、
>>46のように出力してくれません…
しばらく試行錯誤してみます。

>>49
まだサンプルソース見ながら、基礎を理解してる最中なんで、
記述スタイル(スタイルも何もまだ無いけど)とかは勘弁してください…
0055デフォルトの名無しさんNGNG
>>53
`wc -l $file`
0056デフォルトの名無しさんNGNG
>>52
sortはたいていO(n×log n)ぐらいはかかるので、nが大きくなると
まずいだろう。素直に書くなら

$max = @_[0];
foreach (@_) {
$max = $_ if $_ > $max;
}

あたりじゃない? 要素数が少ないとsortの方が速いかもしれないけど。
ただしsortを使うとしてもいったん変数に入れないほうが速いと思った。

(sort {$a<=>$b} @_)[-1];
005753NGNG
>>55
環境を申し遅れました。Windowsです。
0058デフォルトの名無しさんNGNG
>>57
Cygwinでperl使えばよろし
0059デフォルトの名無しさんNGNG
CygwinでPerlを使えたかな・・・
0060デフォルトの名無しさんNGNG
>>59
使ってますが何か?
0061デフォルトの名無しさんNGNG
$l=0;open i,$file;while(<i>){$l++;} close i;print "$l\n";
0062デフォルトの名無しさんNGNG
open IN, $file;
1 while <IN>;
close IN;
print "$.\n";
0063デフォルトの名無しさんNGNG
close IN;は陽にクローズしてるだろ
0064デフォルトの名無しさんNGNG
$.はハンドルをクローズしたらリセットされまつ
0065デフォルトの名無しさんNGNG
>>51>>56
検証せずにカキコ。
たぶんほとんどのケースで sort がいちばん速いが、Perlのソートは
Quick sort だし、要素の並び替えが発生するので
要素がヴァカでかく、ほぼ順列/逆列のときはかな〜りペナルティが
発生するハズ。ていうか先にPerlインタプリタが長い時間黙りこくるだろう。

短い行数でやるんだったら>>56が正解だとおもうけど、
ホントに「速い」方法は、データの持ち方、データの取り込み方と関係してくる。

結論: 設計が肝心だが、Perlでは手抜き上等!

>>53
効率的ではないが手っ取り早く最短な方法(FDはオプーソするんだぞ)
scalar(@dummy_no_namaedakara_mijikaku_shiru = <FD>)

手っ取り早くなく(効率的に)やるんだったら、とにかく設計が肝心だ!!!
テキストファイルは、長大なデータ扱うのに適してないんだyp!
0066デフォルトの名無しさんNGNG
>効率的ではないが手っ取り早く最短な方法(FDはオプーソするんだぞ)
>scalar(@dummy_no_namaedakara_mijikaku_shiru = <FD>)
っていうかバッファが無駄すぎだろ。もすこし考えろ
0067デフォルトの名無しさんNGNG
>>66
こーゆーときに深く考えないのがPerlだろ?!
走らせてから>>65は悩むんだろ。
006865NGNG
Xeon2.8x2 絶賛運用中しかもJVM走ってる箱
Perl 5.8.0, Linux-2.4.20 にて計測
たったの 1468778 lines, 262,261,974 bytes

$ wc -l
real 0m0.351s
user 0m0.140s
sys 0m0.190s

$ perl -e '1while(<>);print"$.\n";'
real 0m1.574s
user 0m1.430s
sys 0m0.150s

$ perl -e '$n++while(<>);print"$n\n";'
real 0m1.641s
user 0m1.470s
sys 0m0.170s

$ perl -e 'print scalar(@d=<>),"\n";'
real 0m4.643s
user 0m3.230s
sys 0m1.380s

遅いな(ワラ
>>66の云うとおり、もちっと考えるようにするわ
0069デフォルトの名無しさんNGNG
Windowsにwcみたいなものって入ってないの?
0070デフォルトの名無しさんNGNG
>>51
use List::Util qw(max);
$max = max(@list);

実行速度は知らんが、(色々と)早いぞ
0071デフォルトの名無しさんNGNG
軽くベンチしてみた。やはりList::Util速いわ。
use Benchmark;
use List::Util qw(max);
my @list;
foreach (1..$ARGV[0]) {push @list, rand}

timethese(-1, {
    sort => sub {
      my @sorted = sort {$a <=> $b} @list;
      return $sorted[-1];
    },
    sort2 => sub {
      return (sort {$a <=> $b} @list)[-1];
    },
    foreach => sub {
      my $max = $list[0];
      foreach (@list) { $max = $_ if $_ > $max; }
      return $max;
    },
    map => sub {
      my $max = $list[0];
      map { $max = $_ if $_ > $max } @list;
      return $max;
    },
    max => sub {
      return max(@list);
    },
  });
0072デフォルトの名無しさんNGNG
>>71の結果。List::Utilは別格に速い。sortとforeachは要素数が増えると逆転。

% perl max.pl 10
Benchmark: running foreach, map, max, sort, sort2 for at least 1 CPU seconds...
foreach: 2 wallclock secs ( 1.03 usr + 0.00 sys = 1.03 CPU) @ 104388.35/s (n=107520)
map: 2 wallclock secs ( 1.06 usr + 0.00 sys = 1.06 CPU) @ 147539.62/s (n=156392)
max: 1 wallclock secs ( 1.02 usr + 0.00 sys = 1.02 CPU) @ 562195.10/s (n=573439)
sort: 1 wallclock secs ( 1.03 usr + 0.00 sys = 1.03 CPU) @ 55672.82/s (n=57343)
sort2: 2 wallclock secs ( 1.01 usr + 0.00 sys = 1.01 CPU) @ 227103.96/s (n=229375)
% perl max.pl 100
Benchmark: running foreach, map, max, sort, sort2 for at least 1 CPU seconds...
foreach: 1 wallclock secs ( 1.05 usr + 0.00 sys = 1.05 CPU) @ 21557.14/s (n=22635)
map: 1 wallclock secs ( 1.05 usr + 0.00 sys = 1.05 CPU) @ 24093.33/s (n=25298)
max: 1 wallclock secs ( 1.06 usr + 0.00 sys = 1.06 CPU) @ 115923.58/s (n=122879)
sort: 1 wallclock secs ( 1.06 usr + 0.00 sys = 1.06 CPU) @ 6338.68/s (n=6719)
sort2: 2 wallclock secs ( 1.04 usr + 0.00 sys = 1.04 CPU) @ 20675.96/s (n=21503)
% perl max.pl 1000
Benchmark: running foreach, map, max, sort, sort2 for at least 1 CPU seconds...
foreach: 1 wallclock secs ( 1.08 usr + 0.00 sys = 1.08 CPU) @ 2370.37/s (n=2560)
map: 2 wallclock secs ( 1.06 usr + 0.00 sys = 1.06 CPU) @ 2534.91/s (n=2687)
max: 1 wallclock secs ( 1.09 usr + 0.00 sys = 1.09 CPU) @ 13151.38/s (n=14335)
sort: 1 wallclock secs ( 1.08 usr + 0.00 sys = 1.08 CPU) @ 517.59/s (n=559)
sort2: 1 wallclock secs ( 1.05 usr + 0.00 sys = 1.05 CPU) @ 1421.90/s (n=1493)
0073デフォルトの名無しさんNGNG
実装で 悩む前に まずCPAN

おそまつでした。
0074デフォルトの名無しさんNGNG
List::Utilの中身だけど、これのどこにそんなに速くなる要素があるの?

sub reduce (&@) {
my $code = shift;

return shift unless @_ > 1;

my $caller = caller;
local(*{$caller."::a"}) = \my $a;
local(*{$caller."::b"}) = \my $b;

$a = shift;
foreach (@_) {
$b = $_;
$a = &{$code}();
}

$a;
}
sub max (@) { reduce { $a > $b ? $a : $b } @_ }
0075デフォルトの名無しさんNGNG
>>74
頭のほうからよく読め。それはXS版のダイナミックロードを
試みてうまくいかなかった時用のコードだ。
0076デフォルトの名無しさんNGNG
>>75
/usr/lib/perl5/5.8.4/i686-linux-thread-multi/auto/List/Util/Util.so
これがありました。Perlのライブラリはコンパイルされてるんですね。初めて知りました。
通りで速いわけだ。ということはライブラリは積極的に使わないともったいないですね。
0077デフォルトの名無しさんNGNG
やあみんな(´・ω・`)

この正規表現をもっとスマートにできないかな?
 /^D(a(m(n(A(ss?)?)?)?)?)?/i
つまり文字列の先頭から、
 D もしくは Da もしくは Dam もしくは Damn もしくは (以下略)
にマッチするかどうかを、大文字小文字を区別せずにテストしたい。
実行速度と可読性の両方があればベストなんだけど、どちらかというと
実行速度の方が嬉しい。何度も何度も何度も何度も呼び出されるんだ。

Cなら正規表現すら使わずに簡単に高速なルーチンが書けるのに
テキスト処理が得意なはずのPerlだと悩んじゃうのは、意外だね。

あ、このバーボンは僕のおごりだ。
0078デフォルトの名無しさんNGNG
$data に任意のデータがあるとして。
my $arry = 'DamnASS';
$arry =~ m/^$data/i;
0079デフォルトの名無しさんNGNG
>>78
うわっ、これは強烈に Koo000L なコードだね。
逆転の発想とはこの事さ。コペルニクスの再来だ。
脳みその未使用の部分が一気に活性化した気分だ。
ありがとう。お礼に蜂蜜酒をごちそうさせてくれ (´・ω・`)ノ∀
0080デフォルトの名無しさんNGNG
>>77
なぜ $data =~ /^D/i じゃダメなの?
それとも /^D(a(m(n(A(ss?)?)?)?)?)?\z/i の間違い?

>>78-79
$data が 'DamnASS!' だと $arry =~ /^$data/i はマッチ
しないけどいいの?
0081デフォルトの名無しさんNGNG
>>80
やあ(´・ω・`)こんな夜中(早朝?)にナイスツッコミだ。
実は>>78のアイデアがうまくいかなくて,10分くらい悩んだ。
原因は,つまり君のツッコミそのものだった。

> /^D(a(m(n(A(ss?)?)?)?)?)?\z/i の間違い?
> $data が 'DamnASS!' だと $arry =~ /^$data/i はマッチ
> しないけどいいの?

鋭いね。実は僕の質問に間違いがあったんだ。ごめん。
結局僕は
 $data =~ /^D(a(m(n(A(s(s.*)?)?)?)?)?)?\z/i
という正規表現のスマート化をしたかったんだね。
 my $arry = 'DamnAss';
 my $subdata = substr($data, 0, length($arry));
 if ($arry =~ /^\Q$subdata\E/i) { ...
として解決したよ。
0082デフォルトの名無しさんNGNG
>>81
if (0 == index 'damnass', lc $data) {
0083デフォルトの名無しさんNGNG
splitで "="または"," という指定は出来ないでしょうか?
"aaa=bbb,ccc,ddd" → ("aaa","bbb","ccc","ddd")
という感じにする方法があるのでしょうか?
0084デフォルトの名無しさんNGNG
型グロブを利用して定数を宣言しようと思ったのですが、
use strictを使っているとエラーになってしまいます。

*MAX = \100;
print $MAX."\n";

はOKだけど、

use strict
*MAX = \100;
print $MAX."\n";

はエラーになるということです。

型グロブを使う前に
my $MAX
を入れるとエラーは出なくなりますが、数値は未定義のままになっています。
なぜなのでしょうか?
関数を使うなど、他の方法にするしかないですか?
0085デフォルトの名無しさんNGNG
>>81 は >>82 に感謝しないのか・・・
0086デフォルトの名無しさんNGNG
>>83 split /[=,]/ ではだめか?
0087デフォルトの名無しさんNGNG
>>86
あ、ありがとうございます。パターンマッチが使えたんですね(汗
0088デフォルトの名無しさんNGNG
>>84
>型グロブを利用して定数を宣言しようと思ったのですが、
まず、そのやりかたは宣言って言わない。
myはシンボルテーブルに含まれない。
strictはグローバル宣言するかパッケージ名を省略せずに書けばいい。
our $MAX;
$main::MAX;

普通は定数はコンパイル時に畳みこませる。
sub MAX () {100}
ちなみに、これは名前空間はサブルーチンだけど、実質上はサブルーチンでも関数でもないから。
0089デフォルトの名無しさんNGNG
sub MAX(){100}
これだと"$MAX"みたいにしたときに展開されないよね?
009084NGNG
>>88
早速答えていただいてありがとうございます。

> >型グロブを利用して定数を宣言しようと思ったのですが、
> まず、そのやりかたは宣言って言わない。
> myはシンボルテーブルに含まれない。
> strictはグローバル宣言するかパッケージ名を省略せずに書けばいい。

ちゃんと理解できてなくてすみません。
なんとなくperlでプログラムを書き始めてしまったので、やはり基礎から勉強します。

> 普通は定数はコンパイル時に畳みこませる。
> sub MAX () {100}
> ちなみに、これは名前空間はサブルーチンだけど、実質上はサブルーチンでも関数でもないから。

関数じゃないんですね。
コンパイル時にMAX=100として扱われるようになるということでしょうか。
この方法で書くことにします。

ありがとうございました。
009184=90NGNG
たびたび失礼します。
書き込む直前にリロードするのを忘れてました。

>>89

sub MAX () {100}
print MAX."\n";

で100と表示されたのですが、これは展開されたとは言わないのでしょうか?
$つきでないと困る場合はありますか?
0092デフォルトの名無しさんNGNG
>>91
sub MAX(){100} #これと
$MAX #これは
なんの関連性もないから気にしなくていいよ。

"MAX\n";
って書いても展開しないってことを言いたいんだと思う。
名前空間はサブルーチンを使ってて、サブルーチン名はダブルクウォート内で展開されないってこと。
009391NGNG
>>92
あ、なるほど。
ダブルクウォートで囲むのはいつも最小限にしてるので、勝手に読み替えちゃってました。
ありがとうございました。
0094デフォルトの名無しさんNGNG
○厨房注意報。
474 :login:Penguin :04/06/02 22:07 ID:TlXNt6aW
駱駝本はジャンプ一週間分程度

476 :login:Penguin :04/06/03 16:40 ID:rUJxlzG4
駱駝本<<<<スーパーテキスト類

479 :login:Penguin :04/06/03 17:09 ID:rUJxlzG4
駱駝本も分かりにくさっつーか余分な文の多さでは同レベ


http://pc5.2ch.net/test/read.cgi/linux/1079263303/l50
0095デフォルトの名無しさんNGNG
今まで Perl 5.005 までしかいじったことがなくて、
初めて Perl 5.8 をいじったら、UTF-8 の出力で怒られたりする羽目に陥りました。

こういった 5.8 あたりからの非互換性にまつわる注意点などがまとまった
サイトやドキュメントでおすすめはありますか?
0096デフォルトの名無しさんNGNG
>>95
perldelta
0097デフォルトの名無しさんNGNG
>>96
うぅ、すいません、もしかしてマイナーバージョンまで言うべきだったでしょうか。
私の使っている Perl 5.8.4 で perldoc perldelta したら、
5.8.3 との差分しか記述されてないのですが、
できれば、5.005 から 5.8.4 での差分が説明されているとありがたいです。
特に encoding 周りの変更点が知りたいです。
0098デフォルトの名無しさんNGNG
あ、余談ですが、 delta って何かと思ったんですが、微分のことですかね?
0099デフォルトの名無しさんNGNG
差分
0100デフォルトの名無しさんNGNG
増分じゃね?
0101デフォルトの名無しさんNGNG
変化率じゃなかった?
+であれ−であれ
0102デフォルトの名無しさんNGNG
5.5 -> 5.6 -> 5.8
http://www.perldoc.com/perl5.6/pod/perldelta.html
http://perldoc.jp/docs/perl/5.8.0/perldelta.pod
0103デフォルトの名無しさんNGNG
>>97 >>102
補足。http://perldoc.com/perl5.8.4/pod/perl.html#Miscellaneous
0104デフォルトの名無しさんNGNG
定数を宣言するだけなら use constant したらどうだろ。
見た目にもわかりやすい。
結局は >88 みたいに実装されてるみたいだけど。
0105デフォルトの名無しさんNGNG
文字列中の全ての\を\\に置換する式を教えてください!
0106デフォルトの名無しさんNGNG
s/\\/\\\\/g;
だろ?
0107デフォルトの名無しさんNGNG
Perlのcall-by-nameについて解説してるドキュメントはありますか?
ラクダ本のハッシュについて書かれている2.3.5のところのサンプルコードの
意味がよく分りません。
0108デフォルトの名無しさんNGNG
>>102, >>103
ありがとうございます。参考になります。
0109デフォルトの名無しさんNGNG
>>107
オレのラクダ本(3版の日本語訳)には2.3.5は存在しないのだが、
何版?
0110デフォルトの名無しさんNGNG
オレの第2版にはある。
0111デフォルトの名無しさんNGNG
>>109
2版のP57です。

また、複雑な関数を起動する際に、
名前呼び(call-by-name)のパラメータを渡すのにも使える:
$field = $query->$radio_group(
NAME => 'group_name',
VALUES => ['eenie','meenie','minie'],
DEFAULT => 'meenie',
LINEBREAK => 'true',
LABELS => \%labels,
);

というコードがあるんですが、これの意味がよく分りません。
0112デフォルトの名無しさんNGNG
>>111

hoge( foo => 1, bar => 2);

sub hoge(){
 my %hash = @_;
 my $foo = $hash{'foo'};
 my $bar = $hash{'bar'};
 ....
}

いったんハッシュに入れてから要素を取り出すので引数の順番を考慮しなくていいし
順序とは関係なく指定しない事も可能

0113デフォルトの名無しさんNGNG
=> は , の同義語。ただ引数を列挙してるだけ

それとも -> やら [ ] やら \% が分らないのだろうか?
0114デフォルトの名無しさんNGNG
>sub hoge(){
> my %hash = @_;
なるほど。そういうことですか。ありがとうございます。
0115デフォルトの名無しさんNGNG
>>113 激しくはずしてるな
0116デフォルトの名無しさんNGNG
ついでですが、「名前呼び(call-by-name)」ってプログラミング
言語関係では別のことを表す用語なので、3版の2.9ハッシュ
では「名前付きのパラメータを〜」っていう風に修正されて
ますね。
0117113NGNG
いやいや、「列挙してるだけ」って言えば”名前呼び(call-by-name)のパラメータを渡すのにも使える”
という一文に惑わされるこのもないだろうと思ってね



( ´゚,_」゚)ヒッシダナ
0118デフォルトの名無しさんNGNG
package HOGE;
sub new {
shift;
local *GLOB;
$GLOB = 'hogehoge';
bless \*GLOB;
}
package main;
my $hoge = new HOGE;
local *HOG = *$hoge;
print $HOG;

のように型グロブのリファレンスをblessしましたが、$GLOBに入れた'hogehoge'を取り出す事が出来ません。
sub new の中の local *GLOB を消すとうまく取り出せますがオブジェクトHOGEを2つ以上用意できない気がします。
(用意できないかどうかは試していません。)

また、他に終了時に必ず実行してほしい sub DESTROY を用意してありますが、

package HOGE;
sub DESTROY {
warn "DESTROY!!"
#とりあえずまだこれだけ。
}
my $hogehoge -> new HOGE;
# ...
$hogehoge->DESTROY;
exit;

のように終了直前にちゃんと呼び出してあげないと実行してくれません。
sub DESTROY は用意しておくだけでは自動で実行してくれないのでしょうか?
また sub DESTROY はどのような時に自動で実行されるのでしょうか?
0119デフォルトの名無しさんNGNG
>>118
上:しらね
下:newサブルーチンの中身見せれ
0120デフォルトの名無しさんNGNG
gensym?
0121118NGNG
>>119
newは>>118に書いた sub new です。

>>120
やっぱり、他とバッティングしないような文字列を毎回作るようにしないとだめですか?
0122デフォルトの名無しさんNGNG
>>118
localって今のグローバル変数の値をよろしく
どこぞに退避して値を代入しなおし、あとで
ブロックを抜けるときに自動的にもとに戻す
ようなものだから、あとで$HOGをアクセス
したときには元に戻っているんではないだろ
うか?

package main;の次に$HOGE::GLOB="HOGEHOGE";
と加えるとHOGEHOGEがprintされるよね。
0123デフォルトの名無しさんNGNG
>>118
後半はGLOB自体が消滅することはないのでDESTROY呼ばれる
こともないとかそういうオチのような気がします。
0124デフォルトの名無しさんNGNG
そもそも>>118は何がしたいんだろう
0125118NGNG
>>124
型グロブをオブジェクトとすればインスタンス変数?として
スカラーも配列もハッシュも使えるかなと思ったんですけど、
型グロブのリファレンスをデリファレンスして別の型グロブに代入しても
スカラーと配列とハッシュまで(リファレンスを)同じにしてくれるわけではないんですね。
欲張ってもPerlはそうは卸さないということで、オブジェクトは素直にハッシュか配列かスカラーのリファレンスから作ります。
>>119-124の答えてくださった皆さんどうもありがとうございました。
0126デフォルトの名無しさんNGNG
似たことしてるIO::Handleから。

sub new {
my $class = ref($_[0]) || $_[0] || "IO::Handle";
@_ == 1 or croak "usage: new $class";
my $io = gensym;
bless $io, $class;
}

コレが正解。
0127デフォルトの名無しさんNGNG
うん?

package Foo;
sub new {
my $class = shift;
my($arg) = @_;
bless \$arg, $class;
}

package main;
my $foo = Foo->new(\"foo");
my $bar = Foo->new(["bar"]);
my $baz = Foo->new({foo => "bar"};

__END__

みたいなことがしたいの?

0128デフォルトの名無しさんNGNG
駱駝本読み終わるのに何日掛かりましたか・・・?
0129デフォルトの名無しさんNGNG
単にフンフンと言いつつ読むだけなら、
寝ながら読んだりしてたし直ぐ終わった記憶があるけど。

全部を理解し終えるにはって意味なら、
何日とは言わず何ヶ月も掛かったなあ自分は……。

#とはいえまだ理解し切ってるわけでは無い
0130デフォルトの名無しさんNGNG
ラクダ本にちょこちょこ埋め込まれてるUNIX的な知識を
ちゃんと理解しようと思うと大変。
あとPerlはUNIX的なツールから沢山影響受けてるから
本当はそれらもある程度理解しないと、Perlの良さも分らないポ。
ソースコード読んで理解するまえに、やることは沢山あるぽ。
0131未承諾広告※ ◆TWARamEjuA NGNG
少々お知恵を拝借したくて。。。

FreeBSD5.2.1(ia64) にて、 Socket には AF_INET は未定義になっているのでしょうか?
といいますのも、
connect HTTP, pack 'S n a4 x8', AF_INET, $port, $inad or die "ERROR! at connect:$!\n";
という文を実行してみたところ、
ERROR! at connect:Address family not supported by protocol family
と返ってきたものでして。

FreeBSD5.2.1(i386) および、 VineLinux 2.6(i686) [ともに自宅鯖]では上記の鰓はでませんでした。
FreeBSD5.2.1(ia64) へはログインできる権限がないので詳細がわからないものでして。

何か情報や文献などのリンクがありましたらお教えいただけるとありがたいです。

ちなみに前述の文を、
connect HTTP, pack_sockaddr_in($port, $inad) or die "ERROR! at connect:$!\n";
に変更することで die しなくなりました。(正常動作)
0132デフォルトの名無しさんNGNG
perl用の定数定義は perlが入ってる下にある *.ph にあると思うけど、どうよ?
あれはperlインストール時にシステムのinclude/*.h から生成されるもんだが、
portsな世界だと何かあるのかもしれん。
013381NGNG
やあみんな (´・ω・`) 今日もゴキゲンなお酒でキメてるかい?
hard な stuff はだめだ。大事な脳細胞が壊れちゃうよ!
肝細胞は,殺しても殺しても復活するけどね。ha-ha-ha!

>>82
Thanks! 正規表現より,index の方が速度を期待できるね。
応用のきく頭脳を持つなんて,うらやましくも,素晴らしい事だ。
「素晴らしい」以外の賛辞を知らない僕を煽ってくれてもいい程さ。

レスが遅くなって悪いね。言い訳はしないよ (´・ω・`)ノ∀
0134デフォルトの名無しさんNGNG
Winでスクリプト(plファイル)をダブルクリック等で起動すると、
カレントディレクトリが上手く取れずに困っています。

例えば opendir() で '.' を開くとスクリプトがあるディレクトリになりますが、
open() で './' を開くとルートディレクトリ(C:\)になってしまいます。

スクリプト自身が存在する場所を常にカレントとするにはどうすれば良いのでしょうか。
スクリプトの場所を動かすたびに chdir() の引数を書き直すのは面倒ですし……。
0135デフォルトの名無しさんNGNG
>>134
open でディレクトリ開いて何がしたいんだ?
0136デフォルトの名無しさんNGNG
>>131
'S n a4 x8'を'S! n a4 x8'にしたらどうなります?

↓これ動かしてもらえると嬉しいです。
use Config;
foreach(qw(shortsize intsize longsize longlongsize)){
print "$_ = $Config{$_} \n";
}
0137デフォルトの名無しさんNGNG
>134 File::Spec や Cwd::abs_path() を利用するかソースから目的の部分を拾ってくるといい
0138デフォルトの名無しさんNGNG
>>134 これでどうかな
chdir (($0 =~ /(.*)\\[^\\]+$/)[0]);

open opendir 限らず、スタートメニューとかのランチャーでplファイルを指定して
実行させたらカレントが変なところになるなー
0139デフォルトの名無しさんNGNG
>>131sa
AF_INETが未定義かどうかを疑っているのなら、そんな複雑な
操作じゃなくて素直にprint AF_INETとかした方がはっきりする
と思うがな。

とはいえ、いまどきはpack_sockaddr_inとか使う方がいいと
思われ。古い本には'S n a4 x8'でpackする例しか書いてない
んだけど、sockaddr_inが必ずしもそうなってないOSもあるし。
たとえばlinuxでは最初のフィールドはunsigned short intの
sa_familyなのでSで妥当だけれども、FreeBSDではその部分は
unsignd charのsa_lenとunsigned charのsa_familyなので全然
違う。

それでも昔はそこら辺の値はノーチェックだったのでなんと
なく動いてたんだけど、IPv6が入った頃にsa_familyを見る
ようになって問題が表面化したんだよな。


0140未承諾広告※ ◆TWARamEjuA NGNG
>>132
>>136
>>139
いろいろな情報、ほんにありがとうです。m(_ _)m
当方でひとつひとつ確証するのが一番の解決策なのですがなかなかそうはいかないものでして(苦笑)
また機会があればみなさん情報を元にいろいろとやってみますです。
0141136NGNG
あ、FreeBSDは'xCna4x8'でしたね。
# あれ、FreeBSD5.2(i386)で'Sna4x8'使って動かなかった記憶が。。

AF_INET定数を使えるということは、use Socket;できてるということなので、
pack_sockaddr_in()使うのが妥当でしょうね。
0142デフォルトの名無しさんNGNG
駱駝本の3.1の、
「リスト演算子は、演算子の左右どちら側に注目するかによって(以下略)」
この、��演算子の左右�≠チて何ですか?
意味和漢ネ。
0143デフォルトの名無しさんNGNG
今日、ftp.cpan.jpが死んでるっぽいですが、お前ら使えていますか?
0144デフォルトの名無しさんNGNG
>>142
3版持ってねぇ
以下略が気になる

0145デフォルトの名無しさんNGNG
>>142
文字通り、演算子の左側と右側の事だが。

まぁ誰でも直感的に分かる事を言葉で説明しようとして
ややこしい言い回しになってるだけだから、それ以降の
例が理解できればこだわる必要の無い文だよ。

>>144
2版 (改訂版) では 2.5.1 。
http://www.oreilly.co.jp/BOOK/pperl3v1/contents.htm
perldoc だと perlop 。
http://perldoc.com/perl5.8.4/pod/perlop.html#Terms-and-List-Operators-(Leftward)
0146デフォルトの名無しさんNGNG
>>144
赤ラクダだと 3.2.1
0147デフォルトの名無しさんNGNG
for (my $i = 0; $i < 10; $i++){
    sleep 1;
    print " i = $i\n";
}

こんなのを実行すると、

 i = 0
 i = 1
 i = 2
 i = 3
 i = 4
 i = 5
 i = 6
 i = 7
 i = 8
 i = 9

 こんなふうに10行出力されますが、これを1行で "i =" のところは
 変わらずに、数字のとこだけ変わっていくというような表示をさせたいのですが、
 (topコマンドを実行したときのCPU statesの数値だけがリアルタイムで変化してくような感じ)
 端末をクリアしてまたprintして、というのは無しで
 どのようにしたらよいのでしょうか?
0148デフォルトの名無しさんNGNG
>>147
プラットフォーム依存だが

$| = 0; # STDOUT へのバッファリング停止(いらんかも)

print "i = $i\r"; # \r(0x0D)は、UnixでもWinでも、復帰

を試してみれ。念のためゆーとくが、sleep(1)と挿入したことで
ぴったり秒数を数えてるのではなく、計時誤差が微量に出ることは
納得できるな?

これでうまく逝かなかったら、プラットフォームを書け。

ちなみに top は、ncurses とか使ってたハズ。
0149デフォルトの名無しさんNGNG
for (my $i = 0; $i < 10; $i++){
sleep 1;
print "\x1b[A" if $i;
print " i = $i\n";
}
0150147NGNG
>>148, 149

レスありがとうございます。
148さんのではできませんでした。FreeBSD 4.10です。
Curses.pmでも使おうかなと思っていたら、
149さんので思ったとおりにできました。& "\x1b"でググってみると
いろいろと面白い事がわかりました。感謝です。
0151デフォルトの名無しさんNGNG
>>135
いえ、./ は例えで、要は readdir() だとカレントがスクリプトのある位置を基準とできるのに、
open() だと(自分には)出来ないからどうしたら良いのかという話でした。

>>137-138
ありがとうございます、後程やってみます。
0152デフォルトの名無しさんNGNG
>for (my $i = 0; $i < 10; $i++){
perlなら
for (0..9)
とした方が分り易いんですがこれだと何か問題あるんでしょうか。
0153デフォルトの名無しさんNGNG
問題があるわけでなく知らないだけかと。
0154デフォルトの名無しさんNGNG
ゲンミツに言えば上限が式でループ中に値が変化するときなどは
違いがあるわけだが、

% perl -e '@a=(1,2); for $i (0..$#a) { print $i, "\n"; $a[2] = 1;}'
0
1
% perl -e '@a=(1,2); for ($i = 0; $i<= $#a; $i++) { print $i, "\n"; $a[2] = 1;}'
0
1
2

行儀悪いので良い子は真似しないほうがいいと思うよ。
0155デフォルトの名無しさんNGNG
メール配信についてアドバイスをお願いします。

400人くらいの会員にメールを1週間おきに配信したいのですが
CCで送信するのと、400回繰り返し送信するのとはサーバーに
かかる負荷は違うのでしょうか?それとも同じでしょうか?

データファイルから順々に送信するCGIをつくりまして
サーバに負荷をあまりかけないようにするため100人終わったら、
また100人、のように送信していたのですが、もしCCで負荷が
少なくて済むならなと思いまして。
よろしくお願いします。
0156155NGNG
すみません、>>155はCGIについての質問ですよね。
すみません、該当スレを探してきますのでご容赦下さい。
0157デフォルトの名無しさんNGNG
-----------------------------------------------------------------------

↓Perlの質問をどうぞ。
0158デフォルトの名無しさんNGNG
>>155
CCよりはBCC
何かとうるさい世の中だしな
0159デフォルトの名無しさんNGNG
>>158
Bccよりは個別To


世知辛い世の中になったものだ
0160デフォルトの名無しさんNGNG
3 x nのデータをファイルに保存したいです。
その場合、
(a1,b1,c1)
(a2,b2,c2)
(a3,b3,c3)
と保存して
while(<FH>){my @a;eval{@a=$_};...
するのと
a1,b1,c1
a2,b2,c2
a3,b3,c3
と保存して
while(<FH>){my @a=split ',';...
とするのでは、どっちが一般的な処理方法だと思われますか?
0161デフォルトの名無しさんNGNG
>>160
ふつーsplitだろ
0162デフォルトの名無しさんNGNG
>>161
なるほど。そうですか。
while(<FH>){my @a=eval($_);...
あと上のプログラムはこうでしたね。。。
0163デフォルトの名無しさんNGNG
>>160

#--- data.txt ---
[
  [ 'a1', 'b1', 'c1' ],
  [ 'a2', 'b2', 'c2' ],
  [ 'a3', 'b3', 'c3' ],
];

#--- script ---
my $array = do './data.txt';
print $array->[1][2]; # c2
0164デフォルトの名無しさんNGNG
「保存する」ならStorableってーのもアリかな。。。
0165デフォルトの名無しさんNGNG
perlからしか読み書きしないつもりならそれもアリかな。
0166デフォルトの名無しさんNGNG
むしろLispから読み書きできるように、トークンはスペースにしておこう。
0167デフォルトの名無しさんNGNG
言語非依存にするなら YAML とか。
0168デフォルトの名無しさんNGNG
既にM$の変換規則で変換されたunicodeのファイルを読んで処理したい
んだけど送り出す先のSOAPインタフェースがJISな変換規則のunicode
を期待しています。こういう場合の変換に使えるよさげなライブラリってある?
0169デフォルトの名無しさんNGNG
しょぼい質問ですみません。
ある変数にあるファイルの内容全体を格納するのにはどうするのがいいでしょうか?
定石というか定番イディオムみたいのがあるでしょうか?
私は今こうしています。
open(FILE, "hoge.dat");
my $data = join('', <FILE>);
close(FILE);
0170デフォルトの名無しさんNGNG
>>169
それでもいいし以下のようにもできる。

{
  local $/ = undef;
  my $data = <FILE>;
}

read FILE, my $data, -s $file;
0171デフォルトの名無しさんNGNG
>>170
readって必ずその長さまで読んでくれることは保証されるんでしょうか?
なんとなく不安なのでついこんな感じにしちゃうのですけど。

my $data;
my $r;
while ($r = read FILE, $data, 適当に大きな数, length($data)) {}
defined $r or die "error reading FILE: $!";
0172デフォルトの名無しさんNGNG
ん?だから -s $file してるんじゃねの?
0173デフォルトの名無しさんNGNG
Active Perlをインストールしようとすると

There is a problem with this Windows Installer package. A program run as part of the setup did not finish as expected. Contact your support personnel or package vendor.

と表示されてしまい、インストールできないのですが何が原因なのかわかる方いらっしゃいますでしょうか?
0174デフォルトの名無しさんNGNG
>>173
MSインストーラが入ってないんじゃないだろうか
0175デフォルトの名無しさんNGNG
最近購入したばかりのパソコンなんですけど…

その可能性大でしょうか?
0176デフォルトの名無しさんNGNG
>>175
ダウンロードし直してやってみる。
0177デフォルトの名無しさんNGNG
16進数の場合、
print "\xFF";
って感じで逝けるんですが、二進数の場合どうすればいいでしょう?
0178デフォルトの名無しさんNGNG
>>177
0b11111111
0179デフォルトの名無しさんNGNG
print "\1";
ってどういう意味なのですか??
0180デフォルトの名無しさんNGNG
>>179
\[1-9] は後方参照。
その使い方って正しいのか・・・?
表示されるのか?
1が表示されるだけ違うのか?
普通は、$1じゃないのか・・・?
よくわかんねーや。
0181デフォルトの名無しさんNGNG
>>175
OSの種類くらい書けよ、アホかおめー
0182デフォルトの名無しさんNGNG
>>179
\001 と同意
0183169NGNG
>>170
ありがとうございます。
Ruby の read だと、長さ指定しないと全部読むんですが、そゆのないんですかね。
-s $file でサイズ取得は思いつきませんでした。なるほど。
ただ、 DATA を read する場合とかには使えないのがちょっと惜しい・・・
0184デフォルトの名無しさんNGNG
>>183
↓>>170のこれは無視か

{
  local $/ = undef;
  my $data = <FILE>;
}
0185デフォルトの名無しさんNGNG
理解できないのは虫、これ世の常
0186デフォルトの名無しさんNGNG
いま必死で $/ 勉強しているヨカン
0187デフォルトの名無しさんNGNG
$/の項を久しぶりに読み直したら、整数のリファレンスいれると
そのサイズずつ読むなんてこともできるのね。知らんかった...
0188169NGNG
>>184
いえ、無視じゃないです。
ただ、 $/ みたいな状態を変更するような特殊変数を設定し直さないといけないのは、
いまいちスマートじゃないような気がしなくもないかな、と思わなくもないかな、と。
Perl ではこういうのが定石なのであれば、郷に従うのもやぶさかではありませんけど。
0189デフォルトの名無しさんNGNG
無視、、無視してたよ!
0190デフォルトの名無しさんNGNG
>>188
"There's more than one way to do it"だから好きな方でいいと思う。
オレはいちいち長さ調べなくていい$/の方が好きだけどな。
0191デフォルトの名無しさんNGNG
ちなみに170の書き方はラクダ本の$/の説明に使われてる。
ごく一般的な使い方。
0192デフォルトの名無しさんNGNG
>>183
まぁ同じ事だが。

sub MY_DATA_SIZE() {
  open MYSELF, '<' . $0 or die $!;
  binmode MYSELF;
  local $/ = "__DATA_\x5F\x0D\x0A"; # 適宜変更
  <MYSELF>;
  (-s MYSELF) - tell MYSELF;
}

read DATA, my $data, MY_DATA_SIZE;
0193デフォルトの名無しさんNGNG
>>188
>ただ、 $/ みたいな状態を変更するような特殊変数を設定し直さないといけないのは、
そのための local なんだがな・・・
0194デフォルトの名無しさんNGNG
myじゃだめなの?
0195179じゃないですがNGNG
\001 ってどういう意味ですか??
0196デフォルトの名無しさんNGNG
$awk '{print $1}' filename
みたいなのをPerlでやるとどうなりますか?
$perl -e 'while(<>){print +(split " ")[0]."\n"}' /etc/services
これより簡単な方法があれば教えてください。
0197デフォルトの名無しさんNGNG
>>194
http://www.kt.rim.or.jp/%7ekbk/perl5.005/perlfaq7.html#What_s_the_difference_between_dy

>>195
http://perldoc.com/perl5.8.4/pod/perlop.html#Quote-and-Quote-like-Operators
0198デフォルトの名無しさんNGNG
>>197
いやいや、そういうことじゃなくて、
どうして特殊変数を上の例のようにmyとして
設定できないのかということ。
0199デフォルトの名無しさんNGNG
>>196
http://perldoc.com/perl5.8.4/pod/perlrun.html

perl -ane 'print "$F[0]\n"' /etc/services
0200169NGNG
>>193
もちろんそうなのですけれども、
あるスコープ内だけだとしても状態を変更して云々しないといけない
というのが心情的に気持ち悪いと感じました。
けれど、 >>191 さんの言われるように、Perl では特殊なことではないようですので、
そういうものだと思うことにします。

>>192
な、なるほど・・・
0201デフォルトの名無しさんNGNG
>>198
http://search.cpan.org/~rgarcia/perl-5.9.1/pod/perl591delta.pod
Lexical $_
0202デフォルトの名無しさんNGNG
>>198
>>197 の解説にある通り、(原則) my は変数を局所化する
ものではない。局所的な変数を宣言(作成)するものだ。
0203デフォルトの名無しさんNGNG
/[^\0]/;
意味和姦ね.
ヘルプ
0204デフォルトの名無しさんNGNG
\000 にマッチしない
0205デフォルトの名無しさんNGNG
>>204
ネタ?
0206デフォルトの名無しさんNGNG
おまえら、Perl6の本がリニューアルしてますよ。
http://www.oreilly.com/catalog/059600737X/
0207デフォルトの名無しさんNGNG
\0はヌル文字、つまり[^\0]はヌル文字以外とマッチ。
1以上の場合は後方参照のそれだけど。
ラクダ本のパターンマッチの章をよく読んでね。
0208デフォルトの名無しさんNGNG
ところで質問です。Perlのソースコードについて解説してある
サイトなどはないでしょうか?あれば教えてください。
割と綺麗に書かれているので、なくてもそれ程困りませんが。。。
0209デフォルトの名無しさんNGNG
perl で gzip 圧縮したファイルはどう見るんですか?

while(<*.gz>){
print;
}

とかだと中身が見えるんですが、

open FILE 圧縮ファイル名;
while(<FILE>){
print;
}


で見ようとすると化け化けになっちゃうんですぅぅ。
0210デフォルトの名無しさんNGNG
>とかだと中身が見えるんですが、
見えないけど

今日のおさらいじゃないけど、これじゃダメなの?
$file=`zcat finename`
0211デフォルトの名無しさんNGNG
>見えないけど

あれぇ? また、確認してみます。

>今日のおさらいじゃないけど、これじゃダメなの?
>$file=`zcat finename

今日のことはわからないけど、今は基本的にはおんなじこと
してます。ただ、私は Windows+cygwin 環境なんだけど、zcat
使えない場合も想定しなきゃだめになっちゃって困ってるんです…
0212デフォルトの名無しさんNGNG
よく読んでないけど、これとか使えるんじゃン?
http://chaichan.hp.infoseek.co.jp/qa1500/qa1886.htm
0213デフォルトの名無しさんNGNG
現在プログラム板にはHSP関連スレに凶悪な荒らしどもが住みついています。

・HSPに関係の無い話題でスレッドを上げまくる
・HSPオフィシャルサイトの住人を名指しで誹謗中傷する
・重複スレを乱立させる

などの荒らし行為を行っています。
みんなで団結してム板のゴミどもを追い出しませんか?

【HSP関連スレ】
【皆のレイプ魔】HSP初質P25【WWEヲタ=ハゲ】
http://pc5.2ch.net/test/read.cgi/tech/1086878505/
HSP>>>>>>>>>>>>>C=糞w
http://pc5.2ch.net/test/read.cgi/tech/1071899663/
今日もどこかでHSP初心者が質問ですP19
http://pc5.2ch.net/test/read.cgi/tech/1084089079/
HSPについて
http://pc5.2ch.net/test/read.cgi/tech/1085149790/
0214デフォルトの名無しさんNGNG
Compress::ZlibはActivePerlに標準で入ってるはずだから、
それを使えば?

0215デフォルトの名無しさんNGNG
>>201
devel.tar.gz(5.9.1)をビルドしてみました。
http://www.ring.gr.jp/archives/lang/perl/CPAN/src/perl-5.9.1.tar.gz
確かに'my $_'と出来ます。
他の特殊変数はPerlの「環境」に属するものなだけに、
むしろこの$_のように使えないことの方が正しいような気もしました。

>>202
「変数の局所化」と「局所的な変数を宣言」の違いとは何でしょうか?
myによるローカル変数はシンボルという点から見れば、
localによる変数(つまりグローバルな変数)と違い、名前空間に属してない。
$perl -e 'package p;$a;my $b;while(my($k,$v)=each %main::p::){print "$k,$v\n"}'

でもシンボルの指示対象としてのメモリ領域は同じ機構で管理されてるようにも見える。
$perl -e 'print ${&{sub{my $a="a\n";return \$a}}}'

myとlocalの違いをちゃんと理解するのは結構難しいですね。
0216209NGNG
>212,214
ありがとう! また、月曜にガッコで試してみま〜す。
0217デフォルトの名無しさんNGNG
>215
いわゆるリファレンスを通じて参照するのと変数スコープを通じて利用(参照)するのは内部的には同じこと。
データの実体はそのような参照カウントが0になった時に削除される。

つまり
sub a{
my $a = "hoge"; # "hoge"の参照カウントは1
return \$a; # カウントが増える
} # ここで$aのスコープは終わりなのでカウントは減る。my変数$aは消えるが "hoge" は消えない

$b = a(); # ここで "hoge" の参照カウントは1 になる

0218デフォルトの名無しさんNGNG
あとこの場合my変数がlocalでも実際何も変わらない。
local変数のスコープの終わりで参照カウントが1減るだけ。
0219デフォルトの名無しさんNGNG
>>215
myは新しく変数を作って有効範囲の中ではそっちを
アクセスする。元の変数はそのまま残ってるので
package名をつければアクセスできる。

localはシンボルテーブルがもっている変数の領域
へのリファレンスを退避して新しい領域を割り当てる。
ブロックを抜けるときに元に戻す。

以下のプログラムのmyとlocalを入れ替えて
実行するとわかりやすいかも?

$x = 1;
print \$x, "\n";
{
my $x = 2;
print \$x, "\n";
print \$::x, "\n";
}
print \$x, "\n";
0220デフォルトの名無しさんNGNG
>>217-218,>>219さん。どうもありがとうございます。
頂いたレスを元に自分なりに考えてみたのですが、
「局所」というものをブロック,eval,do,subなどのコード領域を意味するとして、

local(グローバル)変数の場合
コンパイル時には全ての変数をシンボルテーブルの頭から辿る中間コードを生成。
実行時
・局所に入る。
・local関数は新しい変数用と古いシンボルテーブルエントリ用のメモリ領域を作成し、
 シンボルテーブルの該当箇所の アドレス値を新たなメモリ領域を指すように書き換え
・・・・・
・シンボルテーブルエントリを対比しておいた古い値のアドレス値に書き換え。
・GC発動(local指定された変数と待避用アドレス値の領域が参照カウント数に応じて
 ----おそらく----削除される)
・局所抜ける

my変数の場合
コンパイル時には局所専用シンボルテーブルのエントリを参照する中間コードを生成。
実行時
・局所に入る。
・my関数は新しいメモリ領域を作成し、局所専用シンボルテーブルの該当エントリに
 そのアドレスを書き込む
・GC発動(local指定された変数と待避用アドレス値の領域が参照カウント数に応じて
 削除される)
・局所抜ける
(局所専用シンボルテーブルはどの段階で作成されるのかという問題はあるけど)

概要はこんな感じでしょうか。
ちゃんとした理解には程遠いとは思いますが。。。
0221デフォルトの名無しさんNGNG
ああ、急いで書いたらめちゃくちゃな文章だ。
もう少し調べてからまた書きます。
0222デフォルトの名無しさんNGNG
>221
「実用Perlプログラミング」読め。話はそれからだ

GCと参照カウントは異なるものなので混ぜるな危険。
0223デフォルトの名無しさんNGNG
質問します

1.
ショッピングサイトを立ち上げているのですが、”決済する” のボタンを押すと、カード会社のサイトにジャンプし
、そのサイトで情報入力を行い、その戻りを受けてユーザに完了画面を出力しようと思います。

2.
こちらから、form post で、カード会社のCGIを呼び出し、カード情報入力画面をだします。
そのCGIは結果を success 又は ng でこちらに返してくるのですが、このままのつくりだと、
ユーザにカード情報入力後の画面に success , 又はngと ぽつんと表示され訳がわからない状態となります

3.
そこで、 form post属性で他のcgiを呼び出し、その結果を受けて、”xxxx円 決済が完了しました ありがとうございます
トップに戻る” と出したいのです。form post で呼び出したcgiの結果を判定する方法がわからないので、教えて下さい。
0224デフォルトの名無しさんNGNG
>223
WebProg板いけ。結果のHTMLに詳細書いてるんならHTTP::Responseの$->content読めばいい。
0225デフォルトの名無しさんNGNG
>>224
Perl コーディング初心者質問コーナー Part35
http://pc5.2ch.net/test/read.cgi/php/1085557731/310

310 名前:nobodyさん[] 投稿日:04/06/12 13:33 ID:FD8KxqwO
質問します
(ry
0226デフォルトの名無しさんNGNG
>>223 板違い。
ていうかマルチかよ。
0227デフォルトの名無しさんNGNG
>>224

とりあえず、サンクスこ
0228デフォルトの名無しさんNGNG
>>220
そんなメモリだGCだって深刻に考えなくてもいいんじゃ?
local は既存のシンボルテーブルの値を退避させて新しい値に入れ替える
my はそのスコープ内だけでアクセスできる”無名シンボルテーブル”と言えるようなシンボルテーブルを作成して変数を作る

俺はこう捉えてるけど誤解してるかなぁ?
0229デフォルトの名無しさんNGNG
Perlのオブジェクトって重いって聞いた。
あまりオブジェクト乱用して作っちゃマズイ?
0230デフォルトの名無しさんNGNG
オブジェクトだから遅いのではなく>>229が書いたから遅いのさ。
ってことで好きなようにしてください。
0231デフォルトの名無しさんNGNG
>>230
いや、まだ書いてもないし。

ココで前に見た覚えがあるんだよね。
Perlのオブジェクトは重いって。
ほとんどのルーチンをオブジェクトに書き換えようかと考えてんだけど・・・
実際の所、どうなの?
0232デフォルトの名無しさんNGNG
>>231
そりゃ、生でダラダラ書くよりゃ遅いさ
ぐだぐだ言わずにまずBench
0233デフォルトの名無しさんNGNG
SYSLOGにアウトオブメモリーが大量に記録されるのでいろいろ調べてみたんだが
どうやらユーザーのperlスクリプトが原因っぽいというところまでは判明
ところが私はperlにあんまり詳しくないのでどこから手をつけていいか困っています
perlでこれをやるとメモリー資源を食いつぶすっていうような代表格みたいなのってありますか?

0234デフォルトの名無しさんNGNG
>>233
巨大ファイルを開いて一気に配列に読み込むとか。
0235デフォルトの名無しさんNGNG
再帰関数が無限ループとかはどうでしょうか?
0236デフォルトの名無しさんNGNG
>>233
% perl -e 'while (1) { fork; }'
0237デフォルトの名無しさんNGNG
おもしろいつもりなのかな
0238デフォルトの名無しさんNGNG
相当受けたようだな
0239デフォルトの名無しさんNGNG
>>233
perlの前にまずユーザに警告するべきでは?
0240デフォルトの名無しさんNGNG
ども、調査続行中です
データーの類に巨大なものが無いので配列の線は無いっぽいです
その後わかったことは数十分かけて使用メモリーが少しづつ増えていって使い切ったところで自殺(自滅?)してるようです
無限ループが絡んでる線が濃厚でしょうかね?
警告というほどの大げさなことはしてませんが単純なバグなら直してもらえばすむので
連絡中ですご心配ありがとです
0241デフォルトの名無しさんNGNG
数十分。。。
0242デフォルトの名無しさんNGNG
デーモンなんじゃない?
0243デフォルトの名無しさんNGNG
大喰らいなでーもんだな(w
0244デフォルトの名無しさんNGNG
漢数字をテキストで表示するカウンターにしたいんですが、
変換がどうもうまくいきません。
2345人が万二千三百四十五人と出てしまいます。
sub kansuji{
my($number) = $_[0];
my($return) = '';
my(@suji) = ("","一","二","三","四","五","六","七","八","九");
my(@keta) = ("","十\","百","千");
my(@oketa) = ("万","億","兆");
my(@nums) = split(//,$number);
@nums = reverse (@nums);
my($r) = @nums % 4;
my($limit) = int(@nums / 4);
for($j = 0; $j \= $limit; $j++){
my($ceiling) = $j == $limit ? $r :4 ;
for($i = 0; $i < $ceiling ; $i++){
my($f) = ($i != 0 && $nums[$i+$j*4] == 1) ? "" : $suji[$nums[$i+$j*4]];
$return = join("",$f,$keta[$i],$return) unless($nums[$i+$j*4] == 0);
}
$return = join("",$oketa[$j],$return) unless($j == $limit);
}
return $return;
}
どこが間違っているかご教授願います。
0245デフォルトの名無しさんNGNG
my($r) = @nums % 4;
my($limit) = int(@nums / 4);

たぶんここ。4桁のときは、$r=4,$limit=0になって欲しいのでは
ないだろうか? ということで、

my($r) = @nums % 4 || 4;
my($limit) = int((@nums - 1) / 4);

てとこかな。
0246デフォルトの名無しさんNGNG
>>244
何か気に入らなかった・・・
見た感じ、複雑に見えるし・・・
・・・で、俺も考えて作ってみた。
改行多いって怒られるんで、次につづく・・・
0247デフォルトの名無しさんNGNG
sub kansuji{
  my (
    $number, $count, $ketaCount,
    @suji, @keta, @oketa, @nums, @newNums
  );

  $number = $_[0];
  @suji = ('', '壱', '弐', '参', '四', '伍', '六', '七', '八', '九');
  @keta = ('十\', '百', '千');
  @oketa = ('万','億','兆');
  @nums = split(//,$number);
  @nums = reverse (@nums);

# まだつづく・・・
0248デフォルトの名無しさんNGNG
  $count = 0;
  $ketaCount = 0;
  foreach (@nums) {
    if ($_ == 0) {
      $count++;
    } elsif ($count == 0) {
      push (@newNums, $suji[$_]);
      $count++;
    } elsif ($count < 4) {
      push (@newNums, $keta[($count-1)], $suji[$_]);
      $count++;
    } else {
      push (@newNums, ($oketa[$ketaCount], $suji[$_]));
      $ketaCount++;
      $count = 1;
    }
  }

  @newNums = reverse (@newNums);
  $value = join('', @newNums);
  return $value
}
0249デフォルトの名無しさんNGNG
漢数字は意外にロジックがむずいんだが…。
ググったらこんなん出ました。
http://neko.mimi.gr.jp/~fge/pastime/ideo_digit.html
0250デフォルトの名無しさんNGNG
逆に、漢数字を数値に直すには?
0251デフォルトの名無しさんNGNG
>>250
まず聞くんじゃなく自分で考えろ。
0252デフォルトの名無しさんNGNG
>>251
いや、お題として面白そうだと思ったんでネタ振りのつもりだったんですが・・・

ココはノリが悪そうなのでもういいです
0253デフォルトの名無しさんNGNG
ショ、ションナ!!
0254デフォルトの名無しさんNGNG
LWPでとってきたHTMLファイルがあります。
ファイル中の
<img src="a.jpg">
を絶対パス
<img src="http://..../a.jpg">
にしたいのですが、簡単な方法はありますか?

0255デフォルトの名無しさんNGNG
>>254
getしたURI+src部分=恐らく絶対URI
0256デフォルトの名無しさんNGNG
>>255
絶対パスと相対パスが混在している場合を考慮すべきと思われ
0257デフォルトの名無しさんNGNG
http://か/で始まっていなければ>>255
http://で始まっていればそのまま
/で始まっていればhttp://address:portだけ付け加える
0258デフォルトの名無しさんNGNG
っていうかそのへんを扱うモジュールってなかったっけ。
いま捜してるんだが。HTML::LinkExtorでもないし。
0259デフォルトの名無しさんNGNG
>>257
もちつけw
単純にやるなら
if http://で始まるならそのまま
elsif /で始まるならgetしたURIのhttp://address:port + 相対パス
else 上二つに合わないならgetしたURI+相対パス
0260デフォルトの名無しさんNGNG
getしたURIをhttp://foo.com/abc.htmlとして
リンクがdef.htmlだと
〉 上二つに合わないならgetしたURI+相対パス
だとだめだべ。
http://foo.com/abc.htmldef.html



0261デフォルトの名無しさんNGNG
ごめん
getしたURIの一番最後の/まで+相対パスだね

モジュールも探せばあるんだろうけど別に難しくないし俺は自分でサブルーチン書いたよ
0262258NGNG
モジュールみつからん
絶対車輪の再発明だとおもうんだがなあ
鬱だ師脳

0263デフォルトの名無しさんNGNG
この程度の文字列操作が車輪だって?
0264258NGNG
だってIMG srcのところを抽出したりしなけりゃいけないだろ?
0265デフォルトの名無しさんNGNG
>>259
ああ、もちろんPerlで書くときはそうするw
0266デフォルトの名無しさんNGNG
>>264
それは別の話だろ・・・
つかsrc属性値の抽出はHTML::LinkExtorだけど
おまけにスレ違い
0267258NGNG
書きかたが悪かったかも。

HTML::LinkExtorでsrcを抽出はできるんだが、
img以外のタグはそのまま通さなければいけないだろ?

0268デフォルトの名無しさんNGNG
は?そのままって?
てゆーか君は何がしたいの?
0269デフォルトの名無しさんNGNG
#!/usr/local/bin/perl
use strict;

my (@race_code0, @race_code1, @race_code2, @race_code3);
@race_code0 = ("abc", "def", "ghi");
@race_code1 = ("aaa", "bbb", "ccc");
@race_code2 = ("111", "222", "333");
@race_code3 = ("123", "456", "789");
my @array = (\@race_code0, \@race_code1, \@race_code2, \@race_code3);

print @($array[0]);


こんな感じで参照を配列に格納して格納先から要素数を
取り出したいのですがどうすればいいのでしょうか?
要素数取り出す、スカラーを取り出したい。
0270デフォルトの名無しさんNGNG
>>269
print scalar @($array[0]);
0271デフォルトの名無しさんNGNG
print scalar @$array[0];
0272220NGNG
ソースコードの全体がなんとか掴めたところで、
perly.cのPerl_yyparse()
yynewstate:
・・・
switch (yyn) {
/* contains all the rule actions; auto-generated from perly.y */
#include "perly.act"
}
・・・
goto yynewstate;

から

op.cのPerl_block_startという関数まで辿り付いたけど
何やってるのかよくわからないですね。
my変数用としてどんな処理をしてるのか知りたいだけなんですが。。。
0273デフォルトの名無しさんNGNG
分からないならラクダ本引けよ。
0274デフォルトの名無しさんNGNG
「実用Perlプログラミング」の20章に「Perlの内部構造」ってのがあるから
もしまだなら読むといいと思われ。
0275デフォルトの名無しさんNGNG
具体的な作用ならEffectivePerlにも書いてるけど
どうやら実際的な実装法を知りたいだけか
0276デフォルトの名無しさんNGNG
>>270-271
damopo

#!/usr/local/bin/perl
use strict;

my (@race_code0, @race_code1, @race_code2, @race_code3);
@race_code0 = ("abc", "def", "ghi");
@race_code1 = ("aaa", "bbb", "ccc");
@race_code2 = ("111", "222", "333");
@race_code3 = ("123", "456", "789");

my @array = (\@race_code0, \@race_code1, \@race_code2, \@race_code3);

foreach(@array) {
print "@$_\n";
}


my $test = $array[0];
print "@$test\n\n";

#print scalar @$array[0];

コメント部分のような感じでアクセスするにはどうすればいいのでしょうか?
0277デフォルトの名無しさんNGNG
print scalar @{$array[0]};
0278デフォルトの名無しさんNGNG
>>277

できますた
0279デフォルトの名無しさんNGNG
簡単になんでもできると聞いてパール始めたんですが黒画面に文字がでるようなプログラムしか作れないじゃん。 シーやジャバもそうだった。 つまらん。
0280デフォルトの名無しさんNGNG
>>279
アフォか、吊りか?さあ、どっち
0281デフォルトの名無しさんNGNG
C = そのままじゃGUI無理
Java = GUIできる
Perl = CGIで"GUI"OKだし Perl/tkがある
0282デフォルトの名無しさんNGNG
hoge.txt に m/hoge/ とか適当に正規表現が書いてあったとして、

open IN, "hoge.txt";
while(<IN>){
    chomp;
    push(@seiki, $_);
}

で $seiki[0] に 文字列 'm/hoge/' が入ったとして、
この $seiki[0] を正規表現パターンとして、別の文字列 $string に
マッチするか調べたい場合はどうすればいいのですか?
0283デフォルトの名無しさんNGNG
$string =~ /$seiki[0]/;
0284デフォルトの名無しさんNGNG
perl -e '$string="hoge";$seiki[0]="m/hoge/";if(eval "$string=~$seiki[0]"){print "MATCH"}'
0285デフォルトの名無しさんNGNG
「ー」←これマズイよな?凄くマズイよな?
0286デフォルトの名無しさんNGNG
>>284
eval のとこは "\$string=~$seiki[0]" じゃない?
0287デフォルトの名無しさんNGNG
つーか変数にm/,/まで入れる仕様が糞
おとなしくパターンだけ書いとけ
0288デフォルトの名無しさんNGNG
しかしコンソール画面からの実行ってマジでマンドクセーな。
ボタンひとつで実行でき、かつ自動でブラウザが立ち上がりCGIまで試しに実行できる機能もついた夢のような統合開発環境ふうエディタ、誰か作れ。
0289デフォルトの名無しさんNGNG
>>288
どこが面倒なんだ。
拡張子plだったらダブルクリックでコンソール画面が立ち上がってPerlが起動。
スクリプトが実行される。
# Windowsの場合はな。

後はメニューとか作って数字打てば分岐処理してくれるように作ればいい。
コンソールが面倒とか言うお前は本当に物作るする気力があるのかと小一時間(ry
0290デフォルトの名無しさんNGNG
>>289
コンソールはともかくとしても、CGIの動作確認がボタンひとつでできる疑似サーバ&ブラウザ的な機能は初心者には重宝すると思われ。
0291デフォルトの名無しさんNGNG
Perlを始めよう!とか結構便利な気がするんだが。下のウィンドウがブラウザだったら。。。
0292デフォルトの名無しさんNGNG
>>290
そうゆうの以前作ろうかなと思ってたけど
結局ローカルにApache入れればその方が現実的な環境なんだよなぁ・・・
でもコンソールも使うけどねぇ・・・perl -c とか
0293デフォルトの名無しさんNGNG
いきなりすみません;

二次元配列のメモリの確保のしかたを教えて欲しいんですが…
0294デフォルトの名無しさんNGNG
>>293
いや・・・
メモリとかは勝手にPerlさんが確保してくれる訳だが。
0295デフォルトの名無しさんNGNG
>>294
あー、でも分かるなあ。
昔はメモリにマシン語領域確保してポークとかピークとかアンド演算子使って1ビット単位でメモリを直接いじってたからなあ。なんせ1バイトも無駄にできない時代だったからね。
今のパソコンってそういうのやりにくいよね。
OSの管理から完全に解放され、ユーザがまったく自由に扱えるメモリ空間がほしいときはたまにある。
0296デフォルトの名無しさんNGNG
print "Location:xxxx.cgi?para\n\n";
で、表示されるフレームを target='_top' のようにやる方法を教えてください。
0297デフォルトの名無しさんNGNG
>>295
やりにくいかどうかはべつにして、確保したメモリー内で
自由に1ビット単位で使い倒してもらっていいのだが・・・

0298デフォルトの名無しさんNGNG
>296
WebProg板行け。HTTPヘッダのレベルではそういう解決はない。
呼び出し側のブラウザが決定することだ。
ムリヤリやるなら
CGI呼ぶ→結果のHTMLがjavaScriptで別窓を開く→その結果のHTMLはまたどこかへmeta refresh で飛ぶ
0299デフォルトの名無しさんNGNG
質問です。

MACアドレスを取得したいのですが、どうしたらよろしいでしょうか。

IPアドレスの取得までは分かったのですが。
色々と調べても、MACアドレスについて(特にperl)は資料がなく困っています。

0300デフォルトの名無しさんNGNG
`/sbin/ifconfig eth0` =~ /HWaddr\s+(.*)/; print "$1\n";
0301デフォルトの名無しさんNGNG
読み込むファイル内に変数が書かれていて、
その変数を置き換えたい時はどうすれば良いの?
以下は思いつくけど、単に置換えている状態。
普通に変数は変数として、当てはめる事は出来ない?
# 変数が多いので、置換えをいちいち書くのは美しくない

file.txt
---
$A is a $B.
---

CH.pl
---
#!/usr/local/bin/perl
$A="This";
$B="pen";
open(IN,$ARGV[0]);
while (<IN>){
s/\$A/$A/;
s/\$B/$B/;
print ;
}
close(IN);
---
% CH.pl file.txt
This is a pen.
0302デフォルトの名無しさんNGNG
これってevalでできるの?おれも知りたい。
0303デフォルトの名無しさんNGNG
>>301-302
#!/usr/local/bin/perl
my $A = 'This';
my $B = 'pen';
{
  local $/ = undef;
  my $data = <DATA>;
  print eval "qq/$data/"; # デリミタは適宜変更
}
__DATA__
$A is a $B.
0304302NGNG
ああ、なるほど。>>303どうもありがとう。
0305301 NGNG
>>303 ありがとう。
かっこえー。
しかし、自分が使っているリファレンスが簡易版?だからか、
載っていない文法/用法だ…
勉強になりました。
0306デフォルトの名無しさんNGNG
CookBookには他の方法も載ってたね。
……どんなのだか忘れた。
$obj->method()
みたいなのも大丈夫だった記憶があるんだけれど。違ったっけ?

0307デフォルトの名無しさんNGNG
こんな感じだっけ?

s{
(\$[\w\[\](){}#>-]+)
}{
$1
}egex;
0308デフォルトの名無しさんNGNG
ちょっと質問ですが、

#!/usr/bin/perl -w
use strict;
foreach my $num ( 0..9 ) {
print "$num";
}

これってなにも表示されないんですが、仕様ですかね。。
ちなみに、print "$num\n";もしくは、foreachのブロックを
抜けた後に改行をプリントすると表示される。。。。

ちなみにperl5.8.0です。
0309308NGNG
ちなみに、

print "aaaaaa"

も、改行いれないとなにも表示されない。。。
しらなかった。。。
0310デフォルトの名無しさんNGNG
perl -e '$|=1;for(0..9){print;sleep 1}'
改行記号でバッファのフラッシュすることになってるのでは
0311デフォルトの名無しさんNGNG
>>308
>>309
よくわからんが・・・
バッファしてフラッシュしてないからだろ。
改行するとフラッシュする。
0312311NGNG
なんてこった・・・
レスがかぶっちまった・・・○| ̄|_
0313308NGNG
>>310,>>311
レスありがとうございます。
どうも、私の端末の原因のようです。

310さんが提示してくださったように、sleepを入れて実行したところ、
0から9まで表示された後、表示が消えてしまいました。
(また、プロンプトだけに戻ってしまった。。。)
なので、ちゃんと表示はしているようです。

Cで書いても同様でしたので、Perlとは関係なさそうです。。。
お騒がせしました。。。m(__)m
0314デフォルトの名無しさんNGNG
>>313
いやPerlとおおいに関係のある話だが。
0315デフォルトの名無しさんNGNG
Cのstdioにも似た仕組みがあるというだけ。
0316デフォルトの名無しさんNGNG
perl -e 'for(0..9){print"$_"}'
perl -e 'for(0..9){print"$_a"}'

後者では端末に何も表示されません。どうしてでしょうか?
0317308NGNG
原因がなんとなく判明しました。。。
zshを使っていたのが原因だったようです。

シェルをbashに変更したところ
問題なく表示されました。。

たぶんフラッシュ自体は、プロセス終了時に行われるんだと思います。
0318デフォルトの名無しさんNGNG
>>316
よ〜く考えよぉ〜
オカマは男だよぉ〜

うぅ〜う〜うぅ〜う〜うううぅ〜
0319デフォルトの名無しさんNGNG
>>318レスは難易度高いと思われ

>>316
perl -e '$_a="MANKO\n";for(0..9){print"$_a"}'
を試してもらえればきっとどうしてか理解してもらえるだろう
0320デフォルトの名無しさんNGNG
${_a}こうなっていたんですね。
0321デフォルトの名無しさんNGNG
現在Win98SP4上で ActivePerl v5.6.1 を利用しているのですが、
この環境で、ActivePerl Build 522 をインストールしても
両方のPerlを共存させる事は可能でしょうか?

目的はJPerlを利用したい為です。
0322321NGNG
すみません、Win98ではなくWin2kです。
0323デフォルトの名無しさんNGNG
できる
ただあんたにパスの指定ができる能力が必要

ただASP.Perlとか使う場合はまた別だけど
0324デフォルトの名無しさんNGNG
>>299
無理だからしんどけ
おとなしくCで
0325デフォルトの名無しさんNGNG
C言語みたいに別ファイルに定数定義して、
それから定数を参照・使用するって可能ですか?
0326デフォルトの名無しさんNGNG
>>352
可能
イロイロ方法はある

別ファイルをevalでメモリに読み込むとか

.pmでモジュールをつくって
それをuseすればいい
0327321NGNG
>>323
ども、いちおうできたっぽいです。
デフォルトで5.6.1ではなくて.5.005_03が使われるのが気になりますけど。
0328デフォルトの名無しさんNGNG
JPerlは糞!
0329デフォルトの名無しさんNGNG
だよね
perl5.8最強伝説
0330デフォルトの名無しさんNGNG
日本人ならPerl5.8必須だろ。プロバイダの鯖はいつまで5.6入れトンじゃボケ!
0331デフォルトの名無しさんNGNG
>>330
バージョンアップの要請メール送ったか?
大体は鯖管理者にメール送れば、結構柔軟に対応してくれるけど・・・

プロバ鯖か・・・
微妙だな・・・
でも、どうしても5.8にしてほしいならメール送らない事には何も始まらない。
0332デフォルトの名無しさんNGNG
perlccについて質問ですが、モジュールを利用したPerlをバイナリに変換して
該当のモジュールを入れていないマシンで、そのプログラムを動かすことが
できますか?
0333デフォルトの名無しさんNGNG
5.8にする予定はあるかと聞いたら「する予定はあるが時期は未定。しかし数ヶ月〜半年以内などということは無い」だと。
おいおい…5.8シリーズはもう十分安定していると思うのだが…
0334デフォルトの名無しさんNGNG
「時期が未定」これって予定がないのと何が違うんだ?
0335デフォルトの名無しさんNGNG
>>334
予定がない = そんな事する意思なし。
予定は未定 = 意思はある。けど、そのうちな〜。

意味はおおいに違う。
0336デフォルトの名無しさんNGNG
意味は違うが結果は同じ orz
0337デフォルトの名無しさんNGNG
>>332
PARならできるようだが、perlccはどうだろう?つーかperlccはまだβ版ですらないからなぁ。
0338デフォルトの名無しさんNGNG
>>332

解答ありがとうございます。
PARについて調べてみたいと思います。
0339デフォルトの名無しさんNGNG
PARって何?改造ツールのあれ?
0340デフォルトの名無しさんNGNG
>>339
これじゃないか?
http://perldoc.jp/docs/modules/PAR-0.75/lib/PAR.pod
0341デフォルトの名無しさんNGNG
>>340
ありがとう。
ARはARCHIVEのことなんだ。
0342デフォルトの名無しさんNGNG
Perl2exeでも一応モジュール含めて単一バイナリにできるけど
0343デフォルトの名無しさんNGNG
予定がない = キッパリ!
予定は未定 = いえね、旦那、そうする積りがあるようなないような、ぐにゃぐにゃ.......さーて、どっち
0344デフォルトの名無しさんNGNG
スマソ。誤爆した。
0345デフォルトの名無しさんNGNG
予定がない = よそ行きゃいいんだよ
予定は未定 = やる気はないが、ずるずると引き留めとこう

>>333
5.8 にすることで、既存の (ユーザの) スクリプトが動かなくなって、
トラブルやクレームが大量に発生するというような可能性もあるわけで、
そう簡単に、はいアップデートします、とはいかないでしょう?
5.8 自体が十分に安定してるかどうかとはまた別問題で。
0346デフォルトの名無しさんNGNG
うーん?
5.6、5.8間で、互換を失うようなバージョンアップあった?
0347デフォルトの名無しさんNGNG
文字コードまわりにたくさん無かったか?
0348デフォルトの名無しさんNGNG
tr///に2バイト文字が使えるようになったとかそんなんだったような気がする
0349デフォルトの名無しさんNGNG
内部的にUTF-8で動作するようになるんだっけか。
0350デフォルトの名無しさんNGNG
perl-5.8をrpmで固めたいんだけど、色々と調べても今ひとつ解りません。
「この通りすればO.K.」みたいなサイトはありませんか?

checkinstallも試してみたけど、「installのルールがありません」でエラーが出てしまうし。(;´д⊂
0351デフォルトの名無しさんNGNG
rpm?
REDHATスレできけや
0352デフォルトの名無しさんNGNG
5.005とかならともかく、5.6からならあまり問題ないような>5.8
jperlで作ったコードの移植は大変だったけどね。
0353デフォルトの名無しさんNGNG
う〜む。何もいきなり/usr/local/bin/perlを5.8にしてくれ、というわけじゃないんだ。
とりあえず/usr/local/bin/perl5.8を用意して、ユーザーにその旨を伝え、
移行期間(半年程度?)を置いた後に/usr/local/bin/perlを5.8にしてくれればいいのだ。
もちろんその際/usr/local/bin/perl5.[56]は残しておいてくれてかまわないわけで。

あああマンドクサイですかそうですか。
0354デフォルトの名無しさんNGNG
でもよほどのことがないかぎり
5.6でもいいような気がする。

5.8使いたい理由ってなんだ?
どうせ5.6のモジュール使えば解決する話だろ。
0355デフォルトの名無しさんNGNG
>>354=>>333のプロバのアホ管理者
0356デフォルトの名無しさんNGNG
Perl5ってLallyが1人で開発してるの?
0357デフォルトの名無しさんNGNG
>>354
面白い香具師だな!
0358デフォルトの名無しさんNGNG
>>354
5.8を使いたい理由はただ一つ。Encodeモジュールだ。
0359デフォルトの名無しさんNGNG
>>358
perl5.6で
Jcode.plか
Jcode.pm使えや


#■■終了■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
0360デフォルトの名無しさんNGNG
>>354
スレッド
あと、標準モジュールどっさり。
0361デフォルトの名無しさんNGNG
俺、Perl標準モジュールの使い方一つもしらねーや・・・
他の人が作ったライブラリで使用してるのは、jcode.plくらい。
後は自分で作ってるし・・・

Perl標準全モジュールの使い方が載ってる本とかありますか?
0362デフォルトの名無しさんNGNG
>>361
CPAN
0363デフォルトの名無しさんNGNG
>>360
スレッドっているか?forkでよくね?
そこまでパフォ上げたいなら
PHPかJSPにするだろ。
0364デフォルトの名無しさんNGNG
PHP!出た!PHP出た!得意技!PHP出た!PHP!これ!PHP出たよ〜〜!
0365デフォルトの名無しさんNGNG
0366デフォルトの名無しさんNGNG
速度
Perl>>>PHP
0367デフォルトの名無しさんNGNG
PHPしか書けない漏れはPG失格ですか、そうですか、、、、、凹
0368デフォルトの名無しさんNGNG
別にPHPだけでもそれで出来る事は大抵やれるっていうんなら
PGって名乗っても悪くはないと思うけど。

けど「PG」って堂々と名乗りたいなら、何に限らずある程度複数の言語を使え、
それぞれの言語である程度のものが出来る程度のスキルは無いと、
まあ、恥を掻く事があるかも知れない。
0369デフォルトの名無しさんNGNG
>>361
俺も最初はjcode.plしか使ってなかったけど、標準モジュール使い始めたらjcode.plなんて全然使わなくなった。
CGI,Jcode,(CGI::Pretty),CGI::Carp,HTML::Entities,POSIX
CGI作るときのオススメー。
0370デフォルトの名無しさんNGNG
以後このスレは5.8をインストールできないドキュソな管理者を
責めあげるスレになりました。5.6と共存でもいいじゃん。
/usr/bin/perlは5.6のままでいいからさ。
0371デフォルトの名無しさんNGNG
perl5.8ってpthreadいるんでしょ
そりゃpthread入ってない環境もあるだろうし
めんどいじゃん
0372デフォルトの名無しさんNGNG
5.8じゃなきゃいけない理由を挙げてみろよ
0373デフォルトの名無しさんNGNG
あたらしいことはいいことだ。
0374デフォルトの名無しさんNGNG
utf8な文字列をまともに扱いたいんだよ。
0375デフォルトの名無しさんNGNG
Perl6をPerl5のインタプリタ上で実装してるパッチとかありますか?
あったら見てみたい、使ってみたいのですが。
0376デフォルトの名無しさんNGNG
>>375
まぁPerl6ってperl5を使わないと動かないんだけどね・・・
0377デフォルトの名無しさんNGNG
なんか遅そうですね
0378Perlerの本音NGNG
スクリプト言語なんていくつあってもいい。
sh,Scheme,Python,Ruby,...普通に使える。

とはいいつつも一番手に馴染んだものってのが
やっぱりあって、それが僕の場合はPerl5なんです。
こういうのはもう理屈じゃない。体が覚えてるようなものだから。
0379デフォルトの名無しさんNGNG
真珠が埋め込まれている肉体。
0380デフォルトの名無しさんNGNG
ここはお前の日記ty(ry
0381デフォルトの名無しさんNGNG
crontabで実行するとき
42 * * * * script/test.pl -I /home/hoge/script
としてtest.pl内useしているcommon.pm /home/hoge/script/common.pm
のディレクトリを@INCに追加したいのですがうまくいきません。
どうすればいいのでしょうか?
0382デフォルトの名無しさんNGNG
>>381
test.pl で use lib すれば?
0383デフォルトの名無しさんNGNG
>>382
pwd
/home/hoge
dir
script/test.pl
script/common.pm
./script/test.pl

この環境の場合
use lib 'script'
でokですか。

フォルダが変わった場合ソース弄るの嫌なんで
オプション指定で解決したいのですが。



#21 * * * * cd script; ./test.pl
#の方法を思いついたのでこれにしました。
0384デフォルトの名無しさんNGNG
>>383
use lib '/home/hoge/script';
use common;

42 * * * * /home/hoge/script/test.pl

でいいいじゃん。

> フォルダが変わった場合ソース弄るの嫌なんで
> オプション指定で解決したいのですが。

普通モジュールってのはいろんなプログラムから使う、って事で
モジュールにするわけだから、プログラムとの相対位置関係を
維持するって発想は間違いで、どっからでも使える絶対位置に置く
ってのが基本じゃない?

俺は /home/hoge/lib/ とかに置いていろんなとこにあるいろんなプログラムから

use lib '/home/hoge/lib';
use script::common;
ってやるよ。
test.pmがどこにあろうがpwdがどこだろうがソース弄る必要ないよ。
0385デフォルトの名無しさんNGNG
use FindBin qw($Bin); # 実行ファイルのパスを取得
use lib "$Bin/../lib"; # 実行ファイルのあるディレクトリから相対的にライブラリをインストールしてあるディレクトリを指定
0386デフォルトの名無しさんNGNG
>>385

       ヽ(・ω・)/   ズコー
      \(.\ ノ
    、ハ,,、  ̄
0387デフォルトの名無しさんNGNG
正規表現についての質問です。

"XXAXX\nXX\nXAXX"
という改行を含んだ文字列があってA〜Aの間を取りたいと思っています

/A.*A/ではドットが改行を含んでいないので取得できません
/A[.\n]*A/だとできるのかなと思ったらできませんでした。

なんとかA〜Aを抜き出す方法があれば教えてください。
/A[^A]*A/は無しにしていただけると助かります。
(本当はもっと複雑なのでA以外を取得という技は使えないのです)
0388デフォルトの名無しさんNGNG
/A.*?A/s
0389黒死犬 ◆EgxBlf8nvc NGNG
m オプションを付けなきゃダメさ
0390黒死犬 ◆EgxBlf8nvc NGNG
あ、sだったけ、でしゃばって御免
0391デフォルトの名無しさんNGNG
sかmのどっちなんだろ?

なんだ?なんかエロい感じがするぞ?なんでだろ?
0392デフォルトの名無しさんNGNG
sでした。ちなみに私もsです。
>>388-390
ありがと〜
0393デフォルトの名無しさんNGNG
5.6でいいっていってる奴は国際化やったことねーだろ。
0394デフォルトの名無しさんNGNG
perl -e 'use encoding "euc-jp";print length "こんにちは"'
0395デフォルトの名無しさんNGNG
DBのスキーマからWeb出力までUTF8で統一するのに、
一番邪魔なのが古いperlだ。
0396デフォルトの名無しさんNGNG
Perl5.005,Perl5.6は老害
0397デフォルトの名無しさんNGNG
それでもperlを選んでる辺りが低脳ですね
0398デフォルトの名無しさんNGNG
>397
毎回全部書き直して環境も変更できると思ってるのか?若いな。
0399デフォルトの名無しさんNGNG
糞SEは黙ってたほうが吉
0400デフォルトの名無しさんNGNG
(駱駝本の)スカラーコンテキストでの範囲演算子の動きが理解できないのですが、
詳しく説明しているHPはないでしょうか?
0401デフォルトの名無しさんNGNG
>>400
例えばどんなコード?
0402デフォルトの名無しさんNGNG
>>401
コードも判りませんが、それ以前に本の解説がわからないです。
0403デフォルトの名無しさんNGNG
>>402
駱駝本に例になるコードが出てるだろ。それが実際に動くような
スクリプトを書きゃいいじゃん。それが理解の第一歩。
それとも、上げ膳据え膳の解説が希望なのか(w
0404デフォルトの名無しさんNGNG
>>402
http://www.google.co.jp/
0405デフォルトの名無しさんNGNG
スカラーの".."はおれも分らん。まともな説明も見たことない。
でもつかわなそうだし、別に理解しなくてもいいんじゃね?
行範囲演算子として使えれば、十分。
$perl -ne 'if(3..5){print}' /etc/group
0406デフォルトの名無しさんNGNG
http://www.google.co.jp/search?q=%E3%82%B9%E3%82%AB%E3%83%A9%E3%83%BC%E3%82%B3%E3%83%B3%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%80%80%E7%AF%84%E5%9B%B2%E6%BC%94%E7%AE%97%E5%AD%90&ie=UTF-8&hl=ja&lr=
www
0407じゃね?NGNG
じゃね?
0408デフォルトの名無しさんNGNG
perl -e '@a=(0,1,1,0,0,1,0,0);for(0..$#a/2){print+($a[$_*2] .. $a[$_*2+1])?1:0}'
こういうのでいいの?つまり真偽の状態を持つ演算子ということで。
$_の値が
0(0,1)=左が偽である限り状態は偽
1(1,0)=左が真にになったので真。右に真が来るまで真
2(0,1)=右が真になったので、次の状態↓からは偽。ここは真
3(0,0)=左が偽であるので状態は偽($_=0と同じ)

これでいいかな?
0409デフォルトの名無しさんNGNG
>>405
正規表現も便利だぞ
while(<>){
 print if /start/ .. /end/;
}

これにstartとendを含む行があるようなテキスト食わせてみ

0410デフォルトの名無しさんNGNG
なるほど、確かにスカラ文脈でも範囲を表してるわけだな
テキストのサーチなんかでいちいちフラグ使わなくてもよさそう
0411デフォルトの名無しさんNGNG
kbhit()みたいなことできますか?
0412デフォルトの名無しさんNGNG
>411
Term::ReadKey
0413デフォルトの名無しさんNGNG
モジュールについているパッケージ名で
package Term; # とか
package Term::Readkey; # とか
package Term::Foo; # とか
等があった場合 Term の部分が共通していますが、
これらは全く別物で関連性がないものとして扱われるんでしょうか?
0414デフォルトの名無しさんNGNG
関連性があるから共通部分があるとは思えないのかね?
簡単に言うと
Foo::Bar::Baz とあるなら
Foo::Bar::Baz は Foo::Bar を利用し
Foo::Bar は Foo を利用している
0415デフォルトの名無しさんNGNG
質問です
10分ごとに処理させるプログラムなのですが
time関数でむりやり組んだのですがidx値が10.万を超えてしまって
まともに動かないんですが
いいプログラムあればご教授ください
bacetime();
while(1) {
print"------- work ------\n";
msleep(5000);
thistime();
}
sub bacetime
{

$basetime=time;
}
sub thistime()
{
my $thistime;
my $idx;
$thistime=time;
$idx=$thistime-$bacetime;
if($idx >= 600) {

bacetime();
}
print $idx;
print "\n";
}
0416デフォルトの名無しさんNGNG
>>414
そういうことを聞いているんじゃないよ。
0417413NGNG
>>416
勝手に答えんなヴォケっ

>>414
他のモジュールをさらっとみてきましたけど
package Foo::Bar::Baz; # は
use Foo::Bar; @ISA=qw(Foo::Bar);
package Foo::Bar; # は
use Foo; @ISA=qw(Foo);
のような傾向になってましたけど、このようにuseとか@ISAを指定していなければ
やはりモジュール同士は全く関係がないという事でしょうか?
0418416NGNG
>>417
何を偉そうに、
0419デフォルトの名無しさんNGNG
>>417-8
下手くそな自演だな(w
まあ勝手にしてくれ。
0420デフォルトの名無しさんNGNG
禿げ
0421デフォルトの名無しさんNGNG
>>415
cron使うという考えはないわけ?
0422デフォルトの名無しさんNGNG
すみません、超初心者の質問です。
私は、C/C++(VC,BCB)、PASCAL(DELPHI)をそこそこ使えるのですが、Perlの難しさに困っています。
CGIを作る事を前提にPerlを学ぶとして、良本を紹介して欲しいのですが、お願い申し上げます。
0423デフォルトの名無しさんNGNG
俺的には

> C/C++(VC,BCB)、PASCAL(DELPHI)をそこそこ使えるのですが、

これと、

> Perlの難しさに困っています。

これが繋がらない。
0424デフォルトの名無しさんNGNG
>>421さん
モジュールやライブラリで使用したいので
cronは無理です
0425422NGNG
MASM(DOS)も使えるのですが、C、BASIC(VB)と言うのは、高級アセンブラ+ライブラリーでしょ。
つまり、以前にMASMなどのアセンブラを学習しておけば、N88-BASIC(86)など簡単に使えるし、これにイベントの考え方、コントロールの考え方を理解すればVBも使えます。
Cなど、構造化アセンブラーで、DOSの時代には、コンパイルされた後のアセンブラーソースも想像しながら書いていました。
つまり、パラダイムが同じなんですね。C++は、若干苦しみました。OOPですね。

でも、Perlという言語は、本当の意味の高級言語で、呪文の様な1行でCなら数行書かなければいけない事を出来そうです。
この上、暗黙の変数?ってのが、よく分かりません。
今、読んでいる本は、Perlを体系立てて説明していないので、非常に困っています。
0426デフォルトの名無しさんNGNG
?って変数だったか?
0427デフォルトの名無しさんNGNG
> C/C++(VC,BCB)、PASCAL(DELPHI)をそこそこ使えるのですが、

これを自慢したくて書き込んだとしか思えない。
0428422NGNG
>>427
 自慢にならんよ。
 同じパラダイムの言語を何個使えても、単語の入れ替えだけじゃん。
0429デフォルトの名無しさんNGNG
>>415>>424
my($wait,$time) = (600,time);
while(sleep(1)){
if($wait <= (time - $time)){
$time = time;
print "$time\n";
#ここで処理
}
}

何をするのか分からないが
単純に約10分ごとに秒を出すような処理
0430デフォルトの名無しさんNGNG
ふと思ったのですが、
print (scalar 1,10);
これを実行すると、
110
と出力されます。
scalar演算子君は無視ですか?
0431デフォルトの名無しさんNGNG
>>429 ありがとうございます
早速組んでみます
0432デフォルトの名無しさんNGNG
>>430
> scalar演算子君は無視ですか?
いいえ。
0433デフォルトの名無しさんNGNG
print(scalar("aaa"),"bbb");
print("aaa","bbb");
"aaabbb"
0434デフォルトの名無しさんNGNG
>>430
print (scalar 1,10);
print scalar( 1) ,10;
print scalar( 1,10);
:
:
print scalar(@{[1 ,10]});
0435デフォルトの名無しさんNGNG
>>417
Foo::Bar という表現はBarクラスはFooクラスを継承してますよという意味で使われるので
全く関係が無いなら使うべき表記じゃないしコード上でも使えないはず
FooとBarが関係ないならFoo::Barは存在しないわけだから
0436デフォルトの名無しさんNGNG
>435
的外れ。Foo::BarとFooおよびBarは無関係。
正確には、Foo::BarはFooパッケージの中にあるので、Fooのシンボルテーブルを削除するとFoo::Barまで消えてしまったりするが、言語レベルではそれだけの関係に過ぎない。
例えば、CGIクラスとCGI::Carpクラスは互いに関係無いクラスだ。

ただ、意味的には関係のあるクラスを入れ子にするのが一般的だろうけどな。
0437デフォルトの名無しさんNGNG
とりあえず Term パッケージというのは存在しない。
0438413NGNG
答えて下さってる皆様ありがとうございます。
>>437
とりあえず>>412を見て質問を考えました。

>>419-420が出てきたのでとりあえずperlmodを読んでみましたが、答えになりそうな
> パッケージは、$OUTER::INNER::var のように、別のパッケージの
> 中にネストすることもできます。 しかし、これが名前の検索順序
> に関るものではありません。 すべてのシンボルは、その時点のパ
> ッケージにローカルであるか、完全な形でパッケージ名をつけて、
> 外部のパッケージから導入したものでなければなりません。 たと
> えば、パッケージ OUTER にいるとすると、$INNER::var という表
> 現は、$OUTER::INNER::var を参照します。 パッケージ INNER は、
> まったく独立したグローバルなパッケージとして扱われます。
の
> たとえば、パッケージ OUTER にいるとすると、$INNER::var という表現は、$OUTER::INNER::var を参照します。
の部分がよくわかりません。
というか試しに書いてみたスクリプトでは
package Fooで$Bar::varを触るとpackage Barの$varを触っている事になってしまうんですが、
どうなるのが正しいのでしょうか?
0439デフォルトの名無しさんNGNG
>>436
>ただ、意味的には関係のあるクラスを入れ子にするのが一般的だろうけどな。
んじゃ一般的に
>Foo::BarとFooおよびBarは無関係。
とは言えないんじゃ?
にしても
>CGIクラスとCGI::Carpクラス
のように必ずしもモジュール名=クラスの継承関係じゃないってのは引っかかるなぁ・・・

>>438
package Bar で @ISA = qw(Foo) したかい?
0440デフォルトの名無しさんNGNG
最後の文変ですね^^;
よく読んでなかった
>>438
>package Fooで$Bar::varを触るとpackage Barの$varを触っている事になってしまうんですが、
>どうなるのが正しいのでしょうか?
そうなるのが正しいです。
package Bar で @ISA = qw(Foo) したなら
Foo内で $Bar::var は $Foo::Bar::var ですし、BarがFooを継承していない場合は
$Bar::var は単に package Bar の $var です。クラスの階層としてはFooと同レベル。
いずれにせよpackage Barの有効範囲内の$varであることに変わりは無い


で合ってますか?エロイ人w
0441413NGNG
英語のままのperlmodを機械翻訳2種類ほどにかけたところ、
どちらも日本語perlmodとは違う訳し方で似たような結果になったので
名無しさん@英語勉強中の方々(←どうもありがとうございます)に聞いてみたところ
> たとえば、パッケージ OUTER にいるとすると、$INNER::var という表現は、$OUTER::INNER::var を参照します。
ではなく
「例えば、 package OUTER の範囲内で、 $INNER::ver が $OUTER::INNER::var を参照する事はどこにもない。」
の方が正解に近いようです。(←名無しさん@英語勉強中の方々には失礼ですが否定されたときの伏線です)
つまり、継承していてもしていなくてもpackage Foo内でもpackage Foo::Bar内でも
$Bar::varはpackage Bar内の$varを参照するということになるはず。
0442540NGNG
perl cgiでデータベースを扱いたいのでSQLを使いたいのですが、可能でしょうか?
関連サイトサイト探したのですが、リナックスの奴しか見つかりませんでした。
関連サイトありましたらおしえてください。
windows2000、自サーバです。
0443デフォルトの名無しさんNGNG
> perl cgiでデータベースを扱いたいのでSQLを使いたいのですが、可能でしょうか?
可能
> 関連サイトサイト探したのですが、リナックスの奴しか見つかりませんでした。
リナックスの奴とは?
> 関連サイトありましたらおしえてください。
ttp://www.google.co.jp
> windows2000、自サーバです。
自サーバとは?
0444デフォルトの名無しさんNGNG
>>442
http://www.microsoft.com/japan/sql/default.mspx
0445デフォルトの名無しさんNGNG
てか
PostgreSQL/cygwin
MySQL
FireBird

全部 Linux/Windowsで動くだろうが

0446デフォルトの名無しさんNGNG
IISならMySQL/ODBCだかそんなのでうごくし
0447デフォルトの名無しさんNGNG
WindowsでActivePerlなら、
PPMコマンドでDBIとDBD-「ほげ」をsearch してみてください。
「ほげ」の部分はお使いのDBによって変わります。

0448デフォルトの名無しさんNGNG
>>413,438

パッケージ名は階層をつけることができるが、
階層の親子間では特に言語的なサポートは何もない。
階層をつけるのは作成者によるカテゴリ分けを容易にするため。

ここでいう言語的なサポートは
「継承」や「階層の親パッケージの参照」のことね。

ただしある配布パッケージが、複数のPerlモジュールを含み
それらがパッケージ階層を構成していることは珍しくない。
LWP などがそうだね。

要するに、TMTOWTDI ってこと。
0449デフォルトの名無しさんNGNG
パッケージの中にリストコンテキストを入れたいんですけど、検索のキーワードは
何がいいでしょう?
調べてもキーワードが悪いので、思っている内容にヒットしません。

モジュールのサブルーチンで

my $self = shift;
$chr[0] = 'test1';
$chr[1] = 'test2';
$self->{data} = @chr;
return $self;

こんな感じにして、
呼出側で

@chr = $pkg->{data};
print "$chr[0]\n";

こんな感じでしてみましたがダメでした。
なぜダメかもわからんし……。
0450デフォルトの名無しさんNGNG
$self->{data} = \@chr;
@chr = @{$pkg->{data}};
じゃないの?
0451デフォルトの名無しさんNGNG
>>450

ありがとうございます。
その書き方は知りませんでした。
解決しました。
0452デフォルトの名無しさんNGNG
>>451
ラクダ本のリファレンスのところは暗記するほど読んでおこうね
0453413NGNG
>>448
ありがとうございます。
これで階層の深いパッケージの意味がわかったのでうまく扱えそうです。
お付き合いいただいた皆さんどうもありがとうございました。
0454デフォルトの名無しさんNGNG
例えばモジュールの中で
bless {
foo => undef,
hoge => undef,
},$pkg;
と定義されていて、利用するプログラムから
'foo'や'hoge'の部分の名前を知る方法はありますか?

手持ちの入門書にはここら辺の事が書かれていないので、
呼び方もわからないので巧く表現できませんがお願いします。
0455デフォルトの名無しさんNGNG
>>454
> 例えばモジュールの中で
> bless {
> foo => undef,
> hoge => undef,
> },$pkg;
> と定義されていて、利用するプログラムから
> 'foo'や'hoge'の部分の名前を知る方法はありますか?
> 手持ちの入門書にはここら辺の事が書かれていないので、
> 呼び方もわからないので巧く表現できませんがお願いします。

sub Vars {
my $self = shift;
my @vars = keys %{$self};
return wantarray ? @vars : \@vars;
}
0456455NGNG
意味的にvarsじゃなくてkeysですた。
しかも無駄に引用レスしちまった。(;´Д`)スマソ
0457454NGNG
>>456

理解でしました。
ありがとうございます。
0458デフォルトの名無しさんNGNG
Perl6はまだですかね?
0459デフォルトの名無しさんNGNG
あと10年
パロットがv0.10だもん
0460デフォルトの名無しさんNGNG
バージョン0.1上げるのに1年かい。
0461デフォルトの名無しさんNGNG
お忙しいところすいません、宜しければご教授ください

os Windows2000 ActivePerlv5.6.1で
Perlモジュール (FFST) playSoundを使用したいのですがうまくいきません

playSound('use/mawa.wav', 120);

一応再生は出来るのですが、
PlaySoundを呼んだ時にしばらく止まってしまします
数分するとなんとか機能取り戻すのですが、
それまではタスクからも止まりません

0462デフォルトの名無しさんNGNG
初歩的な質問なんですが、すみません。

環境変数を表示するperlのコードをfoo.plとでもして、chmod +xしておきました。
ファイルの先頭も#!/usr/bin/perlとだけ書いたのですが、./foo.pl として実行
しようとすると、bashがそんなインタプリタないぜ、とか言ってます。
もちろん、perl foo.plは正しく実行できますから、パスは通っています。
0463デフォルトの名無しさんNGNG
telnetで接続するとシェル(shやcshやcmd.exeやcommand.com)が起動し
telnetを通してシェルが操作できるサーバーを作っています。
サーバーの部分は問題なく出来たのですが、シェルを起動する部分で system('/bin/sh'); としたところ
スクリプトを起動したコンソールにシェルのプロンプトが出てしまいます。
また、telnetで接続してきたクライアントからの入力をシェルに渡す事が出来ません。
クライアントからシェルの入力を受け取りクライアントに出力を渡すにはどうやればいいのでしょうか?
0464デフォルトの名無しさんNGNG
>>462
which perl
とか。
0465デフォルトの名無しさんNGNG
>>463
かなりスレ違いじゃねーのかと・・・
telnetでシェル起動するサーバって・・・
telnetで接続できて、シェルが起動しないtelnetって何の価値があるのかと。

何してんだかわかねーが・・・
素直にtelnetデーモン入れろよ。
0466デフォルトの名無しさんNGNG
>>465
>telnetで接続できて、シェルが起動しない

ftpd とか httpd とか。
0467デフォルトの名無しさんNGNG
>>463
Net::Telnet とか Expect とか使えば?
と微妙なレスをしてみる。
0468デフォルトの名無しさんNGNG
Perl/Tk 使ってる人ってあまりいないの?
単独スレ需要なし?
0469デフォルトの名無しさんNGNG
>>468
餅は餅屋。
PerlでGUIプログラムするのって間違ってる派。

GUIやりたいなら、違う言語を学べ
0470デフォルトの名無しさんNGNG
本格的なアプリ作るならともかく、さくっとGUI作れるのは楽でいいぞ

0471デフォルトの名無しさんNGNG
>>468 >>470
賛同者がいるかようだからスレ立ててみたら?
おれは今のところ関心無し。
0472470NGNG
過去スレ読んでも稀にしか質問ないし、特に必要性は感じてないけどな
ここでいいんじゃねーの、数が多けりゃ別スレにでもするのがいいだろうけど

話し逸れるが、どうせ別にするならWindows を別にしてくれた方が有り難いな
0473デフォルトの名無しさんNGNG
*BSDのlibexec/telnetd/*.[ch]を見て勉強しよう。
0474デフォルトの名無しさんNGNG
いや、したいと思います。。。
0475デフォルトの名無しさんNGNG
Perl/Tkの使用自体は別に反対でも賛成でもないけど、人口が少ないのでスレには反対派。
このスレの中でTkしても間に合う。

俺はたまーーにTkする。
…ってもインタプリタなperl君だから自分専用作業のためのGUIしか作ったコトないけどね。
0476デフォルトの名無しさんNGNG
Perl/Tk使ってみたい派 一票
0477デフォルトの名無しさんNGNG
Tcl/Tkスレがあるからそこですれば?
0478デフォルトの名無しさんNGNG
PHP みたいに HTML 風の <% print "hoge"; %> のような記述をする
テンプレートエンジンがよくあると思いますが、
例えば、メールのメッセージを作成するようなケースだと、こういうタグ形式よりは、
もっと行指向ベースなテンプレートで記述したいと思うことがよくあります。
そういった用途に向いたテンプレートエンジンでお勧めなものがあれば教えて下さい。
0479デフォルトの名無しさんNGNG
なんの話なのかさっぱりだ。普通にヒアドキュメントでいいんじゃねえの?
0480デフォルトの名無しさんNGNG
インタプリタのテンプレートは使い難い
ASPやJSPでもなければ普通に書こう
0481デフォルトの名無しさんNGNG
よくウェブのプロジェクトだと、プログラマーとデザイナーで分担すると思いますが、
同様に、実装者 (プログラム書く) と運用者 (メール文面書く) を分担したいのです。
複雑な制御構造とかは要らないのですが、変数→文字列置換に毛が生えたくらいのが
できるようなものはないかなあと。
0482デフォルトの名無しさんNGNG
などと質問する暇があったら自分で実装した方が早いですかね。
この質問は取り下げます。

スレ汚し大変失礼いたしました。
0483デフォルトの名無しさんNGNG
自分で作った方が早いよ
後々不満だらけに成るからカスタマイズ出来ないと窓から投げたくなる
0484デフォルトの名無しさんNGNG
$html_out =~ s/<!-- html_hoge -->/$html_hoge/;
みたいなコードが大量にあるんだけど、ひょっとして邪道?
0485デフォルトの名無しさんNGNG
普通
0486デフォルトの名無しさんNGNG
別に邪道ではない
けど
0487デフォルトの名無しさんNGNG
$html_out =~ s/<!-- ([a-zA-Z0-9_]+?) -->/$1/;
こうかな
0488デフォルトの名無しさんNGNG
$html_out =~ s/<!-- ([a-zA-Z0-9_]+?) -->/${$1}/;
こうか
0489デフォルトの名無しさんNGNG
>>488
全部同じ処理じゃねーか
0490デフォルトの名無しさんNGNG
別ファイルにして、埋めるところは全部 %s にして、sprintf で一気に流し込んでいるです。
0491463NGNG
ありがとうございます。
えーと、telnetdとはちょっと違って接続したら認証はなくて直接シェルが出てくる感じです。
えーと、とりあえずtelnetdのソースをもう一度見てきます。
0492デフォルトの名無しさんNGNG
ログインシェルとして起動した?
bashなら -lとかつけて

とか関係ないレスつけてみる。
0493デフォルトの名無しさんNGNG
>>491
systemじゃなくて、openでパイプ
0494デフォルトの名無しさんNGNG
>>478
Perlのフォーマットとかはどうよ?
0495デフォルトの名無しさんNGNG
今日こういうソースを見たのですが・・・

@queue : shared = ();

これは何をやっているのですか?
空の配列を宣言?しているのでしょうか
ただ宣言するだけでも空になると思うのですが・・・
明示的にしているとか?
ちなみにパッケージは
use threads;
use threads::shared;
です
0496デフォルトの名無しさんNGNG
perl -e 'use threads;use threads::shared;@queue : shared = ();'
なんでこれが通るんですか?
0497495NGNG
失礼!

@queue : shared = ();

ではなくて

my @queue : shared = ();

でした
0498デフォルトの名無しさんNGNG
>>497
そのソースどこから落とした?
0499デフォルトの名無しさんNGNG
Perlの開発に使えるような統合開発環境ってありますか?
出来ればLinuxで。
0500デフォルトの名無しさんNGNG
perl -MO=Concise -e 'my @q:shared=()'
コンパイル後のこの出力を理解できるようになれれば
いいんですけどね。なかなか。
0501デフォルトの名無しさんNGNG
Perlの開発はラリーにおまかせあれ
0502495NGNG
>>498
ttp://www.hyuki.com/dig/perlthread.html
0503デフォルトの名無しさんNGNG
>>501
次のスレタイ?
0504デフォルトの名無しさんNGNG
>>495
スレッドで共有する変数の宣言、および初期化
0505495NGNG
>>504

そういうことみたいですね。で、調べてみたら、

ttp://www.donzoko.net/doc/memo/perlithreads.html#note_context

Perlのスレッドシステムは「明示的な共有データ」という考えに基づく。
→デフォルトでスレッド間でデータを非共有。
これによりスレッドセーフなモジュールの開発を簡単にしてくれる。

とあるので、まさにこれがその書き方なんでしょうね。

で、これらの共有変数に対してウェイトセットに入っている
スレッドを

cond_broadcast(@queue);

として起こしてあげる、と。
なんとなく雰囲気はつかめました。
どうもありがとうございました。
0506デフォルトの名無しさんNGNG
>>504
初期化とはどういう意味があるんでしょう?
0507デフォルトの名無しさんNGNG
>>506
my @foo = ();
上記の文については、空の初期化は無意味。my宣言したものは常に空だからね。
my @foo; # @fooは空だからね!
まぁ、こんなコメントをつける代わりに、 =()をつけていると思っていいよ。
0508デフォルトの名無しさんNGNG
初期化しないで使ったら警告でまくり
0509デフォルトの名無しさんNGNG
>>508
例えばどういうケース?
0510デフォルトの名無しさんNGNG
my @queue : shared = ();
これのコロンはなんていう演算子?
0511デフォルトの名無しさんNGNG
http://perldoc.jp/docs/modules/threads-0.99/threads/shared.pod
shared属性( my $var : shared )を使うことで、ある変数をコンパイル時に
共有化されたものとしてマークすることもできる。
0512デフォルトの名無しさんNGNG
質問させてください。

トラックバックのpingを実装しようとSocketでPOSTリクエストをする
スクリプトを書きました。実際にリクエストはできるのですが、相手側からの
意図した応答が得られませんでした。リクエスト内容を教えていただけませんか?

ttp://lowlife.jp/yasusii/stories/8.html
ここのリクエスト内容を参考にしました。

ttp://www5e.biglobe.ne.jp/~halcyon/cgi-bin/tb/test.txt
書いたスクリプトです。

よろしくお願いします。
0513デフォルトの名無しさんNGNG
あ、ごめんなさい。これCGIですね。Webprogにいきます。
スレ汚しごめんなさい。
0514デフォルトの名無しさんNGNG
>>510
演算子じゃない。version5.6.0から追加された変数・関数に対するアトリビュート指定。
perldoc Attribute::Handlers
perldoc attributes
0515464NGNG
>>492-493
ありがとうございます。
>>492
私は、基本はtcsh困った時はsh派です。と言う冗談は置いといて、
最終的にcommand.comで使うので
(MS-DOSプロンプトのバッファの少なさをtelnetクライアントのバッファで補おうかというのが目的)
その辺りはおそらく関係ないと予想されます。
>>493
という事で open(SHELL, "| $shell |"); みたいなopenをしてみたところ暴走しました。
ちょっとこっちの書き方が悪そうなので何とかしてきます。
0516464=463NGNG
間違えた。いや、間違ってないけど間違えた。orz
0517デフォルトの名無しさんNGNG
そういうときは普通 Open2 とか Open3 とか使うのかと思ってたが
0518デフォルトの名無しさんNGNG
昔拾ったシェルにコマンド流すようなCGIのソースの一部
$Pipe = ' 2>&1 |'; # Unix,NT->' 2>&1 |' 95,98->' |'

sub ExecCommand
{
my $Msg = &CurrentDir . '> ';
if ( $FORM{'Command'} eq '' ) {
return $Msg;
}
$Msg .= $FORM{'Command'} . "\n";
open(IN, "$FORM{'Command'} $Pipe");
while ( <IN> ) {
$Msg .= $_;
}
close(IN);
return $Msg;
}
参考までに
0519デフォルトの名無しさんNGNG
>>515
おまいさんPerl云々の前にshの使い方知らないだろ?標準入力からコマンド渡してどうすんだ。
0520デフォルトの名無しさんNGNG
>>149
> for (my $i = 0; $i < 10; $i++){
> sleep 1;
> print "\x1b[A" if $i;
> print " i = $i\n";
> }

↑の "[A" について解説願います!
0521デフォルトの名無しさんNGNG
>>520 多くのターミナルでカーソルを一行上にあげる文字列が
"\x1b[A"。/etc/termcap ってファイルがあったら、中を覗いて
みると、up=\E[A とか書いてあるはず。
0522520NGNG
>>521

なるほど。為になりました。
ありがとうございました!
0523デフォルトの名無しさんNGNG
>>520
ANSI エスケープシーケンス(escape sequence) 。
カーソルを上に移動させるものです。
詳しくは「ANSI エスケープシーケンス」でググッて味噌。
0524523NGNG
おっと、了解済みだったか、スマソ。
0525デフォルトの名無しさんNGNG
ログファイルから正規表現を使って特定するものだけを抜き取り、
別ファイルに出力したいのですが、ちょっと難問が…

ログファイルは基本的に下記のように発言者、日時、発言内容で成り立っています。

<ログの例>
山田 2004/06/28 09:12:15 ○○○○○○○○○○○○○○
佐藤 2004/06/28 09:15:58 △△△△△△△△△△△△△△
鈴木 2004/06/28 09:15:58 □□□□□□□□□□□□□□

このように1行で1人の発言内容ならば問題無くある特定の人物の発言だけを抜き取る事はできるのですが、
複数行にまたがった発言ログの場合、どのように取り出せばよいのでしょうか?
必ずしも次の行に発言が無い場合もあります。
このようなログを特定の人物のものだけ抜き出し、複数行にまたがっている発言内容は1行で出力したいのです。

<困ってるログの例1>

山田 2004/06/28 09:12:15 ○○○○○○○○○○○○○○
○○○○○○○
佐藤 2004/06/28 09:15:58 △△△△△△△△△△△△△△
鈴木 2004/06/28 09:15:58 □□□□□□□□□□□□□□

<困ってるログの例1>

山田 2004/06/28 09:12:15 ○○○○○○○○○○○○○○
佐藤 2004/06/28 09:15:58 △△△△△△△△△△△△△△

△△△△△

△△△△△
鈴木 2004/06/28 09:15:58 □□□□□□□□□□□□□□
0526デフォルトの名無しさんNGNG
ログファイルの構造がおかしい
0527デフォルトの名無しさんNGNG
splitで分けて、項目が三つじゃない行は前の行の続きってことにすればいいんじゃねえの?
0528デフォルトの名無しさんNGNG
ちょっと心配なのに発言内容部分が splitで分けられちゃう
(\sが含まれる)可能性はないんですか?
なkれば、>>527 でOkじゃない?
next if /^$/; もいれれば、2つ目の困ったパターンもOk。

0529525NGNG
実際の発言内容には普通に\sなどは存在します。
0530デフォルトの名無しさんNGNG
じゃ、単純にsplitしないで、名前、日付、時間でとってから、
残りは内容、空行以外で名前、日付、時間に合致しないのは
続きの内容としてアペンドしていきゃいいんじゃね?
0531デフォルトの名無しさんNGNG
オレなら多分名前,日付,時間が行頭にあることを正規表現で調べて、
マッチしなければ直前の行の一部にするというようなコードにするかな。

my $NAME = '佐藤';

my $name;
my $buf;
for (;;) {
  $_ = <>;

  if (!defined $_ || m{^(\S+) \d{4}/\d\d/\d\d \d\d:\d\d:\d\d }) {
    print $buf if $name eq $NAME;
    last if !defined $_;

    $name = $1; $buf = $_;
  } else {
    $buf .= $_;
  }
}

運悪く発言内容の一部に正規表現マッチするような部分があって、それが
たまたまうまい具合に行頭にきちまうこともあるだろうけど割り切りね。
0532デフォルトの名無しさんNGNG
>>525
もしプログラムの方をいじれるならフォーマット変えた方がいいと思われ。
たとえば、発言の終了は LF で発言中の改行は CR とか。
0533デフォルトの名無しさんNGNG
ようするにとんでもログフォーマットなわけだ。
今からでも遅くはない、フォーマットを変更しろ。

個人的には、\t 区切り、発言内容中の改行は<br>にでも。@テキストエディタで直接みられるように。
0534デフォルトの名無しさんNGNG
>>529
さんざん言われてるけどログの構造が間違ってるとしか言いようがない
もし発言内容に
山田 2004/06/28 09:12:15 ○○○○○○○○○○○○○○
なんてのがあったらどう?
もう手ぇ付けらんないでしょw
0535デフォルトの名無しさんNGNG
半角スペースで区切ってんのにデータの中にも半角スペース書けんのかYO!!w
ちょっとワラタ。

ところで、俺の場合ログファイルなどの区切り文字は自分でこんな感じの関数作ってる。
場合によっちゃ重いんだけど、実体には普通に全ての文字を書きたいから…。

#連結時
sub my_join ($$;@) {
  my $separat = shift or return();
  my $enclose = shift or return();
  my @entity = @_ or return();
   $separat ne $enclose or return();
  map {s/($separat+)/$separat$1/go} @entity;
  return( join qq[$enclose$separat$enclose], @entity );
}

#分割時
sub my_split ($$$) {
  my ($separat, $enclose, $all) = @_;
  my @entity = split /$enclose$separat$enclose/, $all;
  map{s/$separat(?!$separat)//go} @entity;
  return(@entity);
}
0536デフォルトの名無しさんNGNG
↑あ、時給自足で書きこんだり読み込んだりする時だけね。
0537デフォルトの名無しさんNGNG
俺はもっぱら大した大きさのデータじゃなきゃ、Data::dumper、とかStarableとかで
変数構造そんまま格納して読み込んで使ってる。
splitだのjoinだの、デリミタ何にするかとか悩まないし、すげえ便利。
0538デフォルトの名無しさんNGNG
>>537
ログファイルみたいに逐次書き出しみたいなのは可能?
0539デフォルトの名無しさんNGNG
>>538
可能。
俺は150人ぐらいだけどある組織の会員データとか、
その会員向けに組織別に開設したBBSのログファイルとか
組織別に開設したMLの登録リストとかをData::Dumperで格納してる。

ついでにその変数構造をHTML::Templateのテンプレートにあわせた形にしてるので
読み込んでテンプレートに食わせるだけで表示できるようにしてる。

デリミタかませてファイルに格納したり、読み込んでsplitして変数に組み立てて、
それから吐き出し形式にしてテンプレートに渡して、とかしてない。

Storableでもいいけど、データがエディタで直接開けてデバッグに便利なので
Data::Dumperをもっぱら使ってるけど、まあこんなくらいのデータ量だから。

ただData::Dumperは自前で排他共有ロックしなくちゃ、だけど
Storableは、
lock_store \%table, 'file';
$hashref = lock_retrieve('file');
なんてそれもついでにしてくれちゃうんで便利だよね。
0540デフォルトの名無しさんNGNG
何も考えないで Data::Dumper or Storable って楽な割りに強力だよね

ハッシュの3重ネストとか、もう処理めんどいから Storable で一発
必要になったら考えれば良いし、何より互換性は最強だしな
0541デフォルトの名無しさんNGNG
ログファイルとかで悩む時点でオワットル
0542デフォルトの名無しさんNGNG
>>541
どういういみ?
0543539NGNG
>>540
Storableって互換性、最強?
ちょっと前に書いたやつ、多重ハッシュそんまま保存したくて
MLDBM使ったやつがあるんだけど、環境動かしたとき大変だった。
Storable使うように書き換えようかな
0544デフォルトの名無しさんNGNG
みんなが驚いたコード教えてよ
有用なやつで
0545デフォルトの名無しさんNGNG
>>529
CSV形式を使えばいいんじゃない
改行とかカンマが有る場合は 「"」 で囲う

で「"」内での「"」は「""」で表現する

この形式ならよく使ってるよ
0546デフォルトの名無しさんNGNG
>>545
処理速度に難有りなんだなこれが。
0547デフォルトの名無しさんNGNG
このスレでTips集作ってみるってのも面白いかもしらんね
0548デフォルトの名無しさんNGNG
教えてください。
ブラウザでファイルのアップロードする掲示板みたいなものがあります。
複数のファイルを送信しているのですが、ひとつずつファイルを選択してから
送信の繰り返しをしています。
何とか順次ファイルを送信したいのですが、相手のプログラムを変更したり
サーバーに直接ファイルを転送する事ができないので、Perlで自動的に
送信をするようにしたいと思っています。
受け取る側のCGIなどは見つかるのですが、送信をするにはどうしたら良いかがわかりません。
サンプルプログラムなどが載っているサイトがあれば教えてください。
0549デフォルトの名無しさんNGNG
>>548
http://pc5.2ch.net/test/read.cgi/php/1086715675/
0550デフォルトの名無しさんNGNG
>>548
CPANにあるlibwww-perl使うのがいいと思われる。
0551デフォルトの名無しさんNGNG
>>549-550

ありがとうございます。
0552デフォルトの名無しさんNGNG
>>546
だな。 Data::Dumper や Storable の方が遥に高速で効率が良い。
0553デフォルトの名無しさんNGNG
>544
> みんなが驚いたコード教えてよ

print @List[0]
0554デフォルトの名無しさんNGNG
>>553
セミコロンがなくてもいいのかーっ!!ってこと?
0555デフォルトの名無しさんNGNG
あ、いや。本来は

print $List[0];

が正しいのに、思ったように動作していたこと。
0556デフォルトの名無しさんNGNG
>有用なやつで
0557デフォルトの名無しさんNGNG
@List->[0]
↓
@List[0]
0558デフォルトの名無しさんNGNG
print @list[0..4];
とかやるともっと驚けるかもよん。

僕が驚いたのは
@hash{qw/foo bar baz/} = qw/foo bar baz/;
かなー。目から鱗と言うか。

0559デフォルトの名無しさんNGNG
やっぱり Schwartz 変換かな
よく読むとそんなにトリッキーじゃないんだけどね
最初に見たときは小便ちびりそうになった
0560デフォルトの名無しさんNGNG
スライスはラクダ本に載ってるだろ。
スライスで配列のメンバを一つだけ指定してると考えればなんらおかしな
ことではない。557はどうやって解釈するのか知らんけど。
0561デフォルトの名無しさんNGNG
>>557>>553
my %namr2index=();
my @names=qw(foo bar Hoge etc);
@namr2index{}=0..$#names;

あと@List[0]と($List[0])が同じ
0562デフォルトの名無しさんNGNG
@List1 = ('AAA');
@List2 = ('AAA','BBB');

$Scalar1 = scalar @List1;
$Scalar2 = scalar @List2[0];

print "$Scalar1, $Scalar2";

で、

1, AAA

ですが何か?
0563561NGNG
>@namr2index{}=0..$#names;
@namr2index{@names}=0..$#names;
の間違い
0564デフォルトの名無しさんNGNG
なぜ、みんなで変数の基本を晒しあってるんだ・・・?
0565デフォルトの名無しさんNGNG
馬鹿ばっかだから。
0566デフォルトの名無しさんNGNG
@List->[0]
で、これはどう解釈するんだ?
0567デフォルトの名無しさんNGNG
>>566
分かって無い奴が間違っただけだと思うからスルーするが吉な気がするのは俺だけだろうか

リファレンスでは -> 省略できるけどね (←関係ありそうで無い話)
0568デフォルトの名無しさんNGNG
>>566
俺も分からん。。。教えて!えろいひと!
0569デフォルトの名無しさんNGNG
シェルから拝借した${sv}という書き方の延長で
@{av}という書き方もできるのね。
これはスライスにも適用可能。@{av[0,1]}、@{hv{1,3}}

あと、@av->[0]と関係あるかどうかは分らないけど、
av->[0]と@を省略してもOK。
0570デフォルトの名無しさんNGNG
>>569
@を省略しちゃえばavは裸の文字列定数で表されたシンボリックリファレンスに
なるからむしろわかりやすい(use strict refsすれば確認できる)のだが、
@av->[0]はやっぱり俺にはわかんね。

ラクダ本3版の3.2矢印演算子のところには、左側は(ハードでもシンボリックでも
いいけど)リファレンスじゃないとだめって書いてあるんだけどねぇ。
0571デフォルトの名無しさんNGNG
データは@linesでまとめて読み込むのとwhileで1行ずつ読み込むのではどっちがいいんですか?
まとめてだと並び替えとか便利だけどメモリを食うと思うし1行ずつだとメモリは食わないけど並び替えとか難しそうだと思うけど
どっちでやったほうがいいんですか?
0572デフォルトの名無しさんNGNG
>>571
もう既に分かってるじゃん。
メモリ食って困るときは while で、そうでなきゃ @ で
色々なやり方がある、どれがいいかは適当に選べ
0573デフォルトの名無しさんNGNG
まったくだ
自分のやりたい様にやるってのPerlなのに、これだから最近の若者は
0574デフォルトの名無しさんNGNG
大学のunixサーバーで以下のスクリプトを実行したのですが、
input dirname: question
sh: /petit.cgi: not found.
sh[2]: /petitlog.cgi: not found.
sh[3]: /count.dat: not found.
sh[4]: /pastno.dat: not found.
sh: /past/1.dat: not found.
sh: /jcode.pl: not found.
sh[2]: /lock: not found.
と表示されて
うまくいきません。
いろいろ試してみたんですが何が悪いのか良く分かりません。。
どなたか分かる方いらっしゃいましたらご指南願います。

#!usr/bin/perl

print "input dirname: ";
$dirname = <STDIN>;

system("chmod 705 $dirname/petit.cgi");
system("chmod 606 $dirname/petitlog.cgi $dirname/count.dat $dirname/pastno.dat $dirname/past/1.dat");
system("chmod 604 $dirname/jcode.pl");
system("chmod 707 $dirname/lock past");
0575デフォルトの名無しさんNGNG
>574
ファイルが無いって怒られてんじゃん。
0576デフォルトの名無しさんNGNG
>>574
> #!usr/bin/perl
typo?
0577デフォルトの名無しさんNGNG
>>574 system の行の前に
chomp $dirname;
っていれてごらん。$dirname に改行が入ってるからだよ。
0578デフォルトの名無しさんNGNG
@array = (['A', '45', 'dog'], ['C', '23', 'cat'],['B', '5', 'fish']) ;
という配列があったときに2番目の要素をキーとして並べ替えをするには
どのように書いたらよいでしょうか?

調べたところ、CSVライクなデータで3行目のデータをキーとして
並べ替えるときには
@new_array = sort { (split(/\,/,$a))[2] <=> (split(/\,/,$b))[2] } @array;
というのを検索して探し出しました。
 しかし、今回のようにすでに二次元配列として格納されている場合には
どのように並べ替え関数を指定したらよいのか分かりません。
教えてください。
0579デフォルトの名無しさんNGNG
>>578
@new_array = sort { $a->[1] <=> $b->[1] } @array;
0580デフォルトの名無しさんNGNG
ファイルが無い… ただの屍のようだ…
0581デフォルトの名無しさんNGNG
>>578
579ではないが注意点として、new_arrayの各要素を変更すると@arrayの内容も変化してしまうので注意。
コピーしているのはリファレンスであって参照先ではないので。
対策としてdcloneとか思いつくけど(逆に片方変化させるともう片方も変化する、ということを利用もできる)。
0582デフォルトの名無しさんNGNG
>>579

サンクス!試してみます!
0583デフォルトの名無しさんNGNG
パールとは関係ないんですけど
ドスプロンプトでハードディスクのCではなくDに格納されてる
ディレクトリを呼び出すにはどのようにすれば委員でしょうか?
0584デフォルトの名無しさんNGNG
PC初心者板行け
0585デフォルトの名無しさんNGNG
>>584
あの世逝け
0586デフォルトの名無しさんNGNG
ローカルのPerlを使用して
インターネットショートカットファイル.urlの中身
『Modified=00276B6EEE5EC40111』
から更新日時・アクセス日時を読み取りたいと考えているのですが、可能でしょうか?

ググッた感じModified=〜のキーを解析されてる方を見つけることができませんでした。

0587デフォルトの名無しさんNGNG
じゃあ無理ってことだね
0588デフォルトの名無しさんNGNG
>>586
スレ違い
0589デフォルトの名無しさんNGNG
formatの使い方をサンプルを示して分りやすく教えなさい(5点)
0590デフォルトの名無しさんNGNG
UTF-8からSJISに変換したいんですが、
軽い方法は無いですか?
jcode.pmは重すぎて…
0591デフォルトの名無しさんNGNG
HTMLでホームページを作っているのですが、良いフリーCGIがなく
自作でパールのCGIプログラミングをこれから始めようと
思っているんのですが、少し疑問なことがあります。
CGIの中身は全て直に書き込んでいるのでしょうか?
それとも作成ソフトというものがあるのでしょうか?
もし、作成ソフトがある場合、どのような使い方になるのでしょうか?
教えて君の初心者ですが、もし宜しければ教えてください。
0592デフォルトの名無しさんNGNG
作成ソフトみたいなのはほとんど無いよ。
一応あるけどほとんど使ってる人はいない。
普通のエディタでガリガリ書いてる。
0593デフォルトの名無しさんNGNG
板違い厨には放置を
0594デフォルトの名無しさんNGNG
'$a=[1000]->[()];print $a'
これはどうして1000になるんですか?
0595591NGNG
>>592
レスありがとうございます。エディタだけだと知り迷いが吹っ切れました。
>>593
パール言語での作成を考えていたのでこちらでいいのかと思いましたが、
スレ違いだったようですね^^;
失礼しました。
0596デフォルトの名無しさんNGNG
>>594
int(()) は0
[1000]->[0]
[1000] '1000'という要素を一つもつ無名配列の
参照を -> によりデリファレンスして、
[0]で配列の最初の要素(ここでは1000)にアクセス。
0597デフォルトの名無しさんNGNG
>>590
Jcode.pmはちゃんとコンパイルして使ってるか?
コンパイルしないJcode.pmはあくまでもコンパイラの無い環境の為の代替手段だぞ。
0598デフォルトの名無しさんNGNG
myとlocalの違いを教えてください
0599デフォルトの名無しさんNGNG
>>598
ダイナミックスコープとレキシカルスコープで調べてください。
実装の詳細を汁のは難しいです。
0600デフォルトの名無しさんNGNG
>>598
1から嫁
0601デフォルトの名無しさんNGNG
WindowsでActivePerl使っているんですが、
getcってリターンを押すまで入力を受け付けないけど、
1文字何かキー押すだけで入力受け付けるようにできませんか?
cookedモードからrawモードに変えるみたいなもんです。
nethackみたいなゲーム作るにはそれができないと無理なんで・・・。
0602デフォルトの名無しさんNGNG
>>601
http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlfaq8.html#How_do_I_read_just_one_key_witho
0603デフォルトの名無しさんNGNG
>>602
ありがとうございます
use Term::ReadKey;
ReadMode('cbreak');
$key = ReadKey(0);
ReadMode('normal');
これでできました
0604デフォルトの名無しさんNGNG
WindowsでActivePerl5.8で勉強中です。
$first = <STDIN>;
print $first;
$second = <STDIN>;
print $second;
とすると、入力→出力、入力→出力という動作になりません。
改善する方法はあるでしょうか。
0605デフォルトの名無しさんNGNG
while (<STDIN>){
print;
}
0606デフォルトの名無しさんNGNG
perl -ce 'BEGIN{print "begin\n"}END{print "end\n"}'
ラクダ本第二犯には-cオプションを指定したときでも
BEGIN,use,ENDの三つは実行されるとありますが、
ENDの出力がありません。どうしてでしょうか?
またオプションを-ecと逆にしたときは何も表示されません。
これは仕様ですか?
0607デフォルトの名無しさんNGNG
>またオプションを-ecと逆にしたときは何も表示されません。
これは当たり前でした
0608デフォルトの名無しさんNGNG
>>606
Changes5.6より:

[ 4323] By: gsar on 1999/10/09 18:48:31
Log: don't run END blocks when running under -c switch (older,
rarely useful behavior may still be obtained by putting
BEGIN { $^C = 0; exit; } at the end of the script)
0609デフォルトの名無しさんNGNG
>>608
どうもありがとうございます。
0610デフォルトの名無しさんNGNG
$perl -e 'while(($k,$v)=each %::){$l=length $k;$max=$l>$max?$l:$max;push @a,[$k,$v]}
for(@a){print $_->[0] . (" "x($max+1-(length $_->[0]))) . $_->[1] . "\n"}'
とすると、あるシンボルテーブルを一つのハッシュのように見ることができます。

ここで、各エントリをハッシュ値と見なして、
*::a{SCALAR,ARRAY,HASH,CODE,GLOB,FILEHANDLE,NAME,PACKAGE}に一挙にアクセスするには
どうしたらいいでしょうか?
*::a{SCALAR}と\$aは同じ意味ですので、リファレンス値のリストを取得したいと思います。

perl -e '$a="";print *::a{SCALAR}'
SCALAR(0x8181f64)
キーが一つの場合は上のようになるのですが、
スライスとしてアクセスする方法がわかりません。
perl -e '$a="";@a=();print *::a{SCALAR,ARRAY}' #ARRAYのリファレンスだけ取得できる。
perl -e '$a="";@a=();print @*::a{SCALAR,ARRAY}' #syntax error
perl -e '$a="";@a=();print @{*::a{SCALAR,ARRAY}}' #何も表示されない
0611デフォルトの名無しさんNGNG
少し説明がごちゃごちゃしてしまいました。リファレンスのリストが欲しければ
@KeyList=(SCALAR,ARRAY,HASH,CODE,GLOB,FILEHANDLE,NAME,PACKAGE);
とでもして、それを*::a{$KeyList[$i]}とでもすれば得られます。
そうではなく、型グロブをハッシュのように操作する方法が知りたいと思っています。
シンボルテーブルを2段階のハッシュのようにみなしてアクセスすることは不可能なのでしょうか。
0612デフォルトの名無しさんNGNG
>>610-611
そうやってアクセスする事で何をしたいのか
さっぱり分からんのだが。

my$f="%20s %17s %16s %15s %15s %15s %s\n";
my@t=qw(SCALAR ARRAY HASH CODE GLOB IO);
printf$f,"SYMBOL",@t;
while(my($k,$v)=each%::){printf$f,$k,map*{"$v"}{$_},@t}
0613デフォルトの名無しさんNGNG
>>612
ありがとうございます。
perl -e '@a;%a;my @t=map *main::a{$_},(SCALAR,ARRAY,HASH);print "@t"'
型グロブに対するスライスはちょっと無理そうなので、
このmap関数で代用するのがよさそうですね。なるほど。。。
0614デフォルトの名無しさんNGNG
正規表現オプションの「g」は何の略なんでしょうか?
globalですかね?
0615デフォルトの名無しさんNGNG
そだょ
0616デフォルトの名無しさんNGNG
>>615
ありがとうございます。
0617デフォルトの名無しさんNGNG
全文検索でヒットした奴を
行の真ん中に表示されるようにしたいんですがどうすれば良いんですか?

つまりglobalを検索したとすると、

                      global SchoolNet Director
 we have increased the US publics global awareness
                CanWest global Communications
              help address global warming issues
   California Wood Use Endangers global

↑こういう風に結果を出したいんです。
0618デフォルトの名無しさんNGNG
行全体を出力してその真ん中に目的の語がくるようにしたいという意味です。
0619デフォルトの名無しさんNGNG
>>617
おそらく質問が板違い
0620デフォルトの名無しさんNGNG
>>619
CGIじゃない
perlの授業で出てきた奴
0621デフォルトの名無しさんNGNG
pos?
0622デフォルトの名無しさんNGNG
>>617 KWIC と検索して出てきたスクリプトをパクる。
0623デフォルトの名無しさんNGNG
my @line = (
  'global SchoolNet Director',
  'we have increased the US publics global awareness',
  'CanWest global Communications',
  'help address global warming issues',
  'California Wood Use Endangers global',
);
my $word = 'global';

my($max, @pos);
for (@line) {
  my $pos = index $_, $word;
  $max < $pos and $max = $pos;
  push @pos, $pos;
}
print ' ' x ($max - shift @pos) . "$_\n" for @line;
0624デフォルトの名無しさんNGNG
>>619-622
バカは下手にでると際限なく威張りますね
わからないならレスしなくていいよ。

>>623
最初からそれを書けよ
とりあえずそれでいいよ。もらっとく。

お前らもっと初心者にやさしくしろよ。
答えられないなら黙ってろ。
0625デフォルトの名無しさんNGNG
多分それだと評価低いよ。行にキーワードが含まれないときや、
複数含まれるときのことを考えていない。そもそも課題とは
ちがうことしてるし。
0626デフォルトの名無しさんNGNG
課題でPerlかぁ・・・俺は初めてのプログラミングの課題はTcl/Tkでランチャー作らされた記憶が、あいやシェルスクリプトだったけな
0627デフォルトの名無しさんNGNG
>>624
       (  _,, -''"      ',             __.__       ____
   ハ   ( l         ',____,、      (:::} l l l ,}      /      \
   ハ   ( .',         ト───‐'      l::l ̄ ̄l     l        │
   ハ   (  .',         |              l::|二二l     |  ハ こ  .|
       ( /ィ         h         , '´ ̄ ̄ ̄`ヽ   |  ハ や │
⌒⌒⌒ヽ(⌒ヽ/ ',         l.l         ,'  r──―‐tl.   |  ハ つ │
        ̄   ',       fllJ.        { r' ー-、ノ ,r‐l    |  ! め │
            ヾ     ル'ノ |ll       ,-l l ´~~ ‐ l~`ト,.  l        |
             〉vw'レハノ   l.lll       ヽl l ',   ,_ ! ,'ノ   ヽ  ____/
             l_,,, =====、_ !'lll       .ハ. l  r'"__゙,,`l|     )ノ
          _,,ノ※※※※※`ー,,,       / lヽノ ´'ー'´ハ
       -‐'"´ ヽ※※※※※_,, -''"`''ー-、 _,へ,_', ヽ,,二,,/ .l
              ̄ ̄ ̄ ̄ ̄       `''ー-、 l      ト、へ
0628デフォルトの名無しさんNGNG
現在、ファイルの中身を変数に一気に格納するのに

open FILE ,'hoge.txt';
while (<FILE>) { $text .= $_ }
close FILE;

としています。
初心者的にはループが起きているので効率が悪く感じています。
これ以上にエレガントなやりかたってあるのでしょうか?
お願いします。
0629デフォルトの名無しさんNGNG
>>628
たしか最近どっかで話題になってたと思うが、perlvar(1)に例示されてる

open my $fh, "foo" or die $!;
local $/; # enable localized slurp mode
my $content = <$fh>;
close $fh;

が面倒がなくていいと思う。
0630デフォルトの名無しさんNGNG
>>629

ありがとうございました!
0631デフォルトの名無しさんNGNG
>>628
>>169-170

現スレくらい検索しろや
0632デフォルトの名無しさんNGNG
perlモジュールの量は圧倒的だな。俺ハールやってて良かった、ムフフ、、、、
、、、ふふふふふああーあーあーーあーああaaaaa\saa.a...a..a.aksskjalksksl
alsllalllalalaskls:::aaaa9)))))99)))998)((88(88(8
(perl (def((((((8 (defun perl () 8(99 )))9 ) 9))))) ))))))))SS))9)
0633デフォルトの名無しさんNGNG
CommonLispからPerlへのトランスレータとかないの?
0634デフォルトの名無しさんNGNG
それはLispスレで聞くべきかと
0635デフォルトの名無しさんNGNG
>>633
それって嬉しいのか?
CL でもライブラリは FFI 使えばなんとでもなるし。
0636デフォルトの名無しさんNGNG
PERLの変数はどれくらいの容量のデータまで格納できるんですか?
画像のアップロードを作るときとかフォームのデータや画像データを変数に格納しなきゃならないんですが
画像サイズが10MBとかになっても大丈夫ですか?
0637デフォルトの名無しさんNGNG
>636
環境によって違うが、大抵は4GB弱だな。
最も、そんなにメモリを積んでるマシンは少ないだろうから、実際にはそのマシンのメモリ次第だが。
0638デフォルトの名無しさんNGNG
perl自体は2GBくらいまでは大丈夫だろ。
0639デフォルトの名無しさんNGNG
>>636
WebProg板の方が詳しい人いるんじゃね?
サーバーの設定とか関わってくるのかもしれんし。
Perl的には物理メモリ+スワップ領域をこえさえしなけりゃ大丈夫だろ
0640デフォルトの名無しさんNGNG
>>636
1変数にそんな大量なデータを入れることがわかっているなら
そうならないようなプログラムにすりゃいんじゃねの?
だいたい一時期にすべての内容をメモリーにバッファリングする
必要があるの?そこから考え直したほうがいいと思うよ。
0641デフォルトの名無しさんNGNG
>>640
フォームで送信したときread(STDIN,$all_data,$ENV{'CONTENT_LENGTH'});で受け取っているんですが
送信した時$ENV{'CONTENT_LENGTH'}にフォームと画像の全てのデータが含まれているため
メモリにバッファリングしないようにすることができないんです
0642デフォルトの名無しさんNGNG
open O, ">$ofile" or die;
my $len=$ENV{'CONTENT_LENGTH'};
while($len) {
 my $data,$size=64*1024; # 64Kbyteづつ
 $size = $len if ($len<$size);
 read(STDIN,$data,$size);
 print O, $data;
 $len-=$size;
}
close O;
0643デフォルトの名無しさんNGNG
うpろだなんざその辺にソースごろごろ転がってるからそれ使えや
使わなくてもいいから読んでみれ
0644デフォルトの名無しさんNGNG
>>642
それだと$len=$ENV{'CONTENT_LENGTH'};で$lenに10MBの
データを格納してしまっていることになるんじゃないんですか?
0645デフォルトの名無しさんNGNG
>>644
$ENV{'CONTENT_LENGTH'} には何が入ってんの?
0646デフォルトの名無しさんNGNG
>>645
かず

>>642
64kBでも大き過ぎるんちゃう?
0647645NGNG
>>646
何故お前が答えるんだ
0648646NGNG
>>647
板違いだったからだよ。
0649デフォルトの名無しさんNGNG
>>645
$ENV{'CONTENT_LENGTH'}はフォームに入力されたデータと画像ファイルのデータ
が一緒になった長い文字列です。
それぞれboundaryという文字列で区切られています。
0650646NGNG
>>649
なんでそんなとこにそんなデータがすでに入ってるんだよ
read(STDIN あたりのひきすうのならべかたがまちがっていないか?
0651デフォルトの名無しさんNGNG
>>650
すいませんただのデータのバイト数でした
0652デフォルトの名無しさんNGNG
画像ファイルだけだったらいいんですがフォームデータも混じっているため
boundaryという文字列でsplitしなければならないのでboundaryの位置が一定じゃないので
>>642のプログラムみたいに$sizeの値を固定できないんです。
0653646NGNG
>>651
板違いだから下の方でこそこそとやる気はないのか?俺だって粘着してるし。
あと、結局これは車輪の再発明になるから素直にuse CGIするか
cgi-lib.plの2.18を拾ってきてrequireした方がいいよ。
あえて挑戦するなら$ENV{'CONTENT_TYPE'}からboundaryを取り出して
while (<STDIN>)でまわしながらboundaryかboundaryのお尻に--が付いているやつか
ヘッダかボディか調べていくのが楽でいいかなと。
どうしてもreadを使いたいならcgi-lib.plをひたすら読め。インデントを修正しながら読め。
実際有名なCGIはこれからコピペした臭いがプンプンするぞ。
0654デフォルトの名無しさんNGNG
sendkeyを使わずにキー入力させることはできますか?
0655デフォルトの名無しさんNGNG
Perlってなんて読むの?
0656デフォルトの名無しさんNGNG
ぺろる
0657デフォルトの名無しさんNGNG
まじ?
0658デフォルトの名無しさんNGNG
ラクダ本3章まで暗記した。ハァハァ
でもちょっとよく理解出来なかったところや、
忘れ欠けてるところがある。復習しないと。
0659デフォルトの名無しさんNGNG
生真面目でいつも勉強ばっかりしてるんだけど
大して成績のよくない奴っていたよな。
0660デフォルトの名無しさんNGNG
>>655
ぱぁる
0661デフォルトの名無しさんNGNG
>>659
なにが言いたいんですか?w
暗記力のなくなった年寄りの僻みですか?ww
0662デフォルトの名無しさんNGNG
まあまあ。>>658 はレイ・ブラッドベリの『華氏451度』の世界に
にそなえて準備をしているだけなんだよね。
0663デフォルトの名無しさんNGNG
Perlの良さって何よ?
0664デフォルトの名無しさんNGNG
>>663
何の略か調べたら少しは分かるんでないかな
0665デフォルトの名無しさんNGNG
正直、ラクダ本をまともに全部読むのは間違ってる。

お前ら、国語辞典を1ページ目から読んだりするか?
俺はPerlの辞典というような取り扱いをしてる。
「社会工学」は読んだけど、他は全部斜め読み。
0666デフォルトの名無しさんNGNG
まともに読みましたが、何か?
0667デフォルトの名無しさんNGNG
一遍ざーっと流し読みしてなんとなく頭に入れる
必要になったら読み返せばいいから詳細は忘れてOK
0668デフォルトの名無しさんNGNG
ProgrammingPerlよりもperldocを熟読した方がいい
英語の勉強にもなるし、いつでもどこでも読める文章だし
0669デフォルトの名無しさんNGNG
Perlでreturnするときに、複数返すことできますか?
例えば、return($tt, $gg);みたいに
0670デフォルトの名無しさんNGNG
>>669
それでできるのに聞くということは、試していない証拠だな。
0671デフォルトの名無しさんNGNG
perl -e'print sub{return("a","b")}->(),"\n"'
0672デフォルトの名無しさんNGNG
>>670
いあ、それやってるんだけど、呼び側の受け取り方法がわからなくて
0673デフォルトの名無しさんNGNG
>>672
($b,$n)=func;とか
0674デフォルトの名無しさんNGNG
死ぬほど簡単な質問でとても申し訳ありません。
いくら調べても分かりませんでした。

PHPで
while(true){
 $a[] = $i;
 $i++;
}
とすれば配列に値がどんどん入ります。
これをperlでコーディングするにはどうすれば良いでしょうか?
どこを見ても、最初に@a = (1,2,3,4);
と最初に配列の初期化をしています。初期化なしでいきなり入れ込む方法を教えて下さい。
0675デフォルトの名無しさんNGNG
>>674
$a[$i]=$i;
0676デフォルトの名無しさんNGNG
教えて下さい
サブルーチンをコールする時に&つける時とつけないときの違いはなんですか?
0677デフォルトの名無しさんNGNG
push @a, $i
0678デフォルトの名無しさんNGNG
>>674
機能上はpushだけど、
その書式はperlにも入れてほしいよね。
ものぐさ度No.1が誇りなんだから。
0679デフォルトの名無しさんNGNG
func(1,2);
sub func{
sub subr{print +(caller)[2]," @_\n"}
&subr;
&subr();
subr;
subr();
}
0680デフォルトの名無しさんNGNG
>>676
サブルーティンは、"&" という記号を頭に付けて呼び出すことがで
きます。 Perl 5 では、"&" はなくてもよく、宣言済みのときに
は、括弧も省略できます。 (ただし、defined() や undef() の引
数として使う場合のように、サブルーティンを名指しするときには
"&" は省略できないことに気を付けてください。 また、サブルー
ティン名や、&$subref() や &{$SUBREF}() 構造を使ったリファレ
ンスでサブルーティンの間接呼び出しをするときにも省略できませ
ん。
とperlsubに書いてある。
0681デフォルトの名無しさんNGNG
phpのpreg_match関数に相当するperlの関数を教えて下さい。
0682デフォルトの名無しさんNGNG
>>681
m//
0683デフォルトの名無しさんNGNG
>>682
$str="foobaa hogehoge hugahuga";
if(preg_match("/hoge/i",$str)){ print "ある"; }
こうする方法が分かりません。
0684デフォルトの名無しさんNGNG
if($str =~ /hoeg/i){
...
0685デフォルトの名無しさんNGNG
>>676
&があるとプロトタイプのチェックが行われないのは大きな違いだと思う。

sub f($) {my($x)=@_; print "$x\n"}

と定義しておいたときに以下を比べればわかるだろう。

f();
f(10);
f(10,20);
&f();
&f(10);
&f(10,20);

また&なしのときはあらかじめ宣言されていれば引数の周りのカッコを省略
できるが、&つきのときは省略できない。

f 10;
&f 10;

さらに丸カッコごと引数を省略した&<関数名>には現在の@_をまるごと渡すと
いう機能がある。&なしにはその機能はない。

sub g { &f; }
sub h { f; }

g(10)
h(10)

0686デフォルトの名無しさんNGNG
いまどき&をつけて関数呼び出してる奴は○○
0687681NGNG
>>684
ありがとうございます。

今、yahooメールを全部ローカルに保存するperlスクリプトを作っているのですが、
もしかして、すでにありますか?

yahooメールのhtmlから日付とサブジェクトと本文を抽出して、

2004-07-08-10-05-35-ひさしぶり.txt
というファイルを作って、内容に本文を入れるってのを作る予定です。

たぶん、ここに居る人たちなら、1時間ぐらいで作ってしまうんだろうなぁ。
0688デフォルトの名無しさんNGNG
>さらに丸カッコごと引数を省略した&<関数名>には現在の@_をまるごと渡すと
>いう機能がある。

@_は他の特殊変数と同じでダイナミックスコープであり、"&f"という形で
サブルーチンを呼び出したときだけ、そのまま引き継がれるということですよね。
他の呼び出し形式の場合は関数の頭でlocal @_=(引数)として、呼び出し元の@_の値を
待避してるのと同じですね。
0689681NGNG
>>687です。
ヤフーメールサーバがクッキーでクライアントを認識してるっぽいですが、
どうすればメールサーバをだませるでしょうか?
0690デフォルトの名無しさんNGNG
>>689
クッキーもらえばいいんじゃないの?
0691687NGNG
>>690
もう少し具体的にお願いします。

クッキーの制限に「自分で送り込んだクッキーからしかデータを取り出せない」
というものがあるので、推測ですが、ブラウザがサーバとクッキーの対応表を
持っていて、「このサーバにはこのクッキーを渡す」という処理をしているのだと思います。

という事は、今から作ろうとしているperlプログラミングはヤフーメール限定なので
「問答無用でこのクッキーを渡す」という記述ができれば、メールサーバを騙せると思います。

もしこの理解で間違いなければ、その騙す方法を教えて下さい。
0692デフォルトの名無しさんNGNG
http://search.luky.org/fol.2002/msg00271.html
やってみてないけど、この辺とか参考になるのでは。
0693687NGNG
>>692
ありがとうございます。
私と同じような事をしようとしていますね〜。というか、同じソースのような・・・w
0694デフォルトの名無しさんNGNG
>>693
Cookieヘッダ出力する行はGETのあとにないとだめだろうな。

LWPとHTTP::Cookies使った方が楽そうな気もするけど、スクラッチで
書くのもそれはそれで勉強になるからお好みで。
0695デフォルトの名無しさんNGNG
>phpのpreg_match関数に相当するperlの関数を教えて下さい。

Perl の m// に相当するのが preg_match (perl regular expression: match)なわけだが _| ̄|○
0696デフォルトの名無しさんNGNG
>>691
yahooメールは設定しだいでメル鯖と直で話せるからそっちの方が簡単かもね
http://help.yahoo.co.jp/help/jp/mail/mailsoft/mailsoft-01.html

ちなみにあなたが送受信の対象にしてるのはWeb鯖でメル鯖じゃないですよ
0697デフォルトの名無しさんNGNG
ExtUtils::MakeMaker使うとき、autoconfみたいにsendmailのありかを
探してソースに埋め込むみたいのはどんな感じでやるのが普通なの
だろうか?
0698デフォルトの名無しさんNGNG
そこまで高度なことはこのスレは対応してません
0699デフォルトの名無しさんNGNG
>>697=698
0700デフォルトの名無しさんNGNG
>>697
普通PurePerlなモジュールをプリプロセスしてインストールする、ということはしないな。
動的に探すか、ユーザーに指定させるか、~/.mymoduleconfigでも作る(こんなことするのはCPAN.pmしか知らんが)かするのが一般的。

つーわけで、どうしてもやりたいなら適当にやりたいようにやれ。

0701デフォルトの名無しさんNGNG
imgタグでCGIスクリプトを呼び出して、そのスクリプトでLocationヘッダを
用いて別のページに飛ばせますか? こうするとContent-type: image/gif(jpeg)
ヘッダとLocationヘッダをひとつのスクリプトで使うことになってうまくいかないんですが・・・
0702デフォルトの名無しさんNGNG
>>701
http://pc5.2ch.net/test/read.cgi/php/1086715675/
0703名無しさん@そうだ選挙に行こうNGNG
>>701
print "Location: http://www.google.co.jp/intl/ja_jp/images/logo.gif\n\n";
はページ移動ではなくHTML内の画像として表示されたけど、
print "Location: http://www.google.co.jp/\n\n";
は×マークだった。

まあ無理だろうなあ。
0704名無しさん@そうだ選挙に行こうNGNG
複数行あるファイルから、改行をなくしすべての行を結合して一つの変数に入れたいとき
while(<FILE>){;
chomp;
$data .= $_;
}
今はこのようにしているのですが、一行でズバッと記述する方法ってないですか?
0705名無しさん@そうだ選挙に行こうNGNG
改行を削るとなると1行でズバッとは難しいが、
たぶんループするよりは

{
 local($/);
$data = <FILE>;
}
$data =~ s/\n//gs;

の方が速いだろう。15KB,200行ぐらいのファイルで
試したけど3割ぐらい短い時間で終わったよ。


0706名無しさん@そうだ選挙に行こうNGNG
map {s/\n//} <FILE>
0707704NGNG
>>705
なるほど置換すれば早くできるのか
>>706
mapがよくわからんのです

ありが�d
0708デフォルトの名無しさんNGNG
>>705
置換オプションの s は不要なのでは?
0709デフォルトの名無しさんNGNG
join(/\n/,<FILE>);
0710デフォルトの名無しさんNGNG
>>709
イミフメイ
0711705NGNG
>>708
はい本来は不要です。

$*に影響されるパターンかどうか気にするのメンドウだから、
複数行が含まれた文字列に正規表現使うときはsかmを必ず
つけることにしてるのでした。
0712デフォルトの名無しさんNGNG
>>705
>>169-170らへんの話とは無関係?
0713↑NGNG
>>705じゃなくて
>>704だった
0714デフォルトの名無しさんNGNG
実行時の引数として整数の配列を与えると,各要素を昇順(小さい順)に並べ替えて出力
するスクリプトを作る、ただし、perlのsort命令を使わない。という
プログラムを教えてくれませんか?
バブルソートを用いたプログラムを教えて欲しいです。
0715705NGNG
>>713
改行含んでいいならそのまま使えるけど、
改行を削ろうとするともう一工夫いるって話
だろ。
0716デフォルトの名無しさんNGNG
20000バイトほどのファイルをreadで1000バイトずつ読み込みたいのですが、
どのように書けば夏バテし難いさっぱりとしたコードになりますか?
0717デフォルトの名無しさんNGNG
>>716
どう書いてたら夏バテしそうになったの?
0718デフォルトの名無しさんNGNG
>>714
宿題は自分でやろうな
どうしても困ったらgoogleに聞け、サンプルコードがいくらでも転がってる
0719716NGNG
>>717
my($total, $read, $buf, $data);
$total = $read = 0; $buf = $data = '';
while($read = read(IN, $buf, 1000)) {
  print "$read 読みました\n";
  $total += $read;
  $data .= $buf;
}
print "全部で $total 読みました\n";

なんですが、ファイルハンドルINのファイルのサイズが1000に満たないときは
どうなるか考えていたら目が夏バテしそうになりました。
0720デフォルトの名無しさんNGNG
>>715
ちなみに
s/\n//g より tr/\n//d のが速いと思われ
0721デフォルトの名無しさんNGNG
てか\rも消そう。
0722デフォルトの名無しさんNGNG
ていうかたいていの処理系において、
1000という中途半端な数字を使うことは好ましくない
0723デフォルトの名無しさんNGNG
厨房用のOSには\rが付いている。
0724705NGNG
>>720
s//をtrにしたら705と同じファイルでさらに3割ほど実行時間が短縮
しました。結局もとのやつの約半分の時間で終わります。trって速い
ですなー。
0725714NGNG
>>718
いろいろ調べたんですけど、理解できなくて。
もう少しがんばってみます。ありがとうございます。
0726716NGNG
>>722
でも、読み込みを1000バイトで区切ってそこで一旦別の処理をしたいというときは
どうすればいいんですか?
0727デフォルトの名無しさんNGNG
ソートアルゴリズムを知らない俺でも
配列の要素1つに注目して後続の要素と値の大小を比べ、配列内の位置を交換していく手法くらい思いつくけど
ちなみにこれは何ソートと呼ばれるんだ?
0728デフォルトの名無しさんNGNG
>>726
>>722が言ってるのは1000って数字がコンピュータ的に半端な感じがするってだけかも
ひょっとしたらハードウェア的に最適な値が存在するのかもしれないが気にするほどでもないんじゃないかな
0729デフォルトの名無しさんNGNG
>>726
ほとんどのOS, たいていのライブラリによる入出力、バッファリングでは
1000などという中途半端な値は使われないので
512 4096 8192, 65536 などの値を使っとけ
0730デフォルトの名無しさんNGNG
で、誰も肝心の >>716 の質問には答えてないわけだが。
ていうかファイルサイズがバッファサイズ (?) に満たなくても
>>719 で問題無いと思うのだが?
0731デフォルトの名無しさんNGNG
>>730
皆そう思っていたから、特にコメントつけないのでは?
>>729
だからといって、1000バイトで区切ってはいけないという
ことは無いはず。そんなものいちいち考えてやらんでも
よかろうに・・と思うが。なので 1000バイトで切ってイイヨ。
0732デフォルトの名無しさんNGNG
ネットワーク越しの操作では必ずしもキリのいい数字ではない罠
0733716NGNG
いやでも1000バイトに固定してしまうと、例えば25716バイトのファイルを読み込むときに
25回ループして読み込んだ後716バイトが残るじゃないですか。
こうなった場合残り716バイトに対して1000バイト読み込もうとするのは
何か都合が悪そうな気がして仕方がないのですが、どうするのがいいのでしょう?
0734デフォルトの名無しさんNGNG
>>727
バブルソート
0735デフォルトの名無しさんNGNG
>>733
君がどう思おうが perl はそういう使い方を正式にサポートしている。

http://perldoc.com/perl5.8.4/pod/func/read.html
http://flex.ee.uec.ac.jp/texi/perl/perl_90.html

サイズが分かっていて、どうせ全てを変数に入れるのなら、始めから
read IN $data, $size で一気に読み込んでしまえばいい。
0736デフォルトの名無しさんNGNG
>>733
ちゃんと read の説明読んでみなよ。
その場合、716バイト読んて、戻り値に716が帰る、
もう一回 read 実行すると、 end-of-file だから0が
帰り、while から抜ける。ね、大丈夫でひょ。
0737716NGNG
そうか。>>719では1000バイトに満たないのにreadする他に
0バイトしか残っていないのにreadする事があるのか。
なんかもう読み込めないのにreadするのはちょっと無駄な感じがしますね。
えーと、今回は全部読み込む事よりも1000バイトずつ区切りながら読み込む事が
重要です。
0738デフォルトの名無しさんNGNG
>>737
ていうか、最初は気持ち悪いのかも知れないけど、
>>719 で定石通りなのでそのまま突き進んでよし。
C で read() 使って書くときも同じような感じで書くよ。
0739デフォルトの名無しさんNGNG
>なんかもう読み込めないのにreadするのはちょっと無駄な感じがしますね。
これは違うと思うな、もうデータが無いことはどこかで検出する必要が
あるわけで、それを行っているだけと、考えれば無駄でもなんでもない。
それに0バイトをreadしにいっているわけではないことに気がつかないと。
0740デフォルトの名無しさんNGNG
どうしてもきっちり読んで終わりたいのであれば、
最初に、 $len = -s $file; で長さを求め、
$len/1000 回と、$len%1000が0以上なら+1回読めば
いいんじゃないのか?
しかし、そんな細かい頭では、perl使ってる意味ないじゃん。
0741デフォルトの名無しさんNGNG
おまいら話が逸れすぎ。

> どのように書けば夏バテし難いさっぱりとしたコードになりますか?
だ。
0742デフォルトの名無しさんNGNG
716が勝手に夏バテしてるだけ。
0743デフォルトの名無しさんNGNG
>>716
そんなに気になるならとりあえず、while{..} の中に、
last if ($read<1000); いれて、即刻涼め。
0744714NGNG
だめだ、サンプルみたいなのはあったけど、理解できない・・・
理解できる方、解答お願いできませんでしょうか?よろしくお願いします。
0745デフォルトの名無しさんNGNG
うごくかな?
sub sort{
 local (*a)=@_;
 for(my $i=0;$i<$#a;$i++) {
  for(my $j=$#a;$j>$i;$j--) {
   if($a[$j]<$a[$j-1]) {
    ($a[$i],$a[$j])=($a[$j],$a[$i])
   }
  }
 }
}
0746デフォルトの名無しさんNGNG
あ・・・
($a[$j],$a[$j-1])=($a[$j-1],$a[$j])
0747デフォルトの名無しさんNGNG
>>745

746の修正を入れれば動く。&sortとして呼ばないとシステムの
sortが呼ばれるのに気がつかずしばらく悩んだのは内緒だ。
0748デフォルトの名無しさんNGNG
perlスクリプトをHTMLに埋め込むことって出来ますでしょうか?
例えばpingを打ちたいと思ったら
CGIだと
クライアントから要求→サーバがping実行→クライアントに実行結果を返す
ですが、HTMLの中にスクリプトを埋め込むことによって、クライアントからpingを打つことは可能でしょうか?
うまく意味が伝わらなかったらごめんなさい_no
0749デフォルトの名無しさんNGNG
>>748
まあ、>>1嫁
0750デフォルトの名無しさんNGNG
>>747
override する手もある罠。
0751748NGNG
>>749
すみません。
CGIのことではなかったので・・・
あちらで聞いてみますね。お邪魔しました。
0752716NGNG
実は元から最もシンプルな書き方が出来ていたみたいですね。
自分が勝手に夏ボケしていたようです。
このまま>>719をベースにする事にします。
相手してくださった皆様どうもありがとうございました。
0753714NGNG
>>745>>746>>747
ありがとうございます。参考にしてがんばってみます。
0754745NGNG
>>747
そういえば呼び方書かなかった・・・?
あと配列渡しは @data=(2,5,3,1,6,7,8); ってなとき、
&sort(\@data); って感じで。

0755デフォルトの名無しさんNGNG
if ($a == $b && $b == $c && $c == $d){
 なんたらかんたら;
}

上の($a == $b && $b == $c && $c == $d)の部分を
もっと簡潔に書く方法ってありませんか?
0756デフォルトの名無しさんNGNG
文字列なら ("$a$b$c$d" eq "$a"x4)
0757デフォルトの名無しさんNGNG
あ、文字列に関係ないか・・・
0758デフォルトの名無しさんNGNG
>>755
横に並べるからみっともないのであって、縦に並べると非常にわかりやすくなるです。
if (
  $a == $b # 等幅フォントなら半角空白で条件式がそろえられるし、
 and $b == $c # コメントを入れたりも出来るし、
 and $c == $d # 修正/削除も楽だし。
 ){
 なんたらかんたんら
}

でもって、数値比較しているんだから、
$a+$b+$c+$d == $a * 4
でもいいと思うし。
0759デフォルトの名無しさんNGNG
2+1+1.5+3.5==2*4 ですが
0760デフォルトの名無しさんNGNG
!grep {$a != $_} $b, $c, $d

わかりにくそう。
0761デフォルトの名無しさんNGNG
if((grep{$a == $_}$b, $c, $d)== 3){
print 'true';
}
成功したのが3回なら、ってどう?
0762デフォルトの名無しさんNGNG
やっぱ >>756 が、いちばん perl らしくてスマートでないか?
0763デフォルトの名無しさんNGNG
>>762
文字列であるとして
$a == "hoge"
$b == "hog"
$c == "ehoge"
$d == "hoge"
だったらどうなるの?

if (($a, $a, $a) == ($b, $c, $d)) {...}
0764デフォルトの名無しさんNGNG
>>763 パチパチ
0765755NGNG
いろいろありがとうございます。
ちなみに$a〜$dに代入するのは数値です。
なので>>756の記述は使えませんです。
う〜ん、やっぱり普通に縦に記述していくのがいいのかなぁ。
0766デフォルトの名無しさんNGNG
761は却下ですか?そうですか
0767755NGNG
って書き込んでる間にレスが・・・
>>763さんありがとうございます!
なるほど、かなりスマートでわかりやすいです。
さっそく使わせてもらいますね。
0768デフォルトの名無しさんNGNG
わろたw
0769デフォルトの名無しさんNGNG
@array = ($a, $b, $c, $d);
if((grep{$array[0] == $_}@array[1..$#array]) == $#array){
print 'true';
}

うーん、こっちの方が汎用性あると思うんだけどなあ、
やっぱ駄目ですか?そうですか
0770755NGNG
>>769
ごめんなさい。
どちらもすてがたいです。
実際処理するとなるとどっちの方が軽いですかね?
0771デフォルトの名無しさんNGNG
甘えすぎ
0772デフォルトの名無しさんNGNG
>>763
> if (($a, $a, $a) == ($b, $c, $d)) {...}
リストってスカラコンテキストでは最後の要素を見るから、
if ($a == $d) {...}
という解釈になるんじゃないの?
0773755NGNG
>>771 すいません、甘えすぎました。
>>772 そうなんですか?
自分で動く事を怠っていてはだめですよね。
ちょっといろいろ試してみます。
0774デフォルトの名無しさんNGNG
($a, $b, $c, $d) = (2, 1, 3, 2);
if (($a, $a, $a) == ($b, $c, $d)) {
print 'hoge';
}
--
hoge
0775755NGNG
>>772
>>774
ホントですね・・・。
>>769さんのはちゃんとできました。
なんだか失礼な事しちゃってごめんなさい。
とりあえずは>>769さんのを使わせていただきます。
いろいろありがとうございますです。
0776デフォルトの名無しさんNGNG
>>759
わははー
orz・。
0777デフォルトの名無しさんNGNG
>>775
初心者のうちは何かと気の利いたコードを書こうとしがちですが、
後で見たときに「何してるんだろう?」と思うようなコードを書くくらいなら、
素直に
  if ($a==$b and $b==$c and $c==$d) {...}
と書いた方が、後々有益だと思いますよ。
# そもそも「簡潔」な書き方を求めていたような・・・
ちなみにこのような書き方をする場合、== の左右にはスペースを
書かない方が見やすいこともあります。
0778デフォルトの名無しさんNGNG
>>777
Space around most operators.
0779デフォルトの名無しさんNGNG
>>778
777が言ってるのは条件をたくさん並べる時の話では?
if ($a == $b and $b == $c and $c == $d) {...}
だと何だか締まりが無いが、
if ($a==$b and $b==$c and $c==$d) {...}
だとまとまりがあってすっきりする。
Cなんかでも同じだが、普段は空白入れても過剰な場合は
削るってのは当たり前だと思うが。
0780デフォルトの名無しさんNGNG
漏れ的には、一回だけなら758さんのタテ並べ、
複数回処理するなら、769さんの案をサブ化して使いたい。
0781デフォルトの名無しさんNGNG
my %ok;
$ok{ ($a) x 4 } = 1;
if($ok{$b, $c, $d}){
# ...
}
#まッ、いろいろな方法があるって事で
0782デフォルトの名無しさんNGNG
$a == $b and $b == $c and $c == $d
$a == $b が真で $b == $c が真であれば $a == $c は真であると思うのだが、
その比較が無いという事は勝手に $a == $c の比較を行ってはいけないのだろう。
んー、よくわからないぞ?
&&やand演算子を使うという事はそれ以前が成立しない場合速攻で偽って事であってブツブツ...
0783デフォルトの名無しさんNGNG
俺も条件を縦に並べることがあるが、それは1つ1つの条件が長い場合で
あって、この程度ならば777案でいいと思う。
779も言っている通り過剰な空白は削るべきで、それは縦の空白も同じ。
横に書けるものをわざわざ縦に書いて、無駄に風通しの良いコードを
書くことに何のメリットも感じられない。
可変個数用に769案をサブ化というのは賛成。
0784デフォルトの名無しさんNGNG
黙って if( $a==$b and $a==$c and $a==$d ) でいいんじゃねーの
0785デフォルトの名無しさんNGNG
どうせならめちゃくちゃトリッキーにしようぜ
0786どっちでもいいんだがNGNG
$a==$b and $a==$c and $a==$d
と
$a==$b and $b==$c and $c==$d
は、どっちががいいの?
自分は $a=$b=$c=$d ぽく見える後者が好きなんだが。
0787デフォルトの名無しさんNGNG
>>786
そりゃ質問した奴が一番知ってるだろ。
$b, $c, $d が $a と等しい事を伝えたいなら上、
$a が $b と等しい上に $b が $c と(以下略)なら下って感じかな。

どれが軽いかは黙ってベンチマークだろ。
0788デフォルトの名無しさんNGNG
>>781も違ってねーか?
0789デフォルトの名無しさんNGNG
my %s;
map { $s{$_} = 1 } ($a, $b, $c, $d);
if (keys(%s) == 1) {
# ...
}
0790デフォルトの名無しさんNGNG
結果どうこうより意図が伝わる、前や後ろの文脈との繋がりが分かりやすい書き方の方がいいんじゃないの
コードを読むのは人間なわけだし、一部のコード片だけ見てごちゃごちゃやるのは高速化以外の良い結果は生まないと思うなぁ
if ($a == $b && $b == $c && $c == $d){
 なんたらかんたら;
}
の”なんたらかんたら”の部分によってはもっと良い方向に書ける時もあるわけだし・・・

まぁそこまで言っちゃうと質問者にとっては余計なお節介になるのかな・・・^^;
0791デフォルトの名無しさんNGNG
>>781
>>789
すいません。これ何してるのかわからないです。
どなたか解説してくれませんか?
0792デフォルトの名無しさんNGNG
>>791
嫌です
0793769NGNG
嫌ですか、そうですか。
>>785
もいっこ考えてみた。

@array = ($a, $b, $c, $d);
if ($#{[ keys %{ { map{ $_ => 1 }@array }}]} == 0 ){
print 'ok';
}

無名ハッシュに入れて
そのキーを無名配列に入れて
そいつの最後の添え字が0なら(要素一個なら)
全ての値が同じ、と

どう?
0794デフォルトの名無しさんNGNG
>>791
一瞬また間違ってるお前帰っていいよと書こうと思ったが、どうやら
$a, $b, $c, $dをキーとしてハッシュに1を代入。
$a, $b, $c, $dがすべて等しい場合キーが1つしかないはずだから
keys==1で比較すればいいだろうみたいな感じだな。
0795デフォルトの名無しさんNGNG
配列要素を数える場合はスカラ文脈で評価するってのか定石じゃね

@array = ($a, $b, $c, $d);
if ( keys %{{ map{ $_, $_ } @array }} == 1 ){
print 'ok';
}
すっきりしたべ
0796769NGNG
>>794
>keys==1で比較すればいいだろうみたいな感じだな。
何が言いたい?
っぷ!?大丈夫か?おまえ
0797デフォルトの名無しさんNGNG
>>796
そういうお前も大丈夫か?
質問者が持ってきたコードは$a==$bでなかったらこれ以降の比較は必要なしというコードだぞ。
それをもっと簡潔にしたいといってるのになぜすべて比較しなければならなくなるんだ?
0798デフォルトの名無しさんNGNG
>>797
その話題は既に収束してて、 >>785 から題意が変わったのでは?
0799769NGNG
>>797
なるほど!そうだな、言うとおりだ。
じゃ、こんなんはどうだ?

@array = ($a, $b, $c, $d);
if(grep{$array[0] != $_}@array[1..$#array]){
print "not ok \n";
}else{
print "ok \n";
}
0800デフォルトの名無しさんNGNG
>>799
>そうだな、言うとおりだ。
とか言いながら、自信満々に全比較してるのは何故?
0801デフォルトの名無しさんNGNG
ワロタw
0802≠799NGNG
俺も作ってみた。

if ((sub{$_[0]==$_ or return for @_[1..$#_];1})->($a, $b, $c, $d)) {
  # 全部等しい
}
0803デフォルトの名無しさんNGNG
if($a == $a&$b&$c&$d){
これじゃだめなの?
0804デフォルトの名無しさんNGNG
あ、全然だめだね。スマソ
0805デフォルトの名無しさんNGNG
すっきり書くだけなら

if( judge($a,$b,$c) ){
なんたらかんたら;
}

sub judge($$$){ $_[0]==$_[1] && $_[1]==$_[2] }
って、隅の方に条件式を追い出しちゃうてのは?


調べる要素がもっと多いなら
sub judge(@){
while(@_>1){
return 0 unless(shift ==$_[0]);
}
1;
}
とかってどう?
コピーしてないので、渡された配列喰っちゃいますが。
0806デフォルトの名無しさんNGNG
>>805
>とかってどう?
うーん、無駄が多いよなぁ。
802が既に関数形してんだから、ちょっと書き換えて、

sub is_all_same {  # judge じゃ何する関数か分からんので変更
my $t = shift;
$t==$_ or return for @_;
1;
}

とかした方がいいんじゃね?
0807769NGNG
>>800
おお、そかそか。
じゃ、とりあえず配列全部なめるmap grep だめジャン。
じゃ、これはどだ?

@array = (..);
foreach(@array[1..$#array]){
not_ok() if $array[0] != $_;
}
print "ok \n";
}

ま、あれだ、判定式サブルーチンに逃がすか、
偽でサブルーチンに逃げるか、って事だけど。
これならいい?
0808769NGNG
>>807
閉じブレース余計ですんで、すません
0809デフォルトの名無しさんNGNG
>>807
そんだけごてごて書いた上に、sub not_ok {...} も作れってこと?
しかも、not_ok 内で exit するか、もう1つか2つ細工しないと
結局全部比較する上に、必ず print "ok" が実行されると思うんだが。
0810デフォルトの名無しさんNGNG
いじればいじるほど(ry
トリッキーじゃなくてただの遠周りにしか思えてこないな
0811デフォルトの名無しさんNGNG
これからPerlを学ぼうと思っている者です。
よろしくお願いいたします。
Active Perlをインストールしようとすると

There is a problem with this Windows
Installer package. A program run as part of
the setup did not finish as expected. Contact
your support personnel or package vendor.

と表示され、インストールできません。
最近購入したばかりのパソコンなのですが
パソコンに原因があるのでしょうか?
分かる方いらっしゃいましたら教えてくださいm(__)m
よろしくお願いいたします。
0812デフォルトの名無しさんNGNG
>>811
未経験なので予想で。
1.ダウンロードしたファイルが壊れてる。→再ダウンロード
2.インストール権限がない。→administratorとかでログイン
0813デフォルトの名無しさんNGNG
たぶん2かな
0814デフォルトの名無しさんNGNG
>>809
仰るとおり。
じゃ、これは?

@array = ($a, $b, $c, $d);
LABEL:{
foreach(@array[1..$#array]){
last LABEL if $array[0] != $_;
}
print "ok \n";
}

これなら可変個要素比較し、偽で処理抜けるし
0815デフォルトの名無しさんNGNG
@array = ($a, $b, $c ...);
print (join('',@array) =~ /^$a+$/ ? 'OK' : 'NG');
0816デフォルトの名無しさんNGNG
>>815
756、763を読め。

数値限定だが、
@array = ($b, $c ...);
print join('', map "$_,", @array) =~ /^(?:$a,)+$/ ? 'OK' : 'NG';
ならOK
0817デフォルトの名無しさんNGNG
特定のファイルの仮想パスを絶対パスに変換する関数なんてあるんでしょうか?aspのServer.Mappathみたいな。
0818811NGNG
>>812-813

返信ありがとうございます
再ダウンロードは何度かしてみましたが
やっぱりできません。

2のadministratorとかでログインというのは
どうやればいいのでしょうか?

何も知らなくてすいませんです。
よろしくお願いします。
0819デフォルトの名無しさんNGNG
use List::Any;
print "ok" if all { $a == $_ } ($b, $c, $d);

0820デフォルトの名無しさんNGNG
>>818
Windowsの話だからPC初心者板かな
0821デフォルトの名無しさんNGNG
find . -name "*.[ch]"|while read l;do echo $l;mv $l $l.bak;sed -e s/^typedef */typedef /g < $l.bak > $l;rm -f $l.bak;done

シェルでよくこのような処理をするのですが、Perlでもっと簡単にやる方法はありますか?
0822デフォルトの名無しさんNGNG
>>821
対象ファイル名を表示しなくてもいいなら

perl -i -pe 's/(?<=^typedef) */ /g' `find . -name "*.[ch]"`
0823デフォルトの名無しさんNGNG
winでTkやってて、んでダブルクリックで起動してるんだけど、
キーボードのボタン認識ってどうするんだろう?
0824デフォルトの名無しさんNGNG
>>822
凄い!プロセス起動のコストがないので爆速ですね!!
-iオプションの威力がよく分りました。
0825デフォルトの名無しさんNGNG
>818
親によってWinにプログラムを組み込めない処置されているってことさ
親に頼め

もしくはダウンしたファイル本当にwin用なのか?msiなら無事入れられたぞ
0826デフォルトの名無しさんNGNG
Subject: ActivePerlのインストールについて
> windows98の環境にActivePerl5.6.1をインストールしようとinstmsi.exe(バージョン2.0)を入れた後、
> ActivePerlを入れると下記のようなエラーメッセージが表示されます。
> There is a problem with this Windows Installer package.A script required for this install to
> complete could not be run.Contact your support personnel or paceage vendor.

Res
> IE5.0以上が入っていないとインストール時に問題が出ると言う話は
> 聞いたことがあります。

> ご回答ありがとうございます。
> ブラウザはIE6.0 SP1 を使っています。

> DOSからインストールしたら成功しました。

> ダウンロードしたのが、msiファイルじゃなかったに違いない。(たぶん)
> MSIとAS Packegeとあったはずだけど。
> instmsi.exeを入れた意味が無いw(今後のためなら、問題無いが)

> msiファイルは
> ttp://www.activestate.com/Products/Download/Download.plex?id=ActivePerl
> の一番上のMSIをダウンロードしたので間違いではなかったと思います(たぶん)
> 2段目のAS PackegeをDOSから入れて成功しました。

一部省略済み
0827デフォルトの名無しさんNGNG
すいません。
@arrayに1〜100の数字が重複なしで20個くらい入ってまして、
その中にない数字80個くらいを配列の形で取り出したいんですけど、
どのようにすればいいのでしょうか??

0828デフォルトの名無しさんNGNG
>>827
#!/usr/bin/perl

my @array = (1,5,15,22,33,45,46,51,55,58,59,60,69,71,72,75,80,81,82,90,95,98,99);
my %Check;

@Check{ 1 .. 100 } = (1) x 100;
delete $Check{$_} foreach @array;

my @Surplus_array = sort grep exists $Check{$_}, keys %Check;

print "$_\n", foreach @Surplus_array;
0829デフォルトの名無しさんNGNG
my @a;
{
my %temp;
@temp{ @array } = ();
for(1..100){
push @a, $_ unless exists $temp{ $_ };
}
}
0830デフォルトの名無しさんNGNG
>>828
827じゃないけど、deleteって何かコスト高そうでBenchとってみた。
0 代入してtrue判断するよりも、 delete/existで判断した方が早いんだな
勉強になった。
0831デフォルトの名無しさんNGNG
>>828,829さん
なかなかアイディアが浮かばずできなかったのですが、
大変参考になりました。
ありがとうございます。
0832デフォルトの名無しさんNGNG
$a = "hello";

print "$a world";

出力: hello world

なんですが、出力をhelloworld とくっつけて表示させてい場合、

print "$aworld";

じゃ、だめじゃないですか。これってどうやって解決したらいいんですか?
0833デフォルトの名無しさんNGNG
{}
0834833NGNG
記号書いただけじゃ分からんな・・・。

"${a}world"
$a."world"
0835デフォルトの名無しさんNGNG
print "${a}world";

で、行けました!ありがとう833
0836デフォルトの名無しさんNGNG
$aworld = "helloworld"
print "$aworld";
0837836NGNG
syntax error at test.pl line 2, near "print"
Execution of test.pl aborted due to compilation errors.

orz
0838デフォルトの名無しさんNGNG
ダサッ
0839デフォルトの名無しさんNGNG
1行目にセミコロンがない〜♪
0840デフォルトの名無しさんNGNG
えっと

@test = ("test", "test2", "test3");

に対して、
$name = "test";
という変数があったとして、

@$name[0]

のように、変数内の文字列から配列を呼び出したいのですが、
どういった方法があるのでしょうか
0841デフォルトの名無しさんNGNG
>>840
http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlref.html#Symbolic_references
0842デフォルトの名無しさんNGNG
>>840
eval("@" . $name ."[0..2]");
0843デフォルトの名無しさんNGNG
おぉ
どうもありがとうございます
0844デフォルトの名無しさんNGNG
PAR: Perl のスクリプトを Windows 用の実行ファイル (exe形式) に変換する
http://namazu.org/~satoru/diary/20040716.html

という記事を参考にPARを使ってみようと思ったのですが、
nmakeを使ってのPAR-0.85のコンパイルに失敗します。
PAR-0.85を公式サイトよりDLして、解凍し、プロンプトから、
perl Makefile.pl
nmake
とすると、
NMAKE : fatal error U1064: MAKEFILEが見つかりません、またターゲットが指定されていません。
Stop.
となり、うまくいきません。他のモジュールのコンパイルはうまくいくのですが、
これは何が問題なのでしょうか?
0845デフォルトの名無しさんNGNG
nmake -f Makefile とかすりゃイインジャネーノ
0846デフォルトの名無しさんNGNG
いつの間に5.8.5が出たんだ。
つい先日インストールしたばかりなのに。
0847デフォルトの名無しさんNGNG
$str = "abc";
$reg = "/a/";

print "Match!" if($str =~ $reg);

Match! と出力させたいのですがどうすればいいですか?
0848デフォルトの名無しさんNGNG
>>847
普通なら、
  $str = "abc";
  $reg = "a";
  print "Match!" if $str =~ /$reg/;
とするとこだが、あくまで
  $reg = "/a/";
にこだわるなら、
  print "Match!" if eval("$str =~ $reg");
とか。
0849デフォルトの名無しさんNGNG
すみません、質問です。

Socketを使ってWeb上のリソースを取得しようと考えているのですが、
リクエストした先のURLがリダイレクションを行った場合、そのリダイレクション
を追跡してリソースを取得することは可能でしょうか?


具体的にはSocketを使ってamazon.co.jpの検索結果を読み込みたいと
思っているのですが、amazonでは検索結果をリダイレクションして出力する
ためか、Perl側で何も取得できないようです。

たとえばAという人のBというアルバムを検索すると
GET exec/obidos/external-search/?mode=music-jp&keyword=A B

該当するAという人のBというアルバムのページがあった場合、
exec/obidos/ASIN/B00005LN4Q/qid%3D109042..../250-5281286-9396....
といったURLにリダイレクションして出力される

Google等で検索してみたんですが、どうも分からなかったので、ご質問させて
頂いた次第です。何卒、ご教授を・・・。
0850デフォルトの名無しさんNGNG
>>849
Amazonの検索を使いたいならAWSを使えといってみる
0851デフォルトの名無しさんNGNG
>>850さん
ありがとうございます!

Amazon Web Serviceですか。こういうのがあったとは知りませんでした。
SOAPを使うようですね。

これならリダイレクション云々に悩む必要もなさそうです。
世間知らずで恥ずかしいばかりです・・・。
0852デフォルトの名無しさんNGNG
>>848
なんか、$strまで展開されそうな気もしますが。
と思ったけど、evalって都合よく解釈してくれるのね。

でも
print "Match!" if eval("$str =~ $reg");
じゃないとMatch!とは表示しないような気がする。
0853852NGNG
そういえばこんなの

$str = "abc";
$reg = qr/a/;
print "Match!" if($str =~ $reg);

もあったね。require 5.006 っぽいけど。
0854デフォルトの名無しさんNGNG
>>852
展開されても問題ないじゃんじゃんー
0855デフォルトの名無しさんNGNG
$a=4;
$b="*5";
$c=$a $b;

これで$cの値が20になってくれと言っているようなものだ。
0856デフォルトの名無しさんNGNG
$c = eval("$a $b");
0857デフォルトの名無しさんNGNG
libc.mapの
GLIBC_2.0 {
global:
__sigaction;
_IO_adjust_column; _IO_clearerr; _IO_default_doallocate;
_IO_default_finish; _IO_default_pbackfail; _IO_default_uflow;
_IO_default_xsgetn; _IO_default_xsputn; _IO_do_write;

このような構造のファイルからシンボル名だけを抜き出したいと思います。
正規表現を使ってスペースと";"の間の文字列を取り出す方法はないでしょうか?
0858デフォルトの名無しさんNGNG
splitでいいじゃん
0859デフォルトの名無しさんNGNG
/\s([A-Za-z0-9_]+);/
0860デフォルトの名無しさんNGNG
perl -ne'for(m/\s([_A-Za-z0-9]+);/g){print "$_\n"}' $(find . -name "*.map")
これでおっけーでした。どうもありがとうございました。
0861デフォルトの名無しさんNGNG
>>851
SOAPつか、Net::Amazonモジュールで一発

0862デフォルトの名無しさんNGNG
>>860
のものを-Fpattern -ane'......'
という形でやる方法はありますか?
0863デフォルトの名無しさんNGNG
>>583
qr// の事なら require 5.005 。
http://perldoc.com/perl5.8.4/pod/perl5005delta.html#New-qr---operator

>>862
まず自分で pattern を考え、試してみよう。
うまくいかなかったら出力とにらめっこして、
pattern のどこが悪いのか考え、修正して
またトライしよう。
0864863NGNG
>>863
s/>>583/>>853/;
0865デフォルトの名無しさんNGNG
>>818
> administratorとかでログインというのはどうやればいいのでしょうか?

「教えてクン」は、孤高の戦士である。
相手のことを考えるようでは教えてクン失格というものだ。
以下のような行動が、望ましい。
初心者であることを高らかに宣言し、初心者向けの丁寧で分かりやすい説明を強要する。
専門用語の使用を禁じておくとさらに効果的である。
簡潔な説明を禁じられたヲタクどもは、同じ内容を説明するのに、何倍もの労力を強いられる。
自分は努力せず、相手には多大な努力をさせることこそが「教えてクン」の真骨頂である。
マルチポストも有効である。そのBBSを信用していないことを明確に示せる。
「どうせ、お前らじゃ分からんだろう。」という意志表示として高く評価できる。
もちろんマルチポストの非礼をあらかじめ詫びてはならない。
それでは、単なる「急いでいる人」になってしまう。
それは、教えてクンではない。質問のタイトルは、「教えてください。」で良い。
タイトルを読んだだけでは「何に関する質問」か全く分からない。
そういう努力は、答える人間にさせれば良いのだ。
とにかく、答える人間が答えやすいように気を使って質問してはならない。
傲慢で不遜な態度が必須である。「聞きたいことがあります。」など、プロの仕事であろう。

最後に、言うまでも無いことだとは思うが、答えてくれた人達に礼の言葉を返すなど言語道断である。
せっかく「教えてクン」を貫いてきたのに、最後にお礼を言っているようでは、画竜点睛を欠いていると言わざるを得ない。
質問だけしておいて、後はシカトが基本である。
上級テクニックとして、「そんなことはもう試しました。」とか、「そこまで初心者じゃありません。」などと言って、回答者の神経を逆なでしておけば完璧である。

以上のことを踏まえて質問すれば、君も立派な「教えてクン」である。
ビバ!教えてクン! 教えてクンに栄光あれ!!
0866デフォルトの名無しさんNGNG
818はそんな長文書かれるほど(ry
0867デフォルトの名無しさんNGNG
あと、教えて君は質問する前に検索したらダメ。
回答の中に分からない用語があってももちろん検索しない。その場で全部聞く。

あと質問の内容が分かりにくくすればもっと完璧。
それと微妙にスレ違いにするともっと味が出る。
「CGIでファイル読みこんでて500エラーが出るんですけどなんででしょう?」
すごい。この質問完璧。非の打ち所がない。

もしスレ違いや検索を指摘されてもかまわずに質問を続ける。
「そんな事言うならあなたには答えてもらわなくてけっこうです」
とか言って適当にかわす。

もし「その質問だけじゃ分からないからもっと詳しく書いてくれない?」
って言われたら、関係ありそうで実は全然関係ない事をたくさん書く。
ここまで来ればもう教えて君のエキスパート。実績第1位。

最後には、「うまく行きませんでした。perlのバグかなぁ?」
とか言ってなんか他のシステムのせいにしてしまえばもう神。

さぁみんなもがんばれ。
0868デフォルトの名無しさんNGNG
>>865
2ch初心者です。
言ってることがわからないので、初心者にも分かるように説明してくれませんか??
0869デフォルトの名無しさんNGNG
beep音を鳴らせる文で
print "\x07";
でならせるんですが
目覚ましみたいに一定秒間鳴り続ける
コマンドはないでしょうか?
0870デフォルトの名無しさんNGNG
ありました。失礼します。
0871 ◆eUm.g33.8M NGNG
勘弁してください
ここIDでないのですね
改めてお願いします
0872◇eUm.g33.8MNGNG
CPANで見つけました。失礼します。
0873デフォルトの名無しさんNGNG
勝手にトリップ付けられて、自作自演されて迷惑です。
0874デフォルトの名無しさんNGNG
あ、ちなみに見つかりました。
0875 ◆eUm.g33.8M NGNG
この構文だとbeepが2秒後置きになるので鳴りっぱなしになりませんか?
ご教授おねはいします
for($i = 0 ; $i < 5 ; $i++) {
   print "\x07";
sleep 2
}
0876デフォルトの名無しさんNGNG
断続的に鳴るのと鳴りっぱなしとは違うんじゃない?
0877デフォルトの名無しさんNGNG
たとえば10秒間
断続的に鳴るプログラム探します
0878デフォルトの名無しさんNGNG
>>875
試したけど、
スクリプト実行開始してから10秒間無音で、
終了時に一瞬だけ音がでました。
0879デフォルトの名無しさんNGNG
>>878
http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlfaq5.html#How_do_I_flush_unbuffer_an_outpu
0880デフォルトの名無しさんNGNG

COM2 にモデムが繋がってるなら、

open(COM, "> /dev/cuaa1");
print COM "ATD117\m";
sleep 10;
close(COM);

みたいなのはダメ?

0881デフォルトの名無しさんNGNG
>>879
ありがとうございます!!

下のようにしたらうまくいきました!!

#!/usr/local/bin/perl

$| = 1;

for($i = 0; $i < 5; $i++){
print "\x07";
sleep 2;
}
0882デフォルトの名無しさんNGNG
>>880
http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlfaq8.html#How_do_I_read_and_write_the_seri
0883デフォルトの名無しさんNGNG
WindowsでLinuxで言うところの dev/null に出力したいんだが
どーすりゃいいですかい?
0884デフォルトの名無しさんNGNG
/dev/null
ですね^^;
0885デフォルトの名無しさんNGNG
>>883
Perlと全然関係ないね。

nulを使え。
0886デフォルトの名無しさんNGNG
>>885
無理やりperlで答えると、File::Specのdevnull使え。

devnull
Returns a string representation of the null device.

$devnull = File::Spec->devnull();

0887885NGNG
>>886
ああ、そんなのがあったんだ。
移植性を高めるためか。
0888 ◆eUm.g33.8M NGNG
>>880
ありがとうございますその方法で試してみます
0889デフォルトの名無しさんNGNG
$nextDQN = $DQN = "DQN";

for ($i=0;$i<length($nextDQN);$i++) {
 ++substr($nextDQN,$i,1);
}

print "Next $DQN is $nextDQN.\n";


Perlだからできるネタだな。
0890デフォルトの名無しさんNGNG
Perlを勉強できる専門学校の短期コースってありますか?
0891デフォルトの名無しさんNGNG
Perlなんて専門学校行かなくても勉強できるだろ
0892デフォルトの名無しさんNGNG
Perlの専門学校なんてあるのか・・・?
みんな独学じゃねーのか・・・?
0893デフォルトの名無しさんNGNG
情報処理系の専門学校なら、カリキュラムの中に
Perl入ってるんじゃない?基本だけだと思うけど。
他は、講座とか教室とか。
http://www.miesc.ne.jp/msc/it-p.htm
探せばある筈。

まぁ、独学が一番だと思うがな。
0894デフォルトの名無しさんNGNG
言語なんて教えても貰ってもしょーがないと思うだよ?
公式と本と実践の連打で…
0895デフォルトの名無しさんNGNG
こんなところで聞くのもはずかしいのですが、どうにもならずここへやって来ました。
よく数字の桁を揃えるのに
$data=sprintf("%07d", 123); # 結果:0000123
などとやりますよね、しかし”0”でなくスペースにしたいので
$data=sprintf("% 7d", 123);
と、やってみたのですがダメでした。なぜ?

多分私は何か勘違いしているのでしょうが、どうにも分かりません。
どなたかこんなバカな私にご教授ください。
0896デフォルトの名無しさんNGNG
$perldoc -f sprintf
には
printf '<%6s>', 12; # prints "< 12>"
なんて例が載ってます
0897デフォルトの名無しさんNGNG
format 使う手もあるような。
0898895NGNG
ああ、やはり私の勘違いでした。
$data=sprintf("% 7d", 123);
これはちゃんと機能しておりました、問題はこの後の出力部でした。
$data=~ s/ /\ \;/g;
これを間に入れて解決しました。

大変お騒がせ致しました。
>>896 、 >>897 お二人さんありがとうございました。
0899895NGNG
ぐはっ、&nbsp が抜けている><

$data=~ s/ /\&nbsp\;/g;
&nbsp は本当は半角(言うまでもないですよね^^;)
0900デフォルトの名無しさんNGNG
s/&nbsp/&nbsp;/g
0901デフォルトの名無しさんNGNG
>>898
% 7dでも一応動くみたいだけど、正しくは%7dだ。
0902デフォルトの名無しさんNGNG
>>892,893,894
ありがとうございます。
独学でやりたいと思います。
プログラム初心者がPerlを勉強するのに
適した本などありましたら教えて下さい。
0903デフォルトの名無しさんNGNG
>>902
目的というか用途は?
A. プロフェッショナル
A-1. プログラマ
A-1-1. 一般Web
A-1-2. 組み込み機器向けWeb Interface
A-1-3. host-opensys間などのglueな処理用
A-1-4. その他
A-2. 非プログラマ
A-2-1. 経理関係の雑務的データ処理
A-2-2. 各種コンサルティング業務におけるよろず統計処理・科学計算
A-2-3. 新言語など、IT系の基礎的な分野における新技術に対する評価業務の初歩の素養として(VC業務など)
A-2-4. その他
B. アマチュア(非プロフェッショナル)
B-1. 趣味
B-2. その他
0904デフォルトの名無しさんNGNG
>>902
http://pc5.2ch.net/test/read.cgi/php/1030209573/
http://pc5.2ch.net/test/read.cgi/tech/1089492835/
0905デフォルトの名無しさんNGNG
みなさま、設定ファイルの処理って何使ってますか?

他人が読む可能性が高いコードを書こうとしているので、
既存のもので一番使われているモジュールを使おうと思って
AppConfigを選択したんだけど、この選択って正解ですかね?
それとも別のものを使ってますか?

他の候補は
Config::Simple、Config::General、Config::IniFiles、(番外としてGetopt::ArgvFile)
あたりかと思うんですけど、AppConfigは頑張ってるわりにはイマイチな気も…。
もっと単純なものでもいいかな。

設定ファイルで配列や連想配列が扱えると嬉しいんだけど、
自前でやってもいい気もするし…。どんなもんでしょ?
御意見ください。よろしくおねがいします。
0906デフォルトの名無しさんNGNG
>>905
お好きなように。

でいーんじゃないかな?
ただし、独自機能として組み込むと汎用性がややもすると低くなる「かも」。
0907905NGNG
>>906
そらまあそうなんですが、
自分の好き嫌いより他人の好き嫌いに頼りたいなあ、と。

AppConfig::Getoptにバグを見つけちゃったんで、
選択ミスったかな、と不安になったものですから。
0908デフォルトの名無しさんNGNG
Perl5.8.5キタワァ.*・゜゚・*:.。..。.:*・゜(n‘∀‘)η゚・*:.。. .。.:*・゜゚・*!!!!!
0909デフォルトの名無しさんNGNG
>>907
俺はAppConfigが嫌いだが?
と言えば採用止めるのか?

0910デフォルトの名無しさんNGNG
俺は YAML が好きだが?
0911デフォルトの名無しさんNGNG
AppConfigってコマンドラインオプションと設定ファイルを
同じ枠組みで扱えるところが便利なんだよな。907によれば
バグってるらしいがオレはまだ幸いにしてあたってない。

とはいえめんどくさいから特に自分用だとdoで済ませちゃう
ことも多いね。


0912デフォルトの名無しさんNGNG
YAMLの方がディスクやメモリ使用効率が少なくて済むね
0913デフォルトの名無しさんNGNG
>>903,904
ありがとうございます。
�@用途はtxtの文字列処理です。
�ACSV形式のファイルの操作です。
生物学のデータを処理のため
プログラムを知る必要がでてきました。
0914デフォルトの名無しさんNGNG
生物学 + perl = http://bioperl.org/
0915デフォルトの名無しさんNGNG
Cマガの今月号でPerlからWin32-APIを使う方法が特集されてます。
ご参考まで。
0916デフォルトの名無しさんNGNG
>>908
既出
0917デフォルトの名無しさんNGNG
Parrot
0918デフォルトの名無しさんNGNG
Perl5.10はいつ頃でますか?
0919デフォルトの名無しさんNGNG
>>918
ハァ?
バージョン下がっとるやん。
0920デフォルトの名無しさんNGNG
>>919
マジレスすると次期安定版は5.10.xとなる。
時期は知らん。
個人的にはassertionsが楽しみ。
0921907NGNG
>>911
AppConfig:Args使ってますか?

AppConfig:Getoptがhashを扱えないんですが、
ちょっとコードを変更したら扱えるようになったんで、
仕様かもしれないけどパッチ送りつけよう、と思ってます。
Getopt使ってる人って少ないのかな…。
0922デフォルトの名無しさんNGNG
Perlで
[] は何を表しているか分かる方教えてください。
() は空リストですよね?違いが分かりません。
push @x , [] ;
0923デフォルトの名無しさんNGNG
無名配列
0924デフォルトの名無しさんNGNG
>>923
へのリファレンス
0925デフォルトの名無しさんNGNG
>>922
push(@x, []);
やったあとに

print $x[0] とかやってみればわかる。たぶん。ちなみに
@x = ();
push(@x, [68, 69]);
print "$x[0][1]\n";
やれば、もうすこし理解が深まるじゃろうて。
0926デフォルトの名無しさんNGNG
>>922
http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlref.html
0927デフォルトの名無しさんNGNG
基本的な文法くらい自分で調べる癖を付けよう
0928デフォルトの名無しさんNGNG
Pearl 1984 の A* search method について何かご存知の方おられませんか?
どういったものなのでしょう?
PerlじゃなくPearlということなので相当古いと思うのですが。
0929デフォルトの名無しさんNGNG
perl でグラフィックを扱うライブラリはあるのでしょうか?
GIFなどの画像データの生成ではなくて、窓を開いてそこに直接点を打ったり線を引いたりするものは
ないでしょうか?
0930デフォルトの名無しさんNGNG
>>928
Perlにそんなのあったかなと思ってぐぐったが、それJudea Pearlって
いう人の名前だよ。その人が1984年に書いた論文か本にそういうのが
あるんじゃないのかね? ということで多分スレ違い。

0931デフォルトの名無しさんNGNG
>>929
WIN32API使えばいい。
方法は今月号のCマガジンに載っているらしいし。
0932デフォルトの名無しさんNGNG
To: hoge@hoge, foo@bar, moo@moo
kkkk@kkkk
Cc: hogehoge@aiueo
Subject: harahetta

という文字列から、メールアドレスを抜き出して
リストに入れるのにはどういうやりかたが正攻法ですか?
0933デフォルトの名無しさんNGNG
>932

http://www.din.or.jp/~ohzaki/perl.htm#Mail
0934デフォルトの名無しさんNGNG
>>929

http://search.cpan.org/modlist/Microsoft_Windows
0935デフォルトの名無しさんNGNG
そろそろいい加減、質問の内容を読まずに脊髄反射 URL コピペする癖は止めようよ。
0936デフォルトの名無しさんNGNG
>>932
テキトーでよければ、メアドにマッチするような正規表現を作って
while ($x =~ /(...)/g) { push @addr, $1; }
みたいな感じでいいと思う。

しかしヘッダはかなり飾りをつけられるので、単純な場合はそれで
いいとしても、複雑な場合にもうまく動く正規表現を書くのは大変
だろう。丸カッココメントのネストを考えると完全なものを正規表現
で書くのは一般には無理ってのもあるしね(笑)。

そこまでやるならMail::Addressに食わしたほうが楽だろうな。
0937デフォルトの名無しさんNGNG
脳味噌で考えた形跡のない脊髄反射質問には脊髄反射URL コピペ、これ当然!
模範回答だな(w
0938929NGNG
>>931
ありがとうございました。
0939デフォルトの名無しさんNGNG
つーか、ここでせいぜい10数行で説明されるのと
より詳細な解説があるURL貼るのと、どっちが有用よ?
0940デフォルトの名無しさんNGNG
>>939
質問内容に対して的外れなら、いくら詳細な解説がある URL でも有用じゃないでしょ。
>>934 なんかはともかく、 >>933 よりは >>936 の方がずっと有用に思えるよ。
0941デフォルトの名無しさんNGNG
質問をよく読まずにびみょーに中身がずれてたり一般的すぎたり
するURL貼ってるのが問題なんじゃねーの?
0942デフォルトの名無しさんNGNG
まず解答に値する質問かどうかが問題なのだ
0943デフォルトの名無しさんNGNG
びみょーに中身がずれてたり一般的すぎたりする10数行の回答を
せっせと書く方針でいきましょう
0944デフォルトの名無しさんNGNG
>>940
ハッシュの使い方を教えてください。URIは書かないでね♪
0945デフォルトの名無しさんNGNG
>>944
%83%4F%81%5B%83%4F%83%8B%82%C5%8C%9F%8D%F5%83%8F%81%5B%83%68%A2%83%6E%83%62%83%56%83%85%82%CC%8E%67%82%A2%95%FB%A3%82%C5%89%B1
0946940NGNG
>>944
ガキじゃないんだからそういうバカみたいなあからさまな煽りは止めてよ。
0947デフォルトの名無しさんNGNG
いえ、ガキですし、「バカみたい」じゃなく正真正銘のバカです。
0948デフォルトの名無しさんNGNG
>>940
何をもって的外れと言っているのか知らないが、知ってて損な情報じゃないだろ
なんで教えて君に懇切丁寧に答えてやらなきゃならないんだ?

0949929NGNG
perlでグラフィックを扱う方法を質問した者です。

>>929の質問をしたところ>>931の回答を頂いたので、早速今月号のCマガジンを読んでみましたが、
ヴァージョンなどの情報のコンソール表示やWORD・EXCELのデータの読み書きについてしか書いていませんでした。
いくらググってもperlでグラフィックを扱う方法が見つかりませんでした。
日本語だけでなく英語のページも探してみましたが、それらしいページは見つかりませんでした。
結局、perlでグラフィックを扱うことは出来ないのでしょうか?

何故perlに拘るかというと、インタプリタが無料でダウンロード出来て手元にあるからなのですが・・・・・・。
0950デフォルトの名無しさんNGNG
>>949
ぐぐりかたが悪いとしか思えないな。フツーにやればWin32::GUIや
Perl/Tkぐらいにはあたりそうなものだ。

0951デフォルトの名無しさんNGNG
>>949
Win32::APIからSusieプラグインでも使えばいいんじゃないの?
0952デフォルトの名無しさんNGNG
>>949
http://search.cpan.org/modlist/Graphics
http://search.cpan.org/~lukka/Graphics-Simple-0.04/

一口にグラフィックと言っても色々あるから、君が何を作る為に
「窓を開いて線を引く」という事をしたいのか説明してくれないと、
適切な答は返ってこないよ。

開発環境を無料で用意したいだけなら C/C++ でも Java でも
揃うしね。
0953デフォルトの名無しさんNGNG
Perl/Tkってのがあるな
0954929NGNG
>>950
単純に"perl""Win32API"とかでぐぐってみたのですが、もう少し工夫すべきだったでしょうか。
Win32::GUIやPerl/Tkですか。ありがとうございます。ぐぐってみます。

>>951
Susieプラグインですか?ありがとうございます。ぐぐってみます。

>>952
URLありがとうございます。
具体的には、オセロなどのゲームプログラムをWindows環境で作りたいのです。
DOS環境やUNIX環境で作ったことがあるので、アルゴリズムは分かるのですが、
ウィンドウ・グラフィック・マウスのイベント処理が分からなくて挫折していました。
C/C++やJavaも無料で開発環境が揃うんですね。


皆さん本当にありがとうございますm(_ _)m
ぐぐっても挫折したらまた質問させて頂きます(汗
0955デフォルトの名無しさんNGNG
あたしだけ無視されちゃった
0956デフォルトの名無しさんNGNG
Perl でイベントドリブンか・・・
0957929NGNG
>>955
953ですか?失礼しました(;・∀・)
参考にさせて頂きます。
0958929NGNG
訂正)
953ですか?→953さんですか?
0959デフォルトの名無しさんNGNG
>>954
なんか前どっかのスレでDOS環境で作ったオセロのログファイルが何たらって質問してたやつがいたな。
まあ、それはおいといて。

趣味でプログラムやってますって程度ならお前さんの場合HSPあたり使ったらいいんじゃないか?お前さんの場合それが最善の道な気がするぞ。
コンソールプログラムでオセロ作れたからって一足飛びでGUIプログラムかけるようにはならんて。
0960954=929NGNG
>>959
一応コンピュータ専門です(汗

HSPをぐぐったら、BASICのようなインタプリタ言語で、結構使いやすそうでした。
でも、出来れば思考プログラムまで作りたいので、インタプリタだと実行速度が心配です。

オセロが作れたからGUIプログラムが直ぐに作れるわけではないというのは、おっしゃる通りだと思います。
0961デフォルトの名無しさんNGNG
>>960
Perl もインタプリタだ、実行効率はインタプリタの中でもいい方だけど。

Delphiとか使ってみたら?
0962デフォルトの名無しさんNGNG
>>960

実行速度が心配な部分だけC++でDLL作れ。
0963960NGNG
>>961
確かにPerlもインタプリタでした(汗

Delphiの方が初心者向けみたいですけど、有料でした・・・。
personalとそれ以上の値段の差が激しいですね。

>>962
そうしてみます。
DLLプログラミングの勉強は、これからです(汗
0964デフォルトの名無しさんNGNG
>>960=949の人
なにも一から全部HSP(あるいはPerl/Tk)で書けってんじゃない。その思考ルーチンの部分はCで書けばいいじゃないか。
要は、君はGUIのオセロが作りたいわけで、そしてそのオセロの思考ルーチンをこそ作りたいわけで、
別に「GUIプログラミングするためのイベントドリブン云々とかを研究する」が今の目的じゃないだろ?
それなら、その本筋とは関係ない"障害"をなるべく回避できるように努めればいい。
目的のために今何が必要で何が不必要か見極めれ。

# で、GUIプログラミングのほうがメインというなら、オセロ云々は君にとって今はそれは最終目的地であって、
# まずはメッセージボックス出すところからでもはじめなさいってこった。
0965960=949の人NGNG
>>964
まさにご指摘の通りです。
非常に適切なアドバイスをありがとうございますm(_ _)m

とりあえずDLLとかの形でGUI部分と演算部分を分けた方が良さそうですね。
がんがります。
0966デフォルトの名無しさんNGNG
(´-`).。oO(本当に「ま」の字の人なんだろうか・・・)
0967デフォルトの名無しさんNGNG
(´-`).。oO(ここはム板なんだけど・・・)
0968デフォルトの名無しさんNGNG
HSPでも思考ルーチン書けるよ
0969デフォルトの名無しさんNGNG
書けても実行速度が・・・。
0970デフォルトの名無しさんNGNG
CもJavaもDelphiも知らないコンピュータ専門って居るんだな
VB屋?
0971デフォルトの名無しさんNGNG
VB屋でもキテル奴は結構キテルぞ
下手なC/C++屋なんて目じゃないって奴が時々いる
0972965NGNG
CとJavaは使えるけどDelphiは使ったことがないです。
というかDOS時代からC使いでした。
ゐんどうずはDOSと比べて難しすぎます・・・。
0973デフォルトの名無しさんNGNG
>>972
あんた、ブランク長い?
浦島太郎みたいな感じだよ
0974972NGNG
>>973
ゐんどうずのプログラムはVisualBasicで組んでます。
後はUNIX環境でCとかPerlとかmatlabとかMathematicaとか使えば済んでしまうので、
あまりゐんどうずのプログラムは勉強して無かったです・・・。
0975デフォルトの名無しさんNGNG
perlは配列を返すサブルーチンをかけない
○ か ×か、さぁどっち!
0976デフォルトの名無しさんNGNG
perlのファイルアップロードプログラムで管理画面から頻繁に画像を更新するばあい、
画像がどうしてもキャッシュから参照して古い画像が表示されてすまいます。
アップ後の画像ファイル名を変えずにブラウザに画像をキャッシュさせない方法知りませんか?

イメージとしてはperlで利用できるHTTPヘッダーとか利用して何とかなりませんかね。。

▼これはためしてみましたが駄目でした。
●pragma: no-cacheを画像のヘッダーにつけてファイルを閉じる
→画像が表示されない。。

いいほうほうがありまたら、どなたかおしえてくださりませんか。。
0977974NGNG
>>975
×
方法は忘れたけど、何らかの形で配列を返す関数は書いたことがあります。
0978奈々 ◆Xl6OTFSLJ2 NGNG
>>975
○
理由:なんとなく
0979デフォルトの名無しさんNGNG
>>975
正直、リファレンスで構造体を返す事もできる。

答えは、どんな形でも返せる。
0980デフォルトの名無しさんNGNG
>>977
>>978
あ、いい忘れたけど。
特別な方法を取らなくても配列なら戻り値にできるから。
じゃ。
0981デフォルトの名無しさんNGNG
#!/usr/local/bin/perl

@a = &arrayfunc(10);
foreach (@a){
print "$_\n";
}

exit(0);

sub arrayfunc()
{
local($num) = @_;

for($i = 0; $i < $num; $i++){
$result[$i] = $i * 2;
}
return @result;
}
0982デフォルトの名無しさんNGNG
>>976
●pragma: no-cacheを画像のヘッダーにつけてファイルを閉じる
をするのと、さらに cgi から直接 jpg/gif 等のバイナリを出力する方法があるので、
画像へのリンクとはせずに cgi へのリンクを開くようにさせればよい。
0983デフォルトの名無しさんNGNG
>>981
なぜlocalを使う。
レキシカルだろ。普通。
0984デフォルトの名無しさんNGNG
wantarray 使おうぜ
0985デフォルトの名無しさんNGNG
>>976

たとえば

<img src="/cgi-bin/imageout.cgi" border="0">

としておいて、

--------

$size = -s $file;
$buf = '';

if(!(-e $file)){
print "Content-Type: image/jpeg\n";
print "Content-Length: $size\n";
print "pragma: no-cache\n";
print "\n";
open(INF, $file);
binmode(INF);
binmode(STDOUT);
read(INF, $buf, $size);
print $buf;
close(INF);
}
0986デフォルトの名無しさんNGNG
>>983
ごめん my にするつもりでうっかり…
0987デフォルトの名無しさんNGNG
>>984
こうですか?

sub arrayfunc()
{
  local($num) = @_;

  for($i = 0; $i < $num; $i++){
    $result[$i] = $i * 2;
  }
  return wantarray ? @result : undef;
}
0988デフォルトの名無しさんNGNG
>>987
>>983
0989デフォルトの名無しさんNGNG
>>981
それは、配列じゃなくてリストが返されてると思いますが・・・
0990デフォルトの名無しさんNGNG
なんかperlらしくないので

sub arrayfunc($){
wantarray ?
map{
$_ * 2;
# ここにつらつら
}0..$_[0]
: '';
}
0991デフォルトの名無しさんNGNG
>>975
ひっかけ問題。
サブルーチン側がリストを返そうとしていても
呼び出し側のコンテキストがスカラーコンテキストの場合
リストの要素数が返ってしまう。
0992デフォルトの名無しさんNGNG
言葉遊び?
配列そのものは返せないだろ
0993デフォルトの名無しさんNGNG
>>991 サブルーチンを書けるか?
と聞いているから、呼ぶ側の条件は
無視していいだろ?
0994デフォルトの名無しさんNGNG
>>976
>●pragma: no-cacheを画像のヘッダーにつけてファイルを閉じる
画像ファイルにこれ書き込んだの?ファイル壊してるだけだよ^^;

imgタグのsrcに書くパスの最後に ? を付け加えて味噌
0995デフォルトの名無しさんNGNG
次スレたててくる。
0996デフォルトの名無しさんNGNG
996
0997デフォルトの名無しさんNGNG
>>976
アップローダって事は、 CGI ですね。
994 氏と似通っていますが、たとえば参照したい画像のファイル名が 0123.jpg でしたら、
0123.jpg?適当な文字列
を出力すると桶です。
凡例:
sprintf qq|<img src="$Image_Filename?%d">|, time;
0998デフォルトの名無しさんNGNG
記念カキコ v(^-^=)
0999デフォルトの名無しさんNGNG
999かな
1000デフォルトの名無しさんNGNG
ちんぽみるくでるぅっっっっっっっっっっっ!!!!!
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。