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

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
"The duct tape of the Internet" こと、Perlについての質問箱です。
"There's more than one way to do it" ということで、Perlの奥深さについて皆で語り合い、追求してまいりましょう。

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

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

http://www.perl.org/get.html
● 2006/01/29現在の最新版: 5.8.7, 5.8.8 RC1
● 2006/01/29現在の開発版: 5.9.2

リンク集は>>2-3
過去スレは>>4-5
2デフォルトの名無しさん:2006/01/29(日) 16:22:43
[プログラミング自体の経験が無い奴はまずココを読め]
Perlプログラミング講座: http://www.site-cooler.com/kwl/perl/

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

[オンラインマニュアル] (追加)
最新のドキュメント: http://search.cpan.org/~nwclark/perl-5.8.7/
perl5.8.xのドキュメント(一部): http://www.kt.rim.or.jp/~kbk/perl-5.8/
perl5.005_03 のドキュメント: http://www.kt.rim.or.jp/~kbk/perl5.005/
日本語ドキュメント検索: http://www.cpan.jp/search.cgi
perldoc.jp: http://www.perldoc.jp/
Perldoc.com: http://www.perldoc.com/
3デフォルトの名無しさん:2006/01/29(日) 16:23:14
4デフォルトの名無しさん:2006/01/29(日) 16:23:52
5デフォルトの名無しさん:2006/01/29(日) 16:24:37
6デフォルトの名無しさん:2006/01/29(日) 17:02:54
RubyがあればPerlなんて要らないから
もうスレ立てなくていいのに
7デフォルトの名無しさん:2006/01/29(日) 17:11:26
^^;
8デフォルトの名無しさん:2006/01/29(日) 17:22:17
>>6
荒らし乙w
9デフォルトの名無しさん:2006/01/29(日) 18:01:06
>>1
http://search.cpan.org/~rgarcia/perl-5.9.3/
殆どの人には関係ないけど。
10デフォルトの名無しさん:2006/01/29(日) 18:51:55
>>9
やっぱり5.9.3出てたか
出たと聞いたような気がして一度5.9.3と書いたんだけど、
ソースを探しても見つからなくて結局戻したんだ。スマソ
11デフォルトの名無しさん:2006/01/29(日) 18:58:01
前スレ埋め方ワロスwwwwwwww
12デフォルトの名無しさん:2006/01/29(日) 20:42:12
質問です。
$hoge->{hage1} = {
'date' => '1234';
'value' => 'nanika1';
};
$hoge->{hage2} = {
'date' => '5678';
'value' => 'nanika2';
};
$hoge->{hage3} = {
'date' => '9012';
'value' => 'nanika3';
};
というハッシュを、{date}のvalueを基準にソートしたいのですが
どうすれば良いでしょうか?
多次元ハッシュで検索したんですがうまくいかず困ってます
1312:2006/01/29(日) 20:43:43
訂正>>12
$hoge->{hage1} = {
'date' => '1234',
'value' => 'nanika1',
};
$hoge->{hage2} = {
'date' => '5678',
'value' => 'nanika2',
};
$hoge->{hage3} = {
'date' => '9012',
'value' => 'nanika3',
};
14デフォルトの名無しさん:2006/01/29(日) 20:52:59
「ハッシュをソート」
1512:2006/01/29(日) 21:02:49
Data::Dumperを使えということですか。どうもありがとうございました。
16デフォルトの名無しさん:2006/01/29(日) 21:11:14
ハッシュは順序無しの構造なのでソートできませんよ
1712:2006/01/29(日) 21:12:38
>>16
ならば@hogeに変更してやってみます。
18デフォルトの名無しさん:2006/01/29(日) 21:19:21
単純にARGVをPrintするプログラムを作りました。
19デフォルトの名無しさん:2006/01/29(日) 21:23:16
'\d'はそのまま出力されるのですが、
'(\d'が'(d'になってしまうのはなぜか教えてもらえませんか。
20デフォルトの名無しさん:2006/01/29(日) 21:30:09
あなたの言っていることはウソなので答えようがありません
2112:2006/01/29(日) 21:31:03
でけました。どうもありがとうございました。
22デフォルトの名無しさん:2006/01/29(日) 21:36:31
前スレの続きを書けw
2319:2006/01/29(日) 22:00:26
すみません自己解決しました…のかなぁ?
cmdでは問題なく出力できましたのでzshが原因だと思うのですが、
echo '(\d'と打ってもちゃんと'(\d'と出力されるのです。
環境はMsys版Perlです。
24デフォルトの名無しさん:2006/01/30(月) 00:21:59
シェルを通さずに試してみるという発想はないのか…
25デフォルトの名無しさん:2006/01/30(月) 01:44:25
>>23
> zshが原因だと思うのですが、

わかってるんじゃん。 Perl の問題じゃないよ。
26デフォルトの名無しさん:2006/01/30(月) 05:44:33
use strict;
my @nextlist;
my $rec = {
 exist => 1,
 path => 'XXX',
};
push(@nextlist, $rec);

my $rec = {
 exist => 0,
 path => 'AAA',
};
push(@nextlist, $rec);

# ここで exist が 0 以外のものだけのリストが欲しいです
@nextlist = grep($_->{'exists'}, @nextlist);

foreach my $a (@nextlist) {
 print ">>$a->{'path'}\n";
}
これだと空のリストしか受け取れません。
grep の判定が悪いのだと思いますが、他に書きかたが浮かびません。
よろしくお願いします。
27デフォルトの名無しさん:2006/01/30(月) 05:45:37
単なるスペルミスでした...スイマセン...orz
28デフォルトの名無しさん:2006/01/30(月) 08:59:38
EUC-JPからマイクロソフトマッピングのUTF-8に変換する方法を教えてください。
5.8と5.6それぞれでお願いします。一応、これまで調べたことを書いておきます。
・5.8
Encode::from_toで変換しようとしたが、EUC-JP-msのようなENCNAMEが見あたらない。
euc-jp⇒cp932⇒utf8ならできそうですが、それはちょっと……。
・5.6
Jcodeで変換しようとしたが、マッピングが単一っぽい。utf8化後に置換するしかない?
29デフォルトの名無しさん:2006/01/30(月) 09:12:16
>>28
自分では使ったことないがこれを試してみては?

ttp://search.cpan.org/~naruse/Encode-EUCJPMS-0.05/EUCJPMS.pm
30デフォルトの名無しさん:2006/01/30(月) 11:05:50
pipe 関数の使い方を教えてください。
pipeって↓のように使うのではないのでしょうか?

pipe READFH, WRITEFH;
print WRITEFH "aho";
print "douyo =>", <READFH>, "\n";

<READFH>の部分で止まってしまいます。
やりたいことは上記のようにストリーム(WRITEFH)に、
出力した結果をスカラー変数で受け取りたいのです。
3128:2006/01/30(月) 11:07:11
>>29
thx!! イケますた。
perl -MEncode::EUCJPMS -Mencoding=euc-jp-ms,STDOUT,utf8 -e 'print "〜"' | od -tx1
0000000 ef bd 9e
3228:2006/01/30(月) 11:11:32
5.6についてはまだ募集中。
33デフォルトの名無しさん:2006/01/30(月) 11:14:38
>>29
よさそうじゃん。自前のへんてこモジュールがいらなくなりそう。
34デフォルトの名無しさん:2006/01/30(月) 11:42:11
>>30
マルチスレッドにするとか、selectを使うとかして、
さらにバッファのフラッシュだなんだを注意深く
行わないとまともには動かないだろうね。

IO::Scalarでも使っとけ。
35デフォルトの名無しさん:2006/01/30(月) 13:07:19
perlでテーブルの中の枠線の太さを1にしたいんですけど
borderの値を1にしても線の太さが見た感じ2になってしまいます
どうすればをちゃんと表示できるんでしょうか?
36デフォルトの名無しさん:2006/01/30(月) 13:15:23
>>35
CGI? そうならWEBプログラミング板で聞いた方が
37デフォルトの名無しさん:2006/01/30(月) 13:16:05
>>35
Webサイト制作初心者用質問スレ Part 152
http://pc8.2ch.net/test/read.cgi/hp/1137488105/
38デフォルトの名無しさん:2006/01/30(月) 13:55:42
>>34
>IO::Scalarでも使っとけ。
そ、そんなものが。ありがとうございます。調べてみます。
39デフォルトの名無しさん:2006/01/30(月) 18:23:30
型グロブのスコープ?について質問です。
-----------------
my $tmp;

sub hoge {
my ($filename) = @_;
local *FILE;
open FILE, "+>> $filename";

@*TMP = *FILE;
A$tmp = *FILE;
}
-----------------
この例での@とAの違いとはなんなのでしょうか。

ttp://www.site-cooler.com/kwl/perl/2.htm#2-7
↑によると、@はアクセス名を変えるだけ?のリファレンス?になっているように読めます。

localとはグローバル変数の内容をサブルーチン(下層含む)の中限定で変更する物と
このスレのリンクにあるperl5.8.xのドキュメントに書いてあったのですが、
その定義ならば仮に@のリファレンスに代入したとしても、このサブルーチンが終わった時点で
ここで作ったファイルハンドルにアクセスできなくなるような気がします。
localで設定したハンドルにサブルーチンを抜けてからもアクセスしたいのですが。。
40デフォルトの名無しさん:2006/01/30(月) 18:44:29
補足
個人的な目標としては、
サブルーチンを用いてfileAを開き、続けてfileBを開いた状態で、
fileAにアクセスするような状態に対応できるようにしようと思ってます。

現状ですと、fileBを開いた段階でハンドルはBになってしまうと思われる為、
Aにはアクセスできなくなってしまうような気がしてます。
41デフォルトの名無しさん:2006/01/30(月) 19:04:18
>>39
ファイルハンドルのリファレンスがあるので、

sub hoge {
my ($filename) = @_;

open my $fh, "+>> $filename";
$tmp = $fh;
}

でいいとおもうが。$tmpがundefであることが確実なら

open $tmp, "+>> $filename";

でも可。
42デフォルトの名無しさん:2006/01/30(月) 19:24:44
forkについて質問させて下さい。
カウントダウンを表示しながら、キー入力を待ち、入力ある無しで分岐してまた戻ってくるものを書いています。
その部分は省いています。

FORK:
print "fork開始\n";
if ($pid = fork) {
  print "親開始\n";
  my $count = 0;
  while (1) {
    sleep (1);
    print + $count ++;
    last if $count > 5;
  }
  print "親終了\n";
} elsif (defined $pid) {
  print "子開始\n";
  while (<STDIN>) {
    print "入力確認\n";
    last if $_;
  }
  print "子終了\n";
}
print "fork終了\n";
goto FORK;

forkを抜けて頭に戻ると「fork開始」で止まってしまいます。
子プロセスを途中で止める方法とか、killも調べたけどよくわからなくて。
よければヒントお願いします。
43デフォルトの名無しさん:2006/01/30(月) 22:29:41
>>41
レス遅れてすみません。
perl5.6以前でも動くモジュールにしたいため、型グロブなんぞ使ってます。
プロバイダによっては古いパール使ってるところもあるような気がするので…
44デフォルトの名無しさん:2006/01/30(月) 22:47:24
>>43
あれ、5.005あたりから使えなかったっけ?
open my $fh, $filename
構文って。

FileHandie モジュール必須だっけ?



45デフォルトの名無しさん:2006/01/30(月) 22:56:44
>>44
5.8のドキュメントには、5.6以前の場合は〜の記述がありました。
微妙なんですよね。。使ってるとこありそうで。
4642:2006/01/30(月) 23:07:04
使い方間違えているのでしょうか?
47デフォルトの名無しさん:2006/01/30(月) 23:19:23
>>44
5.005 では使えない。3 引数の open() と共に 5.6.0 から。
http://search.cpan.org/~nwclark/perl-5.8.7/pod/perl56delta.pod#File_and_directory_handles_can_be_autovivified

単に「取り回し易いファイルハンドル」が欲しいだけなら、
個人的には IO::* や FileHandle より Symbol::gensym() の方が好きかな。
http://search.cpan.org/~nwclark/perl-5.8.7/lib/Symbol.pm
48デフォルトの名無しさん:2006/01/30(月) 23:21:10
多次元配列をperl5で使用しようと考えています。

@test[a][b]という多次元配列に値を追加代入したいのですが
どのように行えばよいか悩んでおります。

以下のソースは動きませんが、このような動作をするにはどうしたら
良いでしょうか?
while(10 > $count){
push(@DATA_A1[$count][A1], $count);
$count++;
}
49デフォルトの名無しさん:2006/01/30(月) 23:23:51
>>46
うん。

何を実現したいかをもうちょっと具体的に。
50デフォルトの名無しさん:2006/01/30(月) 23:29:18
push($DATA_A1[$count]->[A1], $count);
これはどうよ
51デフォルトの名無しさん:2006/01/30(月) 23:32:56
>>48

perlでは、多次元配列は、「配列リファレンスの配列」で実現できる。

my @marray = ();
my $count = 0;
while($count  < 10){
  push @{$marray[$count]}, $count; # $marray[$count] を配列リファレンスとみなして、新規データをプッシュ
  $marray[$count][0] = 0xffff; # 要素へ直接アクセスするならこう。
  $count++;
}
52デフォルトの名無しさん:2006/01/30(月) 23:58:52
>>39
sub hoge { local *x; @x = @_; return *x;}
*c = hoge(1);
$d = hoge(2);
$e = hoge(3);
*f = hoge(4);
print "\\\*c = ",\*c," , \*c = ",*c," [",@c,"]\n";
print "\\\$d = ",\$d," , \$d = ",$d," [",@$d,"]\n";
print "\\\$e = ",\$e," , \$e = ",$e," [",@$e,"]\n";
print "\\\*f = ",\*f," , \*f = ",*f," [",@f,"]\n";
53デフォルトの名無しさん:2006/01/31(火) 00:09:28
>>39-40
↓なんかでどう?同じファイルを同時オープンしたとき駄目だけど。これならperl4.0でも動くよ
sub myopen{
  open($_[0], ">".$_[0]);
  return $_[0];
}
my $fileA = myopen("a.txt");
my $fileB = myopen("b.txt");
print $fileA "aaaaaaaaa";
print $fileB "bbbbbbbbb";
close($fileA);
close($fileB);

それか、randとかで常に一意なファイルハンドル名を作り続けるか
54デフォルトの名無しさん:2006/01/31(火) 00:55:39
>>48
@test[a][b]が間違い。
$test[a][b]は、
多次元配列@testのa番目の要素である$test[a]という配列のb番目の要素
であるってこと分かってる?
配列のキーは数字であって文字でないことも分かってる?
キーが文字の場合は、ハッシュにしなきゃだめだって事も。
5530:2006/01/31(火) 01:08:29
>>30です。
>30の質問でjavaのFilterWriter的なものを作りたかったのですが、
ファイルハンドルをtieという関数に掛けることでできました。
ご存知かもしれませんが一応報告。>>34氏に感謝!

http://www.kt.rim.or.jp/~kbk/perl5.005/perltie.html#Tying_FileHandles
56デフォルトの名無しさん:2006/01/31(火) 01:19:47
別に止めないけど、正直そういう組み立て方は
Perlには向いてないと思う
57デフォルトの名無しさん:2006/01/31(火) 03:25:58
pipe は昔ながらの UNIX では普通は fork した子プロセスとの
通信で使っていた。シェルで | 記号使った時はシェルが
pipe() で繋げてくれる。

今ではマルチスレッドでも使えるが、とにかく pipe は
子プロセスとか別スレッドとかとやりとりをしたい場合に
使うものだ。同一プロセスでやりたいなら pipe は使うな。
普通に変数使ってメモリに保持するか、あるいはそれで
どうしてもやり辛いというのであればファイルを使っておけ。
File::Temp モジュールのやつで作業用ファイル作るとかな。
5839:2006/01/31(火) 12:51:29
>>52-53
ありがとうございます。遅レスすみません。
今お客さんのところで朝早くから夜遅くまで納品検証で動けないため(始めの質問はトイレに逃亡中に書きました)、
週末辺りに参考にさせて頂きますです。
5942:2006/01/31(火) 13:09:15
>>57
ありがとうございます。
いろいろ調べてみたけど、作業用ファイルに行き着きました。
でも、別のプロンプトから書き込まないとだめってことですよね。
あまりスマートじゃないので、悩んでいます・・・

子プロセスの終了を待つ関数はあるのに、
強制で中断させる関数はないのでしょうか。
killもいまいち使い道がわからないorz
60デフォルトの名無しさん:2006/01/31(火) 15:26:56
>>42
子プロセス側でexitしてないけど・・・?
というか、alarmではだめなの?forkするほどのことじゃないような気が。
ちなみにkillの書式は
  kill シグナル番号, プロセスID
なので、親プロセス側で kill 9, $pid とすればok。
61デフォルトの名無しさん:2006/01/31(火) 15:32:42
いきなり9はやめとけって。15にしとけよ。
OSによっては全然意味違うかも知れないけど。
62デフォルトの名無しさん:2006/01/31(火) 16:05:38
というか、selectではだめなの?
6342:2006/01/31(火) 16:29:31
レスありがとうございます。
ちょっとこんがらがってます。
>>60
のやりかたでも、gotoで戻るとやはり止まってしまいます。

まず、シグナルを送る、とは実際何をするのか?
alarm、selectでどうやるのか?
もうちょっと脳みそコネコネしてきます。
64デフォルトの名無しさん:2006/01/31(火) 17:06:06
これは Fedora Core 4 固有の問題かも知れないが。perl 5.8.6 で
use encoding 'euc-jp', STDIN => 'Shift_JIS'; がうまく行かない。
以下のようになる。なんで?

$ echo $LANG
ja_JP.eucJP
$ echo 'シフトJIS' | nkf -s >sj.txt
$ perl p sj.txt
"\x{0083}" does not map to euc-jp at p line 7, <> line 1.
"\x{0083}" does not map to euc-jp at p line 7, <> line 1.
"\x{0083}" does not map to euc-jp at p line 7, <> line 1.
\x{0083}V\x{0083}t\x{0083}gJIS
$ od -Ax -tx1 sj.txt
000000 83 56 83 74 83 67 4a 49 53 0a
00000a
$ cat p
#!/usr/bin/perl -w

use strict;
use encoding 'euc-jp', STDIN => 'Shift_JIS';

while (<>) {
print;
}
$
65デフォルトの名無しさん:2006/01/31(火) 17:29:06
>>65
その <> は <STDIN> ではなく <ARGV> だ。
6642:2006/01/31(火) 17:52:39
親と子を逆にしたら思い通りに動きました。
if ($pid = fork) {
  print "親開始\n";
  while (<STDIN>) {
    last if $_;
  }
  kill 9, $pid;
  &post;
  print "親終了\n";
} elsif (defined $pid) {
  print "子開始\n";
  &reload;
  print "子終了\n";
}
色々ありがとうございました。
もうちょっと精進しますです。
67デフォルトの名無しさん:2006/01/31(火) 18:34:40
ちょっと気になるんだけど elsif (defined $pid) って用を為してる?
68デフォルトの名無しさん:2006/01/31(火) 18:42:07
>>65
独り言か?
6964:2006/01/31(火) 18:45:34
>>65
おおお。ありがとう! <STDIN>で読んだらできた。
なるほど。そういうことか。
7042:2006/01/31(火) 18:56:11
>>67
elsif (defined $pid) { }が子プロセスになるんじゃないんですか?
動いてるとはいえ、理解してないのは気持ち悪いですが・・・。
71デフォルトの名無しさん:2006/01/31(火) 18:59:21
if ($pid = fork) で $pid が定義されてるから (defined $pid) は必ず真になるよね?
else で十分だと思う。
7242:2006/01/31(火) 19:28:28
>>71
ありがとうございます。
上のだと、fork失敗の次のelse { print 'fork失敗'; }がいりますね。
すっかり忘れてました。
73デフォルトの名無しさん:2006/01/31(火) 19:33:18
>>71
fork は子には 0、親には PID を返すが、fork 失敗の時は undef を返す。
なので defined による判別は必要だ。
74デフォルトの名無しさん:2006/01/31(火) 19:47:55
>>72-73
すまん、俺が勘違いしてた。その通り。
75デフォルトの名無しさん:2006/02/01(水) 00:41:09
Spreadsheet::ParseExcelとencodingは共存できないんでしょうか。
use encoding 'ENCNAME';した上でExcelファイルをparseさせると、
CPU食いっぱなしで帰ってこないです。
とりあえず、encoding指定なしでEncode::from_toで逃げましたが……。
76デフォルトの名無しさん:2006/02/01(水) 01:13:46
だからその手の用途に encoding を使うなと何度言(ry
77デフォルトの名無しさん:2006/02/01(水) 03:51:37
>>75
per mailing listにその話題を投げてみたら?
78デフォルトの名無しさん:2006/02/01(水) 09:39:02
@array=("aaa","bbb","ccc","bbb","aaa","bbb","aaa");という配列がある場合
この配列で重複している要素だけを取り出すにはどうしたらいいんでしょうか?
aaaが3個、bbbが3個、cccが1個だから
答えはaaaとbbbになればいいわけです
79デフォルトの名無しさん:2006/02/01(水) 09:56:57
未検証書き殴りだが

my @array=("aaa","bbb","ccc","bbb","aaa","bbb","aaa");
my %hash;
my @answer;
$hash{$_}++ for( @array );
for (sort keys %hash){push @answer,$_ if $hash{$_} > 1}
print join "\n", @answer;

たぶんこれで。。
80デフォルトの名無しさん:2006/02/01(水) 09:59:37
>>78
ハッシュで個数数えて2個以上あるのを抽出。

$count{$_}++ for @array;
@dup = grep { $count{$_} >= 2 } keys %count;
81デフォルトの名無しさん:2006/02/01(水) 09:59:39
>>78
ttp://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlfaq4.html#How_can_I_extract_just_the_uniqu
の応用

my @array=("aaa","bbb","ccc","bbb","aaa","bbb","aaa");
my %e;
$e{$_}++ foreach @array;
my @result = grep { $e{$_} > 1 } keys %e;

82デフォルトの名無しさん:2006/02/01(水) 10:11:55
出揃ったよころで後出し。。。

my @array=("aaa","bbb","ccc","bbb","aaa","bbb","aaa");
my $result, %tmp;
for(@array) { push @result,$_ if $tmp{$_}++ > 1 };
83デフォルトの名無しさん:2006/02/01(水) 12:07:45
>>78
my @array = qw(aaa bbb ccc bbb aaa bbb aaa);
my %saw;
my @result = sort grep ++$saw{$_} == 2, @array;
84デフォルトの名無しさん:2006/02/01(水) 12:22:42
result もハッシュにした方が結果に重複がなくなっていいんじゃないか?
85デフォルトの名無しさん:2006/02/01(水) 12:47:08
コンパクトだが良い命題だったなw
それぞれ『やり方は何通りもある』が信条のPerlらしい解答たちだ。
86デフォルトの名無しさん:2006/02/01(水) 15:42:09
$a = "1..4";
print foreach $a

を実行したら

1234

と結果が出たら嬉しいんですけど
そのようにすることはできないのでしょうか?
87デフォルトの名無しさん:2006/02/01(水) 15:57:56
>>85
> コンパクトだが良い命題だったなw

こんな低レベルの命題でスレを埋めるのは勘弁な。
88デフォルトの名無しさん:2006/02/01(水) 15:59:47
>>86
foreachを再定義したいってこと?
なぜそんな事したいの?
8986:2006/02/01(水) 16:11:30
>>88
$a = "10..60,100..500"
というデータがあって
例えば32がその中にあるかどうか?
を調べるたいんです。
まあ、できないなら普通にやりますが
できたらかっこいいかなと^^;
90デフォルトの名無しさん:2006/02/01(水) 16:11:53
>>86
もしかすると、こうゆうことがしたいの?
foreachはいらんけど。

my $test = join '', 1..4;
print foreach $test;

それから、sortする場合以外で$a, $bを使うのは感心せんな。
91デフォルトの名無しさん:2006/02/01(水) 16:12:25
eval "print foreach $a";
92ヽ(´ー`)ノ ◆.ogCuANUcE :2006/02/01(水) 16:12:48
print foreach eval $array

93デフォルトの名無しさん:2006/02/01(水) 16:13:06
print foreach eval "$a";
こうでいいのか
9486:2006/02/01(水) 16:25:01
>>91
>>92
>>93
3人さんのを参考にして
print foreach eval $a;
が一番好みの書き方なんでこうしました。
ありがとうございます!

>>90
実際は$aではありません。
前も質問用に簡略化したらつっこまれましたーー;
95デフォルトの名無しさん:2006/02/01(水) 16:54:53
>>94
で、本当に知りたいのは eval で "1..4" をリストとして
展開できるという事じゃなくて、こっちじゃないのか。
http://www.kt.rim.or.jp/~kbk/perl-5.8/perlfaq4.html#how_can_i_tell_whether_a_certain_element_is_contained_in_a_list_or_array

> 前も質問用に簡略化したらつっこまれました
そりゃ >>90 が言ってるように、print for @array なんて
見せられたら print @array でいいじゃんと思うわな。
func($_) for @array ならともかく。
96デフォルトの名無しさん:2006/02/01(水) 17:02:50
>>89
> $a = "10..60,100..500"
> というデータがあって
> 例えば32がその中にあるかどうか?
> を調べるたいんです。
> まあ、できないなら普通にやりますが
> できたらかっこいいかなと^^;

Set::IntSpan
Array::IntSpan

あたり。
97デフォルトの名無しさん:2006/02/01(水) 18:15:38
>>89
そうだなあ。無駄が多そうだけどこれでもできるだろうな。

%hash = map {$_=>1} (eval $a);
if ($hash{32}) {
 print "32 はある。\n";
}
98デフォルトの名無しさん:2006/02/02(木) 00:36:38

このコードがなぜ機能するのか分かりません。


my $F = "xxx.dat";
open($F, $F) or die;
my @data = <$F>;
print @data;
print $F,"\n";

明らかにスカラー値は文字列とファイルハンドルの2値を同時に持つことが
可能らしいのですが、perlのデータ型について色々な解説を読んだのですが
「そういうことが出来ますよ」と明言した解説が見つかりません。
99デフォルトの名無しさん:2006/02/02(木) 00:40:42
ファイルハンドルなどというものは幻想
100デフォルトの名無しさん:2006/02/02(木) 01:14:04
>>98
$fh = "hoge";
open $fh, $fh;
$str = "hoge";
print <$str>;
# 又は print <hoge>;
とやってみるとどういうことかわかると思う。
101デフォルトの名無しさん:2006/02/02(木) 01:14:37
ファイルハンドルなどというものは男の妄想
102ヽ(´ー`)ノ ◆.ogCuANUcE :2006/02/02(木) 01:15:21
> スカラー値は文字列とファイルハンドルの2値を同時に持つことが可能
>>99 が言う通り、その解釈はおかしいんだけど…。

>>100 だけじゃなくて、%{main::} を Data::Dumper で見ると良いかも。
103デフォルトの名無しさん:2006/02/02(木) 01:17:00
>>98
> 「そういうことが出来ますよ」と明言した解説が見つかりません。

open関数のマニュアルエントリに書いてあるやん。
104デフォルトの名無しさん:2006/02/02(木) 01:41:06
> スカラー値は文字列とファイルハンドルの2値を同時に持つことが可能
俺もあんまりファイルハンドルはよく知らんのだけど、
経験的に「一意なハンドル名」をPerlに登録する感じなんじゃね?

その「一意なハンドル名」を元にPerlがどのハンドルなのかを特定して、
入出力の処理をすると。
105デフォルトの名無しさん:2006/02/02(木) 01:48:31
>>98
つ らくだ本 (Perl4について書かれた初版にも載っている)

つーか、use strict 使えよ。

間接ファイルハンドルはPerl4時代からの機能で、以下 >>53
openでは(シンボリックリファレンス扱いなので) use strict 下だとエラーになる。

念の為、open my $fh,$filename; とした場合の $fh は無名グロブへのリファレンスな。
106デフォルトの名無しさん:2006/02/02(木) 04:42:20
sub hoge() {
 haehae, kakaka;
}

サブルーチン書くときに用もないのに()付けちゃってるのはDQNですか?
プロトタイプをちゃんとしようとしてるうちに変な癖が付いちゃったみたいで… orz
107デフォルトの名無しさん:2006/02/02(木) 06:19:43
>>106
変でも何でもない。
全く問題ない。
108デフォルトの名無しさん:2006/02/02(木) 08:14:26
どうでもいいけどcloseしないの?
109デフォルトの名無しさん:2006/02/02(木) 09:43:10
>>106
プロトタイプを必要としていないサブルーチンでプロトタイプの
宣言をするのは、読み手を混乱させかねないのでお勧めしない。
特に引数無し () やスカラー1つ ($) 、サブルーチンを含めた場合
(&@) は perl が最適化の為に特別扱いしようとするので、無駄な
処理をする事になる。
http://www.kt.rim.or.jp/~kbk/perl5.005/perlsub.html#Prototypes
110デフォルトの名無しさん:2006/02/02(木) 10:21:03
>>109
> 無駄な処理をする事になる。
今時、処理系のほんの僅かのオーバーヘッドと
人間にとっての理解性と、どっちが大事なんだ?w
111デフォルトの名無しさん:2006/02/02(木) 10:55:07
ま、どうしても気になるなら
そういう選択肢もあるって程度?
そこより先に根本的なロジックの見直し。
11298:2006/02/02(木) 11:30:51
>>100
なるほど、分かりやすい例をありがとうございます。妄想を解いていただいて感謝。
113デフォルトの名無しさん:2006/02/02(木) 12:17:10
>>106
本当に引数を取らないのでなければ、サブルーチン宣言に空の括弧を付けないでください。
O・NE・GA・I♪
114デフォルトの名無しさん:2006/02/02(木) 12:27:15
>>113に萌えた
115デフォルトの名無しさん:2006/02/02(木) 13:31:32
shift JIS のスクリプトを扱う必要があるのですがたとえば

use encoding 'Shift_JIS';
$str1 = "鼻毛";
$str2 = "三日";
print "俺の$str1は$str2以内に伸びてくる。\n".
"したがって二日以内に切ることが望ましい\n";

のようにすると一行目が「俺の。」と表示されてしまいます。これを

print "俺の$str1\は$str2\以内に伸びてくる。\n".

のようにして、変数名の後に \ を入れると正しく表示されるのですが、
こういう処理方法は正しいのでしょうか?
それとも最初のやり方でうまくいかないのはPerl側の不具合とみるべきでしょうか
116デフォルトの名無しさん:2006/02/02(木) 13:31:49
引数とるサブルーチンに空のプロトタイプつけたらエラーで呼べないと
思うのだが... &つければ別だが。
117デフォルトの名無しさん:2006/02/02(木) 13:34:46
encodingプラグマは廃止した方がよさそう
118デフォルトの名無しさん:2006/02/02(木) 13:47:57
>>115
バグだろうな。
取りあえず、「俺の${str1}は${str2}以内に」のように { } を付ければ回避できる。
\ を付けるよりはスマートだろ?
119デフォルトの名無しさん:2006/02/02(木) 13:54:39
>>113
バグというより、そもそも>>115のようなコードがおかしい。
もし $str1 の後に続く文字が英数字だったらどうするの?
120119:2006/02/02(木) 13:55:13
アンカーミスった、>118 だ。
121デフォルトの名無しさん:2006/02/02(木) 14:02:04 BE:34938263-
>>119
リテラルなのに「もし」って…
122デフォルトの名無しさん:2006/02/02(木) 14:11:31
O'ReillyのSpaidering Hackに

% perl -MLWP::Simple -e "getprint 'http://cpan.org/RECENT'" | grep "/by-
module/Acme" | mail -s "New Acme modules! Joy!" $USER

ていう例文が出るのですが、これをDosプロンプトで入力するとエラーがでます。
$USERのところにメールアドレスを入れるのかと思ってやってみたのですが
同様の結果でした。

何が間違ってるのでしょうか?
123デフォルトの名無しさん:2006/02/02(木) 14:13:57
訂正
cpanのアドレスはそのままでは404なので、適宜修正して入力してます。
124デフォルトの名無しさん:2006/02/02(木) 14:14:38
'grep' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。

とか

'mail' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。

とかいうエラーだったら潰すぞ?
125デフォルトの名無しさん:2006/02/02(木) 14:19:54
>>122
> ていう例文が出るのですが、これをDosプロンプトで入力するとエラーがでます。

で、そのエラーを隠蔽するのは嫌がらせか?
126デフォルトの名無しさん:2006/02/02(木) 14:25:56
すいません。コマンドまたはファイル名が違います。が出ます。
127デフォルトの名無しさん:2006/02/02(木) 14:29:49
了解。
webprog池
128122:2006/02/02(木) 14:39:35
% perl -MLWP::Simple -e "getprint 'http://cpan.org/RECENT.html'" | grep "/by-
module/Acme"
までのコマンドなら正常に実行できるので
| mail -s "New Acme modules! Joy!" $USER
でこけてるんだと思うのですが。

そもそも $USERって何でしょうか?検索してもuserばっかりヒットして良く分からない。

| mail -s "New Acme modules! Joy!" $USER
って"New Acme modules! Joy!"の題名で$USERのアドレスにメールを送るって命令なんですよね?

メールアドレスの指定もしてないのに自分宛に送れたらスゴイ便利だけど、
$USERには自動的に自分宛のアドレスが格納されてるわけないから、
ここにアドレス自分で入れる必要があると思うんですがやり方がよくわかりません。
129デフォルトの名無しさん:2006/02/02(木) 14:42:21
mail は UNIX のコマンド。 $USER は UNIX なら自分のアカウント名がセットされる。
なので、 UNIX なら自分宛にメールが届くが、 Windows なんだから諦めれ。
130122:2006/02/02(木) 14:46:06
>>129
そうなんですか。。どうもありがとうございました。
131デフォルトの名無しさん:2006/02/02(木) 14:46:51
仮にmailコマンドが実装されてたとしても

$USER → %USERNAME%

だな
132デフォルトの名無しさん:2006/02/02(木) 14:49:58
>>131
UNIX じゃないので %USERNAME% がメールアドレスに対応したものとは限らないし、
あまり変なこと教えるのはどうかと。
133デフォルトの名無しさん:2006/02/02(木) 14:54:22
なんでそんな突っかかってくるんだよ^^;
134デフォルトの名無しさん:2006/02/02(木) 15:00:25
>>131
実装次第。
135デフォルトの名無しさん:2006/02/02(木) 15:09:30
>>133
すまん、心配性なもので、他所に変なメール出しちゃったらとかいろいろ気になってしまって。
136デフォルトの名無しさん:2006/02/02(木) 15:57:31
>>121
お前、微笑ましいな。
言いたい事はわかるが、完全に勘違いしてるぞ。
137デフォルトの名無しさん:2006/02/02(木) 16:50:58
Filter => 1にしてないのに識別子に英数字以外が使えてるのが
おかしいという理解でいいでしょうか。でもqq()とqr()の中はdecode
されるとあるので、ちょっと微妙ですね。どっちにしろわかりにくい
からドキュメントに問題あると言ってもいいとは思う。

138デフォルトの名無しさん:2006/02/02(木) 18:02:39
>>115
こんな所でゴチャゴチャ聞いてないで関係者に直接聞いたほうがいいんでない?
下のところからJcode mailinglistに参加すればEncode maintainerに質問が
ぶつけられる。
ttp://openlab.jp/Jcode/index-j.html
139デフォルトの名無しさん:2006/02/02(木) 18:08:21
でもこの時期忙しそうだしなあ>the (J|En)code Maintainer
140デフォルトの名無しさん:2006/02/02(木) 18:53:30
>>139
イヤイヤ、ドキュメントは彼が書くんだから向こうに投げるのは価値ありだよ。
まあ、彼はスルーの名人だから反応無しかもしれんがw
141デフォルトの名無しさん:2006/02/02(木) 23:45:30
Encodeって、En code ってことだったのかー!ひとつの単語かとおもてたー!
142デフォルトの名無しさん:2006/02/03(金) 00:23:32
確定申告以外は忙しくないんでは?
blog見てるとそんな気がする。
143デフォルトの名無しさん:2006/02/03(金) 01:27:08
とりあえず投げれば?
忙しくて放置食らったら、その後考えればよい。
144デフォルトの名無しさん:2006/02/03(金) 01:41:14
>>141
ひとつの単語だよ!
145デフォルトの名無しさん:2006/02/03(金) 07:22:02
>>141
スレ違い気味だけど調べたのでレスしてみる
en-
「…(の状態)にする」
ttp://dictionary.goo.ne.jp/search.php?MT=en-&kind=ej&row=2

code
情報を表すのに使用される記号システムで、根源的に別のものを表す可能性がある。
ttp://www.ipa.go.jp/security/rfc/RFC2828-03CJA.html#code

encode
(I) もともと、いくつかの他の表現形をもつ可能性がある情報を表現するための記号のシステムを利用すること。
ttp://www.ipa.go.jp/security/rfc/RFC2828-03EJA.html#encode

というわけで、codeにするのがencode。
Encodeモジュールで言えばcodeは…UTF-8フラグが付いてない文字列?
146デフォルトの名無しさん:2006/02/03(金) 12:59:43
これは良い英語の時間ですね
>>144のツッコミワロスw
147デフォルトの名無しさん:2006/02/03(金) 14:53:06
リャマ本4版の日本語版っていつ出版されるんだろ?
148144:2006/02/03(金) 15:43:23
>>146
どこが笑いどころなのかわからないのですが・・・

ひとつの単語なのは間違ってないですよね?
149デフォルトの名無しさん:2006/02/03(金) 16:25:09
win2kでActivePerl v5.8.7を入れています。
コマンドプロントでtest.plが置いてあるディレクトリまで移動して、
perl test.plと打つと問題なく動くのですが、

perl test.pl
pause

と、同一ディレクトリにバッチファイルを作り、起動させると、
'perl' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
と出てしまいます。
他のディレクトリでも試してみたところ、C:\Documents and Settings\Administrator\デスクトップ
でのみ正常に動きました。
バッチファイルでperlのパスを絶対パスでC:\usr\local\bin\perlと指定すれば
エラーは出なくなったのですが、何故ディレクトリの位置によって
コマンドを認識したりしなかったりするのでしょうか?
150デフォルトの名無しさん:2006/02/03(金) 16:26:30
use open OUT => ':encoding(euc-jp)';
use IO::File;

となっているプログラムで、

my $fh = new IO::File('test.txt', 'w');
$fh->print(...);

という感じで utf8 フラグの立った文字列を書こうとすると
Wide character を書いたという警告が出て、結果として
utf8 が書かれるのですが、IO::File に対しては use open
は効かないということでしょうか? (しょうがないから
binmode $fh, ':encoding(euc-jp)'; でやることにしま
したが)。
151デフォルトの名無しさん:2006/02/03(金) 17:04:14
もう馬鹿は encoding 使うなよ。
Encode.pm 書いた人間がお勧めしないって言ってんだから、
何も知らん馬鹿が使うな。
152デフォルトの名無しさん:2006/02/03(金) 17:29:04
>>150
http://www.kt.rim.or.jp/~kbk/perl-5.8/open.html#description
> 二つの引数を取る open()、readpipe() (または qx//) と同様の
> 演算子はその レ キ シ カ ル ス コ ー プ で 本プラグマを
> 見つけると宣言されたデフォルトを使用します。
153150:2006/02/03(金) 17:57:09
なるほど。そういうことでしたか。
154デフォルトの名無しさん:2006/02/03(金) 18:36:30
これはできるんだけど

open(F, '<&DATA') or die;
while (<F>){print}
__DATA__
abc
def

これはできません。どうやったら DATA をリダイレクトできるんでしょうか?

use IO::File;
my $fh = new IO::File('<&DATA');
die "$!\n" unless ($fh);
while (<$fh>){print}
__DATA__
abc
def
155デフォルトの名無しさん:2006/02/03(金) 19:20:24
>>154
何故そんなに IO::* を使いたがるんだ?

http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perldata.html#Scalar_value_constructors
> __END__ および __DATA__ というトークンは、実際のファイルの終端より
> 前にある論理的なスクリプトの終端を示すために使うことができます。
> これらの後にあるテキストは無視されますが、ファイルハンドル DATA を
> 通して読み出すことができます。__END__ に対しては main::DATA 、
> __DATA__ に対しては PACKNAME::DATA (ここで PACKNAME はカレント
> のパッケージ名です) を使います。

IO::File::new() の中で IO::File::open() が呼ばれ、その中で
open($fh, '<&DATA') されるから、君の渡した '<&DATA' は
*IO::File::DATA をコピーしている。

#!/usr/local/bin/perl -w
use strict;
my $fh = \*DATA;
print <$fh>;
__DATA__
blah, blah, blah...
156デフォルトの名無しさん:2006/02/03(金) 19:32:36
日記で2/3と時間表示させました。
これを同じ日にもう一つ記事を書く時に2/3 -1 2/3 -2って感じにしたいんですがどうすれば・・・。
157154:2006/02/03(金) 20:51:23
>>155
これでできました。ありがとうございます。
使いたい理由は open する個所だけ条件分岐してファイルまたは DATA を
読みたかったからです。(まあ IO::File じゃなくてもいいんですが…)

#!/usr/bin/perl -w

use strict;
use IO::File;

my $fh = new IO::File('<&main::DATA');
die "$!\n" unless ($fh);
while (<$fh>) {
print;
}
$fh->close();

__DATA__
abc
def
158デフォルトの名無しさん:2006/02/03(金) 21:37:46
>>156
知るかボケ
159デフォルトの名無しさん:2006/02/03(金) 21:51:13
>>156
意味不明、いやむしろWebProg
http://pc8.2ch.net/php/
160デフォルトの名無しさん:2006/02/03(金) 22:19:14
>>149
それはPerlではなくてDOSやUNIXの基礎知識だから
↓の単語で調べてみな

path

(ちなみに「パス」と読む。「パスを通す」も合わせてググってみて)
161デフォルトの名無しさん:2006/02/03(金) 22:34:01
無い文字が変換できるw 弾さん、スンバラシイーwww
use strict;
use Encode qw(from_to);
my $str = "\e\$B-5\e(B";
from_to($str,'iso-2022-jis','cp932');
print $str,"\n";
162デフォルトの名無しさん:2006/02/04(土) 00:27:28
>>161
俺は 'iso-2022-jis' なんて指定を通しちゃうザル加減の方が
弾の人らしく思うけどな。Encode::Aias::init_aliases() のこれ。

define_alias( qr/\bjis$/i     => '"7bit-jis"' );
define_alias( qr/\beuc.*jp$/i  => '"euc-jp"' );
define_alias( qr/\bjp.*euc$/i  => '"euc-jp"' );
define_alias( qr/\bujis$/i    => '"euc-jp"' );
define_alias( qr/\bshift.*jis$/i => '"shiftjis"' );
define_alias( qr/\bsjis$/i    => '"shiftjis"' );

'not jis' でも通るし 's-jis' なんて書いた日には bug fix に悩みそうだ。
163デフォルトの名無しさん:2006/02/04(土) 00:52:49
mod_perlで全てのリクエストから共有可能な変数を作ることは出来ないでしょうか。
通常のやり方ですと同プロセス間でしか共有出来ないのでMaxSpareServersを1等に
して常に1個のプロセスを使いまわさないと実現できません。
fastCGIの場合、出来ると聞いたことがあります。
2chはCで静的メモリを確保しperl/CGIで静的メモリをreadして記事を表示している
と聞いたことがあるのでperlでも静的メモリread(writeも?)をサポートしているのかと
思った次第です。
164163:2006/02/04(土) 01:02:29
自己レスです。
shmop関数関連ですね。
もうちょっとググって情報集めしてみます。
165デフォルトの名無しさん:2006/02/04(土) 01:16:00
Apacheのログに
Premature end of script headers
と表示され、実行できません。

以下のサイトに書いてある事も試しましたがいずれもだめぽですた。
http://sagittarius.dip.jp/~toshi/premature.html
http://www.tomilab.net/manual/howto/cgi.html#troubleshoot

で、同じプログラムを別のサーバや自分のPCで実行するとうまく動作します。
これは一体何が原因なんでしょうか?
166デフォルトの名無しさん:2006/02/04(土) 01:19:32
167デフォルトの名無しさん:2006/02/04(土) 01:21:11
>>163
mod_perlを使おう!
http://pc8.2ch.net/test/read.cgi/php/1005122528/

モジュール一個書いて startup.pl に入れれば済む気がしなくもない。

>>165
△▲ WebProg 初心者の質問 Part12 ▼▽
http://pc8.2ch.net/test/read.cgi/php/1125215604/
168141:2006/02/04(土) 02:48:56
>>144-146
すんません。早とちりレスしました。en=Englishの事かーと思ってアホな感動してた自分にテラワロス

ところで、関数宣言(?)について質問したいです。
クロージャなどを受け取って処理したい関数をつくりたいとして、
sub try{
  〜処理〜;
  &{$_[0]};
}
などと宣言して、使うほうでは、sub{}を使って、
try sub{
  print "aho";
}
などとなりますが、関数宣言の部分で、sub try(&;$){ } のように書くと
呼び出しで、subを省略して↓のように関数呼び出しできるようなのですが、
try {
  print "aho";
}
これはなんなのでしょう?今まで関数宣言の括弧は無意味なのかと思ってましたが、
なにやら意味があるみたいで興味津々です。
なにか文献があると助かるのですが、そういったものとかないでしょうか。
169141:2006/02/04(土) 02:50:56
と思ったら、>>109に書いてありまくりですよこれが。
なんかもう新しい言語が作れますね。Perlは。
170デフォルトの名無しさん:2006/02/04(土) 03:30:27
まぁ、>>141の発想は新鮮だったな。
171デフォルトの名無しさん:2006/02/04(土) 05:14:05
クラスのサブルーチンにプロトタイプ宣言しても無視されてるみたいなんですが
できないんでしょうか?
Perl v5.8.7
172デフォルトの名無しさん:2006/02/04(土) 09:09:16
>>160
以前、別のフォルダにインスコした時のパスが残っていたようで、重複登録されてました。
重複部分を削ったら無事、動くようになりましたthx。
173デフォルトの名無しさん:2006/02/04(土) 09:17:30
あるメソッド呼び出しが実際にどのサブルーチンに対応
するかは実行時まで決まらないので、クラスのメソッドに
対するプロトタイプ宣言は効果がありません。
型保証が欲しいならC++やJavaなどの静的型付けの言語を
使いましょう。
174デフォルトの名無しさん:2006/02/04(土) 10:47:14
まあそうなんだけど、Perlでは全然できないんだっけ?
何かでできたような気がするんだが。

まあ、変数関係は use strict; だ。
あと使ってない変数があると警告を出すとか、何かあったよね?
忘れたけど。
175デフォルトの名無しさん:2006/02/04(土) 11:37:34
>>162
ご指摘に冷や汗三斗(^^;;;;;
176デフォルトの名無しさん:2006/02/04(土) 12:08:20
perldoc コマンドを実行したときの結果を perldoc.jp のものに置き換えるにはどうしたらいいでしょうか?
177デフォルトの名無しさん:2006/02/04(土) 12:14:56
そんなことしてどうするの?
手元にインストールされてるのと違うバージョンの
マニュアル見ても意味無いよ
17839:2006/02/04(土) 16:17:21
超遅レスですが
基本のつくりを↓のような感じにして、意図どおりの動きをさせることができました。
ありがとうございました。
--------------------
use strict;
package p_test;
sub open {
my ($id, $file) = @_;
local *FILE = $id;
open(FILE, "+>>$file");
}
sub close {
my ($id) = @_;
local *FILE = $id;
close(FILE);
}
sub write {
my ($id, $tmp) = @_;
local *FILE = $id;
print FILE $tmp;
}
sub read {
my ($id) = @_;
local *FILE = $id;
seek(FILE, 0, 0);
@tmp = <FILE>;
}
--------------------

&p_test::open("LOGINIDLIST", $globalpath."loginlist.dat");
179デフォルトの名無しさん:2006/02/04(土) 16:56:37
キモ…
180デフォルトの名無しさん:2006/02/04(土) 18:04:22
ディレクトリ毎の使用量をPerlで取得したいのですがそういう
ライブラリありますでしょうか?
du -sの結果みたいなやつです。`du -s`するしかないでしょうか?
何卒宜しくお願い申し上げます。
181デフォルトの名無しさん:2006/02/04(土) 18:14:35
>>180
ならとりあえず「du」でCPANで検索してみようぜ
ttp://search.cpan.org/search?query=du&mode=all

Filesys::DiskUsage
Estimate file space usage (similar to `du`)
ttp://search.cpan.org/~cog/Filesys-DiskUsage-0.04/lib/Filesys/DiskUsage.pm
182デフォルトの名無しさん:2006/02/04(土) 21:20:26
>>168-169
まあねぇ。Error.pmとか。
183デフォルトの名無しさん:2006/02/05(日) 00:14:38
WinXPでActivePerl Build 5.8.7です。

PerlでSCSIデバイスの情報を知りたくてDLL呼び出しを書いたのですが、

my $SendCmd = new Win32::API('wnaspi32.dll', 'SendASPI32Command', 'P', 'N');
my $sBuff = "\x00" x 58;
my $nHA = $SendCmd->Call($sBuff);

としたら異常終了のダイアログが出てきます。

my $SendCmd = new Win32::API('wnaspi32.dll', 'SendASPI32Command', 'V', 'N');

としたら上記ダイアログは出てこずに終了するのですが、どうも引数が渡されていないっぽいです。
こういう場合DLL呼び出しができないと諦めるしかないんでしょうか?
184デフォルトの名無しさん:2006/02/05(日) 01:18:28
>>183
まず、Cから呼び出して正常に動作するかどうかが問題。
Perl の話はその後でしょう。
185デフォルトの名無しさん:2006/02/05(日) 01:55:23
>>184
ありがとうございます。

Cからの呼び出しはできます。
EXEをコールし、ファイルに結果を吐かせ、
それをPerlで読み込むということはできています。
回避策というか、これで一応はやろうと思ってることは達成できてるんですが。

でもあまりスマートでは無いのでPerlで直接DLLをコールしたいんですね。
186デフォルトの名無しさん:2006/02/05(日) 03:54:47
じゃあいいじゃん。
プログラミングは手段であって、目的じゃないぞ。
187デフォルトの名無しさん:2006/02/05(日) 05:12:29
>>183
諦めるのが手軽だけど、原因を特定できれば他の方法もとれるよ。
この場合は、WINAPI , PASCAL , C形式(STDCALL) の違いが原因なので、
 ・ラッパーDLLを使う
 ・Win32::APIのメンテナに頼み込む
あたりも選択肢に入る。
188デフォルトの名無しさん:2006/02/05(日) 07:24:20
>>183
おもしろそうな話なんで、もうちょっといろいろやってみてほしい。
189デフォルトの名無しさん:2006/02/05(日) 08:09:46
>>183
XSで書くってのは?
190デフォルトの名無しさん:2006/02/05(日) 10:24:24
>186-189

ありがとうございます。
やっぱり呼び出し規約の違いですかね。
もう少し粘ってみます。
191180:2006/02/05(日) 10:48:11
>>181
誠にありがとうございました。遅くなりましてすみません。感謝です。
192デフォルトの名無しさん:2006/02/05(日) 11:49:32
バイナリファイルをプレフィックス(0x)を付けた16進ヘキサのテキストに変換する方法をお教え下さい。
或いは、bin2hex.exeを使用するとバイナリから以下のように変換できますので、このファイルを読んでPerlで0xとカンマを付加する方法をお教え下さい。

52 49 46 46 F8 FD 00 00 57 41 56 45 66 6D 74 20
10 00 00 00 01 00 01 00 A0 8C 00 00 40 19 01 00

これを最終的に

0x52,0x49,0x46,0x46,0xF8,0xFD,0x00,0x00,0x57,0x41,0x56,0x45,0x66,0x6D,0x74,0x20,
0x10,0x00,0x00,0x00,0x01,0x00,0x01,0x00,0xA0,0x8C,0x00,0x00,0x40,0x19,0x01,0x00

のように0xを付けて,で区切ったヘッダファイルにしたいのです。
ファイルサイズは1Mbyte程度です。
Perl v5.8.7 build 815 WinXP です。宜しくお願い致します。
193デフォルトの名無しさん:2006/02/05(日) 11:52:53
>>192
1) 1行読み込む
2) スペースでsplitして配列に格納
3) 各要素を、頭に"0x"、お尻に"," を付けて出力
4) 次の行を読み込む
194デフォルトの名無しさん:2006/02/05(日) 12:11:01
>>192
sub hex2hextext($) {
my $result; my @line = split("\n", $_[0]);
for (0 .. $#line) { $result .= '0x' . join(',0x', split(" ", $line[$_])) . ($#line==$_?'':",\n"); }
return $result;
}
195デフォルトの名無しさん:2006/02/05(日) 12:50:56
>>192
bin2hex.exeなんかわざわざ使わなくてもふつうに16文字ずつ読みこんで
unpackすりゃよくね?

use strict;
open R,"test.dat";
open W,">hex.dat";
binmode(R); #winだからな
while(not eof(R)){
read(R,my $tmp,16);
my @line = ();
for (split //,$tmp){
push @line,'0x'.unpack("H2",$_);
}
print W join(',',@line),"\n";
}
196192:2006/02/05(日) 13:42:13
>>193さま、>>194さま、>>195さま
早速の回答ありがとうございます。m(__)m
bin2hex使わなくても出来るのですね!すばらしい!!感謝です。
197デフォルトの名無しさん:2006/02/06(月) 01:35:14
すいません、ちょっと質問です。
WindowsXP に ActivePerl 5.8.7 をインストールしたのち
GD をインストールできません。

準備は以下の通り
Cコンパイラとして、VisualC Toolkit をインストール
NMAKE.EXE を Microsoft からダウンロードしてパスの通ったファイルに入れる。
CYGWIN をインストール。
その他、tar.exe, gzip.exe を入れておき、Perlに事前に設定。

手順は以下の通り
1) Perl -MCPAN -e shell をコマンドプロンプトから入力
2) install GD を入力すると、2.30 のモジュールをダウンロードしてくる(これは正常)
  ただし、途中で
  ' gdlib-config' は、内部コマンドまたは外部コマンド、
  操作可能なプログラムまたはバッチファイルとして認識されていません。
  (なんだか怪しい雰囲気)
3) Where is libgd installed? に gdwin32 を展開後のパスを入力。
  → コンパイルエラーでnmake が停止。
  gd-2.0.33 の展開後のパスを入力しても同様に
  コンパイルエラーで nmake が停止。

他のモジュール IO, DBI, HTML はインストールできたのに、
GD はなかなか曲者です。

198デフォルトの名無しさん:2006/02/06(月) 01:37:31
なるほど、曲者ですね。
199デフォルトの名無しさん:2006/02/06(月) 01:41:50
>>197
そうですか。

で、ご質問は?
200デフォルトの名無しさん:2006/02/06(月) 01:44:16
最後の一文で爆笑してしまったw
201197:2006/02/06(月) 01:50:01
>>199
質問を質問で返すなあーっ!!
疑問文には疑問文で答えろと学校で教えているのか!?
わたしが聞いているんだッ!
202デフォルトの名無しさん:2006/02/06(月) 02:08:38
質問になってないから。
203デフォルトの名無しさん:2006/02/06(月) 02:20:58
>>201
> 質問を質問で返すなあーっ!!

嘘つけ。質問なんかしてないくせに。
204デフォルトの名無しさん:2006/02/06(月) 02:47:24
分かったからwebprog行けよ
205デフォルトの名無しさん:2006/02/06(月) 04:42:15
確かにこれじゃただの日記だなw>>197
206デフォルトの名無しさん:2006/02/06(月) 06:34:21
ほうほう曲者ですね
207デフォルトの名無しさん:2006/02/06(月) 07:40:38
208Real197:2006/02/06(月) 09:34:01
ニセモノが現れたようですが、
具体的には、GDのインストール方法が知りたいということです。

>>204
板違いの質問でしたか?
209デフォルトの名無しさん:2006/02/06(月) 10:12:26
おまいら質問者をあんまり虐めるなよ(・∀・)

>>208
ActivePerlなら自前でコンパイルするまでもなく
ppmを使ってコンパイル済みのものを貰ってきた方が楽
ppm install GD
210デフォルトの名無しさん:2006/02/06(月) 11:34:20
>>209
それじゃ回答者をいじめてやろう

1.33を入れてどうすんじゃ。質問者は2.3が欲しいんだけど
211デフォルトの名無しさん:2006/02/06(月) 11:42:34
レポジトリ追加したらいいじゃん
rep add theoryx5 http://uwinnipeg.ca/cgi-bin/ppmserver?urn:/PPMServer58
GD2.3あったよ
212209:2006/02/06(月) 12:05:55
>>210
スマソ先日Catalystを入れるのにTheoryx5を追加してあったから
ActiveStateに無いの気づかなかった。
次からはどこのリポジトリに入ってるのかちゃんと調べるよ('A` ;)

>>211 フォローthx
213デフォルトの名無しさん:2006/02/06(月) 12:08:12
>>211
それだけじゃ駄目だよん、インストールの前に rep up theory5 としなきゃ。
ppmは最新のモジュールを探してインストールしてくれない、まだ阿呆。
http://ppm.activestate.com/BuildStatus/5.8-G.html を見ると
ActiveStateにはGDはないみたいだからそれでOKかもね。

下のようなinstall.txtを用意して ppm --file install.txtとすると
perlをver upしたとき便利だ四。

--- install.txt
## repository
rep add theoryx5 http://theoryx5.uwinnipeg.ca/ppms/
rep add BdP http://www.bribes.org/perl/ppm/
##install
install GD
## UPGRADE in theorx5
rep off ActiveState Package Repository
rep off BdP
upgrade -install -precious *
rep del theoryx5
## UPGRADE in BdP
rep on BdP
upgrade -install -precious *
rep del BdP
rep on ActiveState Package Repository
---$
214デフォルトの名無しさん:2006/02/06(月) 12:35:18
それだけじゃ駄目だよん、まだ阿呆。
215デフォルトの名無しさん:2006/02/06(月) 13:59:23
ていうかググれば大量の情報が・・
216Real197 ◆xJZzeRrr.U :2006/02/06(月) 22:05:58
>>209-213 さん
ありがとうございます、
無事にGD と GD::Graph, GD::Text がインストールできました。

cgi-bin にパイチャートのスクリプトを措いて
<image src="hogehoge.cgi"> すると、もう・・・(´Д`;)ハアハア

で、/x11 のフォントを参照しているスクリプトが動かなかったけど、
これは Windows 上では諦めた方がいいのでしょうか?
それとも、まだ何かいい手があるのでしょうか?

GD::Text->font_path( "/usr/lib/X11/fonts/truetype/" );
$graph->set_title_font( "luximr", 16 );
$graph->set_legend_font( "luximr", 10 );
$graph->set_x_axis_font( "luximr", 9 );
$graph->set_x_label_font( "luximr", 11 );
$graph->set_y_axis_font( "luximr", 9 );
$graph->set_y_label_font( "luximr", 11 );

217デフォルトの名無しさん:2006/02/06(月) 23:16:14
>>215
Windows の場合もフォントパスを指定してやればいいんじゃないか?
手元に環境がないから試せないが、\Windows\Fonts とかなかったっけ。
218Real197 ◆xJZzeRrr.U :2006/02/07(火) 21:53:21
>>217
その通りですた。

GD::Text->font_path( "C:\\WINNT\\Fonts" );
$graph->set_title_font( "Courier New", 16 );
$graph->set_legend_font( "Courier New", 10 );
$graph->set_x_axis_font( "Courier New", 9 );
$graph->set_x_label_font( "Courier New", 11 );
$graph->set_y_axis_font( "Courier New", 9 );
$graph->set_y_label_font( "Courier New", 11 );

とかで、無事フォントが表示されますた。
日本語は utf8 に変換して

$graph->set_title_font( "msgothic.ttc", 16 );

でOKですた。
219デフォルトの名無しさん:2006/02/07(火) 22:54:54
会社で仕事を楽にするためのツールをperlで作成しました。
思いの外いいできだったので他の人にも使ってもらおうと思い、配布用に
Windows 用のexeファイルに出来ないかと思いました。
会社の人にActiveParlをインストールさせる、というのだと多分めんどくさがって使ってくれません。

調べたところPARというのがある事がわかり、ppmを使ったインストールの解説ページも見つけ
自宅のマシンで試したところ無事exeファイルが作成出来ました。

で、会社のマシンにもインストールしようとしたのですが、どうやら会社では
ファイアーウォールか何かでppmが弾かれるようでインストールできません。
ppmを使わない場合は、どうやらnmakeとかgzipを用意しないといけないらしいとはわかったのですが
そこからどうすればいいのかが分かりません。
ネットで説明してるページも見つけたんですが、すでに分かってる人向けみたいな感じで
結局よく理解できませんでした。

ppmを使わずPARをインストールする方法を教えて頂けないでしょうか。
220デフォルトの名無しさん:2006/02/07(火) 23:23:01
>>219
漏れの経験上、せっかくそういうツールを作っても、たとえexeでもみんなメンドくさがって
使ってくれないよ。入れるのすらメンドいんだよ。
(しかもそのexeって、コマンドラインアプリでしょ? そりゃみんな使わないよ……)

CGIにしてボタン押すだけのとこまで用意して、社内メールでURLを送りつけたら使ってくれた。
っつーわけで社内鯖でCGIにすることをオススメする(それなら自動的にGUIになるしね)
221デフォルトの名無しさん:2006/02/07(火) 23:42:48
>>218の意見も一理あるけど
>>219
ppmのリポジトリからアーカイブを拾ってきて、ローカルでインストールできる。
ttp://ppm.activestate.com/PPMPackages/zips/8xx-builds-only/Windows/
ここからPAR-0.90.zipと、依存している以下のパッケージもダウンロード。
PAR-Dist-0.07
Module-ScanDeps-0.54
Archive-Zip-1_11
で、これらのzipファイルの中身を展開して、
中に入っているppdファイルを依存関係の子からppmでinstall。
(又はリポジトリをローカルディレクトリになるよう設定してPARをinstallでもOK)
ppm install Module-ScanDeps.ppd
ppm install PAR-Dist.ppd
ppm install Archive-Zip.ppd
ppm install PAR.ppd
222デフォルトの名無しさん:2006/02/07(火) 23:44:02
レスアンカー間違えた('A`) 218じゃなくて220だったスマソ
223デフォルトの名無しさん:2006/02/08(水) 00:25:46
健気な >>219 に萌え
224デフォルトの名無しさん:2006/02/08(水) 00:34:42
>>219
そんなもんなテキストのまま配れ。
で、使いたいやつだけ Perl インストールして使えと書いておけ。
225デフォルトの名無しさん:2006/02/08(水) 00:42:31
参照で受け取ったリストのアイテム数を知りたいのですが

sub aaa {
 my ($list) = @_;
 if (@$#list < 3) {
  ・・・↑ここどうやって書けばいいのでしょうか?
 }
}
my @list;
push(@list, 'xxx');
&aaa(@list);
226デフォルトの名無しさん:2006/02/08(水) 00:52:03
ケータイで撮った画像をケータイメールで自分のwebサーバーの
imgフォルダーに送り、その画像を自動的に自分のHP上に
貼り付けるにはどうしたらよいか、知っている人教えてください。
227デフォルトの名無しさん:2006/02/08(水) 00:58:03
CGIについての質問は板違いです。WEBプログラミング板でどうぞ。
CGIとPerlの区別がつかない人もWEBプログラミング板に行ってください。
(WEBプログラミング板 http://pc8.2ch.net/php/ )

CGIの質問は答えがPerlと全然関係ない話に帰着する場合が多かったりするのでWEBプログラミング板に行って聞いたほうが得ですよ。
このスレでは(CGI以外の)純粋にPerlのみに関係する質問を取り扱っていこうと思います。
228デフォルトの名無しさん:2006/02/08(水) 01:06:22
>>225
$#$list
後、それ参照になってないから
&aaa(\@list);
にするなり
sub aaa(\@) {...}
aaa(@list);
にするなり

>>226
ケータイメールと言うのが解らんが普通のE-MailならNet::POP3でも使ってメールを受け取って、
そのウェブサイトがリモートサーバにあるならNet::FTPあたりでアップロードするなり、
ローカルにあるなら直接書き換えるなりすれば良いんじゃね?
直接CGIと言うわけではないがWebProg板行った方が良いと思われ
229デフォルトの名無しさん:2006/02/08(水) 04:44:27
>>227
>>228
わかりました、WEBプログラミング板ですね、ありがとう。
230225:2006/02/08(水) 08:43:21
>>228
ありがとうございました。
231デフォルトの名無しさん:2006/02/08(水) 10:18:33
>>219
perl2exeでググれ
232デフォルトの名無しさん:2006/02/08(水) 15:29:16
>>219
CGIで使えそうだったらCGI化して自分のマシンにapache入れて公開してみれ。
ブラウザからならなんとか使ってくれるだろ。CGI化が無理だったら>>231
233デフォルトの名無しさん:2006/02/08(水) 18:00:04
>>219
>で、会社のマシンにもインストールしようとしたのですが、どうやら会社では
>ファイアーウォールか何かでppmが弾かれるようでインストールできません。

なら、ファイアーウォールか何かを管理しているシステム管理者がいるんだろ?
システム管理者に相談して物事を進めてゆくのが、組織の基本というものだろう。
234デフォルトの名無しさん:2006/02/08(水) 18:05:57
ちょこっとスクリプトを使ってもらうためにそこまでしなきゃならないなんて、
本当に Perl って使えないプログラムですね。
235デフォルトの名無しさん:2006/02/08(水) 19:49:51
>>234
そうだな。
かまけているの時間ももったいないから、
Perlのことは忘れてほか行こうぜ。
236219:2006/02/08(水) 20:54:16
いろいろなアドバイスありがとうございました。
>>221の方法で成功しました。
237デフォルトの名無しさん:2006/02/08(水) 22:21:25
>>234-235
それをいったらjavaなんてどうするんだおい。100Mくらいするインストーラ実行だぞ。
RubyなんてLinux標準インストールじゃないかもしれな(略


やっぱVBScript最強
238デフォルトの名無しさん:2006/02/08(水) 23:01:11
ウチは社内にMacintosh多いから不可>VBScript
239デフォルトの名無しさん:2006/02/08(水) 23:09:52
Macintoshwwwwwwwwwwwww
240デフォルトの名無しさん:2006/02/08(水) 23:09:58
batファイル最強説
241デフォルトの名無しさん:2006/02/09(木) 02:09:59
>>240
そんなウンコ構文使うくらいならJScriptにするよ。
242デフォルトの名無しさん:2006/02/09(木) 10:21:45
終わりから3文字を取り出すのに、
substr($strin, length($strin) - 3, 3)
という風にlength関数を使わない方法ってありまする?
243デフォルトの名無しさん:2006/02/09(木) 10:39:41
$strin =~ m/(...)$/; print $1
244デフォルトの名無しさん:2006/02/09(木) 10:41:59
正規表現使うよりはsubstr+lengthの方は速いよね。やっぱこれしかないのね。
245デフォルトの名無しさん:2006/02/09(木) 11:08:18
substr( $str, -3 );
これできなかったっけ?
246デフォルトの名無しさん:2006/02/09(木) 11:08:55
substr( $str, -3, 3 );
247デフォルトの名無しさん:2006/02/09(木) 11:28:26
基本的なことで申し訳ないですが、質問です
A.pl、B.pm、C.pm、D.plとあって、全て同じディレクトリにおいています。
@INCには、Aの先頭で、use libで絶対パスを入れています。
AはBを「use B」しています。BはCを継承(use C かつ @ISA)しています。
BとCは、Dを「require 'D.pl'」しています。
この状態で、Aを./A.plで起動し、Bの関数をコールします。
Bはそのコールされた関数から、D内部の関数をコールしますが、見つからないと怒られます
しかし、Bが継承したCの関数をAからコール、または、B内部でCの関数をコールした場合
そのコールされたCの関数からは、D内部の関数がちゃんと見つかるようです
これはなぜなのでしょうか?
また、Bでの「require 'D.pl'」を「require './D.pl'」または
「require '/xxx/xxx/D.pl'」のように変更すると
BからもDの関数がみえるようです。
これも疑問です。

そもそも問題は関数が見えないことだったので
DをD.pmに変更し、BとCのrequireをuseに変えて
D内部でExpoterすることで対処しています。
問題は解決していますが?、出来れば上記の疑問を
解消するためのヒントなりをいただければと思います。
248デフォルトの名無しさん:2006/02/09(木) 11:37:19
>>245
その書き方でいいし、スクリプトレベルで陽に length() を呼ぶよりずっと速い。
http://perldoc.jp/docs/perl/5.6.1/perlfunc.pod#item_substr_EXPR_OFFSET

>>247
関係ないが B.pm は標準モジュールに存在する。
249デフォルトの名無しさん:2006/02/09(木) 11:47:20
>>248
すみません。説明が足りませんでした。
正確には、A・B・C・Dはちゃんとした名前が
ついています。

関係あるかどうかはわかりませんが
Cから継承しているメソッドの中に
Bを生成するためのnewも定義しています
内容は単純にblessをするのみです。
250デフォルトの名無しさん:2006/02/09(木) 12:39:08
>>249
説明で書いたこととプログラムに書いてあることは食い違って
いることも多いので、現象が確認できる出来るだけコンパクトな
コードを書いて晒した方がいいと思われ。

よくわからんがnewを定義してるってことはpackageも使って
いるんだろうしその辺がどうなってるかわからないとなんとも
言えん。
251デフォルトの名無しさん:2006/02/09(木) 12:46:24
>>245-246
それ素晴らしいです><
ところでその二つは意味的にどうちがうんでしょうか??
252デフォルトの名無しさん:2006/02/09(木) 13:01:31
後から3バイト目から最後まで取り出す
後から3バイト目から3バイト取り出す
253デフォルトの名無しさん:2006/02/09(木) 13:06:36
>>247
同じファイルを2回requireすると、2回目は無視される。理由はらくだ本参照。
254デフォルトの名無しさん:2006/02/09(木) 13:10:29
日本語をsplitしたいのですが、普通にやるとsplitできません
文字化けというかバイトごとにきられます
ご教授お願いします
255デフォルトの名無しさん:2006/02/09(木) 13:56:56
言いたい事は分からんでもないが

1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
256デフォルトの名無しさん:2006/02/09(木) 14:00:49
>>254
>>2-3

#!/usr/local/bin/perl -w
require 5.008001;
use strict;
my $str = "UTF-8の文字列";
utf8::decode($str); # UTF-8フラグを付ける
my @chr = split //, $str; # 文字単位で処理される
utf8::encode($_) for @chr; # UTF-8フラグを外す
print join '/', @chr;
__END__
257デフォルトの名無しさん:2006/02/09(木) 15:02:07
$ perl -Mencoding=utf8 -e '$s="あいう";@d=split//,$s;print join("/",@d),"\n";'
あ/い/う
$
258257:2006/02/09(木) 15:04:57
>>257は Linux (Fedora Core 4) の bash で LANG=ja_JP.UTF8 で Perl 5.8.6 の場合な。
他の環境では同じ 5.8 でもエンコーディングとかクォートのしかたとか変えないと駄目かも。
259デフォルトの名無しさん:2006/02/09(木) 16:24:20
>>254 の問題はsplit だけではないだろう。
日本語の取り扱い全般について基礎を学ぶべきだろうな。
260デフォルトの名無しさん:2006/02/09(木) 20:05:20
Perlの正規表現で
foo, bar, zoo以外の半角英数という正規表現って
実現可能ですか?
261デフォルトの名無しさん:2006/02/09(木) 20:09:30
>>260
君が何を言っているのか、サッパリ分からない。
262デフォルトの名無しさん:2006/02/09(木) 20:13:39
>>260
こんな感じ?
/\A(?!foo|bar|zoo)[\w]+\z/
263262:2006/02/09(木) 20:15:21
ごめん、これじゃだめだった。
264デフォルトの名無しさん:2006/02/09(木) 20:35:55
>>260
これは?↓
/(?=^(?:(?!foo).)*$)(?=^(?:(?!bar).)*$)(?=^(?:(?!zoo).)*$)/s
265デフォルトの名無しさん:2006/02/09(木) 21:34:35
それなんのAA?
266デフォルトの名無しさん:2006/02/09(木) 21:42:08
!~ でいいのではないかと
267デフォルトの名無しさん:2006/02/09(木) 23:06:22
share属性を指定しないパッケージスコープの変数は、
スレッドで共有しないCopy on Writeなデータという認識であってる?
268デフォルトの名無しさん:2006/02/09(木) 23:34:10
>>250
>>253
レスありがとうございます。
253さんのヒント(答え)でわかりました。
「同じファイルを2回requireすると、2回目は無視される」というのは
読んでいたのですが、私の理解が足らなかったようです。
私が247で書いた例でいくと
Cが最初にコンパイルされて、Dを取り込む
Bはその後にコンパイルされるが、Dは既に取り込んであるので
取り込まれない。その結果、CからはDがみえるが
Bからはみえないと。
Bでrequire './D.pl'に変えた場合にDがみえたのは
Cのrequire 'D.pl'の「D.pl」とBのrequire './D.pl'の「./D.pl」は
perl的には名前が違うから、同じファイルとは扱われず
Bのrequireでも、「D.pl」が取り込まれるからなんですね。
すっきりしました。
どうもありがとうございました。
269デフォルトの名無しさん:2006/02/09(木) 23:54:11
telnet, ftp 等でリモートホストの操作をするのではなく、
ローカル内の作業で画面に表示された内容(ログ)に従って
自動的にコマンドを実行してくれる方法、ライブラリがありましたら、
お教え頂けないでしょうか
宜しくお願いします

270デフォルトの名無しさん:2006/02/09(木) 23:56:39
>269です
例えば、gdb を動かしていて
最初の
(gdb)
という画面が表示されたら、
r a.txt
というようにコマンドを入力してくれる、といったものです
ご教授のほどよろしくお願いいたします
271デフォルトの名無しさん:2006/02/10(金) 00:04:02
>>268
>Cが最初にコンパイルされて、Dを取り込む
>Bはその後にコンパイルされるが、Dは既に取り込んであるので
>取り込まれない。その結果、CからはDがみえるが
>Bからはみえないと。

ちょっと違うな。Dに独立した名前空間を与えていないから、
最初にrequire したときに、Cと同じ名前空間が
与えられる。だから、別の名前空間を持つBからは、
そのままでは読み出せない、つーこと。
272デフォルトの名無しさん:2006/02/10(金) 00:08:06
>>271
なるほど。
そういうことなんですね。
ありがとうございます。
273デフォルトの名無しさん:2006/02/10(金) 00:55:43
>>270
つ Expect
274デフォルトの名無しさん:2006/02/10(金) 11:56:19
Win2000 Perl5.8.7

ソースをすべてUTF-8で保存して、use utf8 プラグマを付けているのですが、

use utf8;
my $dir = 2バイト文字入りのディレクトリ名を代入;
while (glob($dir\\*)) {

これだとマルチバイトのディレクトリ名を見つけてくれないのですが、
どうしたらよいのでしょうか?
ttp://www.pure.ne.jp/~learner/program/Perl_unicode.html#encode
ここを読むとEncodeとは一緒に使うべきではないような気がしますし
いまだにJCodeしかないのでしょうか?
ディレクトリ名に2バイトを使うなってのは無しの方向でよろしくお願いします・・・
275274:2006/02/10(金) 12:01:15
Encode と encoding を混同していたみたいです。
解決しました。
276デフォルトの名無しさん:2006/02/10(金) 13:38:54
ディレクトリ名に [ が含まれているとグロブが失敗するんですが
どうしたら [ 付きでも成功できるでしょうか?(Win2000 Perl5.8.7)

$dir = "c:\[test]";
if (-d $s) {
 print "exists \n"; # ここには来る
 while (glob("$s\\*")) {
  print "$_\n"; # ここにはこない
 }
}
277276:2006/02/10(金) 13:41:03
$dir = "c:\[test]"; は$s = "c:\[test]"; の間違いです。
278276:2006/02/10(金) 13:43:05
また間違えた…
$s = "c:\\[test]";
です。
279デフォルトの名無しさん:2006/02/10(金) 14:19:15
File::Globとか?
280ヽ(´ー`)ノ ◆.ogCuANUcE :2006/02/10(金) 14:44:24
[test] の部分が、文字リストとして解釈されるからじゃないか。

  $dir =~ s/\[/\\[/;
  $dir =~ s/\]/\\]/;

  print join(', ', glob("$dir/*")) . "\n";

みたいにエスケープしてやれば大丈夫なんだけど、スマートな方法は
思い付かないな。glob_escape() とかあればいいんだが…。
281デフォルトの名無しさん:2006/02/10(金) 15:05:18
$s = "c:\\[test\\]";
でもダメなの?
282デフォルトの名無しさん:2006/02/10(金) 15:09:17
ああ、勘違い。>>280の言ってること分かってなかった。
283デフォルトの名無しさん:2006/02/10(金) 15:12:03
$s = "c:\\\[test\]" でもダメみたい
284デフォルトの名無しさん:2006/02/10(金) 15:14:18
"C:\\\\[test\\]" でしょ?
285デフォルトの名無しさん:2006/02/10(金) 15:19:29
bsd_glob($dir, GLOB_QUOTE);
これは?
286276:2006/02/10(金) 15:22:38
皆様ありがとうございました。
今回の処理ではディレクトリ名に必ず [ が入っているので
先にchdirするかopendirを使う事で回避する事にしようと思います。
287276:2006/02/10(金) 15:29:32
my $s = "e:\\\\[test\\]\\*";
while ($_ = bsd_glob($s, GLOB_QUOTE)) {
print "$_\n"
}
なぜか延々と同じファイルが表示されます
bsd_glob は DOS形式のパスだとうまくいかない?
288デフォルトの名無しさん:2006/02/10(金) 16:02:55
File::DosGlobでメタキャラクタを禁止にしちゃうとか
それなら"e:/[test]/*"でいけそうだけど。
289デフォルトの名無しさん:2006/02/10(金) 16:06:09
>>287
lib/File/Glob.pm の191行目以降に目を通せ。
290ヽ(´ー`)ノ ◆.ogCuANUcE :2006/02/10(金) 16:12:21
>>289
$ wc -l `locate /Glob.pm`
190 /usr/lib/perl/5.8.4/File/Glob.pm

…(゚Д゚;)?

>>276
ガラッと話は変わるが、File::Find じゃ駄目かね。
opendir() で構わないなら別にいいが。
291デフォルトの名無しさん:2006/02/10(金) 16:21:06
今きてるよね? opendirの時代が・・
292デフォルトの名無しさん:2006/02/10(金) 16:56:57
つFile::Find::Iterator
293デフォルトの名無しさん:2006/02/10(金) 20:01:46
File::Slurpのread_dirサイコー!!

@files = read_dir('/foo/bar')

だぜ!!
294デフォルトの名無しさん:2006/02/10(金) 20:22:47
@f = `ls`;
295デフォルトの名無しさん:2006/02/10(金) 20:34:51
>>294
志村ー改行、改行
@f = map { chomp; $_ } `ls`;
296デフォルトの名無しさん:2006/02/10(金) 20:44:32
OS依存の上シェルを起動するコードで対抗、と。
297デフォルトの名無しさん:2006/02/10(金) 21:57:53
>>295
@f = `ls`;
chomp(@f);
298デフォルトの名無しさん:2006/02/10(金) 21:58:29
>>296
@f=`ls.exe`;
chomp(@f);
299デフォルトの名無しさん:2006/02/10(金) 23:33:04
どうでもいいかもしれないが、
find(\&boobar, '.');
↑のように開始パスを相対パスで渡すと、サブディレクトリに入ったときに強制終了するんだよなぁ。
そんなわけで、use Cwd 'abs_path';のabs_path()で絶対パスに変換するなどしてから渡す必要がある。
300デフォルトの名無しさん:2006/02/10(金) 23:39:09
>269,270です
>273さん、ありがとうございます

ローカルPC内の作業を想定しておりますので
expectでは処理できないと考えております

expectはリモートホストの処理に使用するもので、
telnet, tip等で接続する必要があるという認識でおりますが、
expectはローカルPC内の作業でも使用できるのでしょうか

質問攻めで申し訳ありませんが、
ご教授願いたく思います
301デフォルトの名無しさん:2006/02/10(金) 23:55:50
>>300
対話的なプログラムなら何でも使えるよ。
302デフォルトの名無しさん:2006/02/11(土) 00:01:01
>>300
> expectはリモートホストの処理に使用するもので、
> telnet, tip等で接続する必要があるという認識でおりますが、

おまえ、馬鹿だろ。

> expectはローカルPC内の作業でも使用できるのでしょうか

はい。
303デフォルトの名無しさん:2006/02/11(土) 00:30:32
>301,302,さん
どうもありがとうございます
早速、webで調べつつ作成しますー
304デフォルトの名無しさん:2006/02/11(土) 06:38:06
しかしいつも思うのだがなぜexpectに相当することをtcl無しに直接perlから出来るような
モジュールでもないのだろうか? 需要はありそうな気がするのだが。 
305デフォルトの名無しさん:2006/02/11(土) 07:39:32
↑ 需要あると思う人が作らない限りない
306デフォルトの名無しさん:2006/02/11(土) 08:12:36
このスレって、現役以外の人も回答してるんだな。
所詮は匿名掲示板だから字引きがわりには使えないってことか。
>>304-305みたいな浦島太郎みたいな書き込み見るとつい思ってしまう。
307浦島太郎:2006/02/11(土) 08:15:59
そうだな。
308デフォルトの名無しさん:2006/02/11(土) 11:06:46
直リンクが不可能なアップローダー cgi あったら便利だと思う

直リンクされたことによって消滅するアップローダは多いからな

perl で書かれたものキボン
309デフォルトの名無しさん:2006/02/11(土) 11:20:06
>>1
310デフォルトの名無しさん:2006/02/11(土) 11:31:58
画像分割の技術を応用すれば直リンクはふせげる
311デフォルトの名無しさん:2006/02/11(土) 11:33:16
CGIじゃなくて.htaccessじゃ
312デフォルトの名無しさん:2006/02/11(土) 12:46:11
>>306
痛い奴だなwwww
313デフォルトの名無しさん:2006/02/11(土) 12:47:27
リファラとか使えばいいんじゃないか?
314ヽ(´ー`)ノ ◆.ogCuANUcE :2006/02/11(土) 13:38:58
>>299
再現しない。abs_path() も必要ないな。環境依存のバグかも。

>>313
Referer でもいいけど、セッションを発行するのはどうだろう。
どっちにしろ、WebProg 行きのネタな気がするが。
315デフォルトの名無しさん:2006/02/11(土) 15:21:25
「車輪の再発明」予備軍が集うスレはここですか?
316デフォルトの名無しさん:2006/02/11(土) 15:34:48
>269 270です
cygwinにてexpectを使った自動入力処理を作成しております
下記のように gdb を使って a.exe を動かす処理を作り、
r を入力するところまでは出来たのですが、動作してくれません
単にコンソールに r を表示しているだけのような感じがします
(出力先の設定、もしくはIO Tty,Pty以外のIO関連のライブラリが必要なのでしょうか)

#!/usr/bin/perl
use Expect;

$exefile = "gdb ./a.exe";
$command=Expect->spawn($exefile);
$command->expect(5,'(gdb) ');
sleep(1);
print "r\n";

< 識者の皆様 >
再三の初歩的な質問かもしれませんが、
ご教授のほど宜しくお願いいたします
もちろん私自身でも調べます


317デフォルトの名無しさん:2006/02/11(土) 15:37:38
まぁ生活も困難な負け組貧乏人にとっちゃ
再発明してるゆとりなんて無いだろうなw
318デフォルトの名無しさん:2006/02/11(土) 15:51:16
>>316
> 単にコンソールに r を表示しているだけのような感じがします
どう見ても単に端末にrを表示しているだけです。
本当にありがとうございました。
319デフォルトの名無しさん:2006/02/11(土) 16:06:21
まさかとは思うが、子プロセスと入出力ハンドルで通信したかっただけ?
320デフォルトの名無しさん:2006/02/11(土) 16:09:56
>318さん
>319さん
ご確認ありがとうございます

>318
確かに単に表示しているだけのようです
試しにですると実行してくれました
#!/usr/bin/expect --
set timeout -1
spawn gdb ./a.exe
expect "(gdb) "
send "b main\n"
expect "(gdb) "
send "r\n"

>319
はい
321デフォルトの名無しさん:2006/02/11(土) 16:45:33
use IPC::Open2;
322デフォルトの名無しさん:2006/02/11(土) 17:19:36
>>316
print は $command に対してしなきゃ。
$command->print("r\n");
323デフォルトの名無しさん:2006/02/11(土) 17:25:45
Windowsで使えるExpectの代わりになるようなモジュールってありませんか?
324デフォルトの名無しさん:2006/02/11(土) 17:41:28
>>269=>>323
もうこの質問への回答は十分だろ。スレを私物化しないでくれ。
325323:2006/02/11(土) 17:43:01
便乗して質問しただけで俺は>>269でもなんでもないよ
326デフォルトの名無しさん:2006/02/11(土) 19:31:43
>>323
Cygwin の Perl なら Expect がそのまま使えるよ。
327デフォルトの名無しさん:2006/02/11(土) 21:22:51
$foo[$i] = split( /\./, "aaa.bbb.ccc") みたいなことはできますか?

どう説明したらいいのかわからないので申し訳ないです。。
328デフォルトの名無しさん:2006/02/11(土) 21:26:05
$foo[$i] = [split( /\./, "aaa.bbb.ccc")] か?
329デフォルトの名無しさん:2006/02/11(土) 21:29:45
できましたーーー!
ほんとありがとうございます!
330デフォルトの名無しさん:2006/02/11(土) 21:55:44
>269>270です
>321さん、ありがとうございます
皆様のおかげで、一応動作するようになりました

#!/usr/bin/perl
use Expect;
$exefile = "gdb ./a.exe";
$command=Expect->spawn($exefile);
#$command->log_stdout(0);
$command->expect(5,'(gdb) ');
print $command "b main\n";
$command->expect(5,'(gdb) ');
print $command "r\n";
$command->expect(5,'(gdb) ');
print $command "q\n";
$command->expect(5,'The program is running. Exit anyway? (y or n)');
print $command "y\n";

それでは失礼します
331デフォルトの名無しさん:2006/02/11(土) 23:02:46
>>330
……これはテストなんだよな?
本当はバッチモードで対応できない処理をやるんだよな?
332デフォルトの名無しさん:2006/02/12(日) 00:44:48
>331さんへ

今、「バッチモード」という語句を初めて耳にしましたので
少し調べてみましたが、gdbの場合.gdbinit, gdb.iniへ記述といったように、
ファイルに処理を書き込んでおくというものでしょうか?
バッチモードの意味がわかっておらず申し訳ないです

今回のgdbはテスト用です
しかし、.gdbinit、gdb.iniでは"時間待ち”が出来ないと思っておりました
  


333デフォルトの名無しさん:2006/02/12(日) 00:45:54
>332です
perlから話が逸れますので、無視してください
失礼しました
334デフォルトの名無しさん:2006/02/12(日) 06:06:40
>>311
htacessを使用しなくっても、リファラでチェックすることで、直リンクを防止できないか?
335デフォルトの名無しさん:2006/02/12(日) 07:50:22
このスレのコードではリファラのチェックは出来ません。
336デフォルトの名無しさん:2006/02/12(日) 10:20:09
リファラー使うのはおかしいだろ。。偽装なんていくらでも出来る。>>314の通りセッション使うのが正解。
337デフォルトの名無しさん:2006/02/12(日) 11:12:45
リファラやらセッションやらの話題はWebProg板へどぞん
338デフォルトの名無しさん:2006/02/12(日) 11:18:42
PerlスレらしくCGI::Sessionなんかを使わず独自技術症候群に陥って
セッションを独自実装しちまうコーディングについて話せばおk。

リファラは環境変数読むだけだからダメポ。
339デフォルトの名無しさん:2006/02/12(日) 12:20:29
20-80だと思うけどな。
340デフォルトの名無しさん:2006/02/12(日) 13:57:51
いや、リファラでいいだろ。擬装はできるがそれをするのは分かっている人だけだ。
大半の人はふつーにアクセスするからほとんど防げるんじゃないか?
それとも何か問題あるのか? IE だとリファラちゃんと返さないとか?
341デフォルトの名無しさん:2006/02/12(日) 14:14:11
>>340

>>338>>337 に答える形で、「CGI::Session を置き換えるような実装についての話題ならテーマとして可」という話をしている。
今回の問題に対する解としてのリファラチェックという手法を直接に否定しているわけじゃない。

どちらにしろ今回のような件でリファラを使う気にはならんけれど、そーゆー話は WebProg 池、と。
皆さん結局最後には自分の意見入れるんですね><
343だからどうした:2006/02/12(日) 19:38:35
 
344デフォルトの名無しさん:2006/02/12(日) 20:53:19
リファラって、なんか原因は分からないが
普通に辿ってきているにも関わらず
思うように入ってないことがあるんだよね。

これで何回か苦情が来た。
なので、うちは必ずセッション使うようにしてる。
345デフォルトの名無しさん:2006/02/12(日) 20:54:25
>>342
文章の基本を勉強してこい
346デフォルトの名無しさん:2006/02/12(日) 21:50:23
>>342>>345
文末には句点を打つことだな。
347デフォルトの名無しさん:2006/02/12(日) 22:24:48
教えてください。
Windows XPにてActive perl 5.8.7.815を使っています。

PerlにText::CSV_XSというモジュールをインストールしたくて
さっきはじめてモジュールのインストールを行いました。
perl -MCPAN -e shellとやって適当にEnterを叩いて設定したのち
install Text::CSV_XSを実行しました。初期設定がおかしかったのか
Test実行で失敗していたようですが、インストールはうまくいったような
感じでした。しかし、Perlプログラムでuse Text::CSV_XSを実行すると
Can't locate Text/CSV_XS.pm in @INC
というエラーが出てしまいます。
@INCにパスを追加しなければならないのでしょうか?
それともインストール失敗しているのでしょうか?
c:\.cpanというフォルダができていて、そこにText::CSV_XS関連の
ファイルは作成されたようですが・・・
348酩酊 ◆TWARamEjuA :2006/02/12(日) 22:26:07
>>347
散々既出(哀)
つ[ppm]
349デフォルトの名無しさん:2006/02/12(日) 22:32:11
>>347
スタートメニューのプログラムから、
「ActiveState ActivePerl 5.8」→「Perl Package Manager」を実行。
開いたppmのコンソールで
install Text-CSV_XS
350デフォルトの名無しさん:2006/02/12(日) 22:49:24
KENTの掲示板YY-boadではギャル系顔文字が#9999のように表示されてしまいす。
Mixiではそれが対策されている王ですが、どのようにすればよいでしょうか。
長文になる場合はサイトUROでもいいのでよろしくお願いします。
351347:2006/02/12(日) 23:02:57
>>348 >>349

ありがとうございます!
できました!!!
352デフォルトの名無しさん:2006/02/12(日) 23:11:27
>>350
KENTの掲示板ならKENTのサポートに頼めばいいがな。
353デフォルトの名無しさん:2006/02/12(日) 23:17:34
>>352
いまKENT以外でも試してみましたが、どれも文字が#9999のように表示されてしまいす。

よろしければお願いいたします。
354デフォルトの名無しさん:2006/02/12(日) 23:23:53
>>353
仕事で必要ならコンサルタントを雇いなさい。
355デフォルトの名無しさん:2006/02/12(日) 23:27:26
>>354
ニートですから、コンサルタントを雇う金がありません。

よろしければお願いいたします。
356デフォルトの名無しさん:2006/02/12(日) 23:31:08
ヒマなら自分で調べたらいい
357デフォルトの名無しさん:2006/02/12(日) 23:54:32
ニートがいっちょまえにプログラミングなんかするんじゃねえ
358デフォルトの名無しさん:2006/02/13(月) 00:14:27
携帯の絵文字の事かな?

まあ、PerlでもRubyでもJavaサーブレットでできた掲示板でもそうなるだろうから、

WebProg池
359デフォルトの名無しさん:2006/02/13(月) 00:30:26
>>358
いや、記号を組み合わせた顔文字
&を&に置き換えていることが原因だったから置き換えた。

=~ s/&#/&#/g;
360デフォルトの名無しさん:2006/02/13(月) 00:31:00
ごめん、引きこもりで時間だけは有るからプログラミングやってる。
361デフォルトの名無しさん:2006/02/13(月) 00:33:19
>>359

=~ s/&amp;井/&井/g;
362デフォルトの名無しさん:2006/02/13(月) 01:22:42
あっ、そうそう

356と357は氏ね
363デフォルトの名無しさん:2006/02/13(月) 05:30:31
SDBM_File のデータベースが読めません
tieは問題ないようなのですが。

panic: sv_setpvn called with negative strlen
というメッセージを吐きます

データベースを作った環境が5.005_03 + mod_perlで
読もうとしている環境が5.8.2なのですが
データに互換性がないのでしょうか?
364デフォルトの名無しさん:2006/02/13(月) 10:01:57
モジュールのBUGでしょ
ご愁傷様
365デフォルトの名無しさん:2006/02/13(月) 11:35:55
>>363
こういう質問の時は関係ないと思っても一応OS書いた方がいいよ。

な、わけで直接の回答になるかどうかは知らんが一応コメント5.005_03当時のSDBM_FileのコードはUnixの
> notes of lseek(2)
> Seeking far beyond the end of a file, then writing, may
> create a gap or "hole", which occupies no physical space and
> reads as zeros.
動作を前提に書かれていました。これが保障されていないOSでのSDBM_Fileにはバグがあったのです。
また、ソースをみると昔、5.005_03当時にはなかった関数が新たに書き加えられたりしてます。
今回の現象がバグかどうかは分らないが、データに互換性がない可能性もあります。
5.005_03なSDBM_Fileの適当に名前を変えてソースをコンパイルして、過去のデーラベースを読み込める
ようにして変換するのが現実的だと思います。
366デフォルトの名無しさん:2006/02/13(月) 13:37:50
>>364-365
ありがとうございます
何らかの方法で変換することを考えます
367デフォルトの名無しさん:2006/02/13(月) 17:56:31
すみません。
質問なのですが、

特定の関数の中の変数の一覧を取得することってできないでしょうか?

sub hoge {
my $a;
my $b;
my $c;
fuga();
}

sub fuga {
# ここで、呼び出し元のhoge()内に変数 $a $b $cを参照したい
}

普通に引数で渡したり、グローバル、オブジェクト等使え と思うかもしれませんが、
fuga();
だけの呼び出しで実現したいのです。
%{パッケージ名::}で関数一覧は取得できるので、似たような方法でできる気がするのですが・・・
368デフォルトの名無しさん:2006/02/13(月) 18:09:43
気のせいです。
369デフォルトの名無しさん:2006/02/13(月) 18:29:10
カプセル化の危機!
370デフォルトの名無しさん:2006/02/13(月) 18:52:41
>>367
何でまたそんな変態的なことがしたいのですか?:-)
http://search.cpan.org/~robin/PadWalker-1.0/PadWalker.pm

どうしても、絶対にこれしか方法が無いというのでないなら
構造を考え直すことをお勧めする。
371デフォルトの名無しさん:2006/02/13(月) 18:55:22
> 普通に引数で渡したり、グローバル、オブジェクト等使え と思うかもしれませんが、
思いません。
372デフォルトの名無しさん:2006/02/13(月) 19:00:08
デバッガとかかな?
373デフォルトの名無しさん:2006/02/13(月) 19:00:10
foreach (keys %ENV) { print; }
こういうことかな
374デフォルトの名無しさん:2006/02/13(月) 19:07:59
>>372
まさにそんな感じです。
常駐型のアプリケーションを作っているのですが、
毎回再起動するのが非常に面倒なので、

sub fileeval {
open(FILE, $_[0]);
my $data = <FILE>;
eval($data);
print "error : $@" if($@);
}

といった変数を作り、

sub hoge {
my $a;
.... #コード
fileeval('hogehoge.pl');
.... #コード
}
というふうに使いたいのですが
当然fileevalの中からは関数hogeのスコープじゃないので、
$aが見えないのです。
375デフォルトの名無しさん:2006/02/13(月) 19:14:27
教えてください。ブラケットで囲まれ、かつその後に特定のキーワードが来る文字列のリストを作成したいのですが...
例えば、キーワードを "定食","弁当"...と仮定して、入力ファイル内の
[うなぎ]定食 [焼肉]ランチ [さば]弁当
をリストアップしたいのです。素人考えでしょうが、以下のように書きました。

#! usr/locsl/bin/per
@keyword = ("定食","弁当","ランチ","セット"); #キーワードのリストを配列に。
while (<>) {                 
$sentence = $_; #入力の各行を、変数$sentenceに。
if ($sentence =~ /\[[^\[]*?\]/ ) { #ブラケットがある行を、正規表現で探す(一行に複数あるかもしれない)。
foreach (@keyword) { #キーワードをひとつずつ当てはめ。
if ($sentence =~ /(\[[^\[]*?\]$keyword)/g) { #ブラケット+キーワード
ptint "&$\n";              # &$で、前の行で取り出した行を印刷。
}}}

どうしても ]定食 ]ランチ と、後部ブラケット以下しか、表示されません。print $1にしても同じです。
自分でも考えてみたつもりです。どなたか、教えてください。
376デフォルトの名無しさん:2006/02/13(月) 19:24:38 BE:108696678-
>>375
自分でそれを引っかけてるからだろ。
377デフォルトの名無しさん:2006/02/13(月) 19:26:12
>>375
ptintとか&$とか...コピペ汁

my @keyword = qw(定食 弁当 ランチ セット);
my $keywords_regex = '(?:' . join('|', map { "\Q$_\E" } @keyword) . ')';
while (my $sentence = <>) {
while ($sentence =~ /\[.*?\]$keywords_regex/g) { print "$&\n" }
}
378デフォルトの名無しさん:2006/02/13(月) 19:32:01
>>374
sub fileeval {
my ($file, $a, $b, $c) = @_;
open(FILE, $file);
my $data = <FILE>;
eval($data);
print "error : $@" if($@);
}

sub hoge {
my $a;
.... #コード
fileeval('hogehoge.pl', $a, $b, $c);
.... #コード
}
じゃだめなん?
379デフォルトの名無しさん:2006/02/13(月) 19:32:06
>>375
それしたから2行目の正規表現を
/(\[[^\[\]]*?\]$keyword)/g
にすればうまく行くんじゃね?
380デフォルトの名無しさん:2006/02/13(月) 19:35:17
>>378
その場合は、もともと sub hogeにある変数を全てfileevalに渡さないとダメですよね?
fileeval関数自体はいろんなところではさむので、どんな変数があるかわからないのです。

sub fileeval {
my $data = <FILE>;
return $data;
}

sub hoge {
eval(fileeval('hogehoge.pl'));
print "error : $@" if($@);
}

って感じにすれば実現できるんですが、fileevalの呼び出しだけで済ませたいなぁ と・・・・
381デフォルトの名無しさん:2006/02/13(月) 19:38:59
>>375 です。
レス有難うございました!! 早速試してみます。
382デフォルトの名無しさん:2006/02/13(月) 19:40:31
なんとなく OO でキチンと設計し直す方が良い気がする。
383デフォルトの名無しさん:2006/02/13(月) 21:11:46
>>380
設計からおかしい気もするけど、
ハッシュで、>>373じゃだめなん?
384デフォルトの名無しさん:2006/02/13(月) 21:13:01
おっと、ENVのままじゃないよ。一応。keysでゴリゴリできるって話しね。
385デフォルトの名無しさん:2006/02/13(月) 21:48:02
>>374
そういう構造にするならstrict varsは捨ててダイナミックスコープ変数にするのも手。
というかスコープ外のレキシカル変数に無理やりアクセスするくらいならこっちの方がよっぽどマシだと思う。
sub hoge {
no strict 'vars'
local $a;
fileeval('hogehoge.pl');
}
myとlocalの違いは適当にググっとくれ
本当にデバッガのように呼び出し元に手を加えられないというケースなら
>>370のPadWalkerのようなものもあるけどさ…
386デフォルトの名無しさん:2006/02/13(月) 22:40:10
our
387デフォルトの名無しさん:2006/02/13(月) 22:50:23
>>375 です >>376-7,379 さん、ありがとうございました。
>>377 さんの2行目、
my $keywords_regex = '(?:' . join('|', map { "\Q$_\E" } @keyword) . ')';
変数my $keywords_regexには、具体的に何を入れてるのでしょうか?

どうして私のチョンボ.perl >>375 の if ($sentence =~ /(\[[^\[\]]*?\]$keyword)/g) で
grepして、$&で引っこ抜けないのでしょうか?根本的な誤解があるように思えてなりません。
お願いします。お時間あれば、初心者の私に教えてください。
388デフォルトの名無しさん:2006/02/13(月) 22:57:08
>>387
勉強する気があるのかないのか、困った子ですね。
389デフォルトの名無しさん:2006/02/13(月) 23:08:43
>>388
「初めてのPerl」は、スミからスミまでもう一度読み返しました。
とりあえず、どこかで膨大な勘違いがあると思うのです。
foreachで、$keywordに@keywordをひとつずつ入れる、それに正規表現の
ブラケット \[[^\[\]]*?\] (←でいいのですよね?)をjoinし、カッコ内を$&で
$sentenceに挿入....どこが、間違っているのか...ヒントだけでも教えてください。
390デフォルトの名無しさん:2006/02/13(月) 23:22:55
やってみりゃ分かることを・・・。
391デフォルトの名無しさん:2006/02/13(月) 23:39:23
>>390
もう、何度も書き直してるのにこのザマです。閉じブラケット以降しか拾ってくれません。
...確かに、他人に聞くようなレヴェルじゃないですよね。
貴重なお時間、ありがとうございました。もう一度、自分で調べてみます。
392デフォルトの名無しさん:2006/02/13(月) 23:39:43
すいません質問させてください
Perlで作ったおみくじCGIをサイトに置いたんですが
わたしのサイトに来てくださる人の携帯(DoCoMo)では動作しないって言われました
それでわたしも携帯で動作を確認するとやっぱり動きませんでした
PCでは問題なく動作するのですが携帯向けには何かしなければならないのでしょうか?
>>2-3で紹介されているサイト様も見てみたんですが書いてありません
詰まってしまいました
どなたか原因が分かりますでしょうか?
393デフォルトの名無しさん:2006/02/13(月) 23:42:33
>>392
そのURL教えて。
394デフォルトの名無しさん:2006/02/14(火) 00:07:45
>>389
ところが$keywords_regexはエスケープしてるからマルチバイト部分が
ぐちゃぐちゃでとても一目でわかるとは思えないものなんだよねこれが。

>>391
そもそも君の提示したソースだとこっちじゃ、ぜんぜん違うバグが出るか、
それらを修正しても>>375の問題は再現しないんだが...。
とりあえずgオプションを使いながら中の正規表現を動的に変えるのは間違ってる。

$keywords_regexには列挙されたキーワードのすべてにマッチする正規表現が入る。
map { "\Q$_\E" } @keywordでキーワードをエスケープ([や\みたいなメタキャラクタは入っていると困るため)
join '|',で正規表現の「選択」つまり複数にマッチするように並べる。
で、それらを(?:)で括ってグルーピングしている。
つまりエスケープを除くとこういうこと(?:定食|弁当|ランチ|セット)

>>392
>>1 CGIはWebProg板行き
395デフォルトの名無しさん:2006/02/14(火) 00:09:03
396394:2006/02/14(火) 00:09:23
ウボァ('A`)
一つ目のアンカー間違えた>>390
397デフォルトの名無しさん:2006/02/14(火) 00:14:43
>>394
本当に、ありがとうございます!!!!!
勉強させていただきました。
398デフォルトの名無しさん:2006/02/14(火) 00:31:55
>>382 >>383 >>384 >>385
ホントデバッグというか、開発中専用の機能なので、できるだけ本体のコードは触りたくないんですよね。

開発中は鯖立てっぱなしにして、hogehoge.plに実装していく。

出来上がったらfileeval('hogehoge.pl')の部分にhogehoge.plを貼り付ける。

って感じで使いたいのです。

PodWalkerは・・・ fileevalを呼び出したスコープにどんな変数があるかわからないとダメっぽいですね・・
399デフォルトの名無しさん:2006/02/14(火) 00:49:46
>>398
そういう目的・・・なら許せるかもしれない。
> PodWalkerは・・・ fileevalを呼び出したスコープにどんな変数があるかわからないとダメっぽいですね・・
Lexical::Utilとかの中から一覧を得られるやつを選んで探してきたつもりですが(´・ω・`)
use PadWalker qw(peek_my);
use Data::Dumper;
sub hoge {
my $foo = "HOGE";
print Dumper peek_my(1);
}
sub fuga {
my $foo = "FUGA";
my %bar = (a => 1);
hoge();
}
my $foo = "MAIN";
fuga();
400デフォルトの名無しさん:2006/02/14(火) 01:29:58
>>399
う、うおおおお そういうことか!!!

ありがとうございます!!!
やってみます!!!
401デフォルトの名無しさん:2006/02/14(火) 02:24:42
PadWalkerで手に入れたハッシュを、
キーを変数名としてeval使って現在のスコープにとりこもうと思ったんですが・・・
evalの中ってスコープかかってるんですね_no
402デフォルトの名無しさん:2006/02/14(火) 03:38:35
my $h = peer_my(1);
my $valiable_code;
foreach my $key (keys(%{$h})) {
$valiable_code .= "my $key = \$h->{'$key'};\n";
}

eval($valiable_code . $from_file_code);

といった感じで実現できました!
皆々様ありがとうございました!!!
403デフォルトの名無しさん:2006/02/14(火) 04:22:41
>>386
orzがひっくり返っただけだと思ったw
404デフォルトの名無しさん:2006/02/14(火) 07:25:19
>>402
重箱の隅で大変恐縮なのだけれども。

variable …。
405デフォルトの名無しさん:2006/02/14(火) 08:11:13
>>404
∧||∧
406デフォルトの名無しさん:2006/02/14(火) 09:34:57
Perlのフリーの統合開発環境ってなんかないの?
407デフォルトの名無しさん:2006/02/14(火) 09:47:54
Epic とか
408デフォルトの名無しさん:2006/02/14(火) 12:03:26
emacsでもつかってろ
409デフォルトの名無しさん:2006/02/14(火) 12:52:37
"ヽ(・∀・)/" =~ "ヽ(・∀・)/"
が偽になって

"舞同" =~ "蒼"
が真になってしまうんですけど
こんな不具合を回避する方法って、ありますでしょか?
410デフォルトの名無しさん:2006/02/14(火) 13:07:21
文字列の比較は eq ですよ
411デフォルトの名無しさん:2006/02/14(火) 13:18:36
情報を小出しにして、すみませんOTL
実際は左辺の部分を文字列にしてるんです。

$a = "いろはにほへと舞同ちりぬるを";
if($a =~ /蒼/){
print "真\n";
}
else{
print "偽\n";
}

具体的には、こんな感じです。
412デフォルトの名無しさん:2006/02/14(火) 13:19:44
そこであなたEclipseですよ!
413デフォルトの名無しさん:2006/02/14(火) 13:33:03
IDEすら、知らなかったですけど
これは、便利そうですね。早速試してみます。
ありがとうございました。
414デフォルトの名無しさん:2006/02/14(火) 13:47:06
けど、かなり重いので落胆しないようにね、と
415デフォルトの名無しさん:2006/02/14(火) 13:48:22
そこであなたOpen Perl IDEですよ!
416デフォルトの名無しさん:2006/02/14(火) 13:54:23
画面への出力と同じ内容を、ファイルにも出力したいと思っています。
とりあえず今はこんなクラスを作って対応してみましたが
sub new
{
open(OutHandle, ">$fileame") || die $!;
my $self = {
Handle => *OutHandle,
};
}

sub print($)
{
print "$s";
my $fh = $self->{'Handle'};
print $fh "$s";
}

my $prn = new DebugPrint("debug.log");
$prn->print("aaa");
これだと他のサブルーチンを使うときに渡さないといけないので不便です。
何かもっと良い方法がありましたら教えてください。(WinXP Perl 5.8.7)
417デフォルトの名無しさん:2006/02/14(火) 14:07:39
>>416
つIO::Tee
つselect
418416:2006/02/14(火) 14:21:01
>>417
おおっ!まさしく欲しかったものです!
ありがとうございます!
419デフォルトの名無しさん:2006/02/14(火) 15:58:13
パスを通したフォルダにPerlのスクリプトを置いてあるとき、
そのスクリプトの置いてあるパスの取得はどうやってできますか?

カレントフォルダのパスはgetcwdで取得できるんだけど…
420デフォルトの名無しさん:2006/02/14(火) 16:02:13
>>409
jperl使えやw
421デフォルトの名無しさん:2006/02/14(火) 16:11:52
>>419
FindBin とか。
422デフォルトの名無しさん:2006/02/14(火) 16:59:44
print が行われる前に、自動的に指定のサブルーチンが実行されるようにできないでしょうか?
423デフォルトの名無しさん:2006/02/14(火) 17:02:00
>>409
前者は quotemeta
後者は Encode や encoding で回避できる。

前者の補足
(や)はメタ文字なので、(や)自身を表すにはクォートする必要がある。
"ヽ\(・∀・\)/" で充分だが、 quotemeta "ヽ(・∀・)/" だとクォート忘れが無いし、
実行時にならないとパターンが分らないときに楽が出来る。
パターンが\Eを含まない事が保障されているならば、"\Qヽ(・∀・)/\E" も楽。

後者の補足
Perlは1文字1バイトを想定するので、(sjisの)"舞同" , "蒼" は \x95\x91\x93\x9f の
4文字と \x91\x93 の2文字として扱い、マッチが成立する。
(iso2022-jp,euc-jp,utf-8/16/32では、"舞同"は"蒼"にマッチしない)
Encodeやencodingを使うと "舞同" を2文字,"蒼"を1文字として扱うようになるので、
多バイト文字の途中からのマッチ成立は発生しなくなる。
424デフォルトの名無しさん:2006/02/14(火) 17:55:49
>>411 のようなことを書いてくる香具師のために、テンプレにこれを追加しない?

日本語の取り扱いについて質問する前にここを熟読すること
http://www.namazu.org/%7Etsuchiya/perl/perl-5.8.html
425デフォルトの名無しさん:2006/02/14(火) 18:21:14
Perlプログラミングの質問をさせて頂きます。

utf-8の文字の置換がうまく出来ません。

当方はja_JP.UTF-8なLinux環境でPerl5.8.5です。

最終的にやりたいことは、
いわゆる”にょろ”とか”から”と呼ばれる、あの文字がLinux上で二種類あるので、
一方に置換したいと思っています。

文字化けする可能性大ですが、一応その二種類を書いておきます。
Source: 〜
Dest: 〜

ただ、今のところ、他の特別じゃないnon-asciiな文字の置換さえ、おこなえていません。
ですから、とにかく、utf-8文字の置換を教えていただければありがたいです。

ソースをutf-8で書いて、
=~ s/Source/Dest/g;
とかしても全くヒットしません。
use utf8とか書いても同じです。

初歩的な質問かもしれませんがよろしくお願い致します。
426409:2006/02/14(火) 18:21:16
>>420>>423>>424
詳しい解説ありがとうございます。
両方とも、テンプレサイトに書いてあったんですね。

俺みたいなテンプレサイト流し読みしかしないアホには
一文入れてもらったほうが良いかもしれませんorz
427デフォルトの名無しさん:2006/02/14(火) 18:32:27
428デフォルトの名無しさん:2006/02/14(火) 19:11:58
>>425
このスレを utf で検索して目を通せ。
過去ログ・テンプレを見ない馬鹿は、ホント死ねばいいのにと思う。
429デフォルトの名無しさん:2006/02/14(火) 19:20:30
そういう言葉はやめておこうぜよ
430デフォルトの名無しさん:2006/02/14(火) 19:25:10
>>425
その二種類のチルダについてはよく知らないのだけど
http://ja.wikipedia.org/wiki/Unicode
のWAVE DASH - FULLWIDTH TILDE問題のことでいいのかな。
まさかそのスクリプトを書いたエディタが二つを同じものに変えてたりしないだろうね…

それが原因なら、対象の文字列にutf8::decodeを使うなりPerlIOレイヤを使うなりして
utf8フラグを立てて(このあたりはテンプレの[Perl5.8Unicodeメモ]参照)
tr/\x{FF5E}/\x{301C}/
とでもやれば行けるはず。
431デフォルトの名無しさん:2006/02/14(火) 19:54:43
>>428-429
どちら様もありがとうございます。
私が悪いんです。あまりに久しぶりのPerlプログラミングだったので、ついやっちゃいました。
>>256だけで解決しました。もっとシームレスにutf-8に対応してくれないのかな
というのが素直な感想であります。

>>430
SourceのはLinux上で通常使われている”にょろ”です。

Destのはsamba経由でWindows側から書き込むと出来る”にょろ”です。
(Windows仕様に統一しようかなと考えているわけです。)
432422:2006/02/14(火) 20:00:19
>>427
ありがとうございました。
perlの懐の深さは驚くばかりです。
433デフォルトの名無しさん:2006/02/14(火) 20:06:00
>>430
先ほど書きませんでしたが、
そうです。私の言っている”にょろ”とは
そのWAVE DASH - FULLWIDTH TILDE問題の文字です。
先ほども書きましたが、decode,encodeすることで当初の目的の置換はおこなえています。
434デフォルトの名無しさん:2006/02/14(火) 20:45:05
>>425
プログラムの始めの方で use encoding 'utf8'; を入れてみたらどう?
435デフォルトの名無しさん:2006/02/14(火) 21:38:44
最近は utf-8 関連の質問が増えてきましたね
436デフォルトの名無しさん:2006/02/14(火) 22:03:00
それ系のサイトのテンプレを充実させておいた方が良いかもしれないね。
437デフォルトの名無しさん:2006/02/14(火) 22:04:22
おれもいちいち面倒くさくなって、今は全部UTF-8にしてる。
どうせ将来use utf8が標準なんだし。
438デフォルトの名無しさん:2006/02/14(火) 22:12:19
use utf8;

use encoding "utf8";
って何が違うの?
439デフォルトの名無しさん:2006/02/14(火) 22:25:45
440デフォルトの名無しさん:2006/02/14(火) 22:49:15
メールはjis、これだけはガチ
441デフォルトの名無しさん:2006/02/14(火) 23:01:34
WindowsでActivePerlの最新を使っています。
ppmでモジュールをインストールしようとすると、
会社のPCだからなのか、DLがうまくいきません。
セキュリティか何かの関係かもしれませんが。

他にモジュールをインストールする方法ってありますか?
442デフォルトの名無しさん:2006/02/14(火) 23:07:26
エラーメッセージを。。。
よりも、会社のPC使うな。
443デフォルトの名無しさん:2006/02/14(火) 23:32:27
>>441
>>219-
ここまで質問内容が一致するとむしろ驚きというかなんと言うか
444デフォルトの名無しさん:2006/02/14(火) 23:36:40
正直正規表現わかりにクス
while($s =~ /^(.).*/g)
とか

$a =~ s/^(.)//;
とか
意味わからなす・・

これをわかりやすーく日本語で教えてくれないか?
445デフォルトの名無しさん:2006/02/14(火) 23:45:01
>>439 にある

>use encoding 'euc-jp', Filter => 1;
で、変数や、関数名を日本語で記述できるっておもろいね。
これってネタとはなってるけど、実用的にはどうなん?
446ヽ(´ー`)ノ ◆.ogCuANUcE :2006/02/15(水) 00:25:53
入力する時に IME を on/off するの、面倒じゃないか?
日本語で書いたら、日本語読める奴しかコードが読めなくなるし。

デメリットしか思い付かない。
447デフォルトの名無しさん:2006/02/15(水) 01:00:12
>>444
AAだとおもえば
むずかしいせいきひょうげんも
ちょっとかわいくみえるよ!

                 ハ_ハ  
               ('(゚∀゚∩ みえるよ!
                ヽ  〈 
                 ヽヽ_)
448デフォルトの名無しさん:2006/02/15(水) 01:07:04
>>444
詳説正規表現を読み切れば日本語のごとく正規表現を読めるようになるよ!
449447:2006/02/15(水) 01:15:03
あー、で

■while($s =~ /^(.).*/g)
これはー、なにやりたいんだろうか?
まあ$sの最初の一文字目をとってきて、
その一文字目に対してなんか処理するのだろう。

■$a =~ s/^(.)//;
これは初めの一文字目を、空白に置き換えてるんだな。
$aの、初めの一文字目を消してるだけ。


というか正規表現スレがあるのでそっちで。
450デフォルトの名無しさん:2006/02/15(水) 01:24:33
while($s =~ /^(.).*/g)  パターンマッチだけなので無限ループ
$a =~ s/^(.)//;  substr ($a, 0, 1)のが速いかも
451デフォルトの名無しさん:2006/02/15(水) 06:39:51
>>445
仕様書からscriptを自動生成するのに使ったことがある。
452デフォルトの名無しさん:2006/02/15(水) 13:01:12
/^(.).*/ って、初心者にありがちな、必要ないのに文字列全体にマッチする正規表現を書いちゃうってパターンだな
453デフォルトの名無しさん:2006/02/15(水) 13:13:46
コマンドライン引数って自分でdecodeしないといけないの?
それとも何かいい方法とかありますか?
454デフォルトの名無しさん:2006/02/15(水) 13:24:50
>>450
g付きならマッチした文字列の配列返すだけだから無限ループにゃならんだろ。
^が付いてるから、一個の要素の配列返して終了じゃね?
455デフォルトの名無しさん:2006/02/15(水) 13:30:09
456デフォルトの名無しさん:2006/02/15(水) 13:48:09
ごめんなさい。書き忘れました。コマンドライン引数の文字コードのことです。
shift_jisとかutf8とか環境によって違いますが、環境に合わせてうまくdecodeする方法があるのかな?と
457デフォルトの名無しさん:2006/02/15(水) 13:50:30
my $tee = new IO::Tee(
\*STDOUT, # 標準出力
">debug.txt" # ログファイル
);
select($tee); # $tee を選択
tie($tee, ???); # ここで tie したい
こういう場合は何で tie すれば良いのでしょうか?TIEHANDLE? TIESCALAR?

やってみた事
tie(*$tee, 'MyTieHandle'); はアプリケーションエラーになってしまいます。
tie($tee, 'MyTieScalar'); で print で STORE がコールされるのかと思ったのですが違いました。

よろしくお願いします。(WinXP, Perl 5.8.7)
458デフォルトの名無しさん:2006/02/15(水) 15:52:36
>>457
うーん、tieはかなり日本じゃ探しても文献すくなかったから、
それを答えられる奴は、少ない&ここにはいないかも試練。

やりたいことは IO::Tee の機能を残しつつ、自分で作った MyTieHandle を関連付けたいんだろうが、
ひとつのハンドルにはひとつのTIEHANDLEクラスしか関連付けられないと思うので、
その方法だと$teeハンドルに関連付けられたIO::TeeがMyTieHandleで上書きされて、
MyTieHandleのメソッドしか呼ばれなくなると思う。

漏れもtieは勉強中で詳しくはわからんのだけど。
IO::TeeとかIO::Scalarを参考にして自作するしかwww
459457:2006/02/15(水) 16:53:14
>>458
IO::Tee自身もTIEHANDLEなんですね。
2つともtieすると無限ループするし…
このままでは仕方がないのでMyTieHandleだけで解決させようと思います。
ありがとうございました。
460デフォルトの名無しさん:2006/02/15(水) 17:07:11
>>459
解決したようだが perlbot 熟読をお勧めしとく。
http://www.kt.rim.or.jp/~kbk/perl5.005/perlbot.html

少々古いが「実用 Perlプログラミング」も一読の価値があるだろう。
http://www.oreilly.co.jp/books/4900900826/toc.html
461デフォルトの名無しさん:2006/02/15(水) 22:57:16
>>459
IO::Tieの中身を確認しないで書くけど、
IO::Tieを継承したクラスでも作れいいじゃん

とか思った。
462デフォルトの名無しさん:2006/02/15(水) 23:02:27
正規表現分からない人って、保存もグループ化も要らないのに
やたら丸括弧つかってる事あるよね。
あれ無駄だなーと思う。

あと何でもかんでも .* で行けると思ってる。
別にどうでも良い所も .* でマッチさせてる。
これも無駄だよね。

正規表現てそんなに分かりにくいか?
参考書が悪いのかな。
463デフォルトの名無しさん:2006/02/15(水) 23:47:04
大して多くないが
464デフォルトの名無しさん:2006/02/16(木) 02:45:13
ちょっと質問です。
Excel に喰わせる CSV ファイルを前処理するスクリプトを組んでいるのですが、
こういうデータを配列に入れる、(・∀・)イイ技はないでしょうか?

$line = "2003/04/05,abc,4000,\"hogehoge ha hogehoge detu, sosite hamehame ha fumefume desu.\"";

@lines = split ",",$line; すると以下になりますが、これは期待したものではありません。

@lines[0] = "2003/04/05";
@lines[1] = "abc";
@lines[2] = "4000";
@lines[3] = "\"hogehoge ha hogehoge detu";
@lines[4] = "sosite hamehame ha fumefume desu.\"";

こういう風にしたいのです。

@lines[0] = "2003/04/05";
@lines[1] = "abc";
@lines[2] = "4000";
@lines[3] = "\"hogehoge ha hogehoge detu, sosite hamehame ha fumefume desu.\"";
465デフォルトの名無しさん:2006/02/16(木) 02:49:03
>>464
> ちょっと質問です。
> Excel に喰わせる CSV ファイルを前処理するスクリプトを組んでいるのですが、
> こういうデータを配列に入れる、(・∀・)イイ技はないでしょうか?

考え方:
この問題には、多くの人が取り組んだはずだ。
したがってすでにモジュールが作られているだろう。
466デフォルトの名無しさん:2006/02/16(木) 02:57:55
>>465
おっ、それは(・∀・)イイ考え。
ところで、データは日本語ベースなんですが、大丈夫でせうか?
467デフォルトの名無しさん:2006/02/16(木) 02:59:16
いまは暫定で、split したもののうち、
まちがって切ったものを繋げる処理を入れてます。

我ながらダサい orz
468デフォルトの名無しさん:2006/02/16(木) 03:13:51
>>466
Text::CSVはASCII以外喰ってくれない。
Text::CSV_XSのオプションにbinaryをセットすればOK
469デフォルトの名無しさん:2006/02/16(木) 04:50:45
正規ヒョゲンで質問したものだが・・・
なんか他のスレとちがってwwwこのスレの住人やさしいなwww
ちょっとうれしかったぞwwww
まぁ話は戻るが・・・
一応ソースを張る・・・
Main: {if($#ARGV < 0) {print STDERR "usage: lister.pl <search_host> \n";exit;}$make_uniq = 1;$search_host = shift(@ARGV);
print STDERR "[+] Search host : $search_host\n\n";
while($searchwords =~ /^(.).*/g) {
$searchwords =~ s/^(.)//;
print STDERR "Search[$1] ... ";
$arrsize = $#ulist;
if($#ulist != $arrsize) {
$arrsize = $#ulist;
push(@ulist, search_google($search_host, $1, 100, 100));
}
$arrsize = $#ulist - $arrsize;
print STDERR "$arrsize username found\n"
}
@ulist = sort(@ulist);
open(OUT, ">$search_host.txt") or die "open: $!";
foreach $name (@ulist) {
unless($seen{$name} && $make_uniq) {
$seen{$name}++;
print OUT "$name\n";}}close(OUT);
}    一応こんな感じで掲載してあった・・・これをCで書こうと思っている・・・サーチグーぐるはサブルーチンとして存在している。。。今のところ一番意味不明なのは
my ($search_host, $search_word, @ulist, $name, %seen, $make_uniq);
my ($arrsize);
push(@ulist, search_google($search_host, $1, 0, 100));かな
マジCで言うところのこんな漢字って説明してくれ。
470デフォルトの名無しさん:2006/02/16(木) 05:12:18
>>469
Cは知らないけど、時間だけに誰もいないだろうから日本語で回答してみる。
上2つは変数のスコープ宣言。
PerlはCのように型の宣言がないけど、変数等が使える場所を制限できる。
3つ目は、search_googleの戻り値を配列ulistの末尾へ追加する。

STDERRの一文はdieで済むと思ふ
471デフォルトの名無しさん:2006/02/16(木) 05:20:46
>>464
split /,/, $line, 4ってことじゃなくて?
472デフォルトの名無しさん:2006/02/16(木) 06:28:08
deleteやexistsの構文が納得できません。
通常の法則なら「exists $hash{example};」はexampleというキーが生成されてその後undefがexists演算子に渡されるように見えます。

デフォルトのハッシュでも内部的なtieがあってFETCHに「exists演算子下では動作を変える」機能があると考えたらいいのでしょうか?
それともperlが exists(\%hash, "example") 的なコードに置き換えているのでしょうか?
それとも同じundefでも内部では識別可能ないくつかのundefがあり「キーが無いことによるundef」とかが渡されてるのでしょうか?
473デフォルトの名無しさん:2006/02/16(木) 06:35:54
ヒント 未定義という定義
474デフォルトの名無しさん:2006/02/16(木) 08:26:30
まぁ確かに浮いてるよね、この構文。
475デフォルトの名無しさん:2006/02/16(木) 13:42:52
Encode::from_toで "〜" を UTF-8 に変換すると
コードの違う 〜 に似た文字になってしまうんですが
日本人は今後もJCode使うしかないんですかねぇ・・・
476デフォルトの名無しさん:2006/02/16(木) 13:59:35
むしろそれはWindowsの問題
477475:2006/02/16(木) 14:14:45
ムムッこれかも!?>>28-29
478デフォルトの名無しさん:2006/02/16(木) 15:25:43
ファイルのリストをUTF-8で取りたいと思い、以下の様にしてみたのですが、
どうしてもSHIFT_JISでしか取れません。どうしたらできるのでしょうか?
環境は、Win2000 で Perl5.8を使っています。
use open IN => ":encoding(shift_jis)";
use open ":std";

while (<*>) {
print $_;
print utf8::is_utf8($_) ? " UTF-8 Flag\n" : " not UTF-8 Flag\n";
}

ttp://www.pure.ne.jp/~learner/program/Perl_unicode.html
ここの"UTF8フラグとPerlIOレイヤ"とにらめっこしながら、ああでもないこうでもないともう1時間以上トライしているのですが・・・
よろしくお願いします。
479デフォルトの名無しさん:2006/02/16(木) 15:36:40
IO::Fileでファイルを書き込む時、
$fh = new IO::File( $file, $mode );
print $fh $value;

みたいなことをしています。
ファイルが無い時勝手に作ってくれるのはいいのですが、
その時ファイル属性は指定できないのでしょうか。

それとも書き出す前にファイルテスト演算子でファイルの有無状態を取得しておいて、
ファイル作成後、そのフラグをで新規作成を判別し、chmodを使うしかないのでしょうか。
なんとなくスマートじゃないきがしたので…。
480デフォルトの名無しさん:2006/02/16(木) 15:50:58
>>479
できない。
481478:2006/02/16(木) 16:03:47
ttp://www.kt.rim.or.jp/~kbk/perl-5.8/perlunicode.html
ここに書いてありました・・・うーん
482デフォルトの名無しさん:2006/02/16(木) 16:12:00
>>480
では479で書いたようなことを実装しても問題ありませんよね
最近モジュールを勉強しだしたので、
どの辺までモジュールを使ってできるかとかやっていて、詰まることがあるんです
483デフォルトの名無しさん:2006/02/16(木) 17:23:31
484デフォルトの名無しさん:2006/02/16(木) 18:40:27
>>483
第三引数に'0666'とやってみたところ705のファイルが出来ました
8進数変換の数字渡しても変わらない…
485デフォルトの名無しさん:2006/02/16(木) 18:47:02
まちがえました、655のファイルでした
どちらにしろ希望のパーミッションじゃない…
486デフォルトの名無しさん:2006/02/16(木) 20:22:49
umask でできないんだっけ?
487デフォルトの名無しさん:2006/02/16(木) 20:23:51
>>484-485
MODEを数値(O_WRITE 等)で渡してないか、umaskの設定を忘れてるかしてない?
488デフォルトの名無しさん:2006/02/16(木) 22:30:44
>>472
exists $hash{$key} は tie するとこの $hash->EXISTS( $key ) ってことでしょ。
同様に delete $hash{$key} は $hash->DELETE( $key )

何か問題でも?

ttp://search.cpan.org/~nwclark/perl-5.8.7/pod/perltie.pod#Tying_Hashes

489デフォルトの名無しさん:2006/02/16(木) 22:35:31
>>472
簡単にいうと Perl コンパイラがバイトコードを生成するときに
exists $hash{key}
というプログラムを
OPCODE: exists
ARG1: hash
ARG2: "key"
というコードにコンパイルするから.そーゆう意味でいくと 2 番目の理解が近いのかな.
確認したけりゃ perl -MO=Terse -e 'exists $hash{key}' とバイトコードをみてみるといい.
490デフォルトの名無しさん:2006/02/16(木) 22:49:24
ぺrl
491デフォルトの名無しさん:2006/02/16(木) 23:11:21
ファイルハンドルをローカルなものにするにはどうすればいいですか
492デフォルトの名無しさん:2006/02/17(金) 08:11:08
>>491
ファイルハンドル名を GUIDGEN.EXE で毎回生成してはどうよ。
493472:exists:2006/02/17(金) 08:41:39
皆様レスありがとうございます。
ということは構文上 $hash{key} の形がオペランドとして存在してもFETCHとしては扱われず、
実行時まで識別子とキーは分離したままなのですね。
バイトコードはオペコードが分からないんですが役立ちそうなので勉強してみます。
494472:exists:2006/02/17(金) 08:46:01
あ、3行目は普通に引いてもそうですね。失礼しました。
495デフォルトの名無しさん:2006/02/17(金) 10:23:32
>>487
#!/usr/local/bin/perl

use strict;
use IO::File;

sub main {
my $fh;
unless( $fh = new IO::File( './test.txt', 'a', '0666' ) ) {
print "$!\n";
}
print $fh "test\n";
$fh->close;
}

main;

>>483ではデフォルト0666になるとか書いてあるのですが、上記のようにやっても
644にしかなりません(昨日の0655もまちがえでした)

うーん・・・
496デフォルトの名無しさん:2006/02/17(金) 11:23:46
>>495
umask umask umask umask umask umask umask
umask umask umask umask umask umask umask
umask umask umask umask umask umask umask
umask umask umask umask umask umask umask
umask umask umask umask umask umask umask
497デフォルトの名無しさん:2006/02/17(金) 12:59:59
>>495
つーか、そこの君。 '0666' って文字列は何だ? 0666 じゃないのか?
498デフォルトの名無しさん:2006/02/17(金) 13:06:01
>>496
umaskはunix依存コマンドらしいので、つかってないです

>>497
数字も文字列もoct後も試しました
張ったのはたまたま文字列の時のです
499デフォルトの名無しさん:2006/02/17(金) 13:28:14
>>498
文字列じゃ普通だめだろ。パーミッションなんだから。
(Perlってそんなの解釈してくれないよな? まさか新しい
バージョンではするのか?)。

ま、しかし、umask の問題だよ。OSに依存する部分をPerl
スクリプトの中に書きたくないのならスタートアップ用シェル
スクリプトを作ってその中で umask コマンドで設定してから
動かせばいい。
500デフォルトの名無しさん:2006/02/17(金) 13:29:54
>>498
自分で使ったつもりがなくてもumaskの値はだれかがどこかで設定した値に
なっているわけで... たぶん755とかになってるんじゃねーの?

linuxのopen(2)より:

The argument mode specifies the permissions to use in case a new file
is created. It is modified by the process's umask in the usual way: the
permissions of the created file are (mode & ~umask).

501デフォルトの名無しさん:2006/02/17(金) 13:36:47
unix依存って設定がって事なんですね
システムによって動かないコマンドかと思ってました

それなら単純にumaで取得後任意に設定し戻す方法をとります
ただ、IO::Fileの説明で第三引数にPERMというものがありながら使えなかったというのが心残りですが
502デフォルトの名無しさん:2006/02/17(金) 13:58:17
>>501
> ただ、IO::Fileの説明で第三引数にPERMというものがありながら使えなかったというのが心残りですが

使えるわ、 ぼけッ!!
使えるわ、 ぼけッ!!
使えるわ、 ぼけッ!!
使えるわ、 ぼけッ!!
503デフォルトの名無しさん:2006/02/17(金) 14:39:54
使えるソースよろ
504デフォルトの名無しさん:2006/02/17(金) 15:08:58
使えるけど君の望んだものではなかったということだな。
505デフォルトの名無しさん:2006/02/17(金) 15:42:48
#!/usr/local/bin/perl
use strict;
use IO::File;
sub main {
my $filename = './text.txt';
my $fh;
print "実行開始時のumask : ".sprintf( "%03o", umask ), "\n";
umask( 0070 );
print "セットしたumask : ".sprintf( "%03o", umask ), "\n";
unless( $fh = new IO::File( $filename, 'a', 0644) ) {
print "$!\n";
}
print $fh "test\n";
$fh->close;
my @st = stat( $filename );
print "ファイルの属性 : ".substr( sprintf( "%03o", $st[2] ), -3 ), "\n";
unlink( $filename );
}
main;

実行開始時のumask : 022
セットしたumask : 070
ファイルの属性 : 606

グループを見ると分かりますがumaskは利いています。
IO::Fileで指定したのが反映されていません。
かりにされていたら604になるはずですよね?

umask強制かもしれないので、逆にumask使わない場合を。
うちの環境ではデフォが644になり区別がつかないので、
IO::Fileの指定で606としたところ、結局644に…
506デフォルトの名無しさん:2006/02/17(金) 15:48:51
バカにはムリ
507デフォルトの名無しさん:2006/02/17(金) 15:55:32
あれ? 変だぞ? 何が起こってるんだ?

$ cat x
#!/usr/bin/perl -w

use strict;
use IO::File;

umask 0;

my $fn = 'testfile.txt';
my $fh = new IO::File($fn, 'w', 0400);
die "$fn: $!\n" unless ($fh);
$fh->print("テスト\n");
$fh->close();
$ perl x
$ ls -l testfile.txt
-rw-rw-rw- 1 xxxx xxx 10 2月 17 15:53 testfile.txt
$
508デフォルトの名無しさん:2006/02/17(金) 16:08:15
分かった。デバッガで IO::File の open まで追いかけてったら
モードが数値の場合だけ sysopen でパーミッションをセットしてて
モードがコロン始まりの時とその他の時は普通の open 使ってて
パーミッションセットしてねえ。

…これもしや perldoc に書いてあった?
509デフォルトの名無しさん:2006/02/17(金) 16:10:23
ああ。あるな。あるある。やっぱ英語はもっと勉強せんといかんな。
これだな。numeric mode。

If "IO::File::open" is given a numeric mode, it passes that mode
and the optional permissions value to the Perl "sysopen" operator.
The permissions default to 0666.
510デフォルトの名無しさん:2006/02/17(金) 16:34:20
>>487
これがあったからなぁ…
511デフォルトの名無しさん:2006/02/17(金) 16:35:17
あー結果もはっておきます
O_WRONLY|O_APPEND|O_CREAT
でいけました。
512デフォルトの名無しさん:2006/02/17(金) 16:38:23
>>510
ひとのアドバイスもマトモに聞かず、散々引っ掻き回した挙げ句がそれかよ、って感じですな。
513デフォルトの名無しさん:2006/02/17(金) 16:49:05
>MODEを数値(O_WRITE 等)で渡してないか
これを
>MODEを数値(O_WRITE 等)で渡してないか?渡してたらダメだぞ
と思ってた俺
>>512で煽られてようやくorな文章だと気がついた俺
そして結局>>511がでるまで分からなかった俺
O_WRONLYとかみたことないよ…
514デフォルトの名無しさん:2006/02/17(金) 16:52:13
次から文章じゃなくperlで答えてやろうぜ
ぶんもー☆多いみたいだし
515デフォルトの名無しさん:2006/02/17(金) 16:56:10
print 'こうですか?わかりません!';
516デフォルトの名無しさん:2006/02/17(金) 17:03:00
local $/ = undef
とかの$/ってなんですか?
517デフォルトの名無しさん:2006/02/17(金) 17:03:02
>>513
perldoc IO::File → >>509 → perldoc -f sysopen
だけですぐに O_WRONLY とかに辿り着くじゃん。
ちゃんとドキュメント見れと。
518デフォルトの名無しさん:2006/02/17(金) 17:04:29
>>517
perldocなんてコマンド初めて知った
519デフォルトの名無しさん:2006/02/17(金) 17:05:45
>>518
Perl やめていいよ。もう。
520デフォルトの名無しさん:2006/02/17(金) 17:08:44
>>516
> local $/ = undef
> とかの$/ってなんですか?

定義済み変数です。
521デフォルトの名無しさん:2006/02/17(金) 17:12:08
>>510
さっきそこ見てなかった。とほほ。
522デフォルトの名無しさん:2006/02/17(金) 17:13:51
>>518
perldoc のことも書いてない入門書は焼いてよし。
523デフォルトの名無しさん:2006/02/17(金) 17:24:50
今日はperl入門サイト炎上だな
524デフォルトの名無しさん:2006/02/17(金) 17:48:24
perl入門サイトの大半は燃えて無くなってもらった方がいいんじゃね?
525デフォルトの名無しさん:2006/02/17(金) 17:52:48 BE:81522667-
せめて検索に引っかからないようにやってて欲しいと思うところはいっぱいあるな。
526デフォルトの名無しさん:2006/02/17(金) 18:01:18
>>525
名前:性帝トーマス◆13ThomasYo
紹介文:俺の子を産んでくれる繁殖可能な女性を広く募集中。
beポイント:116
登録日:2005-02-06
527デフォルトの名無しさん:2006/02/17(金) 18:25:36 BE:29115735-
初心者は半年ROMっててね。
528デフォルトの名無しさん:2006/02/17(金) 18:37:59
このユーザーの投稿にbeポイントとメッセージが贈れます。 beポイントを送る
名前:性帝トーマス◆13ThomasYo
紹介文:俺の子を産んでくれる繁殖可能な女性を広く募集中。
beポイント:116
登録日:2005-02-06
529デフォルトの名無しさん:2006/02/17(金) 18:54:07 BE:541282695-
safe
530デフォルトの名無しさん:2006/02/17(金) 22:33:39
>>516
> local $/ = undef
> とかの$/ってなんですか?

↓の3番目です。
http://flex.ee.uec.ac.jp/texi/perl/perl_toc.html#SEC213
531デフォルトの名無しさん:2006/02/18(土) 01:01:29
excel vba

Sheets("xSheet").Copy After:=Sheets(1)

をperlに変換するにはどうすればいいですか?

Sheets("xSheet")->Copy After:=Sheets(1)

            ここから分からん…

532デフォルトの名無しさん:2006/02/18(土) 23:09:57
Perl側からコンソールを閉じる方法、
もしくはコンソールを×ボタンで閉じるときに処理を噛ませる方法があったら教えてください。
batファイルから開く必要があるので、exitではウィンドウが閉じません。宜しくお願いします。
533デフォルトの名無しさん:2006/02/18(土) 23:13:04
batでexitすれば?
534デフォルトの名無しさん:2006/02/18(土) 23:59:51
OSくらいはっきりしてくれんことには。
535デフォルトの名無しさん:2006/02/19(日) 02:47:27
>>532
Windowsならショートカットのプロパティで設定しておきゃいいじゃねえか。
536デフォルトの名無しさん:2006/02/19(日) 04:28:06
>>532
batで開いたものをexitすると、plファイルを再実行します。これは仕様ですよね?

>>534
WindowsXP SP2/perl5.8.4です申し訳ありません。

>>535
試しにショートカットを作ってプロパティを見てみましたが、特に見当たりませんでした。どう設定すれば良いんでしょうか?
537デフォルトの名無しさん:2006/02/19(日) 05:07:00
最初からwperl.exeで実行してコンソールを出さないのはダメなのかい
538デフォルトの名無しさん:2006/02/19(日) 10:24:32
Perlから直接呼び出してつかう JRA-VAN Data labo用のDOSソフト作ったんだけども、
どうよ??

とりあえず、IISのWebサーバーでcgi実行して、
今日のレース一覧とか現在のオッズとかみるcgiサンプルつけた
539デフォルトの名無しさん:2006/02/19(日) 15:17:20
ファイルをリネームするためにrename()を使って一括処理をした。
ファイル名に日本語を含んでいたため地獄を味わった。
ActivePerlさん、本当にありがとうございました。
540デフォルトの名無しさん:2006/02/19(日) 15:33:25
>>539
perlの問題じゃない。
541デフォルトの名無しさん:2006/02/19(日) 15:37:29
どうみてもperlの問題なわけだが・・・
542デフォルトの名無しさん:2006/02/19(日) 15:41:26
そうか?
543デフォルトの名無しさん:2006/02/19(日) 15:46:29
どんな問題か書いてないのによくそんな議論ができるな
544539:2006/02/19(日) 15:54:44
環境は、XPHome Perl v5.8.4
使ってるライブラリは以下。
use File::Find;
use MP3::Info;
use Audio::WMA;

原因がわからん。
仕方ないので、今はsystem()でrenameコマンドを呼び出して対処。
545デフォルトの名無しさん:2006/02/19(日) 15:57:58
>>544
どういうファイル名がどんな風になって、ActiveStateに感謝してるか書けよw
546デフォルトの名無しさん:2006/02/19(日) 16:08:55
その程度の状況説明しかできないようだとガキの言い掛かりとしか受け取れないよ。
547539:2006/02/19(日) 16:12:36
今も作業中なので、不具合再現作業はまだやらない。
48個のファイルが文字化けしたため、
dirリダイレクト→表計算ソフト→txt→bat編集でリネームとやってなんとかfuck youさせた。
548デフォルトの名無しさん:2006/02/19(日) 16:22:10
>>547
不具合だとw 思い込みが禿げてるなw
549デフォルトの名無しさん:2006/02/19(日) 16:28:53
文字コード間違ってるだけと言うしょーもない原因だったら死んでいいよ。
550デフォルトの名無しさん:2006/02/19(日) 17:04:46
なにやってもダメなやつはダメ
551デフォルトの名無しさん:2006/02/19(日) 17:15:07
>>547
> 不具合再現作業はまだやらない。

まだ原因が自分にあるのか ActivePerl にあるのか切り分けもできてないんでしょ?
その状況で >>539 みたいな言い掛かり的レスをする神経がわからない。
552デフォルトの名無しさん:2006/02/19(日) 17:58:11
ソース出せよ
553デフォルトの名無しさん:2006/02/19(日) 18:17:55
mp3のトラック番号取得直後にそのmp3をリネームすると文字化けが発生する。
MP3::Infoを1.1.xから1.2に更新することで回避。
554デフォルトの名無しさん:2006/02/19(日) 18:24:55
>>547
encode の使い方間違えただけじゃねえか?
555539:2006/02/19(日) 18:40:04
>>553ですでに解決した。MP3::Info 1.2未満で発生する。
全角文字を含みトラック情報をもつmp3ファイルを引数に渡すこと。
このテストでは引数で渡したmp3ファイルをリネームするので注意。

use strict;
use MP3::Info;

MAIN:{
    my $filename = shift or die;
    die unless (-f $filename && $filename=~m/\.mp3$/);
    my $tag = get_mp3tag($filename);
    my $tracknum = $tag->{TRACKNUM};
    rename($filename, $filename.'----'.$tracknum.'.mp3');
}
556デフォルトの名無しさん:2006/02/19(日) 18:57:19
だから、どういう風に文字化けするのかと
557デフォルトの名無しさん:2006/02/19(日) 20:50:11
ファイルの最終更新がローカル時間で今日より以前に作られたものかどうか判定したい。

一番簡単だと思うのが今日の始めのエポック秒と比較すると思ったのだが、その
計算がこんなふうになった。 もっとスマートな方法ある?localtimeとgmtimeを
呼ぶのが醜い気がするのだが、他に時間帯情報を得る方法あります?

use integer;
$now = time;
my ($sec,$min,$hour,$mday,$mon,$year,$wday) = localtime($time);
my ($gsec,$gmin,$ghour,$gmday,$gmon,$gyear,$gwday) = gmtime($time);
my $startofday = $now / 86400 * 86400 + ($hour - $ghour) * 3600;

558デフォルトの名無しさん:2006/02/19(日) 20:51:33
>>557
あ、途中の$timeは$nowの間違い
559デフォルトの名無しさん:2006/02/19(日) 21:00:10
>>557
つ Time::Local
560557:2006/02/19(日) 21:39:53
>>559
あ、なるほど。 こんな感じかな?
my ($sec,$min,$hour,$mday,$mon,$year,$wday) = localtime(time);
$startofday = timelocal(0, 0, 0, $mday, $mon, $year);
561デフォルトの名無しさん:2006/02/20(月) 01:22:41
>>557
「今日」より前か。昨日作ったファイルだったら、なにかしたいわけか。
うーん、むずいなぁ。こんなんでどう?
my ($sec,$min,$hour) = localtime(time);
$kyou = time - ($sec+$min*60+$hour*60*60);
print $kyou > (stat($filename))[9];

テストしてないけど
562デフォルトの名無しさん:2006/02/20(月) 01:24:40
最終更新が今日かどうか判定するなら、年月日が同じかどうか比較するだけのこと
563557:2006/02/20(月) 01:57:35
>>562
そ〜〜〜〜〜〜〜りゃそーでしたね。 じゃ、これでいいか:

my ($sec,$min,$hour,$mday,$mon,$year) = localtime($mtime);
my ($sec2,$min2,$hour2,$mday2,$mon2,$year2) = localtime(time);

if ("$year$mon$mday" eq "$year2:$mon2:$mday") {
}
564デフォルトの名無しさん:2006/02/20(月) 02:18:20
判定条件逆じゃね? 「今日の場合の処理」になっとる。

my ($sec,$min,$hour,$mday,$mon,$year) = localtime($mtime);
my ($sec2,$min2,$hour2,$mday2,$mon2,$year2) = localtime(time);

if ("$year$mon$mday" ne "$year2:$mon2:$mday") {
#昨日以前の場合の処理
}
565564:2006/02/20(月) 02:28:48
しかも if 文間違いを継承・・・orz

my ($sec,$min,$hour,$mday,$mon,$year) = localtime($mtime);
my ($sec2,$min2,$hour2,$mday2,$mon2,$year2) = localtime(time);

if ("$year$mon$mday" ne "$year2$mon2$mday2") {
# 昨日以前の場合の処理
}
566デフォルトの名無しさん:2006/02/20(月) 02:46:43
>>561 で良いような気も。
567557:2006/02/20(月) 02:57:57
>>566
なんか見落としてました。 そうですね、localtime呼び出しも一回だけで一番
単純な論理で書かれてますし、無駄な変数が0。 これで決定版ということにします。
568デフォルトの名無しさん:2006/02/20(月) 03:14:30
my ($mday,$mon,$year) = (localtime(time))[3,4,5];
こうするとスマートかも
569デフォルトの名無しさん:2006/02/20(月) 04:20:22
localtime(time)は単にlocaltimeでおk
570デフォルトの名無しさん:2006/02/20(月) 06:17:18
並べるときは対応させた方がパッと見わかりやすいことがある
571デフォルトの名無しさん:2006/02/20(月) 12:39:20
eucを一文字ずつ切り分けたいのですが
どのようにすれば良いですか?
split(//)じゃ駄目ですよね。

572デフォルトの名無しさん:2006/02/20(月) 13:19:41
Perl5.8以上ならバイト列を文字列に変換して
splitでいけるよ
573デフォルトの名無しさん:2006/02/20(月) 13:42:32
>>571
http://www.din.or.jp/~ohzaki/perl.htm#Character
↑の EUC-JP 文字を使ってこんな感じとか?

my @euc_chars = $euc_text =~ /${character}/g;
574デフォルトの名無しさん:2006/02/20(月) 13:55:38
>>572,573
ありがとうございます
参考にして少しやってみます。
575デフォルトの名無しさん:2006/02/20(月) 14:05:45
String::Multibyteなんてのもあるね
my $mbcs = new String::Multibyte 'EUC_JP';
my @splited = $mbcs->strsplit('', $euc_text);
576デフォルトの名無しさん:2006/02/20(月) 14:11:21
$ echo $LANG
ja_JP.eucJP
$ perl -e 'use encoding "euc-jp"; $s="ほげほげ"; @s = split //, $s; print join("", map {"$_\n"} @s);'




$
577デフォルトの名無しさん:2006/02/20(月) 14:11:27
requireされているソースのパスをすべて列挙する方法は無いでしょうか?
a.pl
----------
require "b.pl";
<ここで列挙させたい>

b.pl
----------
require "c.pl";
require "d.pl";

希望の実行結果例
c:\>perl a.pl
c:\perl\my\b.pl
c:\c.pl
c:\d.pl

よろしくお願いします。
578デフォルトの名無しさん:2006/02/20(月) 14:32:13
>>577
%INC
579デフォルトの名無しさん:2006/02/20(月) 14:32:18
print join("\n", values %INC);
580577:2006/02/20(月) 16:49:53
ズバリのご回答、ありがとうございました。
581デフォルトの名無しさん:2006/02/20(月) 22:57:06
変数に全角文字が含まれないことを調べるにはどうすればいいですか?
582デフォルトの名無しさん:2006/02/20(月) 23:26:51
全部半角かどうかチェックする
583デフォルトの名無しさん:2006/02/20(月) 23:31:04
>>582
ありがとうございます。
私もそう思ったのですが、それはどうすればいいですか?
584デフォルトの名無しさん:2006/02/20(月) 23:42:22
>>583
>>573 のリンク先の正規表現を使ってみては?
585デフォルトの名無しさん:2006/02/20(月) 23:59:04
>>583
半角ったって英数字空白以外が20〜30くらいだろ。
力技で正規表現書けばいいんじゃね?
586デフォルトの名無しさん:2006/02/21(火) 00:05:51
Jcode.pm つかっときな
587デフォルトの名無しさん:2006/02/21(火) 00:19:19
>>585
Shift_JIS とかだったらちょっと面倒かも。
588デフォルトの名無しさん:2006/02/21(火) 00:30:34
通常のキーボードから通常の手順で入力されるいわゆる半角文字と同じ文字コードだけから構成される
Shift_JIS文字ってあるの?
589デフォルトの名無しさん:2006/02/21(火) 00:51:21
ないよ
590デフォルトの名無しさん:2006/02/21(火) 01:34:55
質問させてください。

qmail+LDAPでメールサーバを立てようと思っています。
アカウントごとにLDAPのパラメータとしてID・mailaddress・objectclassをPerlを用いて一括登録し、
その後にIDを引数にmailaddressを取得したいのですが、それまでに登録されたパラメータを取得するための
何かよい方法はないでしょうか?

よろしくお願いします。

591デフォルトの名無しさん:2006/02/21(火) 02:20:25
>>587
NEC拡張の2バイト半角文字の事かっ!

それを考慮しても、Shift_JISよりユニコードのほうが面倒な気がする。
半角文字が、ASCII+JIS X 0201 や ISO-8859-1 だけなら楽だけど。
592デフォルトの名無しさん:2006/02/21(火) 02:21:50
Net::LDAP でも DBD::LDAP でも Tie::LDAP でも好きなモジュール使って検索すればいいんじゃない。
593デフォルトの名無しさん:2006/02/21(火) 02:57:07
>>581
エンコードが何かによってやることが少し変わるかも。
但し Perl 5.8.x で use encoding での指定が適切にされているならば
正規表現の [] の中にあなたが半角だと強く信じる文字を入れて
パターンマッチさせればいい。
594デフォルトの名無しさん:2006/02/21(火) 06:37:09
perl -MCPAN -e shellしてるんだが、
MIME::Toolsがインストールできないのはうちだけ?
インストール時のテストでエラーが出る。

> install MIME:Tools
って打つと、結構沢山テストに失敗してる。

t/Misc..............FAILED tests 4-5, 7-11
Failed 7/14 tests, 50.00% okay
t/ParserEncoded.....ok 4/5
# Failed test 'Decoded MD5 match'
# in t/ParserEncoded.t at line 53.
t/ParserEncoded.....NOK 5# Looks like you failed 1 test of 5.
t/ParserEncoded.....dubious
Test returned status 1 (wstat 256, 0x100)
DIED. FAILED test 5
Failed 1/5 tests, 80.00% okay

OSはCentOS4.2のx86_64版。
同じような状況の人いますか?
595デフォルトの名無しさん:2006/02/21(火) 08:51:25
>>594
Makefile.PLの中の %modulesにリストアップされているmoduleは全部入ってる?
596594:2006/02/21(火) 09:12:59
>>595
> install MIME::Base64
したらエラーが出なくなったよ。ありがとう。
yumみたいに依存性があるモジュールは全部インストール
してくれるのかと思ってたんだけど、ちがったのね。
597デフォルトの名無しさん:2006/02/21(火) 09:41:57
>>596
perlのばやいmodule名とdistribution名が一致しないものがあるからさらにややこし。
MIME-tools自身もそうだし、要求されているMail::なんちゃらもMailtoolsで配布されてるし。

誰かCPANモジュールとPPM-Makeを改良してくれる香具師いないかな<他力本願モードw
598デフォルトの名無しさん:2006/02/21(火) 13:26:09
5.8.8 ってどんなぐあいでしょうか?
599デフォルトの名無しさん:2006/02/21(火) 14:57:24
my $AAA = $BBB->get_value('CCC');

CCCが存在しない時に、
 Can't call method "get_value" on an undefined value at ./programname.pl line 行数
とエラーが表示されます。

データが存在しない時には
「データが存在しません」というメッセージを表示させて例外処理としたいのですが、
どのように書けばいいのでしょうか?
600デフォルトの名無しさん:2006/02/21(火) 14:58:31
見たか!俺は600!
俺は至高!俺は吉良上野介!
俺は吟遊詩人!俺はホス○タル騎士団
俺はシャン○リ○通りの達人!俺はラザ○エフ商会
俺は
601デフォルトの名無しさん:2006/02/21(火) 15:17:05
ーーーーーーーーーーーーーーー ここまでOK

はい、次の質問。
602デフォルトの名無しさん:2006/02/21(火) 15:24:05
>>599
エラーよく読め。それはCCCが存在しないのではない。
$BBBがundefになってる。よって$BBBがdefinedか調べればよい
603599:2006/02/21(火) 16:24:57
>>602さん
レスありがとうございます。

おっしゃる通り、BBBに値が入っていませんでした。
きちんとデバッグできていなくてすいませんでした。

>my $AAA = $BBB->get_value('CCC');
この文を実行する前に、BBBの判定を行ってブレイクを挟もうと思うのですが、
今、BBBにはデータが何もはいっていません(printすると何も出力されず)

これを判定するためにはどのようにすればよろしいのでしょうか。
 if($BBB=0) ? if($BBB=" ") ?
空白の判定のやり方がわかりません。
すいませんがご教授お願いします。
604デフォルトの名無しさん:2006/02/21(火) 16:25:37
教授じゃないから無理
605デフォルトの名無しさん:2006/02/21(火) 16:28:10
その状況で OO しようというのはものすごいチャレンジングな気がする。
606デフォルトの名無しさん:2006/02/21(火) 16:32:34
パールでプロトタイプオーオー?
OZが完成させていたのか。
607デフォルトの名無しさん:2006/02/21(火) 16:33:40
>>603
掲示板で他の人を使うのではなく
きちんと本を読んで基本から勉強しましょう
608デフォルトの名無しさん:2006/02/21(火) 16:34:43
>>603
とりあえず、ifの中では「==」って覚えとけ
609598:2006/02/21(火) 16:42:41
まだ使ってる人はいないか・・・
610デフォルトの名無しさん:2006/02/21(火) 16:50:57
611599:2006/02/21(火) 17:08:35
すいません、レスありがとうございます。

if( $BBB == undef){ エラー処理 }
でひとまず動きました。

本日初めてPerlを使用したのと時間が押していたので焦って落ち着いて探せませんでした。
ご迷惑をおかけしました。

>>607さん
おっしゃる通りです。以後気を付けます。

>>608さん
ありがとうございます。

>>610さん
助かりました。
ありがとうございました。

612デフォルトの名無しさん:2006/02/21(火) 17:14:23
>>611
このケースはそれでも動くと思うけれど正しくは
if (!defined $BBB) { }
と書く。==は数値の判定に使うもので未定義値の判定には使えない。
ちなみに文字列の判定にはeq等を使う。
613599:2006/02/21(火) 17:34:58
>>612さん
なるほど・・・
了解しました。勉強なります。
ありがとうございました。
614デフォルトの名無しさん:2006/02/21(火) 18:14:47
質問なのですが、
一度useしたモジュールを取り消したいのですが可能でしょうか?

no というのはあるようですが、あんまり意味ないみたいです。

具体的に書きますと、
常駐して再起動できないアプリケーションがあるのですが、
どうも特定の例外が起こった際に、overloadが壊れるみたいなのです。
これを復元するためにもう一度コンパイルしなおしてやればいいかな と思ったのですが、
一度useされているものは再びuseはしないようなので困っています。

(Class::DBIをmod_perl上で使っているときに発生するoverloadのバグのことです)
615デフォルトの名無しさん:2006/02/21(火) 18:24:09
>>614
一応%INCから消してやれば再度読み込ませることはできるけれど、
useはスクリプトの解釈と同時に処理されるので注意。
具体的にはeval内でuseするとかrequire+importするとか
616デフォルトの名無しさん:2006/02/21(火) 18:31:26
%INCから消せば再require;importは可能だけど、それまでの結果まで取り消す訳
じゃないから何が起きるやら。
再現条件不明のトラブルを抱えたくないなら、「再起動できない」をどうにかする方が
無難だと思う。
617デフォルトの名無しさん:2006/02/21(火) 18:33:50
>>615
delete $INC{$_} foreach(grep($_ =~ /^Class\/DBI/, keys(%INC)));

といった感じでINCは消してみたのですが、
大量に sub routin **** is redefind. ってでます。
overloadのバグは直せていないので、読み込めていないようです。

具体的には↓な感じでやっています。
foreachのスコープでeval useが他に効かなくなっている。 とかないですよね・・・?

my @cdbipkgs = grep($_ =~ /^Class\/DBI/, keys(%INC));
delete $INC{$_} foreach(@dbipkgs);
foreach(@dbipkgs) {
$_ =~ s/\/::/g;
$_ =~ s/\.pm$//;
eval("use $_;");
}
618デフォルトの名無しさん:2006/02/21(火) 18:45:23
>>617
すみません 3、4行目
Subroutine ***** redefined at ****** 26. ってでますが、overloadは直せていないようです。
の間違いです。
619酩酊 ◆TWARamEjuA :2006/02/21(火) 19:53:31 BE:7841489-#
(´-`).。oO(なんてディストリなんだろう・・・> /Class/DBI/)
620614:2006/02/21(火) 20:05:27
>>619
Class::DBIなのですが、
%INC中では Class/DBI.pm といったように登録されているようです。
621デフォルトの名無しさん:2006/02/21(火) 20:56:01
>>591
あったなぁ、2バイト半角(w。

PC-98のフォントでは、MS-DOS上で普通の半角より微妙に見栄えが良かったから、
あの頃はみんな良く使ってたな。
622614:2006/02/21(火) 23:50:16
その後 %Class::DBI:: にもハッシュ構造で関数等登録されているようなので、
undef %Class::DBI::;
してみましたがやはりClass::DBIのoverloadのバグは塗りつぶせないようです・・・

>>616
確かにその通りですね。
実際再起動が不可能なわけではなく、時間がかかるだけなのですが、
再起動が必要な状況かどうかを判断するのが人の目しかない状態でして・・・
もし塗りつぶせればサービスを止めずにすむな、と思った次第です。
623デフォルトの名無しさん:2006/02/22(水) 12:00:06
>>582
http://module.jp/blog/regex_unicode_prop.html

半角カナは \p{InHalfwidthAndFullwidthForms} でマッチするなんて知らなかった。
よく見りゃ perldoc perlunicode で出てくるじゃないか。トホホ。

624デフォルトの名無しさん:2006/02/22(水) 22:42:35
>>622
そもそもoverloadが何やってるか調べたの?
625614:2006/02/23(木) 00:48:58
>>624
レスありがとうございます。

これですね。
use overload
'""' => sub { shift->stringify_self },
bool => sub { not shift->_undefined_primary },
fallback => 1;

オブジェクトがスカラー評価された際にPrimaryKeyの値を返す
と認識しておりましたが、違いますでしょうか?
626デフォルトの名無しさん:2006/02/23(木) 02:38:15
>>625
624は、overload.pmが何やってるか調べたのかって聞いてる気がする。
力で押すつもりなら最初に確認する筈のところだから、念の為の確認だと思うけどね。

で、そのoverloadの認識も(この場合は)間違い。正しくは、
オブジェクトが文字列として評価されたら、メソッド stringify_self の戻り値を返す。
になる。
言いかえると、「文字列評価したときにstringify_selfが呼ばれなる状態が、overloadが
正常な状態」と認識しておくのが無難。
627614:2006/02/23(木) 14:55:38
>>626
なるほど。 ありがとうございます。

ちなみにですが、mod_perlでoverloadが壊れたときは以下のようなエラーが出ます
Operation `==': no method found,
left argument in overloaded package MyClassDBI::MyTable,
right argument has no overloaded magic at ~/MyApp/HogeHoge.pm line 105.
628デフォルトの名無しさん:2006/02/23(木) 17:23:23
use utf8としてUTF-8でソースを書いた場合length関数の戻り値は文字数になるようですが、
バイト数を知りたい場合はどうすればよいのでしょうか?
例えば
print &bar('Japanese');
print &bar('日本語');

sub bar($)
{
 $s = shift;
 return $s . "=" x (80 - length($s));
}
等とすると 「日本語===========〜」 の方は83バイトになってしまいます。
629デフォルトの名無しさん:2006/02/23(木) 17:54:12
>>628
マニュアルに書いてありますが。
630デフォルトの名無しさん:2006/02/23(木) 17:55:12
もうutfとかencodingプラグマ廃止しろよ
631デフォルトの名無しさん:2006/02/23(木) 17:58:54
ああ……Perlの面白くも楽しいバッドノウハウ迷宮から人々を解放すると、
プログラミング界にどれほど豊饒な実りがもたらされることか……
632デフォルトの名無しさん:2006/02/23(木) 18:04:46
案外変わらない
633デフォルトの名無しさん:2006/02/23(木) 18:14:58
Encode.pmのエンコード変換の仕組みを御存じの方いらっしゃいますか?
iso-2022-jpへのコンバートはEncode::JP::JIS7に書いてあるのですけど、他
のエンコードへのコンバートについてはコードが書いてあるファイルを発見で
きませんでした。
634デフォルトの名無しさん:2006/02/23(木) 18:22:07
>>633
つ ext/Encode
635デフォルトの名無しさん:2006/02/23(木) 18:36:53
encodeとdecodeのメソッドを実装すれば新規にエンコードを追加できる
ことから、shift-jis->euc-jpでは

shift-jisをデコード==>euc-jpへエンコード

という流れかと推測しているのですが。
jcode.plみたいにshift-jisから演算で直接euc-jpに変換はしていないの
かと。どうなんでしょうか?
636デフォルトの名無しさん:2006/02/23(木) 18:43:22
>>635
ドキュメント嫁よ、このドキュンが
637デフォルトの名無しさん:2006/02/23(木) 19:00:58
ズギューン
638デフォルトの名無しさん:2006/02/23(木) 19:01:43
ズキュゥゥゥン
639デフォルトの名無しさん:2006/02/23(木) 19:29:00
>>638
G13かw
640デフォルトの名無しさん:2006/02/23(木) 20:24:00
ドキュメントとかマニュアルって何?
PHPマニュアルみたいなものがあるの?
641デフォルトの名無しさん:2006/02/23(木) 20:40:22
>>640
>>2-3も読めないですかそうですか
642デフォルトの名無しさん:2006/02/23(木) 21:04:51
>>640
> ドキュメントとかマニュアルって何?
> PHPマニュアルみたいなものがあるの?

あなたのディスクに全部入っているはずです。
643デフォルトの名無しさん:2006/02/23(木) 21:23:52
>>640
これはひどいwwwwww
644デフォルトの名無しさん:2006/02/23(木) 21:24:01
>>640

1. まず前準備として、英語がよく分からない場合は電子辞書を買うなり
PCに辞書入れるなりしてすぐに英文を理解できる体制を整えろ。

2. perldoc perl と打て。

3. 終了。
645デフォルトの名無しさん:2006/02/23(木) 21:43:22
>>644
これは、あまりにも親切だ!
646デフォルトの名無しさん:2006/02/23(木) 21:46:18
perldoc perlでググれってこと?
647デフォルトの名無しさん:2006/02/23(木) 21:48:31
>>646
これは、あまりにも
648デフォルトの名無しさん:2006/02/23(木) 21:51:19
>>646
1. まず前準備として、ロープを買え。

2. 回線切って首を吊れ。

3. 終了。
649614:2006/02/23(木) 21:54:44
>>646
きみWindowsユーザ?
コマンドプロンプトって知ってる?
650デフォルトの名無しさん:2006/02/23(木) 21:55:04
my $temp = aho;
$temp && baka, chinko $temp;

こんな処理を一時変数無しでやることってできますかね?
できたからってどうってことないと言えばどうってことないんですが…気分的に
返ってくる値が true のときだけ事前処理をしたいんです
651デフォルトの名無しさん:2006/02/23(木) 21:55:43
_no<残ってたぁ
652デフォルトの名無しさん:2006/02/23(木) 21:56:09
コマンドラインで
perldoc perl
と入力(もちろんリターンorエンターも)

perl に関するドキュメントファイルの紹介文が
ずらずら表示されるので、それを読んで
自分が知りたい情報が含まれていそうな
ドキュメントの名前を確認

仮に、perlrun というドキュメントが臭うと思ったら
perldoc perlrum
と入力(もちろんリターンorエンターも)

すると目的のドキュメントが表示される














なんで、こんなこと書かなきゃならんのさ
653デフォルトの名無しさん:2006/02/23(木) 22:08:06
>>652
おまい優しいな
俺には真似できん
654酩酊 ◆TWARamEjuA :2006/02/23(木) 22:10:36 BE:196847982-
$ perldoc Acme::MorningMusume
No documentation found for "Acme::MorningMusume".
655デフォルトの名無しさん:2006/02/23(木) 22:30:02
>>625
overload.pmを見てみそって言いたかったんだけど、その感じだと見てないよね……。

そーいやApacheとmod_perlのバージョンを聞いてなかった。
どれ?

#僕はその現象にあたったことがないんで、参考までに。

656デフォルトの名無しさん:2006/02/23(木) 22:57:35
>>655
overload.pmはろくに見ていませんでした_no 読んできます・・・

perlは5.8.2と5.8.6 apacheは2.0.55 mod_perlは2.0.2です。

開発はCatalystでやっているのですが、Catalystのテストサーバーでも発生します。
Catalystのバージョンは5.57, 5.63 5.64, 5.65 で発生を確認しました。

Class::DBIは v3.0.12〜v3.0.14まで試しましたがすべてで発生するようです。
再現の方法としては、Class::DBIを使ってDBI中でdieするようなSQLを書くと
(たとえばintに対してtextでselectする等)それ以降、

my $data = MyCDBI::Table->retrieve(1);
if($data == 1) {


等とやった場合に、「if($data == 1) {」この部分で>>627のエラーが発生します。
発生した際に調べたところ、Class::DBIの作者自身「何でだろうね?」と言っているバグのようです。
(一緒に調べていた仲間がその記述を発見したため僕自身は確認しておりません)
657デフォルトの名無しさん:2006/02/23(木) 23:21:48
overload.pm を見るには
perldoc overload

ソースも見るには
perldoc -m overload
658デフォルトの名無しさん:2006/02/23(木) 23:57:46
>>656
ちなみに、自分で似たようなクラスを作って
overloadした場合は問題なしなの?

「Class::DBIのバグ」と書くからにはとーぜんやってるんだとは思うけど、
念のため。
659デフォルトの名無しさん:2006/02/24(金) 00:00:09
>>658
自分でoverloadを使ったクラスを作ってみたんですが、
再現することはできませんでした。
660デフォルトの名無しさん:2006/02/24(金) 00:12:36
SQL間違わなければOKという問題じゃないの?
661デフォルトの名無しさん:2006/02/24(金) 00:19:12
>>660
確かにOKなのですが、
SQLも動的につくったりしてるために万が一発生するとシステムがダウンしてしまうのです。
662デフォルトの名無しさん:2006/02/24(金) 00:20:40
DBがOracleだったりする?
663デフォルトの名無しさん:2006/02/24(金) 00:44:17
PostgreSQLです
664633 635:2006/02/24(金) 02:04:40
知りたかったのはfrom_toの実装でした。実はperlは殆ど触ったことがなく
なんとなく読めるかなというレベルです。Encode.pmの実装に興味があった
のでお尋ねしております。

Encode.pmのソースを読むとfrom_toでは$Encoding{name}->encodeと
$Encoding{name}->decodeの組合せで実装されていることが判かりました。
しかし、$Encode{name}がどこで作られているのかが今だ判らない状態です。
Encode/JP/Makefile.PLにその節があるように思えるのですがよく判りません。
665633 635:2006/02/24(金) 02:28:57
http://search.cpan.org/dist/Encode/JP/JP.pm
のtarボールを見てみたらucmというディレクトリにUCS2へのマップを発見。
自己解決しました。
666デフォルトの名無しさん:2006/02/24(金) 02:58:04
RHEL4ってPOSIXモジュールは最初から入ってますか?
手元で実験しているうちにどのモジュールが最初から入っていたのか
分からなくなってしまいました。
自分でperl -MCPANしていれたんだっけなぁ・・・。
667デフォルトの名無しさん:2006/02/24(金) 03:07:18
>>666
RHEL4は触ったこと無いがRHだからRPMでしょ
rpm -ql perlでパッケージに含まれていたファイル一覧が出てくるかと
668デフォルトの名無しさん:2006/02/24(金) 07:48:39
あほくせー質問だな
カスな質問はWeb板でやれよ

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

でもすりゃわかる問題だろ
669デフォルトの名無しさん:2006/02/24(金) 08:14:18
>>668 質問内容を良く読みましょう。
RHEL3は標準で入ってました。
670デフォルトの名無しさん:2006/02/24(金) 08:40:11
>>666
/usr/lib/perl5/5.8.x/ に標準モジュール、
/usr/lib/perl5/vendor_perl/ に RPM パッケージ、
/usr/lib/perl5/site_perl/ にそれ以外が入っている。
標準モジュールのヴァージョン違いを入れると
/usr/lib/perl5/5.8.x/ のを上書きしたり
/usr/lib/perl5/site_perl/ に入ったりする。
671666:2006/02/24(金) 14:16:02
レスありがとう。標準で入ってたのね。
なんか、違う環境で
cpan> install POSIX
したらコンパイル始まって超焦ったのよ。
672デフォルトの名無しさん:2006/02/24(金) 15:04:56
ってかコマンドプロンプトってなに
673>>672:2006/02/24(金) 15:21:57
674デフォルトの名無しさん:2006/02/24(金) 15:24:54
コマンドを知らずにボクらはうまれた〜
675デフォルトの名無しさん:2006/02/24(金) 15:29:19
質問すー。
Perlソースコードの中のコメントを全て削除して
すっきりさせるコード整形モジュールってありますか?


676デフォルトの名無しさん:2006/02/24(金) 15:40:36
Perl::Tidy
--delete-all-comments

か?使ったことないんでよくわからん
677デフォルトの名無しさん:2006/02/24(金) 16:03:39
>>672
こちらの釣り堀は閉業しました〜さよなら〜〜
678デフォルトの名無しさん:2006/02/24(金) 19:00:12
YAPC::Asia 2006がSOLD OUTなんだと、へぇーーてな感じ
679デフォルトの名無しさん:2006/02/24(金) 19:05:32
言うなよ!絶対言うなよ!
680デフォルトの名無しさん:2006/02/24(金) 20:43:43
プログラミングに直接関わることではないんですけど、
オライリーの英語版ページをみていたら、

「Perl Best Practices」Damian Conway著

というのがあったのですが、
らくだ本読んでればこれはいらないですか?
出たのが2005/07ですから、
perl本にしては新しいのですが。

#さらに、近々同じ著者が「Perl Hacks」とか
いうのも出すみたい。
つくづく日本語圏に生まれたことを後悔してます
681デフォルトの名無しさん:2006/02/24(金) 20:44:56
>>680
Damian Conwayが誰か調べてみて決めてみるといいと思うよ
682デフォルトの名無しさん:2006/02/24(金) 20:45:01
ありますよ
683デフォルトの名無しさん:2006/02/24(金) 20:50:28
>>680
買わずに後悔よりも、買って後悔
684デフォルトの名無しさん:2006/02/24(金) 20:57:11
>>680
> 「Perl Best Practices」Damian Conway著
>
> というのがあったのですが、
> らくだ本読んでればこれはいらないですか?

「いる」本などひとつもない。

# 『実用Perlプログラミング第2版』の翻訳出るけどね。
685デフォルトの名無しさん:2006/02/24(金) 21:13:42
>>680
以前Object Oriented Perl買って読んだけどまぁまぁだったな。
買って読んで講評をここでして呉れ給え。
686デフォルトの名無しさん:2006/02/24(金) 21:23:13
Perl関連書籍日本語版は訳のヘボさとリリースの遅さには定評があるね。
TTの訳本欲しいよう。
687デフォルトの名無しさん:2006/02/24(金) 21:29:20
訳のへぼさはどうでもいいw 索引だけはしっかりしてくれ。
原書にある索引を飛ばして、どうでもいい「BASIC」を入れた馬鹿どうしてるかなw
688デフォルトの名無しさん:2006/02/24(金) 21:36:32
Conwayってよろしくやるって事ダロ
689デフォルトの名無しさん:2006/02/24(金) 21:52:27
救命病棟よりは買い > Perl Best Practices
690デフォルトの名無しさん:2006/02/24(金) 22:13:38
Oreilly 見てみたら Perl Hacks を発見した。
http://www.oreilly.com/catalog/perlhks/?CMP=ILC-H2K675675382&ATT=perlhks
またハックシリーズが増えたつーことだな。
しかし Perl のハックって、モジュールの作り方とかか?
(その程度は全部他の本に載ってそうな・・・)

しかしハックシリーズはいっぱい出たな。これで売れちゃったりしたら
調子にのってそのうち全ての本に Hacks って付けちゃったりして。
691デフォルトの名無しさん:2006/02/24(金) 22:16:35
そのうちこんな本が出たり・・・

Business Hacks
・株価の上げ方
・投資会社の作り方
・逮捕されないために
・脱税の仕方
692デフォルトの名無しさん:2006/02/24(金) 23:27:42
想定内です
693680:2006/02/25(土) 05:24:13
>>689

救命病棟は当時は久々のperl本でしかもnaoya氏が監修とかいうことで
ほくほくと買ってみたが・・・まぁ、なんというか、ね。
694680:2006/02/25(土) 05:31:58
連投ごめそ。とりあえず買ってみることにしました。
目次みた限りではこれまでの本との違いがよくわからない。

>>686

欲しいですよねぇ。他にもMasonだとかmod_perlの本も
海外オライリーはあるんだよね。mod_perlはWebで全部読めるのだけど、
一日3ページくらいが限界です・・・

#perlと関係ないんだけど、海外オライリーに
Subclassing and Hooking with Visual Basic
なんてのがあった。異色作?
695デフォルトの名無しさん:2006/02/25(土) 11:09:30
Perl Best Practice 良いんじゃないかな。いくつか納得いかない点もあるが,
多人数でスタイルを統一するときはとりあえずこれを標準にしてます。PPI モ
ジュールを使って,このスタイルに適合してるかチェックするPerl::Critic モ
ジュールもイイ。
696680:2006/02/25(土) 14:36:40
>>695
ありがとう!じゃぁこの本はテクニックというよりコーディング規約みたいな本なのかな。
697デフォルトの名無しさん:2006/02/25(土) 15:24:23
>>695
なんで変なとこで改行してるんだ?
698デフォルトの名無しさん:2006/02/25(土) 15:47:34
Navi2ch (Emacs) で fill してるとみた。
699デフォルトの名無しさん:2006/02/25(土) 15:54:13
「ジュール」っていう便利なツールかライブラリがあるのかと思ったよ
700デフォルトの名無しさん:2006/02/25(土) 16:13:48
Data::Dimensions でジュールが使えます

どうでもいいですね

仕事に戻ります
701デフォルトの名無しさん:2006/02/25(土) 16:28:58
ジュールについて
702デフォルトの名無しさん:2006/02/25(土) 16:29:47
熱だよね。熱
703酩酊 ◆TWARamEjuA :2006/02/25(土) 17:25:14 BE:258363937-
Perlの団塊。
704デフォルトの名無しさん:2006/02/25(土) 17:49:54
Perl6っていつ完成予定なの?
なんか2chで作者が金を使い果たしたとか書いてあるけどデマだよね?
ラリーウォールってオライリーの社員だから金はあるはずだよな?
オライリーは資金提供してないのかな
705デフォルトの名無しさん:2006/02/25(土) 17:55:19
>>704
じゃあYAPCで質問してくるよ
706デフォルトの名無しさん:2006/02/25(土) 18:16:43
PerlでOOPやっているのですが、
staticなメンバ変数ってできますかね?
707デフォルトの名無しさん:2006/02/25(土) 18:23:27
>>706
Class::Data::Inheritable とかかな?
(メンバ変数と言われてもピンとこない駄目っぷり)
708デフォルトの名無しさん:2006/02/25(土) 18:24:32
>>704
LarryはとっくにO'Reilly解雇されてますが
709デフォルトの名無しさん:2006/02/25(土) 18:33:10
Perlって単体で実行可能な実行ファイルにコンパイルできないのでしょうか?
会社でちょっとしたツールつくっても人に配るときに、Perlインストール
してもらうのは手間で。
710デフォルトの名無しさん:2006/02/25(土) 18:42:55
ひとつのカキコでPerlとPerlを混ぜて書いちゃうようじゃ無理だね
711デフォルトの名無しさん:2006/02/25(土) 18:49:21
初歩的な質問ですみませが、

for (my $i = 0; $i < 10; $i++) {
sleep(1);
print $i . " ";
}

とした場合、10秒待ってから一気にprintを実行してしまうのですが、
これを1秒毎に実行させるにはどうしたら良いですか?
Perlは今週習い始めたばかりの超初心者です。
712デフォルトの名無しさん:2006/02/25(土) 18:57:15
>>711
>とした場合、10秒待ってから一気にprintを実行してしまうのですが、

そう見えているだけ。 $|++; をスクリプトの先頭に入れ名。
ttp://www.google.com/search?hl=ja&q=perl+%E7%89%B9%E6%AE%8A%E5%A4%89%E6%95%B0&lr=lang_ja
713デフォルトの名無しさん:2006/02/25(土) 20:49:58
>>712
解決しました。どうも有難うございました。
Perlの特殊変数ってややこしいですね。
714デフォルトの名無しさん:2006/02/25(土) 21:14:08
715デフォルトの名無しさん:2006/02/25(土) 22:57:44
ファイルの内容を、1個のスカラ変数に読む方法って、どうやるのが普通ですか?
現在は、こんな風に書いてます。

open FILE, "<:encoding(utf-8)", "file.txt" or die;
while (<FILE>) {
$content .= $_;
}
close FILE;

ループで、一行ずつ連結していく方法よりも、もっとすっきりと書く方法ってありますでしょうか。
716デフォルトの名無しさん:2006/02/25(土) 23:14:23
>>715
ファイルは普通の言語はread関数でバッファ変数に読み込む
だからread関数をググルかマニュアルで調べたらすぐわかる
whileで読むのはPerlぐらいか?
717デフォルトの名無しさん:2006/02/25(土) 23:16:25
Windows環境なんですがPerlのコードをインデントしたり整形してくれるエディタって
どんなのがありますか?

TerapadとかXyzzyだと適当に書いてると整形せずにゴチャゴチャになるし
VS2003みたいに文章をカットアンドペーストしたら自動的に整形してくれるような
エディタがほしいんだけど。
718デフォルトの名無しさん:2006/02/25(土) 23:18:27
>>717
xyzzyでゴチャゴチャになるってどんな書き方してるんだ…

一応 M-x indent-region で整形されるけど、望みの手軽さではないんだろうな
719デフォルトの名無しさん:2006/02/25(土) 23:36:08
>>716
while()はただのループ。
一行読み込み処理をやってるのは、<FILEHANDLE>の方。
C言語の一行毎の処理はPerlと似ている。

while( fgets(buf, n, fp) ){
// なんらかの処理
}
720709:2006/02/25(土) 23:39:11
>>714
ありがとうございます。
PARで検索したら、やり方などが出てきました。
721715:2006/02/25(土) 23:49:06
>>716
すみません具体的にはどういう風に書けばいいですか?
read を使う場合、あらかじめファイルサイズが分かっていないと、
「全部読む」は出来ないと思うのですが、その点は合ってますでしょうか。

こういうことでしょうか。

$size = -s $filename; #あらかじめファイルサイズを調べておく
open FILE, "<$filename";
read FILE, $content, $size;
close FILE;
722デフォルトの名無しさん:2006/02/26(日) 00:03:41
>>721
別に予め調べる必要は無い。
open FILE, '<' . $filename or die $!;
read FILE, my $content, -s FILE;
close FILE;

参考: http://www.sysarch.com/Perl/slurp_article.html
723デフォルトの名無しさん:2006/02/26(日) 00:45:04
>>715
readで読む方法が人気のようだけど漏れは$/をundefする方がPerl的だと思う。
open my $fh, $filename or die $!;
undef $/;
my $content = <$fh>;
close $fh;
724デフォルトの名無しさん:2006/02/26(日) 01:22:30
$buf = `cat $file`;
725デフォルトの名無しさん:2006/02/26(日) 01:23:35
open my $fh, $filename or die $!;
my $content = join("\n", <$fh>);
close $fh;
726デフォルトの名無しさん:2006/02/26(日) 01:28:17
回答者も初心者。
727デフォルトの名無しさん:2006/02/26(日) 01:32:17
>>725
その場合join '', <$fh>じゃないとまずくね?
728デフォルトの名無しさん:2006/02/26(日) 01:39:39
この初心者臭いスレがなぜム板にあるの?
WEB板が嫌ならネットワーク初心者に移れよwww
729デフォルトの名無しさん:2006/02/26(日) 01:43:41
約10KBのファイル
Benchmark: timing 5000 iterations of join_t, read_t, undef_t, while_t...
join_t: 4 wallclock secs ( 2.86 usr + 0.87 sys = 3.73 CPU) @ 1339.05/s (n=5000)
read_t: 8 wallclock secs ( 2.03 usr + 4.92 sys = 6.95 CPU) @ 719.01/s (n=5000)
undef_t: 2 wallclock secs ( 0.23 usr + 0.86 sys = 1.09 CPU) @ 4574.57/s (n=5000)
while_t: 2 wallclock secs ( 0.95 usr + 1.00 sys = 1.95 CPU) @ 2558.85/s (n=5000)
10MB
Benchmark: timing 10 iterations of join_t, read_t, undef_t, while_t...
join_t: 22 wallclock secs (20.28 usr + 0.48 sys = 20.77 CPU) @ 0.48/s (n=10)
read_t: 10 wallclock secs ( 2.77 usr + 6.61 sys = 9.38 CPU) @ 1.07/s (n=10)
undef_t: 0 wallclock secs ( 0.00 usr + 0.00 sys = 0.00 CPU)
(warning: too few iterations for a reliable count)
while_t: 1 wallclock secs ( 1.36 usr + 0.22 sys = 1.58 CPU) @ 6.34/s (n=10)

ちなみに、'<' . $filenameよりも"<$filename"の方が見やすくて早いです><
730デフォルトの名無しさん:2006/02/26(日) 02:51:19
ていうかファイル読むだけなら '<' は省略可。
731デフォルトの名無しさん:2006/02/26(日) 02:57:33
>>729


joinはありえないね。ファイル大きくなると。
配列できてから繋ぐんだから。

スクリプト言語の弱点はループなので while も遅い。
whleのソースが >>715 みたいのだと、スカラの連結で更にコストがかかる。

undefするのが一番低レベルでガバッと読んでる事になると思う。
readは何でだろね。Cにそのまま渡ってる訳じゃないからかなぁ。
732デフォルトの名無しさん:2006/02/26(日) 02:57:56
>>722の方法は、OSがUNIXなどで、開いたファイルが普通のファイル
ではなかったときに何も読めずに終るかも知れない (-s の時の内部での
stat() が失敗するかも知れない)。>>723なら大丈夫だと思うが、なんと
なく可読性悪い感じしない? Perl 的といえば Perl 的だが。
733デフォルトの名無しさん:2006/02/26(日) 03:16:54
>>689
まぁそんなもん。全員がこれに従えばかなり統一感がでるし,宗教戦争も未然
に回避できる。おーざっぱな構成は,まずベストプラクィスがきて,良い例,
悪い例,なぜ良いか?なぜ悪いか?の説明。
--------------------------
2.2 キーワード
制御キーワードは続く開き括弧と分離せよ

○イイ while ($min < $max) {
×マズー while($min < $max) {

理由:見やすいから
--------------------------
まぁ,ある程度の Perl ハカーでDamian を知らない奴もいないだろうから,多
少不満があっても皆従うしな。逆に「Damian ? ダレそれ?」とか「俺スタイル
のほうが絶対いい」ってやつは半可通か協調性ないやつなのでプロジェクトか
らは外すが吉。

>>697
698 の言うとおりす
734デフォルトの名無しさん:2006/02/26(日) 03:20:01
>>729
235,146bytesのファイル
Benchmark: timing 5000 iterations of join_t, read_t, undef_t, while_t...
join_t: 28 wallclock secs (23.09 usr + 4.77 sys = 27.86 CPU) @ 179.47/s (n=5000)
read_t: 7 wallclock secs ( 3.02 usr + 3.31 sys = 6.33 CPU) @ 790.14/s (n=5000)
undef_t: 7 wallclock secs ( 3.52 usr + 3.56 sys = 7.08 CPU) @ 706.31/s (n=5000)
while_t: 15 wallclock secs (11.53 usr + 3.69 sys = 15.22 CPU) @ 328.56/s (n=5000)

timethese(5000,{
undef_t => sub {local $/;open my $fh, $filename or die $!;my $content = <$fh>;close $fh;},
read_t => sub {open my $fh, $filename or die $!;read $fh, my $content, -s $fh;close $fh;},
join_t => sub {open my $fh, $filename or die $!;my $content = join '', <$fh>;close $fh;},
while_t => sub {my $content = '';open my $fh, $filename or die $!;while (<$fh>) {$content .= $_;}close $fh;},
});
735デフォルトの名無しさん:2006/02/26(日) 03:31:58
興味深いですなぁ
736デフォルトの名無しさん:2006/02/26(日) 03:46:28
興味深くもなんとも無い
737デフォルトの名無しさん:2006/02/26(日) 03:47:35
ひねくれてるなぁ
738デフォルトの名無しさん:2006/02/26(日) 03:48:24
ひねくれてもなんとも無い
739デフォルトの名無しさん:2006/02/26(日) 03:49:00
返信早w
740デフォルトの名無しさん:2006/02/26(日) 03:58:56
これってwhileなんかは変数によっても変わらなかったっけ?
my宣言されてるかとかlocal宣言されてるかとか
スコープがループ内だけか外から続いてるかとか。
741デフォルトの名無しさん:2006/02/26(日) 04:03:05
ベンチの結果貼ったときは、まとめというかコメント付けて欲しい。
742デフォルトの名無しさん:2006/02/26(日) 05:42:25
>>741
特に要らんでしょ。
実行環境とコードってんなら、あれば参考にもなるけどさ。
743デフォルトの名無しさん:2006/02/26(日) 05:59:38
ベンチは結果がすべて
744デフォルトの名無しさん:2006/02/26(日) 08:06:39 BE:276713377-
なんでsysreadがない?
745デフォルトの名無しさん:2006/02/26(日) 08:44:10
readとほとんど同じだろうな。freadとreadの差でしかないし、
この例だとバッファリングの恩恵はほとんど無いし。
746デフォルトの名無しさん:2006/02/26(日) 10:18:02
>>743
野生の厳しさだよな
747デフォルトの名無しさん:2006/02/26(日) 12:08:10
>>731
たぶん、>>729のreadが遅いのは、WindowsやMac等を使って改行変換モード
でファイルを読みこんでいるから。
例えばWindowsだと、open $fh,'<',$file と open $fh,'<:raw',$file で
readの速度が20倍は違う。(ActivePerl 5.8.7)
748デフォルトの名無しさん:2006/02/26(日) 12:20:18
perlでグラフ作成、しかも株価チャート図を作成できるモジュールってありませんか?
749デフォルトの名無しさん:2006/02/26(日) 15:44:54
>>748
つ GD::Graph
750デフォルトの名無しさん:2006/02/26(日) 16:16:11
>>717
>Windows環境なんですがPerlのコードをインデントしたり整形してくれるエディタって
>どんなのがありますか?

つ「Perl書くのにどんなエディタ使ってる?」
http://pc8.2ch.net/test/read.cgi/php/1014357485/l50
751デフォルトの名無しさん:2006/02/26(日) 16:17:02
GD::Graphは知っていたんですけど、一発で表示させることは出来ないんですかね?
Graphの機能を使って自分で作っていくしかないんでしょうか?

もしそうだとすると、かなりの時間がかかってしまいますよね?
752デフォルトの名無しさん:2006/02/26(日) 16:35:50
それが嫌なら金払って人雇えば
753デフォルトの名無しさん:2006/02/26(日) 16:45:53
時間はかかるけどGraphで出来るということですね?
754デフォルトの名無しさん:2006/02/26(日) 16:49:10
CPANで検索すると死ぬほどあるやん
755デフォルトの名無しさん:2006/02/26(日) 17:12:44
CPAN利用したいんですけど英語がわからないので・・・
すいません。

辞書片手に検索してみます
756デフォルトの名無しさん:2006/02/26(日) 17:19:01
>>751
GD::Graph だと、デフォルトグラフ以外は結構手が入ると思う
Perlじゃないけど、gnuplotで株価チャートっぽいのが書けた気がするので
これを呼ぶのがいいんじゃないかな。
ググったらこんなページがあった
http://www.gnuplot.info/demo/candlesticks.html
757デフォルトの名無しさん:2006/02/26(日) 17:21:06
(´・ω・)
758デフォルトの名無しさん:2006/02/26(日) 18:15:28
>>748
win32 OLE でデータをExcelにはいて、グラフ作成させれば?
759デフォルトの名無しさん:2006/02/27(月) 00:14:14
サブルーチンのデフォルト引数リスト@_は、サブルーチン内で
いくら変更しても、実引数には影響を与えないということらしいのですが、
下記のようにやると、実引数が変更できてしまうのはなぜでしょうか。

@array = 1..5;
func(@array);
print "@array\n";

sub func{
for(@_){
$_ += 1;
}
}
760デフォルトの名無しさん:2006/02/27(月) 00:23:03
>>759
>いくら変更しても、実引数には影響を与えないということらしいのですが、
あなたの聞いた、この噂が間違っています。
761759:2006/02/27(月) 00:27:12
そうですか。ではなぜ、
sub func{
shift @_;
}
のようなことをしても、実引数には影響ないのに、
>>759みたいにすると影響があるのでしょうか。
何が違うのでしょう。
762デフォルトの名無しさん:2006/02/27(月) 00:31:32
>>761
see "perlsub" manpgae.

The array @_ is a local array, but its elements are aliases
for the actual scalar parameters.
763759:2006/02/27(月) 00:36:57
う〜む、そういうことですか。
ありがとうございました。
764デフォルトの名無しさん:2006/02/27(月) 00:46:27
まぁ、この辺は確かにPerlの微妙な所だよね。
ちょっと分かりにくい。
foreach とかでの要素変更もそうだけどさ。

>>759
では、引数をそのまま for ループに渡してる。
このループでの要素変更は、元要素の変更になる。
ということで
結局サブルーチンに渡した配列要素が変更されちゃう。
765デフォルトの名無しさん:2006/02/27(月) 00:57:05
Perl6 になれば、in と out で明示的に指定できるから幸せになれるはず…
766デフォルトの名無しさん:2006/02/27(月) 01:03:27
perl6かぁ。。
767デフォルトの名無しさん:2006/02/27(月) 01:15:12
オルタも出たし、あとはPerl6だけなんだけどな。
768デフォルトの名無しさん:2006/02/27(月) 01:45:30
Perl6ってそんなにリリースせまってるの?
でないんじゃないかって話もあるくらいで。
769デフォルトの名無しさん:2006/02/27(月) 03:38:17
Perl6ではPerl5で動いてたスクリプトが動かなくなるって本当ですか?
770デフォルトの名無しさん:2006/02/27(月) 03:52:36
何か->が.になって.が~になるってどっかの本に書いてあったなあ
正規表現もかなり変わるらしい
771デフォルトの名無しさん:2006/02/27(月) 05:15:33
>>769
なるらしいよ。文法の互換性を捨てるとか。
実行環境も Java みたいに仮想マシン上で動くようにするらしい。
するとやはりそのうち Perl 5 をその仮想マシン用バイトコードに
コンパイルして動かすやつが出て来るだろうな。

そしてあらゆるOSで仮想マシンが動くようになったら世界征服完了。
772デフォルトの名無しさん:2006/02/27(月) 05:37:47
>>771
> Perl 5 をその仮想マシン用バイトコードに
Ponieってプロジェクト名で既にやってる。

perl5上でPerl6::*モジュール群を使うとPerl6風味が楽しめるよ
773デフォルトの名無しさん:2006/02/27(月) 07:39:24
>>771
Perl5 も仮想マシン用バイトコードにコンパイルしてから動いている件について
774デフォルトの名無しさん:2006/02/27(月) 09:26:30
6が出ようが出まいが、今はどうでもいいが
6は何が変わってくるんだ? コンパイル出来るとかだったら嬉しいけどな。
775デフォルトの名無しさん:2006/02/27(月) 13:37:09
>>774
perl5でもできる(やってる)わけだが、
コンパイルできると何が嬉しいんだ?
776デフォルトの名無しさん:2006/02/27(月) 13:56:00
man perlcompile
777デフォルトの名無しさん:2006/02/27(月) 14:19:47

       ,-┐
 ,ィ─、ri´^-─- 、 .┌f^f^f^f^f^f^f^f^f^┐
く  / , ,'   ヽ ヽ| ~ ~ ~ ~ ~ ~ ~ ~ ~│
 `<' / ,'レイ+tVvヽ!ヽト 知ってるが  │
  !/ ,' i |' {] , [}|ヽリ  お前の態度が |
  `!_{ iハト、__iフ,ノリ,n   気に入らない |
   // (^~ ̄ ̄∃_ア____n_____|
 _r''‐〈  `´ア/トr──!,.--'
<_>─}、  `」レ
'ヽ、   ,.ヘーァtイ
   Y、.,___/  |.|
    |  i `ー'i´
778デフォルトの名無しさん:2006/02/27(月) 14:33:03
何これ。
779デフォルトの名無しさん:2006/02/27(月) 16:39:30
780デフォルトの名無しさん:2006/02/27(月) 23:45:00
質問なのですが、次のプログラム、

print "\x0a";

は、1バイト出力すると思ったのですが、
実際にやってみると2バイト出力します。
環境によって違ってくるものなのでしょうか。

かんきょー:
win98
C:\My Documents>perl -v

This is perl, v5.8.7 built for MSWin32-x86-multi-thread
(with 14 registered patches, see perl -V for more detail)

Copyright 1987-2005, Larry Wall

Binary build 815 [211909] provided by ActiveState http://www.ActiveState.com
ActiveState is a division of Sophos.
Built Nov 2 2005 08:44:52
781デフォルトの名無しさん:2006/02/27(月) 23:50:14
binmodeにすれば良いんじゃないの?
782780:2006/02/28(火) 00:09:51
binmode STDOUT;
print "\x0a";

これでちゃんと1バイト出力するようになりました。
783デフォルトの名無しさん:2006/03/01(水) 02:14:56
今、ラクダ本等を買い込んで必死に5.8勉強してるのに、6になったら
互換性ないとか、いろいろ変わっちゃうとかで、むなしくなるな・・・。
784デフォルトの名無しさん:2006/03/01(水) 02:22:57
perl6が出ても当分Perl5は使われ続けると思うけどね
CPANにあるライブラリの山はponieでParrotのコードに変換して
perl6から呼ぶって感じになるんだろうか
785デフォルトの名無しさん:2006/03/01(水) 02:26:15
>>783
> 今、ラクダ本等を買い込んで必死に5.8勉強してるのに、6になったら
> 互換性ないとか、いろいろ変わっちゃうとかで、むなしくなるな・・・。

5系と6を使えるようになるからいいじゃん。
786デフォルトの名無しさん:2006/03/01(水) 02:27:25
そもそも5が終わりそうなこの時期にCGIはいまだに4だったりするだろ。
まだ心配する必要はないし無駄にもならない。
787デフォルトの名無しさん:2006/03/01(水) 02:27:47
まるっきり別物になるわけじゃないし、勉強しといて損はないと思うよ。
788デフォルトの名無しさん:2006/03/01(水) 02:32:40
習得するのに何週間もかかるわけじゃあるまいし、
あれもこれもやっとけ。
789デフォルトの名無しさん:2006/03/01(水) 02:41:26
6が出ても5でコンパイルできるなら問題ない。
790デフォルトの名無しさん:2006/03/01(水) 02:50:55
業務での置き換えは相当な時間がかかるから問題ない。
まずそのために予算取らなきゃいけないし。
791デフォルトの名無しさん:2006/03/01(水) 04:44:37
Perl6 かぁ…とか思って、parrot をインスコして pasm や PIL を書いてたら
楽しくて仕方がない。
792デフォルトの名無しさん:2006/03/01(水) 07:35:06
5.8はあと3年ぐらいは主流だと思うけどなぁ
楽観しすぎ?

いまだに5.005_03な鯖も生存していることだし
793デフォルトの名無しさん:2006/03/01(水) 07:59:54
以下のコードで##の部分がどういう処理なのか理解できません。
続、初めてのperlという本に載っていたサンプルコードです。
どなたかご教授願えませんか?

my @input = qw(Gilligan Skipper Professor Ginger Mary_ann);
my @sorted_positions = sort { $input[$a] cmp $input[$b] } 0..$#input;
my @ranks;
@ranks[@sorted_positions] = (0..$#sorted_positions); ##この部分
print "@ranks\n";
794デフォルトの名無しさん:2006/03/01(水) 08:37:52
つか、まったく別物だしPerl6普及しないと思うんだが…
795デフォルトの名無しさん:2006/03/01(水) 10:14:45
>>794
俺もそう思う。
oopなら先発のpythonやrubyのほうがこなれてるし、レガシーに関数で
ごりごりやるなら5.8xでOKだしなあ。

マイナーアップでencoding周りをもちっと洗練されてくれば6イラネ。
/bin入りを果たしてsedやawk、shスクリプトに置き換わるためにも
このまま枯れて欲しい。
796デフォルトの名無しさん:2006/03/01(水) 12:00:16
デフォでuse strictなんだっけか。
今のPerlの位置から遠ざかりRubyとかpythonの位置になりそうだね。
ある程度のPerlerにはそんなこと関係ないけど。
797デフォルトの名無しさん:2006/03/01(水) 12:29:16
>>795
> マイナーアップでencoding周りをもちっと洗練されてくれば6イラネ。
> /bin入りを果たしてsedやawk、shスクリプトに置き換わるためにも
> このまま枯れて欲しい。

現実には、Perlスクリプトがバイナリやshスクリプトに置き換えられているけどな。
798デフォルトの名無しさん:2006/03/01(水) 13:45:47
Perl6ってコンパイル必須なの?
Perlはプリプロセッサっていうのも売りのひとつだと思うんだけど、そんなんで普及するのかね。
いちいちコンパイルさせられるんだと、コマンドラインから使いづらい気がする。

5系と6系で別々に開発進んで欲しい。
799デフォルトの名無しさん:2006/03/01(水) 13:50:21
>>793
@ の変数に $# 付けた場合は添字の最大値。
my @a = (1, 2, 3); の場合 $#a は 2。
800デフォルトの名無しさん:2006/03/01(水) 13:53:19
>>793
>>799じゃ説明足りないか。

で、0..$#sorted_positions の .. の部分はリストを作る演算子で、
たとえば 5..8 というのは (5, 6, 7, 8) と同じ。
なので問題の部分は 0 から $#sorted_positions までのリストを
作る。$# については >>799 の通り。
801デフォルトの名無しさん:2006/03/01(水) 15:28:42
>>800
$#とリスト演算子は2行上にも出てきていてそちらは理解している
というのだから、わからないのはスライスじゃないか?
802デフォルトの名無しさん:2006/03/01(水) 15:38:59
>>801
あ、そうか。スライスか。
でももうめんどくさいから解説は君に任せた。
803デフォルトの名無しさん:2006/03/01(水) 15:58:54
「スライス」というキーワードがわかったんだから、
「perl スライス」でぐぐりゃ解説ぐらい探せるだろう。
804デフォルトの名無しさん:2006/03/01(水) 16:04:30
>>803
おおお、>>793じゃないですが、スライス知らなかったので勉強になりました。
ぐぐったらトップにスライスの解説が出てきました。
>>793に変わってありがとうございます。
805ヽ(´ー`)ノ ◆.ogCuANUcE :2006/03/01(水) 16:17:12
>>798
基本的には parrot で動くインタプリタ。

まったく同じソースから parrot のライブラリとか、必要なものをリンク
すれば実行ファイルも作れる。
806デフォルトの名無しさん:2006/03/01(水) 19:44:01
ラクダ本買おうかな・・・
807793:2006/03/01(水) 20:41:59
すいません、ありがとうございます。
配列スライスは
@array1[@array2]
みたいな書き方もできるのですね。
もう一度、スライスについて説明した
項目を読み返してみます
808デフォルトの名無しさん:2006/03/01(水) 21:49:29
perl使うくらいならsmalltalk使う。
ちょっとまともな奴ならperlで組もうとは思わない。
809デフォルトの名無しさん:2006/03/01(水) 22:00:00
えー、smalltalk環境が…。
だったらsmalltalkっぽいRuby使うよ。
810デフォルトの名無しさん:2006/03/01(水) 22:33:05
今ナウなのはhaskellじゃないの?
811デフォルトの名無しさん:2006/03/01(水) 22:37:31
Rubyはもうちょっとレンタル鯖とかで普及してくれればなぁ。
稀にSolarisの仕事とかやるとPerlは入ってるけど、Rubyは入ってないんで萎える。
Perlは結構、どこの環境でも動かせるので気に入ってる。
812デフォルトの名無しさん:2006/03/01(水) 22:42:26
webを参考に、perlを書いているのですが
わからない所があるので質問させてください。
system('netstat');で実行したプロンプトの内容をperlにテキスト形式で取り込んで整形する事は可能でしょうか?
例えば、下記の方法では

$name = system('netstat');

0が返ってきます。
813デフォルトの名無しさん:2006/03/01(水) 22:45:32
シェル端末とPerlの間に、テキストを挟まなきゃできないですかね?
814デフォルトの名無しさん:2006/03/01(水) 22:46:19
>>812
perlopのqx/STRING/の所参照
$name = `netstat`;
815デフォルトの名無しさん:2006/03/01(水) 23:23:22
>>814
マジで頼りになります。有難うございます
816デフォルトの名無しさん:2006/03/02(木) 01:40:02
化合物の記述ファイルであるSDファイルを処理するモジュールとかって
ありますか?CPANとかで見てみたけどよくわからなかったです。
817デフォルトの名無しさん:2006/03/02(木) 01:58:59
>>816
これ?化学は門外漢だから違ってたらごめんね。
http://search.cpan.org/~itub/Chemistry-File-MDLMol-0.20/SDF.pm
818デフォルトの名無しさん:2006/03/02(木) 12:07:25
htonl, htons, ntohl, ntohs に相当する処理ってどう書くの?
819デフォルトの名無しさん:2006/03/02(木) 12:42:11
>>818
sub htonl { unpack("N",pack("L",shift)) }
sub htons { unpack("n",pack("S",shift)) }
sub ntohl { unpack("L",pack("N",shift)) }
sub ntohs { unpack("S",pack("n",shift)) }
820デフォルトの名無しさん:2006/03/02(木) 13:08:40
>>819
サンクス!!
821デフォルトの名無しさん:2006/03/02(木) 14:07:01
>>807
できるっていうか
@a[4..8] とか @a[2, 4, 8] とかができるんだから
@a[@b] ができないわけがない。

@b = (2, 4, 8);
@c = @a[@b];
というのと
@c = @a[2, 4, 8];
で @c に入るものは同じだ。
822デフォルトの名無しさん:2006/03/02(木) 14:49:04
>>821
言いたい事はわかるが、この場合に
「〜とかができるから〜もできないわけがない」は強引すぎる。
823デフォルトの名無しさん:2006/03/02(木) 15:14:43
>>821
むしろ、それなんのAA?の領域まで達しているな
824デフォルトの名無しさん:2006/03/02(木) 15:27:33
PerlのコードでAAって作れそうだね。
825デフォルトの名無しさん:2006/03/02(木) 15:35:48
m(^_^); # regexp
826デフォルトの名無しさん:2006/03/02(木) 15:49:07
827デフォルトの名無しさん:2006/03/02(木) 17:02:44
>>826
DAT落ちしてるけど何て書いてあった?
828デフォルトの名無しさん:2006/03/02(木) 17:16:20
921 デフォルトの名無しさん sage 04/05/21 21:40
○○嫁っていうの、文系DQNみたいでなんかいや
829デフォルトの名無しさん:2006/03/02(木) 17:23:43
空気嫁=ダッチワイフ
m9(^Д^)プギャー
830デフォルトの名無しさん:2006/03/02(木) 18:01:12
(´・ω・)
831デフォルトの名無しさん:2006/03/02(木) 19:08:35
三角比のをラジアン単位じゃない方法で表示する方法ある?
832デフォルトの名無しさん:2006/03/02(木) 19:23:08
>>827
説明しにくいけど、ただの汚いPerlソースが書いてあった。

にくちゃんねるにあるキャッシュ ttp://makimo.to/2ch/pc8_tech/1121/1121804136.html#921
833デフォルトの名無しさん:2006/03/02(木) 19:27:50
>>831
> 三角比のをラジアン単位じゃない方法で表示する方法ある?
はい。
834デフォルトの名無しさん:2006/03/02(木) 19:39:45
>>833
悪いが教えてください
835デフォルトの名無しさん:2006/03/02(木) 19:42:58
>>834
何をだよ?
836デフォルトの名無しさん:2006/03/02(木) 19:44:43
>>833
つりは放置しろ。相手スンナ!
837デフォルトの名無しさん:2006/03/02(木) 20:05:20
>>835
ラジアン単位を数学などで使ったときのsinやcosの値にする方法です。
838デフォルトの名無しさん:2006/03/02(木) 20:39:09
1234のような任意の4桁を
12と34の2桁に分割するにはどのように書けば良いか教えてください。

いったん一桁ずつにバラして、2桁ずつに結合するしか思いつきません。。
839デフォルトの名無しさん:2006/03/02(木) 20:45:54
>>837
もしかして、π≒3.14 → 180 って関数がほしいってことか?
840デフォルトの名無しさん:2006/03/02(木) 21:08:04
>>838
2桁づつに分割するといいよ。
841デフォルトの名無しさん:2006/03/02(木) 21:13:07
>>838
100で割って商と余りにわける
842838:2006/03/02(木) 21:17:29
>>840
split(//, $_);でやってまして。。

>>841
ありがとうございます!
おかげさまで解決しました。
843デフォルトの名無しさん:2006/03/02(木) 21:35:13
(´・ω・)
844デフォルトの名無しさん:2006/03/02(木) 22:08:31
****-****-****-aaaa
この-aaaaの部分だけ取り除きたいときはどうすれば良いですか?
****-は固定じゃなくて、****-****-aaaaだったり、
****-****-****-****-aaaaだったりします。
****には英数字記号が入ります。
845デフォルトの名無しさん:2006/03/02(木) 22:09:06
すみません。aaaaにも英数字記号が入ります。
846デフォルトの名無しさん:2006/03/02(木) 22:13:36
放置な、放置。
847デフォルトの名無しさん:2006/03/02(木) 22:14:04
sleep()
848デフォルトの名無しさん:2006/03/02(木) 22:27:53
$string = '****-****-****-aaaa';
$string =~ s/-....$//;
print $string;
849デフォルトの名無しさん:2006/03/02(木) 22:37:08
$expr = '****-****-****-aaaa';

# マッチングして別変数に保存
my($str) = ($expr =~ /(¥-¥w{4})$/);

# 英数文字とか関係なく必ず末尾の5文字なら
my $str = substr($expr, -5, 5);
850デフォルトの名無しさん:2006/03/02(木) 22:53:58
>>848>>849
ありがとうございます!みなさんから見たら基本中の基本でしょうけど..
まだ勉強中で正規表現をどう書けば良いか分からなくて途方に暮れてました。
感謝感謝です。
851デフォルトの名無しさん:2006/03/02(木) 23:03:56
あ、末尾を取り除きたいのか。ごめんな。末尾だけにしちゃった…。
それなら >>848 で良いや。
852デフォルトの名無しさん:2006/03/02(木) 23:30:37
(;´д`)ハァハァ
853816:2006/03/03(金) 01:50:44
>>817
成る程、SDFの読み書きができそうです。ありがとうございました。
854デフォルトの名無しさん:2006/03/03(金) 02:10:18
>>831
$deg = $rad * 45 / atan2(1, 1);
855デフォルトの名無しさん:2006/03/03(金) 02:59:11
Math::Trig::rad2deg
856デフォルトの名無しさん:2006/03/03(金) 10:30:42
およそ3
857デフォルトの名無しさん:2006/03/03(金) 15:12:59
>>854
>>855
それだとdegreeにしか換算できないじゃん。
858デフォルトの名無しさん:2006/03/03(金) 15:34:01
>>857
元の質問の意味がよくわからんけどな。

> 三角比のをラジアン単位じゃない方法で表示する方法ある?
> ラジアン単位を数学などで使ったときのsinやcosの値にする方法です
859デフォルトの名無しさん:2006/03/03(金) 16:05:06
意味が良くわからない曖昧な質問に、推測で答えていると、
質問者がどんどん堕落して、意味が良くわからない曖昧な質問ばかりになる。
860デフォルトの名無しさん:2006/03/03(金) 17:38:12
> 三角比のをラジアン単位じゃない方法で表示する方法ある?
俺が考えた単位に変換でいいならあるぞ。
sub sankakuhi2orenoougonhi($){
  return ($_[0]) ? 7 : 3 ;
}
一番うつくしいとされる7:3の比を返すのだ。ってこれ比なのか。
861デフォルトの名無しさん:2006/03/03(金) 19:12:38
>>860
確信犯なのか、バカなのか。

print ( 860 ? 'ばか' : '確信犯' ), "\n";
862デフォルトの名無しさん:2006/03/03(金) 19:49:47
sub pai {
 return 'およそ3';
}
863デフォルトの名無しさん:2006/03/03(金) 20:03:22
webprog池
864860:2006/03/04(土) 03:42:27
>>861
それ残念ながらシンタックスエラー。プギャーm9(^Д^)
865ヽ(´ー`)ノ ◆.ogCuANUcE :2006/03/04(土) 04:11:15
>>864
試しにやってごらん。
866デフォルトの名無しさん:2006/03/04(土) 04:33:45
PerlにはDIコンテナってないのかな?
867860:2006/03/04(土) 04:47:53
>>865
>print (...) interpreted as function at test.pl line 1.
>Useless use of a constant in void context at test.pl line 1.
>ばか

おんや。警告がでてるだけか。最後を見逃してました。こりゃ失礼。
868デフォルトの名無しさん:2006/03/04(土) 10:32:26
でもま、
print +( 860 ? 'ばか' : '確信犯' ), "\n";
のようにした方がいいのは確かだ。
んなコード誇られてもねぇ。
869デフォルトの名無しさん:2006/03/04(土) 12:00:05
(´・ω・)
870デフォルトの名無しさん:2006/03/04(土) 12:14:19
>>866
ある。
871デフォルトの名無しさん:2006/03/04(土) 12:19:11
CPANのRecentを見たら

WWW::2ch - scraping of a popular bbs of Japan.
http://search.cpan.org/~yappo/WWW-2ch/

というのがあった。
872デフォルトの名無しさん:2006/03/04(土) 12:49:38
(´・ω・)
873デフォルトの名無しさん:2006/03/04(土) 17:27:23
>>WWW::2ch
これは危険なモジュールですね
874デフォルトの名無しさん:2006/03/04(土) 17:30:59
[\w\d]+って\w+と同じじゃね?
875デフォルトの名無しさん:2006/03/04(土) 17:38:50
いや大分遅いと思う
876デフォルトの名無しさん:2006/03/04(土) 17:57:08
>>868
いやここは、CPANのモジュールを使った方がいいと思う
877デフォルトの名無しさん:2006/03/04(土) 18:41:05
>>875
なかなか良いレスだと思った。
878デフォルトの名無しさん:2006/03/04(土) 19:17:00
>>877
>>875 じゃないけど、perl -Dr -e '/REGEX/' でコンパイル結果を見て
速度を類推するといいよ。
879デフォルトの名無しさん:2006/03/04(土) 19:49:09
% perl -Dr -e '/REGEX/'
Recompile perl with -DDEBUGGING to use -D switch (did you mean -d ?)
880デフォルトの名無しさん:2006/03/05(日) 00:07:13
>>879 うわぁ…。なにその糞環境。
881デフォルトの名無しさん:2006/03/05(日) 00:38:27
>>879
俺も同じだ
素のCygwin
882酩酊 ◆TWARamEjuA :2006/03/05(日) 02:14:09 BE:2287837-#
林檎機でも同じだなぁ。。
$ perl -v

This is perl, v5.8.6 built for darwin-thread-multi-2level
(with 2 registered patches, see perl -V for more detail)
883デフォルトの名無しさん:2006/03/05(日) 06:22:45
% perl -Dr -e '/REGEX/'
Recompile perl with -DDEBUGGING to use -D switch
884デフォルトの名無しさん:2006/03/05(日) 12:50:54
URLに日本語を表示させないようにしたいのですが
URLの%8E%BF%96%E2という部分の文字列をデコードすると質問という文字列になるのはわかっているんですが
反対にPerlで質問と言う文字列をを%8E%BF%96%E2にするにはどうすればいいんでしょうか?
885デフォルトの名無しさん:2006/03/05(日) 12:52:01
URI::Escape
886デフォルトの名無しさん:2006/03/05(日) 13:18:40
sub tohex { join("",map(sprintf("%%%02X", $_), unpack("C*", $_[0]))); }
887デフォルトの名無しさん:2006/03/05(日) 13:30:17
PerlでDIコンテナが無いみたいなので
自作することにしました。
888デフォルトの名無しさん:2006/03/05(日) 14:05:05
それは自分じゃ見つけらんなかったから教えてくれってことでOK?
889デフォルトの名無しさん:2006/03/05(日) 15:11:41
CPANPLUSって何なの?
perldoc読んだけどさっぱり使い道がわからん。
普通に-MCPAN -eshellとやるのとどう違うの?
890デフォルトの名無しさん:2006/03/05(日) 15:57:19
Perlみたいな言語でDIとか聞くとゲンナリするわ
本当にそれをする価値があると考えているのだろうか
891デフォルトの名無しさん:2006/03/05(日) 16:56:07
まあ確かに必要ないわな。
んーと、Javaやってる人が移行する時に便利、とか?
(移行するかどうかはともかく)
892デフォルトの名無しさん:2006/03/05(日) 16:58:55
必要なくはないでしょ。
893デフォルトの名無しさん:2006/03/05(日) 19:15:03
ダイコンとモジュールってどうちがうの?Tkみたいなもんじゃなくて?
894デフォルトの名無しさん:2006/03/05(日) 19:18:39
DIコンテナなんて作らんでもevalでええやん
895デフォルトの名無しさん:2006/03/05(日) 19:37:39
>>893-894 お前らがまともに DI コンテナを使った開発をしたことがないことは分かった。
896デフォルトの名無しさん:2006/03/05(日) 20:36:15
>>895
知ったかだけで、教える能力がないことはわかった。
897デフォルトの名無しさん:2006/03/05(日) 22:28:58
DIコンテナなんて聞いた事もねーよw
898デフォルトの名無しさん:2006/03/05(日) 22:37:43
DoudemoIiコンテナ
899デフォルトの名無しさん:2006/03/06(月) 00:57:03
>>878-883

perl -Mre=debug -e  '/regex/'

でどないだ?
'
900デフォルトの名無しさん:2006/03/06(月) 01:02:58
>>899
Freeing REx: `","'
となるけど・・・
by v5.8.7 built for MSWin32-x86-multi-thread
901デフォルトの名無しさん:2006/03/06(月) 02:09:59
DIとか言ってる奴は流行の言葉を使いたいだけの池沼
1年後には違う略語を連呼しているに違いない
902デフォルトの名無しさん:2006/03/06(月) 04:35:37
そういや、DIだのEIだの連呼してたのが、何時の間にかCLIだのSTIだの連呼していた事が・・・。

>>900
それだけしか表示されない場合用のヒント。
dir | perl -ne 'print'

dir | perl -ne "print"
の違いを確認。
903デフォルトの名無しさん:2006/03/06(月) 05:37:26
>>902
おお、こんな夜中にありがとう。
見れたけど見方が分からんかったorz
904デフォルトの名無しさん:2006/03/06(月) 08:57:20
>>902
うーん、MS-DOSはようわからん。
905デフォルトの名無しさん:2006/03/06(月) 09:53:25
% perl -Mre=debug -e '/regex/'
Can't load '/usr/libdata/perl/5.00503/mach/auto/re/re.so' for module re: /usr/libdata/perl/5.00503/mach/auto/re/re.so: Undefined symbol "my_regcomp" at /usr/libdata/perl/5.00503/DynaLoader.pm line 169.

at -e line 0
BEGIN failed--compilation aborted.
906デフォルトの名無しさん:2006/03/06(月) 10:32:17
というわけで、 >>878 のは滅多に使えない無駄ワザということで FA ?
907デフォルトの名無しさん:2006/03/06(月) 10:36:51
>>895は妥当な読みだが、>>896は悔しがってるだけだな。
察しの悪い人でも、このレスに対する反応を見ればそれでわかると思うw
908デフォルトの名無しさん:2006/03/06(月) 10:40:03
895=907
知らない=悔しいですか?へぇ〜へぇ〜へぇ〜
知らないことを認める人間になりましょうね。
909デフォルトの名無しさん:2006/03/06(月) 10:48:32
>>907
確かにわかりやすいです
910デフォルトの名無しさん:2006/03/06(月) 11:01:58
-bash-3.00$ perl -Dr -e '/regex/'
Compiling REx `regex'
size 4 Got 36 bytes for offset annotations.
(ry
繋いでたCentOSの鯖で何気なくやってみたら動いた。
でも出てくる結果はuse re 'debug'と変わらんね。
ちなみにActivePerlではreプラグマのみ動作
911デフォルトの名無しさん:2006/03/06(月) 11:57:50
なんでこう無駄な煽り合いが生まれるのかね
誰か研究してくれないかね
912デフォルトの名無しさん:2006/03/06(月) 12:33:48
中途半端に知能を持っているからでしょう
913デフォルトの名無しさん:2006/03/06(月) 12:40:47
新たな煽りが出現です!!
914デフォルトの名無しさん:2006/03/06(月) 12:41:35
>>905
俺と似たようなバージョン使ってる奴キターwww

>perl -v

This is perl, version 5.005_02 built for MSWin32-x86-object
915デフォルトの名無しさん:2006/03/06(月) 12:41:43
煽りって青海苔に似てるよね。
916デフォルトの名無しさん:2006/03/06(月) 12:45:26
火へんに扇っていう字がつくづく絶妙だと思う。
917デフォルトの名無しさん:2006/03/06(月) 12:56:49
>>915-916
煽ってる暇があったらもっと生産的な事に時間を使ったほうがよいのではないだろうか。
918デフォルトの名無しさん:2006/03/06(月) 13:53:00
アモーレ!
919デフォルトの名無しさん:2006/03/06(月) 15:46:12
それもそうだな。
さてオナテク板でも覗いて来るか。
920デフォルトの名無しさん:2006/03/06(月) 16:40:41
>>917
煽り=遊び
遊びに生産性は無駄
921デフォルトの名無しさん:2006/03/06(月) 16:42:23
>>920
お前とお前の周りが生産性にあまりに無関心なだけ
922デフォルトの名無しさん:2006/03/06(月) 18:29:20
意味不明な返しだな
とりあえず急いで反応したんだろうね
923デフォルトの名無しさん:2006/03/06(月) 18:34:10
遊び場 (2ちゃんねる) で生産性を追求する >>921 に幸あれ!
924デフォルトの名無しさん:2006/03/06(月) 18:47:50
生産性とか言いたいならPerlはよした方がいいと思う
925デフォルトの名無しさん:2006/03/06(月) 19:20:42
コマンドライン中心だからPerlが最適
926デフォルトの名無しさん:2006/03/06(月) 20:04:53
Perlの凄惨性について
927917:2006/03/06(月) 20:37:55
>>924
まぢですか。Perlを信じて4年間勉強してきた俺はどうすればいいんですか?
928デフォルトの名無しさん:2006/03/06(月) 21:01:04
ギターでも弾いてれば?
929デフォルトの名無しさん:2006/03/06(月) 21:19:46
>>927
安心しろ。15年勉強している俺がここにいる。
930デフォルトの名無しさん:2006/03/06(月) 22:15:26
Perl って、Practical って言葉の通り、とくに勉強しなくても使えるところが
いいとこだと思ってるんだが・・・。勉強する価値はあるけどね
931デフォルトの名無しさん:2006/03/06(月) 22:47:46
>>927
心配するな。俺の職場では大活躍だ。
perlがなかったら、仕事中に2chを見る暇がなくなる。
932デフォルトの名無しさん:2006/03/07(火) 00:33:50
>>930
> Perl って、Practical って言葉の通り、とくに勉強しなくても使えるところが
> いいとこだと思ってるんだが・・・。勉強する価値はあるけどね

Perlがもともとターゲットとしていた人々は、特に勉強しなくても使えてる。

ただ現在になって、当時は想像することすらできなかったほど知的レベルが
低い連中もプログラミング言語に手を出すようになってきているだけ。

933デフォルトの名無しさん:2006/03/07(火) 10:19:18
mkdir関数でフォルダを作成する場合のフォルダ名の最大文字数を教えてください
934デフォルトの名無しさん:2006/03/07(火) 10:30:35
OS によって違う。
935デフォルトの名無しさん:2006/03/07(火) 13:48:08
936デフォルトの名無しさん:2006/03/07(火) 14:00:08
>>935
設定終わってなくてミラー一覧を取得するところでこけるって事?
ttp://ftp.kddilabs.jp/CPAN/MIRRORED.BY
この辺りのミラーからMIRRORED.BYを拾ってきて
.cpan/sources/MIRRORED.BY
に配置すれば動いたはず

設定が終わってるならo conf urllistを適当に設定汁
937デフォルトの名無しさん:2006/03/07(火) 17:37:02
>>932
PerlとCどっちも勉強したけどPerlの方が難しいと思った
938デフォルトの名無しさん:2006/03/07(火) 17:42:43
難しさというか、使いやすさ・手軽さかなあ
939デフォルトの名無しさん:2006/03/07(火) 17:48:39
C言語は難しすぎてわかんないです(><)
エラーが起きても原因が全然見えてこない
940デフォルトの名無しさん:2006/03/07(火) 17:52:05
Perlの方がむずかしいでしょ。言語仕様に正規表現がある時点で。
Cのほうがわかりやすいとおもう。開発すんのだりぃけど。
941デフォルトの名無しさん:2006/03/07(火) 17:56:09
どっちから勉強したかとか、それ以前に何か学習したかにもよるだろうな。
942デフォルトの名無しさん:2006/03/07(火) 18:43:14
最初、Cやったけどサッパリ分からなくてPerlに行った。
OOPの学習の為にJavaをかじり、Perlに戻った。
その後、もう一度Cをやり直してPerlもどきを作り、Perlの凄さが分かった。
けど同時にPerlの宜しくない所もたくさん知ってしまい、、Rubyへ。

943デフォルトの名無しさん:2006/03/07(火) 19:01:44
Perl が嫌で Ruby を作った割に、なんであんなに出来が悪いんだろう
944デフォルトの名無しさん:2006/03/07(火) 19:09:29
perl6 ってホントに出るの?
945デフォルトの名無しさん:2006/03/07(火) 19:15:05
>>944
> perl6 ってホントに出るの?

それはあなたの力次第。
946デフォルトの名無しさん:2006/03/07(火) 19:21:32
ラクダ本片手に、Perlで実装したCGI作って、
Live Doorに納品した
半金半手の手形もらって、その時は
まじびっくりした、でもその代金はなんとか、市中の金融やに回らずに
回収できた。
947デフォルトの名無しさん:2006/03/07(火) 19:27:09
ラクダ本片手に、Perlで実装したCGI作って〜♪
Live Doorに納品した〜♪
半金半手の手形もらって、その時は〜♪
まじびっくりした、でもその代金はなんとか、市中の金融やに回らずに〜♪
回収できた〜♪
948デフォルトの名無しさん:2006/03/07(火) 20:06:37
Perlって仕事じゃあまり使われないよな
949デフォルトの名無しさん:2006/03/07(火) 20:28:01
そんなことないよ、今でも使ってるとこかなりある。
大手でも部分的には使ってたりするし。
副業でサービスやるのにもお手軽でいい感じ。
950デフォルトの名無しさん:2006/03/07(火) 20:39:08
perlを仕事で使ってる所は、マジで使ってる。無いとやってけないくらい。
リプレースできるような言語も無いし。
ネットワーク系が多いかも。
951デフォルトの名無しさん:2006/03/07(火) 20:46:35
事務では知らんけど個人的に文書整形するときかなり便利よ。
Windows環境でコンパイラが欲しいぐらい。なぜかperlcc云々はエラーでできないからあきらめてるが・・・
952デフォルトの名無しさん:2006/03/07(火) 20:51:57
mixiはPerl一色だ罠
953デフォルトの名無しさん:2006/03/07(火) 20:54:18
マイミクが少ない罠
954デフォルトの名無しさん:2006/03/07(火) 20:59:59
でも何でPerlにDIモジュールがないんだろうね。
955デフォルトの名無しさん:2006/03/07(火) 21:10:50

知るかヴォケ
必要ならお前が作れ
さもなければ、必要とされていない
それだけのことだ
956デフォルトの名無しさん:2006/03/07(火) 21:24:43
すいません流れ読まないで質問していいですか。

1) Perl で ls コマンドでも作ってみるか
2) ディレクトリ一覧を取得して stat()
3) なんか色々あるから Class::Struct で構造体に入れてみた
4) 各ファイルの構造体へのリファレンスを配列に入れてみた  <---- いまここ
5) これどうやってソートすんだ?

配列の要素の構造体のメンバで配列をソート? ができないです。
なんか根本的に間違ってますカネ?
957デフォルトの名無しさん:2006/03/07(火) 21:31:44
なんでまたperlで?
958デフォルトの名無しさん:2006/03/07(火) 21:32:22
漢だから。
959デフォルトの名無しさん:2006/03/07(火) 21:33:58
(´・ω・)
960デフォルトの名無しさん:2006/03/07(火) 21:40:53
lsコマンドをそのまま使うというのは選択肢に無かったのか
961956:2006/03/07(火) 21:47:03
いや話せば長いんですが、 Windows をコマンドライン主体で使ってる派なんですよ。
でファイルを開くときは「 start ファイル名」とかやるんですけど、日本語の長い
ファイル名とかだと面倒じゃないですか。

それで dir の結果に番号が付いてて、続けてその番号を入れるとファイルが
開ける、みたいにしたら便利じゃね? と。
で番号 -> ファイル実行は出来たんで超便利なんですが、ソートできないから超不便。
962デフォルトの名無しさん:2006/03/07(火) 21:53:18
要するにPerlでファイラーを作りたいということだな。
963デフォルトの名無しさん:2006/03/07(火) 21:53:20
>>961
つ [タブ完成]
964956:2006/03/07(火) 22:03:04
>>963
いや話せばもっと長いんですが、コマンドラインって cmd.exe 直じゃなくて
C で書いたラッパーを使ってるんですよ。これも超便利なんだけど、ただ
タブ完成機能はないんです。やりかたわかんないから。

それで ls -> 番号 -> 実行機能もそのラッパーで実装しようと思ってたんですが、
忙しくてほったらかしてる内に C 忘れて代わりに Perl への愛に目覚めたんで、
これは Perl で作るか、と思ったとですよ。
もう俺の発想が根本的に間違ってるとかそういう話はいいから誰か教えてください。
965デフォルトの名無しさん:2006/03/07(火) 22:09:46
sort{}をなめるな
966デフォルトの名無しさん:2006/03/07(火) 22:13:18
@sorted = sort { $a->{name} cmp $b->{name} @file_list;
@sorted = sort { $a->{size} <=> $b->{size} @file_list;
うちのDOSの中の人はこんな感じ
967デフォルトの名無しさん:2006/03/07(火) 22:14:49
@sorted = sort { $a->{name} cmp $b->{name} } @file_list;
@sorted = sort { $a->{size} <=> $b->{size} } @file_list;
隣のDOSの中の人はこんな感じ
968デフォルトの名無しさん:2006/03/07(火) 22:19:35
>>954
> でも何でPerlにDIモジュールがないんだろうね。
あるよ。
969酩酊 ◆TWARamEjuA :2006/03/07(火) 22:24:08 BE:1633853-#
(´-`).。oO(ぐだぐだと講釈を書き並べて最後には「教えろ」かぁ。。。
 で、またぐたぐたになってCに戻って〜、、、ループなんだろうなぁ)
970デフォルトの名無しさん:2006/03/07(火) 22:25:11
>>956
> 1) Perl で ls コマンドでも作ってみるか
> 2) ディレクトリ一覧を取得して stat()
> 3) なんか色々あるから Class::Struct で構造体に入れてみた

バカじゃね?

> 4) 各ファイルの構造体へのリファレンスを配列に入れてみた  <---- いまここ
> 5) これどうやってソートすんだ?

つ[シュワルツ変換]
971デフォルトの名無しさん:2006/03/07(火) 22:28:44
>>968
無いよ。ググっても出てこないんだから間違いない。
972デフォルトの名無しさん:2006/03/07(火) 22:29:54
>>971
ばか過ぎる……
973956:2006/03/07(火) 22:36:58
>>965-967
うわ、ほんとに sort でできた。すげー。
ありがとうございます。ちょっと妹に自慢してきます。
974デフォルトの名無しさん:2006/03/07(火) 22:39:01
妹が居るなら居ると最初に言えばみんなもっと丁寧に教えただろうに。
975デフォルトの名無しさん:2006/03/07(火) 22:39:58
   ∩___∩
   | ノ      ヽ/⌒)
  /⌒) (゚)   (゚) | .|
 / /   ( _●_)  ミ/  このスレレベル低下してるよあびゃばばば
.(  ヽ  |∪|  /
 \    ヽノ /
  /      /
 |   _つ  /
 |  /UJ\ \
 | /     )  )
 ∪     (  \
        \_)
976デフォルトの名無しさん:2006/03/07(火) 22:50:20
>>966
> @sorted = sort { $a->{name} cmp $b->{name} @file_list;
> @sorted = sort { $a->{size} <=> $b->{size} @file_list;

これは、無駄無駄無駄無駄なのでやってはいけない方法の筆頭。
977デフォルトの名無しさん:2006/03/07(火) 22:54:32
まあ普通こんな感じだろうなあ…

@sorted = sort {
 $a->{name} cmp $b->{name}
 || $a->{size} <=> $b->{size}
} @file_list;
978デフォルトの名無しさん:2006/03/07(火) 22:59:47
>>972
馬鹿はお前。
試しにCPANで「DI」で検索してみろよ。
雑魚が。
979デフォルトの名無しさん:2006/03/07(火) 23:03:30
「DI」なんてキチガイ厨房専用略語で検索するのは
頭に虫でも湧いてるからなのか
http://search.cpan.org/search?query=Dependency+Injection&mode=all
980デフォルトの名無しさん:2006/03/07(火) 23:04:49
つ「Java脳の恐怖」
981デフォルトの名無しさん:2006/03/07(火) 23:17:58
>>979
DIがもともとIOCと呼ばれていたのは知ってたし、
IOCモジュールには行き着いていた。
だが、DIモジュールがあると言い張るのであえて言わず
カマかけてたんだがな。
とりあえず、お前は俺の役に立ってくれたよ。ご苦労様w
982デフォルトの名無しさん:2006/03/07(火) 23:22:04
>>981
泣くな
983デフォルトの名無しさん:2006/03/07(火) 23:24:46
次スレは?
984デフォルトの名無しさん:2006/03/07(火) 23:31:38
>>982
泣いてねーよ。むしろ喜んでるよ。
馬鹿は煽るとすぐ答えを出してくれる。
ちょろいもんよ。
985デフォルトの名無しさん:2006/03/07(火) 23:39:26
>>984

26 番組の途中ですが名無しです 2006/03/02(木) 20:17:21.48 ID:rmCOuDKh0
高校の頃にクラスのDQN共が良く俺にやきそばパン買い行ってくださいと頼んでたよ
しかもこいつら頭わりーから月に5千円渡すと何も危害加えてこなくなるし敬語で話しかけてくるしw
マジで手なずけるのちょろかったなぁ高校時代はww
986デフォルトの名無しさん:2006/03/07(火) 23:42:57
専門板の煽りは異常
987デフォルトの名無しさん:2006/03/07(火) 23:44:54
>>983
よし、漏れに任せろ
# これで三連だが
988デフォルトの名無しさん:2006/03/07(火) 23:58:52
my $$self{next} = new BBS2ch::Thread 'Perlについての質問箱 23箱目';

次スレ
http://pc8.2ch.net/test/read.cgi/tech/1141742901/
989デフォルトの名無しさん:2006/03/08(水) 00:18:08
>>988
>>1の日付がそのままだけど乙
990デフォルトの名無しさん:2006/03/08(水) 00:24:44
>>989
しまった…スマソ
ふと気づいたが誘導に余計なmy付いてるな…
なんで三回使って気づかなかったんだろorz
# 初めmy $nextとやって$$self{next}に書き換えた記憶が
991デフォルトの名無しさん:2006/03/08(水) 01:10:40
俺は英語が読めません!
992デフォルトの名無しさん:2006/03/08(水) 01:27:20
私の名前はジョンです!
993デフォルトの名無しさん:2006/03/08(水) 02:10:34
>>991
アメリカまでの貨物船に潜んでアメリカまで行けばいいと思うよ。
994994!:2006/03/08(水) 02:13:11
>>993
いや、普通に飛行機でいけよ。
995デフォルトの名無しさん:2006/03/08(水) 03:21:15
すいません。以下のプログラムで@{+shift}のように、
なぜ、shiftに+記号をつけられるの分かりません。
perlではリファレスンの値に+をつけると、参照先を
変えたり出来るんでしょうか?

{ package Barn;
sub new { bless [], shift }
sub add { push @{+shift}, shift }
sub contents { @{+shift} }
sub DESTROY {
my $self = shift;
print "$self is being destroyed...\n";
for ($self->contents) {
print " ", $_->name, " goes homeless.\n";
}
}
}
996デフォルトの名無しさん:2006/03/08(水) 03:35:15
 
997デフォルトの名無しさん:2006/03/08(水) 03:46:03
>>995
ちょっとperldocからshiftの部分が関数呼び出しとみなされないと
書いてあるところを一緒に示せなくて申し訳ないけれど…

ttp://perldoc.jp/docs/perl/5.6.1/perlop.pod
のSymbolic Unary Operators
> 単項演算子の "+" は、たとえ文字列に対して用いられた場合にも、何もしません。
> 関数名に続けて括弧付きの式を書く場合に、関数の引数リストと解釈されないようにするために用いることができます。

この場合は@{shift}と書くと@shiftだと解釈されるからそれを防ぐためにつけているわけ。
@{shift()}と書いても動くよ
998デフォルトの名無しさん:2006/03/08(水) 04:14:59
>>997
せっかく教えてくれたのに、よく分からなくて、本当にすいません。
@{shift}だと書くと、何で@shiftと解釈されちゃうんでしょうか?
999デフォルトの名無しさん:2006/03/08(水) 04:27:26
>>998
よくは知らないけれども、
${}や@{}や%{}でくくった最初の文字列が[_a-zA-Z]のどれかだと変数名とみなすのでしょう。
${aaa}だと$aaa。@{aaa}なら@aaa。%{aaa}なら%aaa。
${}の中身の最初に+を付けると、${}の中身は「式」とみなして、えーと、えーと、そんな感じ。

↓続きは次スレでどぞ
http://pc8.2ch.net/test/read.cgi/tech/1141742901/
  _ミ`ー‐、
  `⌒丶、'ー-、_       +             十
     ̄\―ヽ._ 二_‐-
       \   \   ̄ ‐-       ̄二二_ ―_,r'⌒ヽー、
        ̄\ ̄ \‐-     ╋__..ニ -―― ´ ̄ __... -―一┘
  +  ニニ ー--\   ⌒Y´ ̄ `丶     __,. -‐二´  ̄ ―     +
           ̄\    !   =,. -‐ 二_
          _   ヽ.._     ノ
           ̄   〉   ー- ノ三二   +
    十       ̄―/  ,'   /二  ̄ _
        ニー/⌒∨  /  二/ /⌒'l    ̄
      _   / l /二    /  ,イ  |二_
        / /| / .ノ 〈. ′ / | _|__     ╋
      ̄_/ _/_ヽ_,   .__,/  |  |_
     彡ニ ,ノ __(     )_   〈__ 三ミ      +
   +  `⌒   ̄∨ ̄∨―       ⌒´

          それがム板ヌクモリティ
       http://pc8.2ch.net/tech/
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。