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

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

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん2006/03/07(火) 23:48:21
"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.8
● 2006/01/29現在の開発版: 5.9.3

リンク集は>>2-3
過去スレは>>4-5
0002デフォルトの名無しさん2006/03/07(火) 23:49:12
[プログラミング自体の経験が無い奴はまずココを読め]
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.8/
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/
0003デフォルトの名無しさん2006/03/07(火) 23:50:07
[モジュール]
CPAN.com: http://search.cpan.org/
河馬屋二千年堂: http://homepage3.nifty.com/hippo2000/

[テクニック]
Perlメモ: http://www.din.or.jp/~ohzaki/perl.htm
Perlのページ: http://homepage1.nifty.com/nomenclator/perl/
Perlの小技: http://homepage3.nifty.com/hippo2000/perltips/index.htm

[Perl5.8Unicodeメモ]
http://www.pure.ne.jp/~learner/program/Perl_unicode.html
http://www.namazu.org/~tsuchiya/perl/perl-5.8.html
http://www.lr.pi.titech.ac.jp/~abekawa/perl/perl_unicode.html
0004デフォルトの名無しさん2006/03/07(火) 23:50:51
[過去ログ]
1 http://pc.2ch.net/tech/kako/1017/10177/1017736187.html
2 http://pc3.2ch.net/tech/kako/1033/10336/1033688230.html
3 http://pc2.2ch.net/tech/kako/1041/10412/1041205885.html
4 http://pc2.2ch.net/tech/kako/1048/10485/1048519394.html
5 http://pc5.2ch.net/tech/kako/1053/10530/1053053082.html
6 http://pc5.2ch.net/tech/kako/1060/10606/1060689008.html
7 http://pc2.2ch.net/test/read.cgi/tech/1068051036/
8 http://pc2.2ch.net/test/read.cgi/tech/1074151549/
9 http://pc5.2ch.net/test/read.cgi/tech/1079114157/
0005デフォルトの名無しさん2006/03/07(火) 23:51:58
10 http://pc5.2ch.net/test/read.cgi/tech/1085564875/
11 http://pc5.2ch.net/test/read.cgi/tech/1090889189/
12 http://pc5.2ch.net/test/read.cgi/tech/1094579428/
13 http://pc5.2ch.net/test/read.cgi/tech/1097851764/
14 http://pc5.2ch.net/test/read.cgi/tech/1101649274/
15 http://pc5.2ch.net/test/read.cgi/tech/1105953092/
16 http://pc8.2ch.net/test/read.cgi/tech/1111034732/
17 http://pc8.2ch.net/test/read.cgi/tech/1117870308/
18 http://pc8.2ch.net/test/read.cgi/tech/1121804136/
19 http://pc8.2ch.net/test/read.cgi/tech/1126977805/
20 http://pc8.2ch.net/test/read.cgi/tech/1131286411/
21 http://pc8.2ch.net/test/read.cgi/tech/1134327348/
22 http://pc8.2ch.net/test/read.cgi/tech/1138519327/
0006デフォルトの名無しさん2006/03/07(火) 23:59:36
乙
0007デフォルトの名無しさん2006/03/08(水) 00:11:28
>>1
3連乙
0008デフォルトの名無しさん2006/03/08(水) 12:08:19
実用perlプログラミング第2版はどうしてcbook24では発刊予定としてリストにあるのに
オライリーでは何も情報がないのですか?
0009デフォルトの名無しさん2006/03/08(水) 12:19:36
>>8
あるけど?
http://www.oreilly.co.jp/catalog/soon.html
0010デフォルトの名無しさん2006/03/08(水) 13:26:40
>>9 ありがとうございました。
firefox1.5.0.1でそのページを見ていたのですが、なぜか表示されないんですよね。
近刊書籍の部分だけ・・・
IEで見たらちゃんと表示されました。いったいなぜなんだー
両方のブラウザでページのソースみてみたら、
firefoxの方では、近刊書籍のリストの部分がごっそり欠如していました。
広告削除拡張入れているわけでもないので、欠如する理由がわからない。
なんだよオライリーはIEびいきかよ
0011デフォルトの名無しさん2006/03/08(水) 14:11:43
> 実用Perlプログラミング 第2版 4-87311-280-X\3,360 2006年03月

相変わらずオライリー高いなあ……と思ったら、
第1版 4500円じゃん?!
0012デフォルトの名無しさん2006/03/08(水) 14:14:14
>>10
親分格の Mozilla Suite 1.7.12 では正常。
0013デフォルトの名無しさん2006/03/08(水) 14:20:48
ここだけの話、うちの Firefox 1.5.0.1 では正常に表示されているわけだが。
0014デフォルトの名無しさん2006/03/08(水) 14:51:44
実用perlプログラミングって、難しそう
もとの本がAdvaced Perlとかいう本らしいし
0015デフォルトの名無しさん2006/03/08(水) 17:39:04
>>14
なに弱音を吐いてるんだッ!!
この本は君のようなAdvanced Perlerのために書かれた
本じゃないかッ!!!
0016デフォルトの名無しさん2006/03/08(水) 17:49:37
>>15
ティム・オライリー乙
0017安西先生2006/03/08(水) 18:43:13
>>14
諦めたらそこで試合終了だよ
                  ,.‐- 、
                  廴ミノ
                 ///¨' 、
                 y':;:;:;:/⌒i!
                �J:;:;:;:;};:;:/;},
      ;il||||li'       t`'---‐';:;:;:l
     ,.r'"''、,┘        7;:;:;:;:;:;:;:;「
    ノ4 (⌒i        .}:;:;:;:;:;:;;/
   /..,__彡{, |         `i:;:;:;:;:;}
   (  .ミi!} l、         .」:;:;:丿
  クュ二二`Lっ)        `==='
0018三井クン2006/03/08(水) 18:50:47

              ,.‐- 、
              廴ミノ     �J  ブーン
        ⊂二二///¨' 二二二つ
             y':;:;:;:;:;::;;;}
            (:;:;:;:;;:;:;:;::;;},
            t`'---‐';:;:;:l
           (´ .___ノ
            \\ \\  
             レ'   \\  三
                   レ' 
        ;il||||li'   ブーン
 ⊂二二二'"''、,┘二二⊃
     ノ4  /
    /..,__彡/  
    ( ヽノ  
    ノ>ノ 
三  レレ
0019デフォルトの名無しさん2006/03/08(水) 18:52:43
既に終わった人生という試合はどうすればいいですか?
0020デフォルトの名無しさん2006/03/08(水) 19:13:01
>>19
unlink
0021デフォルトの名無しさん2006/03/08(水) 20:51:28
>>19
再起動
0022デフォルトの名無しさん2006/03/08(水) 21:14:53
open(FH,"<./data.log");
flock(FH,1);
@d=<FH>;
close(FH);
flock(FH,8);
foreach $data (@d){
   ($q,$a)=split(/=/,$data);
   printf("問題:$q\n解答例:$a");
}
0023デフォルトの名無しさん2006/03/08(水) 21:34:29
foreach (@d){
   /=/,
   printf ("問題:%s\n解答例:%s\n", $`, $');
}
printfの使いかた違うし。
0024デフォルトの名無しさん2006/03/08(水) 21:35:03
×/=/, ○/=/;
0025222006/03/08(水) 21:54:59
ぐおお
Cが入った
0026デフォルトの名無しさん2006/03/08(水) 21:58:11
>>11
安くなったのは多分、内容が入れ替わって本自体が薄くなったから。
洋書置いてる本屋なら Advanced Perl 2nd Edition 売ってるよ。
0027デフォルトの名無しさん2006/03/08(水) 22:28:16
>>25
または
print "問題:$q\n解答例:$a\n";
か、律儀に
print '問題:', $q, "\n", '解答例:', $a, "\n";
0028デフォルトの名無しさん2006/03/08(水) 23:10:41
>>26
どの辺が入れ替わったの?
0029デフォルトの名無しさん2006/03/08(水) 23:29:45
>>28
ほとんど全部(マジで)…。
0030デフォルトの名無しさん2006/03/08(水) 23:35:48
実用 Perl プログラミング (1st Edition)
ttp://www.oreilly.co.jp/books/4900900826/toc.html

Advanced Perl Programming, 2nd Edition
ttp://www.oreilly.com/catalog/advperl2/toc.html

この違いを見よ(笑)
0031デフォルトの名無しさん2006/03/08(水) 23:40:57
>>30
完全に別物だね。
第1巻、第2巻という風にしてもよさそうなもんなのに。
0032デフォルトの名無しさん2006/03/09(木) 00:18:59
某サイトで'c:\tools\perlmail\msg\alert.txt'の中に送りたいメッセージを書いとけば
送信できるYO!とあったのですが、やってみてもどうしてもメールの送信すらできません。
これはどのようにコードを改良すればできるのでしょうか?
use Net::SMTP;
my $from_address = 'sender'.'@'.'provider.com';
my $sender_name = "Any Name";
my $to_address = 'recipient'.'@'.'destination.com';
my $subject = "nurupo";
my $message = "";
my $filename = 'c:\tools\perlmail\msg\alert.txt';
open(INFILE, $filename);
my $mail_server = "outgoing.verizon.net";
$smtp = Net::SMTP->new($mail_server, Debug=>1);
die "Couldn not connect to server" unless $smtp;
# Authenticate the user
$smtp->auth ('sender', 'password');
# Prepare for sending
$smtp->mail($from_address ); # use the sender address here
$smtp->to($to_address); # recipient address
$smtp->data(); # Start the mail
$smtp->datasend("To: $to_address\n");
$smtp->datasend("From: $from_address\n");
$smtp->datasend("Subject: $subject\n");
$smtp->datasend("\n");
while () {
chop;
$message = "$_\n";
$smtp->datasend($message);
}
# Terminate
$smtp->dataend(); # Finish sending the mail
$smtp->quit; # Close the SMTP connection
0033デフォルトの名無しさん2006/03/09(木) 00:21:12
つうか著者からして違うのもんなぁー
でも 2nd Edition も有用(というか現代的)なので買ってそんはしないよ
Perl Best Practice とセットで買え
0034デフォルトの名無しさん2006/03/09(木) 00:24:06
例示に実在するドメインを使う香具師に何も教えたくない。
0035デフォルトの名無しさん2006/03/09(木) 00:31:54
>>34
元のファイルをそのままコピーしたもので。。。スマソ
0036デフォルトの名無しさん2006/03/09(木) 00:33:00
undefについて教えてください。
undef $scalar;
とすれば、undef値がスカラー変数に入ると思いますが、
undef @array;
や
undef %hash;
とやるとすべての要素にundef値が入るってことなのでしょうか?
それともメモリ開放ですか?
0037デフォルトの名無しさん2006/03/09(木) 00:39:01
>>36
解放です
0038デフォルトの名無しさん2006/03/09(木) 00:41:17
un defined のことです。
0039デフォルトの名無しさん2006/03/09(木) 00:43:05
補足
perlは未定義値を入れるということはできないので。
Rubyのnilみたいな
0040362006/03/09(木) 00:43:58
ありがとうございます。
じゃあスカラー変数に対するときだけ、undef値代入ってことですね。
0041デフォルトの名無しさん2006/03/09(木) 00:44:54
undef() は undef値を返すから、それを左辺に代入する事はできるぞ
0042デフォルトの名無しさん2006/03/09(木) 00:54:02
1かundefかって話で、$hoge eq undefできないってことでは?
身近なのでJavaScriptの if (huga == false) {}みたいな
違うか。
0043322006/03/09(木) 09:40:28
すみませんが、どなたかよろしくお願いします。
0044デフォルトの名無しさん2006/03/09(木) 10:18:42
>>43
エラーメッセージとか何か出てない?
どこまで正しく処理できててどこでどんなふうにコケたかとか、
状況が良くわからないとなんとも。
0045デフォルトの名無しさん2006/03/09(木) 10:36:31
レスありがとうございます。
SMTPの窓が開き、認証は終わり、こちらのメールアドレスを送信し終わったところで
止まります。

たぶん、
>$smtp->mail($from_address ); # use the sender address here
か
>$smtp->datasend("To: $to_address\n");
のどちらかだと思うのですが。

本文の送信部分までは至らないです。
0046デフォルトの名無しさん2006/03/09(木) 11:14:53
>>39
いや。できるって。
$a = undef; は可能。
@a = (undef, undef, undef); みたいなのも可能。
但し @a = undef; とやると @a = (undef); になってしまうので
undef(@a); とは意味が違う。
0047デフォルトの名無しさん2006/03/09(木) 11:17:34
>>42
my $a = undef;
if ($a == undef) {
 print "これは出来るんだが…。\n";
}

でも SQL の is null みたいに undef かどうかは defined() で
別途判別するのがいいような気がする。
0048デフォルトの名無しさん2006/03/09(木) 12:14:06
>>45
MAIL FROM:<XXXX>
RCPT TO:<YYYY>
のそれぞれに対する応答はどんなのが返っている?
0049デフォルトの名無しさん2006/03/09(木) 13:11:44
>>45
while () {
まさかここに条件が入ってないまま実行してたりしないだろうね。
これそのままだと無限ループだぞ・・・
0050デフォルトの名無しさん2006/03/09(木) 13:24:14
>>47
ところが、それは
my $foo = "";
if ($foo == undef) {
 print "true¥n";
}
でも trueになってしまうので defined 使うしか無いんだよね。
0051デフォルトの名無しさん2006/03/09(木) 13:38:20
>>49
<INFILE> が、投稿時に消されてしまったのではないかと思われ。
0052デフォルトの名無しさん2006/03/09(木) 13:51:41
fcntl() の F_GETLK の返り値はどこに入るんでしょうか?
引数と同じ? でも入りません。Linux なんですが。
別のプロセスでロックを掛けておいて

use Fcntl;

$b = pack('s2l3', F_WRLCK, SEEK_SET, 0, 0, 0);
fcntl(F, F_GETLK, $b);

をしても $b に変化がない。

C言語で同じやつを作ると l_pid にちゃんとPIDが入って来ます。
0053デフォルトの名無しさん2006/03/09(木) 13:52:36
>>50
そうだったのか。orz
0054デフォルトの名無しさん2006/03/09(木) 14:39:16
>>52
分裂病?
0055デフォルトの名無しさん2006/03/09(木) 14:57:09
>>54
どういう意味?
0056デフォルトの名無しさん2006/03/09(木) 15:21:26
PerlでCSVファイルから名前がBBBのタイトルを抽出する場合って下記のように一行ずつ調べていくやり方しかないんでしょうか?
SQLみたいに抽出できないんですか?


foreach $line(@lines){
   @data=split(/,/,$line);
   if($data[1] eq "BBB"){
      $title=$data[3];
      last;
   }

}

print "$title"


(CSVファイルのデータ)
番号,名前,メール,タイトル,本文
1,AAA,,無題1,本文1
2,BBB,,無題2,本文2
3,CCC,,無題3,本文3
.
.
.
200,AAA200,,無題200,本文200

0057デフォルトの名無しさん2006/03/09(木) 15:25:33
>>56
> PerlでCSVファイルから名前がBBBのタイトルを抽出する場合って下記のように一行ずつ調べていくやり方しかないんでしょうか?
そんな事はない。工夫次第。
0058安西先生2006/03/09(木) 15:32:12
>>56
>> PerlでCSVファイルから名前がBBBのタイトルを抽出する場合って下記のように一行ずつ調べていくやり方しかないんでしょうか?
>そんな事はない。工夫次第。
でもまあ、普通はそんな感じ。
0059デフォルトの名無しさん2006/03/09(木) 16:37:51
>>56
仮にSQLが使えたとしても、SQLの内部動作はそれとほぼ同じになると思う。
(実際には構文解析とかもあるのでもっと複雑)

その他、予め全部読んでおいてキーとなる項目をハッシュに
入れておくという方法がある。これはデータを何度も検索する
場合は都合が良いが、ファイルを一回読んで一回しか処理しない
という場合は(全部読んで保存しておく必要があるため)無駄が
多いと思う。

# 予めこんな風にしてハッシュを作る。
for (@lines) {
 @d = split /,/;
 $h{$d[1]} = [@d];
}

# 検索はこれだけで済む。
if (defined($h{'BBB'})) {
 $title = $h{'BBB'}[3];
}
0060デフォルトの名無しさん2006/03/09(木) 16:49:12
>>56
とっても回りくどいやり方。
http://search.cpan.org/~jzucker/DBD-CSV-0.22/lib/DBD/CSV.pm
0061デフォルトの名無しさん2006/03/09(木) 17:05:44
つ〜か、CSV全部を単一のスカラに読み込んで、indexでパターンを探して、
その行を切り出して目的の行か調べる。というのもかなり速げ。
0062デフォルトの名無しさん2006/03/09(木) 18:44:13
>>48
それぞれのメールアドレスがきちんと表示されてます。

>>49>>51
えっ?そのままですが・・・・・?
そのままだとファイルの中身をすべて送ってくれると思っていたのですが。
元々の引用元もそうだったので。。。

も、もしかして私、一人漫才やってますか?(汗)

試しに>>51さんの発言を中に入れてみたのですが駄目でした。
0063デフォルトの名無しさん2006/03/09(木) 19:27:07
どこかの人が大迷惑を被る結果に至らないこと/至っていないことを祈る。
0064デフォルトの名無しさん2006/03/09(木) 21:18:28
日本語の通るPerl用のObfuscatorってないですか?
そんなにギッタンギッタンにしてくれなくてもいいんですけど。
0065デフォルトの名無しさん2006/03/09(木) 21:56:33
ググレカス
0066デフォルトの名無しさん2006/03/09(木) 22:29:50
62です。できました誰にも迷惑はかけてなかったみたいです。
味噌汁で顔を洗いなおしてテンプレサイトで勉強してきます。
ありがとうございました。
0067デフォルトの名無しさん2006/03/09(木) 22:32:59
ググレカレー
0068デフォルトの名無しさん2006/03/09(木) 22:45:13
DIコンテナっていいよね。
Perlプログラミングでも使いまくりですよ。
0069デフォルトの名無しさん2006/03/09(木) 22:48:58
ループさせて面白いのかと
0070デフォルトの名無しさん2006/03/09(木) 23:31:23
>>66
どうやって解決したかくらい言ってくれても罰は当たりませんよ。
0071デフォルトの名無しさん2006/03/09(木) 23:49:46
>>70
<>が全角だっただなんて、ぐぐっても出てこないDQNミスは味噌汁で顔を洗うことぐらいしかお詫びできないかと思いまして・・・o...rz
0072デフォルトの名無しさん2006/03/10(金) 00:07:47
>>71
ワカメ入りの味噌汁で洗っておくれ。そんでもって、写真うp
0073デフォルトの名無しさん2006/03/10(金) 01:04:22
今Sendmailを用いたプログラミングを行っています。
メールは正しく送信されるのですが、意味の分からないところで固まってしまい、あたふたしています。
以下が問題の部分なのですが、
  &ProgramAccessTimeOut('Line : 734');
  &jcode'convert(*emails,'jis');
  &ProgramAccessTimeOut('Line : 736');
  if(open(MAIL,"| $sendmail $mailto")){
  print MAIL "$emails";&ProgramAccessTimeOut('Line : 738');
  close(MAIL);&ProgramAccessTimeOut('Line : 739');
   &ProgramAccessTimeOut('Line : 740');return true;
  }else{
    &ProgramAccessTimeOut('Line : 742');return false;
  }
で、ProgramAccessTimeOutは
sub ProgramAccessTimeOut{
  my $md = $_[0];
  my $sa = time - $ProgramAccessTimeOut_StartTime;
  if($sa > 20){&Error('Time Out');}
  open(IPR,">>prosess.txt");
   print IPR "$md\n";
  close(IPR);
  return;
}
となっています。これはプログラムの動きを見るために付けたものです。
prosess.txtに保存されている最後の内容が、Line : 738で、print MAIL "$emails";までは正しく働いていることが確認できるのですが、何故か
close(MAIL)で固まってしまっている様子です。エラーの内容は、「OUT OF MEMORY!」でした。
全く歯が立たないため解決方法をお願いしたいのですが、お願いできませんでしょうか、お願いいたします。
0074デフォルトの名無しさん2006/03/10(金) 01:20:52
sendmailへの引数は合ってるのか?
0075デフォルトの名無しさん2006/03/10(金) 01:21:25
>>73
デバッグのやり方、考え直した方がいいと思う。
sendmailにおくるとき、末尾の改行の数厳密だったっけ?最後"\n\n"になってる?
0076デフォルトの名無しさん2006/03/10(金) 01:28:21
今まで特に問題なく動いていたので引数は特に問題ないと思います。
$emailsの内容も1KB未満で、$mailtoに入っているメールアドレスにも受信ができたので正しくメールは送信されています。
その他の部分はif文やfor分だけなので特に干渉している部分も無く、エラー部分がclose処理なので、エラーに心当たりが無い感じです。
0077デフォルトの名無しさん2006/03/10(金) 01:29:10
どうして固まっているのにエラーを知ることができたのだろう?
eval{}で囲んで例外キャッチするべきではないか。
0078デフォルトの名無しさん2006/03/10(金) 01:30:44
>>73
use strict
0079デフォルトの名無しさん2006/03/10(金) 01:35:07
>>75
末が\nだったので\n\nに修正したところ正しく動作しました。
今まで\nでも正常にcloseの動作がしていたため全く気付きませんでした、ありがとうございます。
正しいデバックの方法を知らないため、あんなことしてます。すいません。

>>77
STDERRをファイルに出力しているため、エラーを取得できました。
evalの使い方はまだ習得していないため分からない感じです。すいません。

ありがとうございました。
0080デフォルトの名無しさん2006/03/10(金) 01:41:39
デバック → デバッグ バグ潰し、ね。
"\n\n"は覚えておいて損はないよ。
use strict; は早めに覚えておいた方がいい。
0081デフォルトの名無しさん2006/03/10(金) 01:50:51
>>80
了解です

>>79で解決したかに見えましたが、プログラムを何も変えずに再度実行したところまたエラーが発生しました。
やはり、エラー箇所はclose(MAIL)のようです。申し訳ないです。
0082デフォルトの名無しさん2006/03/10(金) 02:07:12
とりあえず、そのごちゃごちゃしたコードをさっくり削除して、
どこぞのサンプルコード張っただけで動くか確認してみれば?
0083732006/03/10(金) 02:19:28
Linux逝てしまった・・・
まずLinux治します。しばらく消えます。
0084732006/03/10(金) 02:41:35
以下のプログラムの実行結果を2レスに渡って書きます

require './jcode.pl';
$sendmail='/usr/sbin/sendmail';
$subject = 'testmail';
BEGIN{
$| = 1;
open(STDERR, ">&STDOUT");
}
print time ."...Start\n";
$mailto = '[email protected]';
$emails = "To: $mailto\n";
$emails .= "From: $mailto\n";
$emails .= "Subject: $subject\n\n";
$emails .= 'あかさたな'."\n\n";
print time ."...\$emails input\n";
&jcode'convert(*emails,'jis');
print time ."...jcodeconvert\n";
if(open(MAIL,"| $sendmail $mailto")){
print time ."...if(open(MAIL))\n";
print MAIL "$emails";
print time ."...\$emails\n";
close(MAIL);
print time ."...close(MAIL)\n";
}
exit;
0085732006/03/10(金) 02:42:23
実行結果
1141925875...Start
1141925875...$emails input
1141925875...jcodeconvert
1141925875...if(open(MAIL))
1141925875...$emails
1141925889...close(MAIL)

closeするのにえらい時間がかかっていることが確認されました。原因は不明です。
0086732006/03/10(金) 02:42:36
うんこ
008773  ◆KmJI5XgmH6 2006/03/10(金) 02:43:53
なんか来たので一応使い捨て鳥入れときます。
0088デフォルトの名無しさん2006/03/10(金) 02:45:45
ちょwwwwおまwwww

「&jcode'convert(*emails,'jis'); 」って。。。。wwww

&によるサブルーチン、'によるパッケージ修飾、型グロブ渡し・・・

10年以上前、Perl4時代のコーディングスタイルだよ。

Linuxが直ったらとりあえずそこらで適当にここ1〜2年で刊行された
Perl本を買ってきて読め。マジで。
008973  ◆KmJI5XgmH6 2006/03/10(金) 02:48:20
>>88
1年前1冊買った本見ながら最近やり始めたとこなのに・・・orz
その辺りはネットで漁ってみます。問題はclose処理に10秒以上も掛かっている部分なんです・・・
0090862006/03/10(金) 02:48:21
ミスったorz
0091デフォルトの名無しさん2006/03/10(金) 02:51:57
Perlよりsendmailを疑うけどな、普通は。
Linuxが不安定なら、ビルド失敗してるとかじゃないの?
とりあえず、Linux安定させないと問題の切り分けができませんよ。
009273  ◆KmJI5XgmH6 2006/03/10(金) 03:00:01
ですね・・・Linux板に行って見ます。
SendmailやPerlは元々入っていたので全くもって無知ですが・・・。
0093デフォルトの名無しさん2006/03/10(金) 03:02:55
sendmailのlogとれよ。
0094デフォルトの名無しさん2006/03/10(金) 03:06:50
>>73見て思うんですがbarewordがno strictでエラーにならないのはどういう用途を想定してるんですか?
自然言語にクォートの概念はいらないって意味合いですか?
0095デフォルトの名無しさん2006/03/10(金) 03:13:14
>>85
> closeするのにえらい時間がかかっていることが確認されました。原因は不明です。

うちのFreeBSDでは
1141927843...Start
1141927843...$emails input
1141927843...jcodeconvert
1141927843...if(open(MAIL))
1141927843...$emails
1141927843...close(MAIL)
だったヨ。

DNSクエリかな?
0096デフォルトの名無しさん2006/03/10(金) 03:15:31
>>94
すまん、酔っぱらって帰ってきたんでアレなんだがどこらへんが裸語句?
0097942006/03/10(金) 03:34:16
酔っ払い同士になるけどreturn false;のfalse
0098安西先生2006/03/10(金) 04:35:57
>>94
use constant つかったんじゃないのか?

use constant true => 1;
use constant false => 0;
print "true:", true, ", false:", false, "\n";
# => true:1, false:0

いや、俺もconstant使ったことないから知らんけどさ。
0099デフォルトの名無しさん2006/03/10(金) 04:42:08
そろそろBenchmarkぐらい教えてあげようよ。
0100デフォルトの名無しさん2006/03/10(金) 09:36:07
>>99
> そろそろBenchmarkぐらい教えてあげようよ。

指示するな。
0101デフォルトの名無しさん2006/03/10(金) 16:52:55
>>89
やり始めで気づいてよかったな。
0102デフォルトの名無しさん2006/03/11(土) 14:45:38
Perlで作った掲示板に携帯で書き込んだ場合とPCから書き込んだ場合を判別するのってどうすればいいんですか?
0103デフォルトの名無しさん2006/03/11(土) 15:10:29
ブラウザでチェックかな
0104デフォルトの名無しさん2006/03/11(土) 15:51:53
>>102
$ENV{HTTP_USER_AGENT}の文字列の中身をみて判断するんだろうが、
PerlではなくCGIの質問なのでWebProg板にでも行ってきなさい。
0105デフォルトの名無しさん2006/03/13(月) 02:49:10
WWW::Mechanize で Cookie を扱うにはどうすれば良いですか?
教えてください。
0106デフォルトの名無しさん2006/03/13(月) 03:33:30
>>104
ホストで判別ってのは??
if($host=~/ezweb\.ne\.jp|docomo\.ne\.jp|vodaphone\.ne\.jp/i){$type ='Phone';}else{$type = 'PC';}
とかで。
0107デフォルトの名無しさん2006/03/13(月) 06:26:20
UserAgentはユーザーが任意で送るものだからホストの方がいいかもね。
そこまで厳格化する必要はないだろうけどUA全部調べるのは大変だし。
0108デフォルトの名無しさん2006/03/13(月) 06:54:16
WebProgでは既出なノウハウをわざわざここで煮詰めなくても
0109デフォルトの名無しさん2006/03/13(月) 07:23:30
>>105
扱うだけなら特別何かする必要は無い。
弄りたいならcookie_jarメソッドを呼び出して、帰ってきたHTTP::Cookiesオブジェクトを操作汁
0110デフォルトの名無しさん2006/03/13(月) 07:41:00
そういや、
gonzuiのCPANサーチ
http://cpansearch.bulknews.net/

もいろいろ使えるね。
0111デフォルトの名無しさん2006/03/13(月) 12:01:07
use HTTP::Cookies;
my $cookie_jar = HTTP::Cookies -> new (file => 'file.cook', autosave => 1);
$cookie_jar -> add_cookie_header ($request);
$ua -> cookie_jar ($cookie_jar);
0112デフォルトの名無しさん2006/03/13(月) 22:26:35
quota制限時にファイルを作成するとサイズが0バイトのファイルになってしまいますが
適当なファイルを作成し0バイトで無ければ処理へという方法以外に何かスマートな方法は
ありますでしょうか?
0113デフォルトの名無しさん2006/03/13(月) 22:43:42
日本語でおk
0114デフォルトの名無しさん2006/03/13(月) 22:54:30
>>112
作ってみてエラーになるかチェックするのが必要十分にて一番スマートな方法。

ファイルシステムにもよるし、quotaの設定にもよるし、自分がrootかもしれないし、
nfsかもしれないし…と、汎用的な事前チェック方法は無いと思ったほうが良い。
0115デフォルトの名無しさん2006/03/13(月) 23:16:43
こーたに当たったらシグナルが飛んでこなかった?
0116デフォルトの名無しさん2006/03/13(月) 23:20:11
やはりそうですか。
テスト書込から実際に書き込むまでの間にdisk fullになる可能性もありlockと似たような
問題が生じる事があるんですよね。
取りあえずテンポラリファイルに実際の内容を書込をしてサイズが0で無ければ
元ファイルを削除→テンポラリファイルをrenameといった手法でいこうと思います。
awstatsもこの方法でサイズ0問題を回避してますね。
0117デフォルトの名無しさん2006/03/13(月) 23:22:25
>>115
openでは捕捉出来ないと思います。
コンソールだとエラーメッセージは表示されます。
0118デフォルトの名無しさん2006/03/14(火) 00:21:14
print や close の返り値や $! をいちいち検査してみるのもいいかも。
あと、 Windows は知らんけど、 UNIX なら「元ファイルを削除」は要らんよ。
0119デフォルトの名無しさん2006/03/14(火) 08:48:58
@a=(
[[1,1,1],[11,11,11]],
[[22,22,22],[222,222,222]].
[[33,33,33],[333,333,333]],
);

という配列の中にあるそれぞれの配列の要素数を知るには
どうしたらよいのでしょうか?
0120デフォルトの名無しさん2006/03/14(火) 09:00:44
scalar @{ $a[1][0] }; # (22, 22, 22)で3
0121デフォルトの名無しさん2006/03/14(火) 09:00:58
>>119

> print $#{$a[1][0]};
> 2
> print "@{$a[1][0]}";
> 22 22 22
01221192006/03/14(火) 10:08:01
うーん
>>120
何も出力されません。

>>121
-1 になってしまいます。

Perl のバージョンは

>perl -v
This is perl, v5.8.7 built for MSWin32-x86-multi-thread

です。
0123デフォルトの名無しさん2006/03/14(火) 11:24:30
>>122
@a=(
[[1,1,1],[11,11,11]],
[[22,22,22],[222,222,222]]. ←
[[33,33,33],[333,333,333]],
);
01241192006/03/14(火) 11:26:48
>>123

!!

ちゃんと出力されました。
本当にごめんなさい。
0125デフォルトの名無しさん2006/03/14(火) 11:34:25
>>119
二行目(22,22がある行ね)って , じゃなくて . になってるのは間違え?
0126デフォルトの名無しさん2006/03/14(火) 11:35:27
うえええかぶってた
0127デフォルトの名無しさん2006/03/14(火) 11:37:20
use strictってしてないやついるの?
0128デフォルトの名無しさん2006/03/14(火) 11:38:16
間違え?
0129デフォルトの名無しさん2006/03/14(火) 11:52:22
use strictしているが、oop多用しているので関数名については実行時まで
わからんし、$self->{hoge}のチェックにもならん罠。

後者はuse fieldsでなんとかなるのかな〜。まだ使ってないけど。
0130デフォルトの名無しさん2006/03/15(水) 10:58:17
perlccにおいて意図しない動作が発生したのですが原因、もしくは解決法をお教え頂ければ幸いです。

---test.plの始まり---
#!/usr/bin/perl
use Data::Dumper;
use subs qw(exit);
$Data::Dumper::Indent = 0;

Valiable->new(our $val = {});
require "./test2.pl";
hoge::hoge();
print "main : ", Dumper($val) . "\n";
Valiable::valiable($val);
exit;

package Valiable;
sub new {
  my ($class, $dbg) = @_;
  *::exit = sub {
    valiable($dbg);
    CORE::exit;
  };
}

sub valiable { print "val : ", ::Dumper(shift) . "\n"; }
---test.plの終わり---

---test2.pl---
package hoge;
sub hoge { $::val->{hoge} = 'hage'; }
1;
---test2.plの終わり---
0131デフォルトの名無しさん2006/03/15(水) 10:58:53
-素の状態のtest.plの結果
main : $VAR1 = {'hoge' => 'hage'};
val : $VAR1 = {'hoge' => 'hage'};
val : $VAR1 = {'hoge' => 'hage'};


perlcc -B test2.pl -o test2.pl
-test2.plをバイナリコードへ変換した後のtest.plの結果
main : $VAR1 = {'hoge' => 'hage'};
val : $VAR1 = {'hoge' => 'hage'};
val : $VAR1 = {};
Segmentation fault

どちらも同じ結果になるのを期待しています。

perlのversion This is perl, v5.8.6 built for i386-linux-thread-multi
perlccのversion # Version 2.04, Enache Adrian,Fri, 18 Jul 2003 23:15:37 +0300
os fedora core4

バイナリコード変換後の動作でここ以外の処理は問題無かったのですが
ここだけ互換性がありませんでした。
0132デフォルトの名無しさん2006/03/15(水) 12:53:01
perlccはまだ実験段階。動かなければそれまでと思ったほうがいい。
0133デフォルトの名無しさん2006/03/15(水) 16:08:45
本当に実験段階なんでしょうか。
perlcc関連の資料をググってると日本では間違ったイメージを持ってる人が多いと思います。
1,perlccで作ったバイナリはまともに動かない
2,perlccでコンパイルするとC並の動作速度が期待出来るが生成されるコードは実用に耐えない
1に関して-Bオプションを使用した場合、Cコードは生成されず、通常Perlが踏むバイナリコードへの
変換だけ行われ、非常に高いレベルで動作します。
2に関してはperlccのソースを見る限りperlコードをCのコードへ変換しているわけではなく
ネイティブで実行出来るインタプリタにバイナリコードへ変換したソースをくっつけているだけで
バイナリコードの変換とローダ部分のコストぐらいしか軽減されず例え動作に成功しても
10%ぐらい高速化するのがせいぜいだと思います。
01341052006/03/15(水) 21:10:03
>>109 >>111
どうも有難うございました。
無事Cookieを受け入れてくれました。

ところで、HTTPサーバからCookieを要求された場合、特別何かしなくても
WWW::Mechanize->new() で生成されたユーザエージェントがサーバにCookieを送信してくれるのでしょうか?
0135デフォルトの名無しさん2006/03/15(水) 22:27:36
perlスクリプトをWindows実行形式にしたいのですが、
ググったところhttp://par.perl.org/にてそのソフト入手できるとのこと。

しかし、もうそのURLは存在せず、いろいろ辿って見つけた
http://www.activestate.com/Products/Perl_Dev_Kit/については、
Turn your Perl programs into ready-to-run executables for AIX, HP-UX, Linux, Solaris, and Windows.
とあるものの有料。

フリーなものはないですか?

やりたいこととしては、実行形式にしたファイルに、処理対象のテキストファイルを
ドラッグドロップで入力し、出力結果として別のテキストファイルを作成というもの。
0136デフォルトの名無しさん2006/03/15(水) 22:44:15
>>134
Cookieを要求された場合って何?
Cookieというのはサーバが要求するものじゃなくて、
対象のDomainかつPathなら常にヘッダに付けて送られ続けるものだよ。

そしてそう動作するかは実験してみりゃわかるじゃないか。
漏れが試した限りでは何もしないでもちゃんと送られた。

>>135
PARはCPANにある
ttp://search.cpan.org/~smueller/PAR-0.92/

ActivePerlならppmでインストール汁
現在の最新版はBdPのリポジトリにある模様。
ttp://www.bribes.org/perl/ppmdir.html
0137デフォルトの名無しさん2006/03/15(水) 22:46:53
>>135
PARなら

ppm install PAR

で入ったような気がする。

>>133
PARはどーよ?
01381352006/03/16(木) 00:11:33
>>136>>137
サンクス。
ppmというのがなんのことかわからないけど
試してみます。
01391332006/03/16(木) 00:17:18
>>137
目的はソース隠蔽なのでPARは向かないのです。
それとバイナリコードではなくバイトコードの誤りでした。
中間コードではある程度復元出来てしまいますが--)
namespaceを越えてアクセスすると発生するようなのでコーディングスタイル
を変更することで対応したいと思います。
Perl6ではこの辺りのことも触れられているようなので期待しています。
0140デフォルトの名無しさん2006/03/16(木) 03:16:09
>>135
> やりたいこととしては、実行形式にしたファイルに、処理対象のテキストファイルを
> ドラッグドロップで入力し、出力結果として別のテキストファイルを作成というもの。

それだったら、実行形式にする必要ないんじゃないの?
0141デフォルトの名無しさん2006/03/16(木) 03:21:00
Tkでいいんじゃない?
0142デフォルトの名無しさん2006/03/16(木) 04:42:13
>>130-131
linuxは普段使ってないから、(knoppixで)軽く確認した程度だが...
セグメンテーションフォルトは、requireされた側でByteLoader.pmの読み込み
が発生したときに起こっていた。
つまり、読みこみ側(test1.pl)が使わないByteLoaderを読まれる側(test2.pl)が
使っているのが原因。
現状で唯一の対策はByteLoaderを使わない事。

また、表示内容の不一致は、$valではなく$dbgを表示している為。
バイトコード化されたtest2.plをrequireした時点で、$valと$dbgは別物になる。

確認は、こんな感じで。
#!/usr/bin/perl
our $val = {'dummy'=>''};
my $dbg=$val;
print "-initial\nval($val)=[",join(',',keys $val),"]\n";
print "dbg($dbg)=[",join(',',keys $val),"]\n";
require "./test2.pl";
print "-Required\nval($val)=[",join(',',keys $val),"]\n";
print "dbg($dbg)=[",join(',',keys $dbg),"]\n";
hoge::hoge();
print "-hoged\nval($val)=[",join(',',keys $val),"]\n";
print "dbg($dbg)=[",join(',',keys $dbg),"]\n";
exit;

初期化される変数の一覧は、バイトコード化されたモノをvi等で見ればわかる。
ここまで書けば、解決方法は解るよね?
正攻法以外に、嫌な方法や汚い方法があるけど、嫌な方法が手軽でPerlらしいと思う。

>>133
ここに書いた程度しか理解してないのに言うのも何だけど、perlccは実験段階だろ。
0143デフォルトの名無しさん2006/03/16(木) 10:24:26
あるクラスのbase(のひとつ)を別のものに置き換えたいのだが、
丸コピーしてeditせずに継承とかそんな感じのメカニズムでうまく
やる方法はないだろうか?

具体的にはNet::POP3をPOP3 over SSL対応させたるために
IO::Socket::INETのかわりにIO::Socket::SSLを使いたいのです。
0144デフォルトの名無しさん2006/03/16(木) 11:56:25
継承で良いんじゃない?
0145デフォルトの名無しさん2006/03/16(木) 13:38:22
>>144
ああそうかと思って試しにやってみた。今回は単純なので

package Net::POP3::SSL;

use strict;
use IO::Socket::SSL;
use Net::POP3;
use vars qw(@ISA);

@ISA = qw(IO::Socket::SSL Net::POP3);

1;

とするだけでなんとかなる感じ。(IO::Socket::SSLもすこし直さないと
だめだったが。)

継承関係が複雑だとこんなにすんなりとはいかないかもな。
多重継承で後のクラスのメソッドを前ので置き換えてる場合など
順序に意味があると単純に前後にくっつけりゃいいわけじゃない
ので難しそうだ。上のもNet::POP3とIO::Socket::SSLの順序いれかえ
るとNGだし。
0146デフォルトの名無しさん2006/03/16(木) 16:22:21
試してないけど、

use Net::POP3;
@Net::POP3::ISA = qw(Net::Cmd IO::Socket::SSL);

てのはどうだろう。強引だが。
0147デフォルトの名無しさん2006/03/16(木) 16:32:22
>>146
試したらそれでも動きました。いろいろ書き方あるもんだね。
0148デフォルトの名無しさん2006/03/16(木) 17:41:31
Windowsでドライブ一覧を取得したいんですが
APIは使わずに(getLogicalDrives等)取得する方法はありますでしょうか?
0149デフォルトの名無しさん2006/03/16(木) 18:43:29
>>148
最終的にはAPI使わないと無理だと思うがなぜ?

全26ドライブレターについてopendirしてみるって手はあるかもね。
でもFDDドライブなんかがあるとそこでダイアログが出て止まるよ。
01501492006/03/16(木) 18:49:55
うへ、ドライブ余計だった
フロッピーディスクドライブドライブ…orz
0151デフォルトの名無しさん2006/03/16(木) 19:03:57
cygwin の perl なら "/cygdrive" を readdir() すれば有効なドライブのみ見える。
0152デフォルトの名無しさん2006/03/16(木) 20:00:03
>>142
激ありがとうございます!!
不思議に思っていた点が全て合点しました。
Segmentation faultもtest.plをバイトコード化することで回避出来ました。
ちなみにPerl5.8.8でバイトローダーが0.5から0.6に上がっていたので試してみたのですが
結果は同じでした。中間コードでもバージョンの違いで動かないのはまだしも
プラットフォームが違っても動かないようですーー;
で解決法は
・引数で渡す
・一つのファイルにまとめる
・{ local $::val; require './test2.pl'; };
・変数宣言時の直後にrequireする
ぐらいしか思いつきませんでした。
現在のスクリプトでは動的にrequireするのと「$::」でアクセスするのは$::dbgに適当に変数を
入れて最後にDumperで表示するデバック目的とクエリを格納した$::form{name}なんかにアクセス
するのに使っているので変更が少なく実用的なのは3番目かな。
0153デフォルトの名無しさん2006/03/16(木) 22:39:48
>>149
なんとなく余計なモジュールは使いたくなかったんです
すみませんありがとうございました
0154デフォルトの名無しさん2006/03/17(金) 03:27:57
>>141
普通に @ARGV を見ればいいんじゃない?
0155デフォルトの名無しさん2006/03/17(金) 12:43:07
「ImageMagick」は何と読むのですか?
0156デフォルトの名無しさん2006/03/17(金) 12:51:43
Image
Magick

これは読めるよな?あとは繋げるだけだ。
0157デフォルトの名無しさん2006/03/17(金) 12:54:00
いまげまぎく?
0158デフォルトの名無しさん2006/03/17(金) 13:14:53
>>156
「Magick」が読めません(´・ω・`)
0159デフォルトの名無しさん2006/03/17(金) 13:16:16
まず「Peal」も読めないな
0160デフォルトの名無しさん2006/03/17(金) 13:16:59
「Perl」って書くつもりだった・・・orz
0161デフォルトの名無しさん2006/03/17(金) 13:23:48
(´・ω・)
0162デフォルトの名無しさん2006/03/17(金) 13:32:50
( ^ω^) ・・・
0163デフォルトの名無しさん2006/03/17(金) 13:33:04
イメッジ
マジック
0164デフォルトの名無しさん2006/03/17(金) 13:35:35
>>150
震えるぞハート、燃え尽きるほどヒート、刻むぞ血液のビート!
オーバードライブドライブ!
0165デフォルトの名無しさん2006/03/17(金) 13:35:41
Microsoft Samにでも読ませてろ
0166デフォルトの名無しさん2006/03/17(金) 14:31:57
PerlでWindowsのAPIを使うにはどう書けばよいのでしょうか?
具体的にはCombinePathが使いたいです。
CombinePath($buf, "c:\\windows\\System32", "..\\notepad.exe");
buf eq "c:\\windows\\notepad.exe"
とかしたい
0167デフォルトの名無しさん2006/03/17(金) 14:47:29
>>166
CPANで Win32で調べれ
01681662006/03/17(金) 15:42:28
>>167
Win32::APIでできました。ありがとうございました。
0169デフォルトの名無しさん2006/03/17(金) 15:49:50
>>157
そりゃどこの国の読み方だ?
0170デフォルトの名無しさん2006/03/17(金) 15:50:43
>>159
ピール

ま、しかし、 Pearl にしようと思ったら既にあったから Perl ってのも何とも言えない命名。
0171デフォルトの名無しさん2006/03/17(金) 17:16:05
>>166
この程度、File::Specで済みそうなもんだが・・・
use File::Spec;
$buf = File::Spec->catdir("c:\\windows\\System32", "..\\notepad.exe");
print $buf;  # C:\windows\notepad.exe
0172デフォルトの名無しさん2006/03/17(金) 18:53:23
そういえば先日、某大手チェーンPCショップYに行ったら、書籍コーナーでPealと書かれてた(´・ω・`)
# 他にもTCP/1Pになってたり
0173デフォルトの名無しさん2006/03/17(金) 18:56:49
(´・ω・)
0174デフォルトの名無しさん2006/03/17(金) 22:54:30
Pearl っていう、英単語として正しい綴りだったのを、どこかで見たような気がする。
0175デフォルトの名無しさん2006/03/17(金) 23:03:51
[\w]このような表記で全ての文字を表す場合どう記述すればいいのでしょうか。
自分の頭では[\d\D]しか考えつきませんでした。
0176デフォルトの名無しさん2006/03/17(金) 23:11:55
[\x00-\xff]
0177デフォルトの名無しさん2006/03/17(金) 23:30:04
Unicodeも考える場合5.8系だけで良いなら[\p{Any}]とか
0178デフォルトの名無しさん2006/03/17(金) 23:32:43
ありがとう。1byteが8bitでその範囲がとか考えればよかったんですね。
0179デフォルトの名無しさん2006/03/18(土) 00:46:14
>>178
いや、>>175のでいいと思うんだが。
>>176は5.8でUnicode使ってるとだめぽ。
01801352006/03/18(土) 01:49:23
>>140

自分のPCにはActivePerlがインストールしてあるんだけど
他の人のPCで自分の作ったスクリプトを簡単に動かしたくて。

# まだPAR試してない…

0181デフォルトの名無しさん2006/03/18(土) 08:21:54
PAR って、norton antivirus の auto protect を有効にしてると初回起動時の
temp フォルダへの展開に激しく時間がかかるな。
自分自身を圧縮等して antivirus soft による検出を逃れようとする virus も
多いから仕方ないのかもしれんが…。
0182デフォルトの名無しさん2006/03/18(土) 10:39:43
>>175
\Sではダメか?
0183http://www.vector.co.jp/soft/win95/util/se072729.html2006/03/18(土) 19:19:55
TextSS のWindowsXP(Professional)64bit化おながいします

もしくは64bitにネイティブ対応したテキスト置換ソフトありますか?
0184デフォルトの名無しさん2006/03/18(土) 20:06:24
これスクリプトか?
ム板のどのスレ行っても貼ってあるんだがw
0185デフォルトの名無しさん2006/03/18(土) 20:08:55
>>184
微妙に変わってたりするから手動のような気がする
スクリプト言語のスレに貼っても意味ないだろうにw
0186デフォルトの名無しさん2006/03/19(日) 02:12:25
>>183
1. 作者に言え
2. ネイティブ対応にする意味ねぇだろ。普通に使えりゃ。

釣られてスマソ
0187デフォルトの名無しさん2006/03/19(日) 15:26:23
>>186
いーよいーよ!
ガンガン釣られちゃえよ!
Σ∩
.(ヨ ∧∧
 \(゚∀゚)
  ヽ  E)
0188デフォルトの名無しさん2006/03/20(月) 16:21:19
一行に収まらないステートメントを
複数行に分けるにはどうしたらいいんですか?
0189デフォルトの名無しさん2006/03/20(月) 16:52:02
>>188
……分けたいところにカーソルを置いて、リターンキーを押します。
0190デフォルトの名無しさん2006/03/20(月) 17:24:05
何のためのセミコロンだと…
きっと今までVBとかそういうのを使ってたんだろうなぁ
0191デフォルトの名無しさん2006/03/20(月) 17:32:49
変数名とか関数名が200文字くらいあるんじゃね?('A`)
0192デフォルトの名無しさん2006/03/20(月) 17:57:49
>>191 ワラタw
0193デフォルトの名無しさん2006/03/20(月) 18:26:35
>>189
ああすいません
僕がばかでした

正規表現で長い文字列を使いたいんですけど
余計な変数とか使わないで書くにはどうしたらいいんですか?

今
if(/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/)
って感じなんで
if(/xxxxxxxxxxxxxxxxxxxxx\
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/)
こんな風にならない
0194デフォルトの名無しさん2006/03/20(月) 18:35:45
>>193

x オプションを使えばあるいは。

if (m{
xxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
}x)
0195デフォルトの名無しさん2006/03/20(月) 18:47:25
>>194
できなす・・・
0196デフォルトの名無しさん2006/03/20(月) 18:50:56
>>195
何所で詰まってるかわからないんだけど、
分割して一つづつやることはできるの?
基本的なところミスってたりしてない?
0197デフォルトの名無しさん2006/03/20(月) 18:56:33
>>196
分割してもできるんですけど
ファイルから一行ずつ呼んで

if(/xxxx/){
}elsif(/xxx/){
}elsif(/xxx/){
}elsif(/xxx/){
}

って感じで正規表現で分けて処理してるうちのひとつなんで
変数使いたくないっていうだけです


0198デフォルトの名無しさん2006/03/20(月) 19:50:22
実際にどういう値が入るかは書けないの?
0199デフォルトの名無しさん2006/03/20(月) 21:38:40
>>195
x を付けるとパターン中の空白文字を単純に読み飛ばすから、
マッチ対象にしたい空白文字はクォートしないと駄目だぞ。

x 付けて任意の位置で改行できないなら... もしかしてPerl4?
0200デフォルトの名無しさん2006/03/20(月) 22:07:40
つか x の続きってだけだったら /x+/ にしろとか /x{10}/ にしろとか
そんな回答しかできないんだけど。
0201デフォルトの名無しさん2006/03/21(火) 00:10:10
if(/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/)
は
if(/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/)
でいいんじゃねーの?
なにが不満?
0202デフォルトの名無しさん2006/03/21(火) 00:14:17
長い正規表現なら
別ファイルに正規表現だけ入れて
変数に読み込ませるのが良いんじゃないかな
0203デフォルトの名無しさん2006/03/21(火) 00:23:30
辞書総当り?
0204デフォルトの名無しさん2006/03/21(火) 00:26:59
連想配列の要素に配列を入れるのってどうやるの?

@tmp = ($a, $b, $c);
$data{$key} = @tmp;
print $data{$key}[0] . "\n";

これで上手くいかないのはなぜ?
0205デフォルトの名無しさん2006/03/21(火) 00:28:00
>>204
つperllol
$data{$key} = \@tmp;
0206デフォルトの名無しさん2006/03/21(火) 00:31:39
>>205
うおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおお
できたあああああああああああああああああああああああああああああああ
2時間悩んだけど聞いてよかったあああああ
ありがおつ
まじありがとう
ありがおつたりがおつありがおつ!!!!くぁwせdrftgyふj
0207デフォルトの名無しさん2006/03/21(火) 00:36:21
>>206
使い方には注意点があるから使用の際にはperlrefやperllolをよく読んだほうが良いよ。
例えば、
for $i (0..2){
@tmp = ($i);
$arr[$i]=\@tmp;
}
print $arr[0][0], "\n";
とかやると2になってしまう。
my @tmpとしてレキシカルスコープ変数にしないと,、
実体が同じだからこういうことになるわけ。
0208デフォルトの名無しさん2006/03/21(火) 00:45:02
>>207
リファレンスなんだね!
気をつけてやってみます.
ありがとう
0209デフォルトの名無しさん2006/03/21(火) 00:50:11
すいません助けてください。
例えば「ABC DEF GHI JKL "○○○" PKR STU VWX YZ」という文字列があるとします。
それで""で囲まれた文を抜き出すにはどうすれば良いでしょうか?
""の間は決まった文字列ではありません。
0210デフォルトの名無しさん2006/03/21(火) 00:51:57
>>209
「perl 正規表現」でぐぐると幸せになれる

0211デフォルトの名無しさん2006/03/21(火) 00:54:57
perlのルールでは,配列内の配列は平たく展開されてしまう。
また、ハッシュのキー、値を対応付ける => は , のシンタックスシュガーであるから。

%data = ( $key => ($a, $b, $c) ); と
%data = ( $key => $a, $b => $c); は等価となってしまう。

でも、これだと、$data{$key} の値が矛盾する。前者は($a, $b, $c)であり後者では $a

結局、配列のネストは平たく、括弧は減らす方向に展開されるのがperl流なので、構文解釈上は
後者になってしまう。だから、配列の中に、他の要素と混ざらないように配列を入れるには、それ
自体スカラであるリファレンスを使い、配列によって実装されるハッシュもまた、同様の方法を使う
ことになる。
0212デフォルトの名無しさん2006/03/21(火) 00:58:17
>>211
見事な解説乙

しかし回答速いな一分台
02132102006/03/21(火) 00:58:41
>>210
>>209の通りにする例を下さいませんか?
0214デフォルトの名無しさん2006/03/21(火) 00:59:19
"(.?)"
0215デフォルトの名無しさん2006/03/21(火) 01:00:16
>>213
$hoge =~ /"(.*?)"/;
print $1;
02162092006/03/21(火) 01:00:17
間違えました。
>>210
>>209の例の通りにする例を下さいませんか?
02172092006/03/21(火) 01:00:52
>>215
ありがとうございます
0218デフォルトの名無しさん2006/03/21(火) 12:31:31
htmlファイルを読んで、テーブルタグを除去しようと思いまして、

$hogehoge =~ s/<table>.*<\/table>//g;

と記述したのですが、期待通りに動きません。どうしたらよいでしょう orz
0219デフォルトの名無しさん2006/03/21(火) 12:50:50
HTMLエスケープで我慢汁
0220デフォルトの名無しさん2006/03/21(火) 13:06:30
すみません、直前に類似質問ありましたね。自己解決しました。

$hogehoge =~ s/<table>(.|\s)*?<\/table>//g;

ありがとうございました。
0221デフォルトの名無しさん2006/03/21(火) 13:14:05
>>220
多分、選択より文字クラスを使った方が速いから (.|\s) より [\S\s] の方が良さげ。
0222デフォルトの名無しさん2006/03/21(火) 13:38:21
それより/sオプション
0223デフォルトの名無しさん2006/03/21(火) 14:53:26
tableがネストしてるとダメだと思うがなぁ。
0224デフォルトの名無しさん2006/03/21(火) 22:59:38
perlのプログラムにコマンドラインオプションを送りたいのですが、コマンドラインオプションを読み取るには
どうすればいいのでしょうか?
0225デフォルトの名無しさん2006/03/21(火) 23:07:29
>>224
つperlvar
@ARGV
0226デフォルトの名無しさん2006/03/21(火) 23:31:49
なんかさ、親切な奴がもの凄い勢いでこのスレ監視してないか?
0227205=2252006/03/21(火) 23:41:48
>>226
漏れは他の言語の勉強の合間で、十分二十分おきくらい、のつもり…

>>224
ついでだから言い忘れたことを。
Getopt系のモジュールを使うと引数の解析を楽できるよ。
ttp://search.cpan.org/search?query=getopt&mode=module
0228デフォルトの名無しさん2006/03/21(火) 23:52:40
>>224
$ perldoc Getopt::Std
$ perldoc Getopt::Long
0229デフォルトの名無しさん2006/03/22(水) 00:27:14
>>227-228
すみません。できの悪いおいらには難しいみたいなので、サンプルコード探してきます。

ありがとうございました。
0230デフォルトの名無しさん2006/03/22(水) 01:28:03
ギリギリスレ違いでもないと思うのであえて質問しますが、
perlってどこがいいんだろ?
最近わからんくなってきたよ。
0231デフォルトの名無しさん2006/03/22(水) 01:29:07
マジレスするとメロディライン
0232デフォルトの名無しさん2006/03/22(水) 01:31:46
>>231
スマソわがんね
0233デフォルトの名無しさん2006/03/22(水) 01:44:55
>>230
昔からそうだけど、何でもありな所
何でもくっつけちゃう糊(glue)言語
コードが汚かろうが何だろうがお構い無しで、やるべき事をやる
0234デフォルトの名無しさん2006/03/22(水) 01:49:31
>>233
ちょっと分かった。アリガト
使い捨て感覚で気軽に作れるしね。
0235デフォルトの名無しさん2006/03/22(水) 01:50:41
>>230
そういう議論するまえに動くスクリプトが出来てしまうことだろうね。

Larryが認めるようにC,sed,awk,shから多くを「盗用」したあげく、
「やりかたは何通りもある」ので、そのあたりの言語経験者なら
初期学習コストはないに等しい。

仕様を実装する言語でなく問題を解決する道具なんだな。
それが利点であり欠点。
0236デフォルトの名無しさん2006/03/22(水) 01:53:04
>それが利点であり欠点。
オレは今欠点が目に付くんだろうな。アリガトオヤスミ。
0237デフォルトの名無しさん2006/03/22(水) 01:53:31
>>230
言語仕様的な良さとは違うかもしれないが、
個人的にPerlを使い続ける大きな理由としては「CPANがあるから」というのもある。
0238デフォルトの名無しさん2006/03/22(水) 02:43:04
俺は自分好みにデータや記述を整理して、実行できる点がメリットが特に気に入ってるかな?
これも利点と欠点を同時に持ってるけど。

>>233
汚くすればなんぼでも汚く出来るし、
綺麗にしようと思えば、なんぼでも綺麗にできる。 (なにが綺麗かは個人の差あり)
これも利点と欠点が同時に…。

共同開発に向かない言語ってのはよく聞くけど、
それは俺も賛成。
0239デフォルトの名無しさん2006/03/22(水) 02:58:47
今更だけどスレ違いじゃね
0240デフォルトの名無しさん2006/03/22(水) 03:03:34
>>239
>>1
> "There's more than one way to do it" ということで、Perlの奥深さについて皆で語り合い、追求してまいりましょう。
ってことだから良いんじゃなかろか
0241デフォルトの名無しさん2006/03/22(水) 08:53:42
こういったページでPerlの再認識をしてみては。

TMTOWTDIの謎を探る ttp://www.netfort.gr.jp/~kiyoka/tmtowtdi/tmtowtdi.html
Perlの自然言語原理 ttp://chasen.org/~daiti-m/text/natural-ja.html
0242デフォルトの名無しさん2006/03/22(水) 11:39:38

ファイル指定でも、標準入力からパイプで流し込んでも、

while(<>)

だけでテキスト処理できるのはパールだけ。
正直、これだけのためにperl 使うといっても過言ではない。
0243デフォルトの名無しさん2006/03/22(水) 11:41:15
つ、釣られないぞ・・・
0244デフォルトの名無しさん2006/03/22(水) 15:28:17
Ruby
while {|l|}
0245デフォルトの名無しさん2006/03/22(水) 15:37:10
釣れたw
0246デフォルトの名無しさん2006/03/22(水) 18:35:18
結構な数のUNIX/LINUX系環境にデフォで付いてくるとことか。
0247デフォルトの名無しさん2006/03/22(水) 21:14:16
>>242
sed, awk, sort, uniq, ...
0248デフォルトの名無しさん2006/03/23(木) 00:44:47
>>246
どこでも使えるのは魅力だよね。
ウェブサーバ付いてればGUIも作って遊べるし。
0249デフォルトの名無しさん2006/03/23(木) 00:56:51
むしろHTTP::Daemonでウェブサーバも作ってしまえ
0250デフォルトの名無しさん2006/03/23(木) 17:33:43
>>248
CGIの間違いか?

あ、いけね。ここは見て見ぬふりしないとまずかったか?
0251デフォルトの名無しさん2006/03/23(木) 18:40:01
GUIで合ってるけどな。
0252デフォルトの名無しさん2006/03/23(木) 18:45:51
でもperlとは直接関係ないし
0253デフォルトの名無しさん2006/03/23(木) 23:39:38
シェバン(#!)行についてなんですが、
いまだに
#!/usr/bin/perl
と書いてあるのを見ますが、
これって
#!/usr/env perl
とした方がよくありませんか?
それともenvを使うのは何かまずい点でも
あるのでしょうか?
0254デフォルトの名無しさん2006/03/23(木) 23:41:22
>>253
> #!/usr/env perl

/usr/env
/usr/env
/usr/env
/usr/env
/usr/env
0255デフォルトの名無しさん2006/03/23(木) 23:41:55
>>253
/usr/env が無い環境もある
0256デフォルトの名無しさん2006/03/23(木) 23:46:42
シェバン行って言うんだ・・・勉強になった
0257デフォルトの名無しさん2006/03/23(木) 23:56:59
せめてshebangって書け
0258デフォルトの名無しさん2006/03/23(木) 23:58:53
文字列変換処理でパターンマッチするたびに、マッチした箇所に対して
サブルーチンを呼び出し、サブルーチンの戻り値でマッチした箇所を書き換えたい
のですが、とりあえず以下のものは失敗でした

# fooにマッチした箇所すべてをhogesubサブルーチンの戻り値で
#書き換え
$hoge =~ s/foo/&hogesub/g;

やりたいことはお察しいただけるとおもいますが、うまくいく方法があれば
おしえてもらえないでしょうか?

0259デフォルトの名無しさん2006/03/24(金) 00:07:22
>>258
つperlop
$hoge =~ s/foo/&hogesub/eg;
0260デフォルトの名無しさん2006/03/24(金) 00:12:52
うお!すげぇ!
とperlopをみないでeg先に付与してやってみました。
本当にありがとうございました。
02612532006/03/24(金) 00:13:29
X /usr/env
○ /usr/bin/env

ごめん。ずっとshebangをシェバングって読んでて
最近シェバンと読むのだと知って天狗になってました
0262デフォルトの名無しさん2006/03/24(金) 00:21:34
>>238
POD 完備の PBP スタイルの綺麗な Perl と,やっつけ仕事の一行スクリプトの
両方を書けるやつとなら Perl で協同開発してもいいと思う
0263デフォルトの名無しさん2006/03/24(金) 00:30:15
関係ないがpingもピングって読む奴多いな
0264デフォルトの名無しさん2006/03/24(金) 00:32:11
>>253
setuidビットをセットするとenvだと動かなかった。
0265デフォルトの名無しさん2006/03/24(金) 00:35:31
>>263
PNGはピングと読むのが多くないか?
公式見解ではpingと同じ発音だそうだが。
0266デフォルトの名無しさん2006/03/24(金) 00:43:51
KINGKONG
キンコン
0267デフォルトの名無しさん2006/03/24(金) 01:15:31
>>284

kwsk!!
0268デフォルトの名無しさん2006/03/24(金) 01:16:14
上のは>>264の間違いでした

すみません。

0269デフォルトの名無しさん2006/03/24(金) 01:25:23
setuid系はsuidperlが使われるのでshebang関連で
不具合が起こることがあるね。
0270デフォルトの名無しさん2006/03/24(金) 01:27:08
>>268
kwskって言われても書いたままだが。
Debianでperl-suidを入れて、setuidしたperlスクリプトを動かそうとしたのだが、
shebangがおかしいと言われて動かなかった。
まあ、セキュリティ上の配慮なんだろうと思うが。
0271デフォルトの名無しさん2006/03/24(金) 01:38:26
〜ngはンでもングでもないので、単にカタカナ表記上の好み次第かと。
0272デフォルトの名無しさん2006/03/24(金) 02:42:01
ンでもングでも無いって言うか、そもそも
日本語のンって鼻音である事以外指定してないんだよな。

n でも m でも ng でもンになるし
逆に言えば、その3つのどれでも無い鼻音もンで表せる。

っつーか、スレ違いだな。
0273デフォルトの名無しさん2006/03/24(金) 10:02:09
>>269
>>270

ありがとお
0274デフォルトの名無しさん2006/03/24(金) 10:45:47
print "@{[ $var ]}";

これは何をやっているの?
0275デフォルトの名無しさん2006/03/24(金) 10:58:29
$varを要素とする無名配列のリファレンスを作成しそれをデリファレンス?
0276デフォルトの名無しさん2006/03/24(金) 11:04:08
ポポポポ( ゚д゚)゚д゚)゚д゚)゚д゚)゚д゚)ポカーン
0277デフォルトの名無しさん2006/03/24(金) 11:13:26
@{[...]}は変数じゃない式でも文字列に埋め込むかなり苦し紛れ気味だが
有名なワザ。しかし普通の変数を埋め込むのに使うのははじめて見た...
0278デフォルトの名無しさん2006/03/24(金) 11:42:52
>>277
>変数じゃない式でも文字列に埋め込む
え、それどういうの?具体例挙げておしえてください。
0279デフォルトの名無しさん2006/03/24(金) 12:27:10
sub hoge { return (1,2,3,4,5); }
print "sub hogeの結果は";
print &hoge;
print "です。";

#ってのが

print <<EOF;
sub hogeの結果は@{[&hoge;]}です。
EOF

#で済ませられるって事?
0280デフォルトの名無しさん2006/03/24(金) 12:47:50
そこまで書いて実行してみないのね。
0281デフォルトの名無しさん2006/03/24(金) 13:34:05
;が余分だって事に気がついたのは書き込んだ後だった。
0282デフォルトの名無しさん2006/03/24(金) 13:37:11
>>277
有名だったのか。知らなかった。

しかし、どういう時に使うんだ? リストの区切りを別に設定して
そのまま文字列に入れたいときとか? (区切り変えなくてもいいか)
でも全部定数ならそのまま書けばいいような…。
0283デフォルトの名無しさん2006/03/24(金) 15:30:26
use strict;
を配布スクリプトに含んでいるのをけっこうみかけるけど、
これって本来デバッグ用途じゃないの?
パフォーマンス的にみたら、
配布時には当然けずるべきだと思うんだけど
みなさんはどうしてまつか?
0284デフォルトの名無しさん2006/03/24(金) 16:00:32
>>283
俺はそのまま。

でもパフォーマンスは大差ないのでは? 最初のコンパイルにちょっと
時間が掛かるだけで動いてしまえば変わらないと思うが。
0285デフォルトの名無しさん2006/03/24(金) 16:18:56
1〜5を1秒おきにprintするプログラムとして,以下のようなプログラムを書いたのですが,
my @a = (1,2,3,4,5);
foreach(@a){
print $_;
sleep(1);
}
出力先が標準出力だと,5秒待ったあとに1〜5が同時にprintされてしまいました.
出力先を標準エラー出力に変えると思い通りの動作をしたのですが,標準出力では
このようなプログラムは書けないのでしょうか?
0286デフォルトの名無しさん2006/03/24(金) 16:28:21
予め $| = 1;
02872832006/03/24(金) 16:39:30
>>284

れすさんくす

でもmod_perlとかfastcgiとか使っていないサーバで
たくさんアクセスされるcgiスクリプト置いてたりしたら
結構深刻なのかなと思って。

Javaのassertみたいにコンパイルオプションで
オンオフを切り替えられたらいいのに。
0288デフォルトの名無しさん2006/03/24(金) 16:46:49
>>283
> みなさんはどうしてまつか?

use strict;

↓

#use strict;
02892852006/03/24(金) 17:02:30
>>286
できましたー!!ありがとうございました.
0290デフォルトの名無しさん2006/03/24(金) 17:18:03
>>283
CGIで耐えられる程度しかアクセスがないなら気にする事はないし、
mod_perlだのfastcgiだの使ってるならどうせ最初だけだから
気にする必要はない。いちいち外すのメンドイ。

0291デフォルトの名無しさん2006/03/24(金) 17:33:39
本当に use strict; を付けなくても安全なプログラムが書けるようなスキルの奴なら
そもそも2ちゃんで「けずるべきだと思うんだけど」なんて情けない質問はしない。
0292デフォルトの名無しさん2006/03/24(金) 18:19:58
>>263
え!ちがうの!?
0293デフォルトの名無しさん2006/03/24(金) 18:21:01
>>291
本当に use strict; を付けなくても安全なプログラムが書けるようなスキルの奴は
ちゃんと use strict; を付けてる。
0294デフォルトの名無しさん2006/03/24(金) 18:41:32
>>288
当然いつでも書きっぱなし。
理論上実行速度は速くなりますが、それはどうでもいいかな。
0295デフォルトの名無しさん2006/03/24(金) 18:44:36
use strictで書けない奴は平気でサポートメールを送ってくる。
use strictで書けないがuse strictをコメントアウト出来る奴は
少しの知識と自分で努力するという気持ちを持っている。
本来はデフォでuse strictにして明示的にuse indulgeするべきだと思う。
0296デフォルトの名無しさん2006/03/24(金) 18:56:56
>>292
まあ、香港は英語では Hongkong と書くが g は読まない、というのと似ている。
0297デフォルトの名無しさん2006/03/24(金) 19:03:07
>>292
まあどっちの発音しても大体通じるからどっちでもいいんじゃね?
0298デフォルトの名無しさん2006/03/24(金) 19:08:08
Hongkong は香港だが、 Kingkong はキングコング。
0299デフォルトの名無しさん2006/03/24(金) 19:29:25
use strict; と use warnings; ぐらいつけるの許してくれよ。
0300デフォルトの名無しさん2006/03/24(金) 19:38:14
数日前にパラメーターの送り方を聞いてperlvalとARGVだと教えてもらった224ですけど、
いろいろぐぐったのですが、どうしても分かりませんでした。

すみませんが、hoge.exeにabcと123を送るサンプルコードを書いてもらえないでしょうか。

馬鹿と言われるのは承知ですがどうか。。。
0301デフォルトの名無しさん2006/03/24(金) 19:40:36
>>300
どういう状況で何がしたいんだおまいは?
0302デフォルトの名無しさん2006/03/24(金) 19:44:52
>>294

え?ということはuse strict;したら
逆に速度が上がるってこと?
どうしてそうなるの?
0303デフォルトの名無しさん2006/03/24(金) 19:44:54
>>295
use indulgeって何かと思ったらstrictの逆という事ね

>>300
それ「Perlのプログラムに」じゃなくて「Perlから他のプログラムに」だから( ´д`;)
それなら@ARGVは違う。
色々方法はあるけれど簡単にやるならsystemの第二引数以降にでもつければOK。
system 'hoge.exe', 'abc', '123';


ところでActivePerl5.8付属のPPM3.4になってなんか使い勝手変わった?
どうもモジュール名で検索するとヒット率が落ちた気がする。
ディストリ名で検索すれば出てくるんだけどさ…今までもそうだったっけ?
0304デフォルトの名無しさん2006/03/24(金) 20:05:34
>>300
それだけなら

print "@ARGV¥n";

だけで分かるはずだけど…。
0305デフォルトの名無しさん2006/03/24(金) 22:12:12
>>303-304
ご、ごめんなさい。Perlのプログラムにパラメーターを送るです。。。。。

首を吊るべき間違いですが、どうか。。。
0306デフォルトの名無しさん2006/03/24(金) 23:32:24
イ�`
0307デフォルトの名無しさん2006/03/24(金) 23:58:25
>>305
ん?だから system 'hoge.exe', 'abc', '123'; じゃなくて?
「Perlのプログラムにパラメーターを送る」?意味わからんがな。
0308デフォルトの名無しさん2006/03/25(土) 01:31:04
>>300
日本語でおk
0309デフォルトの名無しさん2006/03/25(土) 01:31:51
>>298
KingKongもキンコンと読みます
0310デフォルトの名無しさん2006/03/25(土) 02:31:03
>>307
他のプログラムhoge.exeからPerlのプログラムにパラメーターを送って、
Perlのプログラムでhoge.plでパラメーターを受け取る方法です。。。

あるいはファイル名を指定して実行でperl c:\hoge.pl abc 123でパラメーターを受け取るプログラムを
作りたいのです。

>>308
ジュワッジュワワジュワジュワッ?ジュワワ。m(._.)m
0311デフォルトの名無しさん2006/03/25(土) 02:47:15
>>310
perlにパラメータ送る方法は>>303に書いてあるだろ。無視すんな。
hoge.exeってのはperlで書かれたプログラムなのか?
0312デフォルトの名無しさん2006/03/25(土) 02:50:35
--hoge.pl--
#!/usr/bin/perl
print "argv is $ARGV[0],$ARGV[1]";

結果
argv is abc,123

これでも分からなければ父さんお手上げ
0313デフォルトの名無しさん2006/03/25(土) 04:00:03
ディレクトリの存在チェックをしたいのですが、うまくいきません。
'表と'いう文字が、原因だと思いますが、
このディレクトリ名をかえるしかないでしょうか?
いい方法があったら教えてください。

# 末尾に'表'というディレクトリ名があるか判定する。
mkdir("ペケペケ表\");
if (-d "ペケペケ表\") {
print "ある\n"; # 本来はこっち
} else {
print "ない\n"; # でもこっちがよばれる
}


OS : Windows2000 SP4
Perl : v5.8.8 built for MSWin32-x86-multi-thread
0314デフォルトの名無しさん2006/03/25(土) 04:10:11
シングルクォート使えよ
0315デフォルトの名無しさん2006/03/25(土) 04:31:36
"表" の 2byte目 が "\" だから
0316デフォルトの名無しさん2006/03/25(土) 04:38:26
mkdir "\x83\x79\x83\x50\x83\x79\x83\x50\x95\x5c";
if(-d "\x83\x79\x83\x50\x83\x79\x83\x50\x95\x5c"){ print 'Success'; }else{ print 'Error'; }

でもエラーになるのはどうしてwhyなぜ
0317デフォルトの名無しさん2006/03/25(土) 05:32:18
末尾にあるパスセパレータの\を勝手に削っちゃってる悪寒
0318デフォルトの名無しさん2006/03/25(土) 06:01:48
解決しました。
ありがとうございます。

存在チェックはWin32API(GetFileAttributes) をつかって判定することにしました。
ディレクトリ内のファイル一覧取得は、
DIRコマンドをパイプで取得することにしました。
0319デフォルトの名無しさん2006/03/25(土) 07:52:50
http://www.thinkgeek.com/tshirts/coder/321a/
これ欲しいな
0320デフォルトの名無しさん2006/03/25(土) 08:56:56
買えばいいんじゃないかな
0321デフォルトの名無しさん2006/03/25(土) 10:40:13
学生だからクレカが無いのよ
0322デフォルトの名無しさん2006/03/25(土) 12:21:18
学生ならクレカ持っててもいいだろうと思う
審査ザルだから学生のうちにとっておくことをすすめる
0323デフォルトの名無しさん2006/03/25(土) 13:29:41
>>321
つ JCB J-1カード
0324デフォルトの名無しさん2006/03/25(土) 15:38:10
IOCモジュールについて語りませんか?
0325デフォルトの名無しさん2006/03/25(土) 16:11:01
また来たよ。

0326デフォルトの名無しさん2006/03/25(土) 18:08:19
なら望み通りオリンピックについて語ろうか。
0327デフォルトの名無しさん2006/03/25(土) 18:50:11
>>313
既に解決しているようだけど、winなら
-e join('/',$dirname,'nul');
が使える気がする。
DOS時代の記憶なので、2000だと駄目かもしれん。

mkdir "ペケペケ表\";
print "ある\n" if -d "ペケペケ表\" || -e "ペケペケ表\/NUL";
0328デフォルトの名無しさん2006/03/25(土) 22:07:13
Win32用 ActivePerl zip 版の Installer.bat の改行コードが LF な件……
0329デフォルトの名無しさん2006/03/26(日) 01:03:39
>>328
.bat ファイルって、LFだとダメだったっけ?
0330デフォルトの名無しさん2006/03/26(日) 01:15:35
>>329
うちのmeさんではダメですた……
0331デフォルトの名無しさん2006/03/26(日) 07:06:37
>>330
そこで Perl ですよ!


……あれ?
0332デフォルトの名無しさん2006/03/26(日) 07:43:36
Microsoft Installer 2.0だろ。
0333デフォルトの名無しさん2006/03/26(日) 19:54:50
 最近ActivePerlを導入しまして。
 CSVを分解するのにsplitを利用したのですが、連続するデリミタやスペースを
一纏めにデリミタ扱いするにはどうするのでしょう?
 この例だと、タブ文字とカンマが連続するからカラ配列が途中に入ってしまって。
 初歩的な内容ですよね?


$readline ="16\t,130118\t,05,12,13,29,34,35,30,";
#$readline ="16,130118,05,12,13,29,34,35,30,";

open(DST ,">./test.txt" ) or die "file open error DST : $!\n";

@readarray = split(/\s|,/ ,$readline);
# 第n回。
$top = shift(@readarray);
# 日付。
$day = shift(@readarray);
# 末尾。
$ende = pop(@readarray);
for($i =0; $i < @readarray; $i++ )
{
# body.
print DST " $i:$readarray[$i]";
}
print DST "\n";

exit;
0334デフォルトの名無しさん2006/03/26(日) 20:23:37
>>333
つ \s*
0335デフォルトの名無しさん2006/03/26(日) 21:11:17
>>333
- @readarray = split(/\s|,/ ,$readline);
+ @readarray = split(/\s*,\s*/ ,$readline);

これでどうでしょ?
0336デフォルトの名無しさん2006/03/26(日) 21:21:37
mod_perlでuse libを使うときの質問です。
環境 perl-5.8.5 mod_perl-1.99_16-3 httpd-2.0.53 fedora3
use lib 'ore/lib';
とした場合、Apacheプロセスに読み込まれる初回起動時は正常にlibが読み込まれ
@INCにore/libが入ります。また%INCにlib.pmがロードされます。
2度目のアクセス時にはmod_perl時にはBEGINは初回にしか実行されずlib.pmは既にロード
されているので実行されずに@INCにore/libは追加されません。
初めに全てのモジュールを読み込むのであればこの挙動で問題ないのですが
処理によって動的にモジュールを読む場合、不具合が出てきます。

$INC{'lib.pm'}を消して強制的に読み直す、Setenv PERL5LIBを設定する、use libではなく
unshift @INC, 'ore/lib'とする等、いくつか解決法はありますがしっくりきません。
元々こういった用途ではuse libを使うのは好ましく無いのでしょうか。
0337デフォルトの名無しさん2006/03/26(日) 22:05:14
>>334
>>335
うわ、解決しました。
ありがとうございます!

でも、理解出来ていない漏れ┐(´∀`)┌
もっと場数経験します。
0338デフォルトの名無しさん2006/03/26(日) 22:06:03
「Perl使いの特徴」
http://pc8.2ch.net/test/read.cgi/prog/1138882234/
0339デフォルトの名無しさん2006/03/26(日) 22:13:40
Windows環境でPerlを使う場合、ActivePerlと比較して PxPerlを使うメリットというのは
・pugs が使える
・エディタ SciTE が使える
・GDライブラリがはじめから入っている
程度でしょうか?
ActivePerlから乗り換えるメリットはあるでしょうか?
0340デフォルトの名無しさん2006/03/26(日) 22:40:32
>>333
素直にText::CVSとか使えば?

>>336
mod_perl使うならstartup.plとかでuseしておきなよ。
libもそうだけど、必要なモジュールはできればstartup.plで読み込んでおいたほうがメモリの節約になるでよ。

>>339
個人的にはppmを使いたいのでActivePerl使ってる。
Win32でコンパイル環境あればCPANでいいんだけどね……。

0341デフォルトの名無しさん2006/03/26(日) 22:50:45
Text::CVS
Text::CVS
Text::CVS
Text::CVS
Text::CVS

03423332006/03/26(日) 23:42:56
>>340
この通り正規表現も満足に扱えていない初心者ですが、
扱いは容易なのでしょうか?
ググってみたら類似情報釣れましたけど、まだリファレンスも分かっておりませんで。

主にラクダ本2版で学習していますが、早く3版2冊欲しいなあ。
0343デフォルトの名無しさん2006/03/27(月) 01:13:27
>>342
> この通り正規表現も満足に扱えていない初心者ですが、
> 扱いは容易なのでしょうか?
> ググってみたら類似情報釣れましたけど、まだリファレンスも分かっておりませんで。
1,2,"white gyouza", 3

のようなのを処理する必要があるのなら使った方がいいね。

> 主にラクダ本2版で学習していますが、早く3版2冊欲しいなあ。

第2版があるなら、第3版いらないじゃん。
0344デフォルトの名無しさん2006/03/27(月) 01:22:55
さすがに第1版しか持ってなかったら買い直した方がいいけどな
0345デフォルトの名無しさん2006/03/27(月) 02:13:23
http://www.site-cooler.com/kwl/perl/
ここで学んでいるのですが"未定義"という表現がよくわかりません
Perlにおいての未定義とはどういうことですか?
0346デフォルトの名無しさん2006/03/27(月) 02:52:32
最近perlを始めたミジンコですが配列の処理でつまずいています。
$sample = 170;
@data = <<DATA_END;
43<>48
90<>110
160<>199
DATA_END
$ans = "範囲外です";
foreach (@data) {
($a_1,$a_2) = split(/<>/,$_);
if (($sample >= $a_1)&&($sample <= $a_2)){
$ans = "範囲内です";
}
}
print $ans # この場合は2行目の範囲内なので"範囲内です"と表示したいのですが・・・
上記のスクリプトは
@dataの各行毎に<>で挟まれた値の範囲に$sample値が存在するかどうかを判定する目的で
上記のようなプログラムを書いてみたのですが@dataの一行目しか参照してくれません
よろしければどなたかおかしな所と正しい書き方を指摘していただけませんでしょうか
宜しくお願いいたします。目標は@dataと$sampleの範囲を下記のようにを2次元的なものに広げて

$sample = '100_48'
@data = <<DATA_END;
43<>48/73<>115
90<>110/45<>50
160<>199/0<>255
DATA_END
(この場合$sampleは@dataの2行目に該当するように)
のようなデータの処理を行いたいと思います。
0347デフォルトの名無しさん2006/03/27(月) 03:09:27
>>346
> よろしければどなたかおかしな所と正しい書き方を指摘していただけませんでしょうか
おかしな所: まったくデバッグしていない所
0348デフォルトの名無しさん2006/03/27(月) 03:11:44
今perlでプログラムを書いているのですが、
データの読み込みで、
必要になったときのみファイルから読み込んで実際にデータを扱う、
ということをしたいのですが、どういう形で実現するのがよいでしょうか。
データを利用する側から、いちいちデータを読み込むタイミングを指定してやるのも
変ですし・・・・。

微妙にperlから質問がずれていますが、
分かる人いたらお答えお願いできませんか?
0349デフォルトの名無しさん2006/03/27(月) 03:22:04
>>345
変数とはつまりデータの入れ物なんだけど、そこに何も入っていない状態、それが未定義。
もしCやJavaをやっていればNULLポインタに近いものといえばわかってもらえるだろうか…

>>346
配列に改行の入った文字列を入れようとしても自動で行ごとには分かれない。
多分<>をみて出来ると思っちゃったんだろうけど、これはコンテキストによって
動作が変わるように作られてるから特別だと思ったほうが良い。
逆に言えば<>でファイル等から読み込んでやろうとすればちゃんと動くはずだよ。
@data = split /\n/, <<DATA_END;
43<>48
90<>110
160<>199
DATA_END

>>348
必要になったときに読み込めばいいんじゃないかな:-p
もっとどういう物を作っているかとか構造だとか
インターフェイスとか詳しく書いてもらえないと解らん。
もしくはエスパーを待て。
0350デフォルトの名無しさん2006/03/27(月) 04:51:04
>>302
宣言の基本なんだけど。
そりゃ明示的にstrictしたらPerlも断定して処理する。
プログラマも断定して読めるから読むのが速くなるのと同じ。
変なコト起きれば実行もせずコンパイルフェーズでエラー吐いて終わるだけ。

>>345
未定義は数値か文字かリファレンスか分からない状態、またはそれ以前の値。
ブールで偽になる値だけど、数値としての偽でもなく、文字としての偽でもない。
何も無いの偽って感じ。
例えば、一度も使ってない変数名だけ書いたらこの状態になるし、
関数とかから未定義値が返ってくることもある。
サブルーチンなら return(); って書いたら未定義値が返る。
変数を数値型や文字型にフォーマットするには
$hoge = 0;
$hoge = "";
とか書いておく。(これで分かりやすいし-wなどの警告も出なくなる)
関数などの戻り値が未定義がどうか知りたいなら
definedを使う。

>>346
ちゃんと読んでないから知らんけど
@data = (
'43<>48',
'90<>110',
'160<>199',
);
こうじゃないんだろうか。
配列の中身くらい出力で確認し(ry

>>348
'ファイル読み込み' if(必要で真);
03513502006/03/27(月) 04:58:54
>>345
書き忘れた。
変数を初期化(未定義に戻す)する時は
undef
を使う。
0352デフォルトの名無しさん2006/03/27(月) 13:34:26
>>345
「未定義」という表現は、確かに分り難い。
見た感じ「未定義値」の事だと思うので、未定義値について。

未定義値は「未定義である事を表す値」で、数値演算分野のNaN(非数)と似た概念。
未定義値には専用の(内部的な)型がある。
つまり、Perlの未定義値は、値であると同時に(未定義型という)型でもある。

Perlの型は、必要に応じて文字列,数値,論理値に自動的に変換されるが、
「未定義型」は空文字列,0,偽に変換される。

全ての変数は初期値として「未定義(型|値)」を持つ。
そして、(明示的な|暗黙の)代入によって他の型(値)になる。
また、(明示的な|暗黙の)代入によって、「未定義(型|値)」にする事もできる。

ま、「未定義という特別な値(型,状態)がある」程度の感覚で構わないのでは?
0353デフォルトの名無しさん2006/03/27(月) 14:30:33
winな環境で、
print 1;
というようなスクリプトを作って、
.plファイルをダブルクリックすると、
コマンドプロンプトが開いて、
一瞬のうちに閉じてしまいますが、
これを閉じないようにするにはどうすればよいでしょうか?
0354デフォルトの名無しさん2006/03/27(月) 14:56:21
最後に<STDIN>入れたら?
0355デフォルトの名無しさん2006/03/27(月) 15:53:53
CHECE { `pause` }
03563532006/03/27(月) 16:33:17
>>354
ありがとう。なるほど、確かにこれならできますね。
ただ、ちょっとしっくりきませんが。

>>355
!!!!!うまくいった。ありがとう。
でもCHECEなんて初めて見たよ。
日本のgoogleで「perl chece」で検索してもヒットしないよ。
らくだ本に載っていますか?
よかったらちょこっとだけ説明してくれませんか?
03573532006/03/27(月) 16:37:04
>>355
らくだ本みても索引に載っていなかった。
一体何なのCHECEって?
0358デフォルトの名無しさん2006/03/27(月) 17:45:15
Linux だとエラーが出るよ。(UNIX系OSでは不要な機能なのでどうでもいいが)

$ cat x
#!/usr/bin/perl
print "aaa\n";
CHECE { `pause` }
$ perl x
aaa
Can't locate object method "CHECE" via package "pause" (perhaps you forgot to load "pause"?) at x line 3.
$

Windows 用 Perl だけの機能かもね。
03593532006/03/27(月) 18:15:59
checeについてローカルにインストールされたActivePerlのドキュメントに
grepかけてみたけどヒットせず、
海外でぐぐってもそれらしいページにヒットせず
なんなんだ〜
0360デフォルトの名無しさん2006/03/27(月) 18:30:07
windowsで実験したけどCHECE じゃなくて適当な文字でもストップしたよ。
たんに`pause`だけが聞いてるような希ガス
0361デフォルトの名無しさん2006/03/27(月) 18:32:09
ヒント perldelta 5.8 BEGIN END CHECK INIT
0362デフォルトの名無しさん2006/03/27(月) 18:32:46
sub END { <STDIN> }
03633532006/03/27(月) 18:45:19
やっと謎が解けました。
自分のあほさ加減にいやけがさしました。

`pause`ってバッククォータだったのですね。
'(シングルクォータ)とみまちがえてました。

pauseはDOSのコマンドだったのですね。
お騒がせしました。
バカな僕を許して下さい。すんません。
0364デフォルトの名無しさん2006/03/27(月) 18:47:37
ただ

CHECE { }
ってのは一体何だったのか、
これがCHECKのtypoだとしたら、
なぜわざわざCHECKブロックでpauseする必要があるのか
わかりませんが。

print 1;
`pause`;

だけで期待の動作になるのですが、、、
0365デフォルトの名無しさん2006/03/27(月) 18:49:08
これだからperlは・・・
0366デフォルトの名無しさん2006/03/27(月) 18:49:55
ところで実用Perl第二版発売しましたが、
読んだ方おられますか?
どうでしたか?
0367デフォルトの名無しさん2006/03/27(月) 18:53:47
やるんだったらENDブロックだよな。。
0368デフォルトの名無しさん2006/03/27(月) 19:07:41
これだからperlは最高だ。
0369デフォルトの名無しさん2006/03/27(月) 19:20:19
つか、いちいちスクリプトにそんなの仕込むのめんどくね?
俺は.plの関連付けをPerl.exeへの中継batにして、その中で
pauseするようにしてる。
0370デフォルトの名無しさん2006/03/27(月) 19:54:31
>>369
それどうやるの?

perl
pause

っていうバッチファイルつくって関連付けしても
当然うまくいかない。
実行したperlスクリプト名がバッチファイルから
わかればいいんだけど、やりかたがわからない
0371酩酊 ◆TWARamEjuA NGNG
(´-`).。oO(「windowsでperlなスレッド」がいるのかなぁ。。。)
0372デフォルトの名無しさんNGNG
@echo off
perl %1
echo.
pause

これでどうよ
03733712006/03/27(月) 20:11:32
>>371
ごめんおれが悪かった馬鹿だった

>>372
できた
%1でショートカット元のファイル名が
取得できるのね、というか
バッチファイルへの第一引数が取得できるのね
ありがとう!!
0374デフォルトの名無しさん2006/03/27(月) 20:41:21
(´-`).。oO(ry)
0375デフォルトの名無しさん2006/03/27(月) 21:33:45
#!/usr/bin/perl

$SIG{'INT'} = 's';

while (1) {A:}

sub s {
print "トラップしました";
goto A:
}

実行したスクリプトに対してC-cを発行して、そのSIGTERMを
受けても終了しないようなものを作りたいのですが
上記のスクリプトは実行してC-cを押すと
Can't find label A
となってしまいます
どこがまずいのでしょうか?

あとgotoはできるだけ使うなとの情報があったのですが
gotoを使わずにINTから抜ける方法ってないでしょうか?

sub s {
print "トラップしました";
}

だけにすると何も受け付けなくなります
0376デフォルトの名無しさん2006/03/27(月) 21:55:16
>>375
「トラップしました」を表示する必要はないんだよな?
$SIG{INT} = 'IGNORE';
とやったらどうなる?

> sub s {
> print "トラップしました";
> }
> だけにすると何も受け付けなくなります
漏れの環境(perl5.8.7のcygwinおよびperl5.8.5のLinux2.6(CentOS))では再現しないな。
ちゃんと元のループに戻ってくる。環境は?

テストに使用したコード:
perl -e '$SIG{INT} = \&t; while(1){print scalar <>}; sub t{print "Traped!\n"}'
03773752006/03/27(月) 22:31:22
>>376
すまそ勘違いだった
C-c押すとちゃんと反応していることがわかった

gotoに関してのみの質問に変更させてください
0378デフォルトの名無しさん2006/03/27(月) 22:37:47
>>377
> gotoに関してのみの質問に変更させてください
gotoを消せばよい。
0379デフォルトの名無しさん2006/03/27(月) 23:51:06
>>377
Perl 5.8.7 の perlwin32.pod には

Signal handling may not behave as on Unix platforms (where it
doesn't exactly "behave", either :). For instance, calling C<die()>
or C<exit()> from signal handlers will cause an exception, since most
implementations of C<signal()> on Win32 are severely crippled.
Thus, signals may work only for simple things like setting a flag
variable in the handler. Using signals under this port should
currently be considered unsupported.

と書かれている。
使って駄目だったのなら、gotoも(win32だと)ハンドラ内では使えない機能なのだろう。
0380デフォルトの名無しさん2006/03/28(火) 01:05:20
>>366
発売と同時にゲットした俺がきましたよ.
現代的内容つーか別の本になってた.著者もちがうし.
Tk とかもうありません.CPAN ネタが増えました.
XS はちょろっとでてくるけど Inline のほうが比重が多いです.
0381デフォルトの名無しさん2006/03/28(火) 02:22:50
すみません、教えてください。
ウィンドウズでperlを使っています。

カレントディレクトリから一つしたのフォルダに
テキストファイルを出力しようとして

open(OUT, ">card/$filename.txt"); 
#$filenameにはファイルの名前が入っています

と書いて、一つ下のフォルダ(card)にテキスト
ファイルができることはできるのですが$filename
が展開されず、消えてしまって.txtというファイルが
出力されてしまいます。

open(OUT, ">card\\$filename.txt");とか
open(OUT, ">card\$filename.txt");とか
open(OUT, ">card\\.\\$filename.txt");とか
open(OUT, ">card/"."$filename".".txt");とか

いろいろやってみたのですがうまくいきません。
自分では/と$filenameが重なるのが原因で思った
通りに動かないと思うのですが、解決できませんでした。
どうすれば一つ下のフォルダに変数が展開された状態
でテキストファイルを作ることができるでしょうか?
0382デフォルトの名無しさん2006/03/28(火) 02:28:07
>>381
> open(OUT, ">card/$filename.txt"); 
に問題はないよ。
本当にちゃんと$filenameにファイル名が入っているのか確認した?
0383デフォルトの名無しさん2006/03/28(火) 03:02:25
>382
あ、ありがとうございます!解決しました!

本当に恥ずかしい限りです。

my関数をよくわかってないせいで

sub xxx{

while(1){

 my($filename)="aaa";
 last;
}

open(OUT, ">card/$filename.txt");

}

というように無限ループの中でmyを使って初期化ていたのですが
これが原因でした。my($filename)="aaa";を無限ループの前か
後ろに書いたらうまくいきました。

冷静に考えれば.txtというファイルできたということは$filenameがundefの状態で
展開されたということですよね、本当にありがとうございました!
0384デフォルトの名無しさん2006/03/28(火) 03:12:05
>>383
この辺りを読んでおくことをお勧めする。
myがどういうものなのか解りやすく解説されてる。
ttp://www.graco.c.u-tokyo.ac.jp/~nishi/programming/perl/my.html
ttp://www.futomi.com/lecture/local/index.html
0385デフォルトの名無しさん2006/03/28(火) 03:26:53
>384
すみませんわざわざ!読んでだんだん精進していきます。
0386デフォルトの名無しさん2006/03/28(火) 08:29:19
10101111 のような文字列を、後から (データの一部なので最初に 0b10101111 とは書けない)
二進数として識別する簡単な方法はないでしょうか?
0387デフォルトの名無しさん2006/03/28(火) 09:40:28
>>386
http://mikeneko.creator.club.ne.jp/~lab/perl/numerical_transform/#h3
0388デフォルトの名無しさん2006/03/28(火) 09:41:03
>>380
辛抱たまらず買うことにしました
ありがとう
0389デフォルトの名無しさん2006/03/28(火) 10:21:33
Attempt to free unreferenced scalar
とアパッチエラーなのかな?がでまくっています。
これメモリ異常っぽいんですが、どういうことやってると起きやすいですか?
perlだからメモリを確保・開放なんてやってないのにな…
0390デフォルトの名無しさん2006/03/28(火) 10:50:47
>>389
APTの3番とRPPの5番あたりがよく問題を起こすらしい。
0391デフォルトの名無しさん2006/03/28(火) 11:43:32
"AbcDefGhi"という文字列を、
"_ABV_DEF_GHI"と変換する簡単な方法はありますか?
0392デフォルトの名無しさん2006/03/28(火) 11:46:37
$a = "AbcDefGhi";
$a = "_ABV_DEF_GH";
0393デフォルトの名無しさん2006/03/28(火) 11:56:03
$str =~ s/([A-Z][a-z]+)/"_".uc($1)/ge;
$str =~ s/B/V/g;
$str =~ s/I//g;

>>392
変数に $a や $b を使うなと習ったろうがこのバカチンが。
03943912006/03/28(火) 11:59:47
ごめんなさい。"_ABC_DEF_GHI"の間違いでした。
でも、
$str =~ s/([A-Z][a-z]+)/"_".uc($1)/ge;
で一発でした。ありがとうございます。
0395デフォルトの名無しさん2006/03/28(火) 12:00:47
ち、ちんこは関係ないじゃないっ!
0396デフォルトの名無しさん2006/03/28(火) 12:06:50
$s = 'ん';
print "ち$sこ\n";
0397デフォルトの名無しさん2006/03/28(火) 15:51:05
jperl で
Error: Runtime exception
てでますた。これナニ?
0398デフォルトの名無しさん2006/03/28(火) 16:01:19
そのjperlそのものがどっかバグってんじゃない?
0399デフォルトの名無しさん2006/03/28(火) 16:19:19
フツーに動いてたんだけど、処理データが
飛躍的に多くなったらこうなりますた
0400デフォルトの名無しさん2006/03/28(火) 16:39:29
情報小出し者の出現です!!
0401デフォルトの名無しさん2006/03/28(火) 16:49:02
隠す気はありませんので質問があれば何でも聞いてくれたまい
0402デフォルトの名無しさん2006/03/28(火) 16:53:37
>>397
「これナニ?」って聞かれたら、実行時エラーです、としか答えようがないな。
他に質問があれば何でも聞いてくれたまい
0403デフォルトの名無しさん2006/03/28(火) 17:04:27
ActiveStateが提供してる.net対応perlの情報があるサイトってどこかありますか?
0404デフォルトの名無しさん2006/03/28(火) 17:05:52
>>397
error = 誤り
runtime = 実行時
exception = 例外
0405デフォルトの名無しさん2006/03/28(火) 17:07:18
原因は?配列とかにデータを詰め込みすぎってことだすか
0406デフォルトの名無しさん2006/03/28(火) 17:15:03
>>404
お前優しすぎ
0407デフォルトの名無しさん2006/03/28(火) 17:18:04
>>397
ナゾナゾですか?! よーし負けねーぞー
0408デフォルトの名無しさん2006/03/28(火) 17:20:37
こんな断片的な情報からでもそれなりに答えを返してくれるGoogle先生って凄いな。
http://www.google.com/search?hl=ja&lr=lang_ja&ie=UTF-8&oe=UTF-8&q=%22Error%3A+Runtime+exception%22+jperl
とりあえずこのスレの過去ログに同じ質問があると教えてくれたので貼っとく。
http://pc5.2ch.net/tech/kako/1060/10606/1060689008.html#R65
0409デフォルトの名無しさん2006/03/28(火) 17:36:29
ども。 jperl が悪いのか〜。
0410デフォルトの名無しさん2006/03/28(火) 18:51:53
you are = 君は
fool = 馬鹿
0411デフォルトの名無しさん2006/03/28(火) 18:53:07
どうでもいいけど今時JPerlかよ
0412デフォルトの名無しさん2006/03/28(火) 18:55:26
△ fool
◎ foolish
0413デフォルトの名無しさん2006/03/29(水) 11:33:11
変数に$aや$bを使うなと書かれていますが
どうしてですか?

sortのときに使う$aや$bは局所化されてる
から問題ないと思うんだけど
他に理由があるの?
変数の中身が判別しにくいという視認性
の問題以外に。
0414デフォルトの名無しさん2006/03/29(水) 12:27:19
クソな変数名つけんじゃねえ
0415デフォルトの名無しさん2006/03/29(水) 12:28:35
あらゆる点でダメダメ。
そんな変数名をつける奴はプログラミングはやめとけ。
0416デフォルトの名無しさん2006/03/29(水) 12:31:08
視認性の問題以外に
0417デフォルトの名無しさん2006/03/29(水) 12:31:54
use strict をすり抜けるから怖い。
0418デフォルトの名無しさん2006/03/29(水) 12:37:40
ttp://perldoc.jp/docs/modules/File-Slurp-9999.01/extras/slurp_article.pod
より
「
そしてこれは、open呼び出しの必要を削除した、そのコードの変形です:

my $text = do { local( @ARGV, $/ ) = $file ; <> } ;
$fileの中のファイル名はローカル化された@ARGVに設定され、
nullのファイル・ハンドルは@ARGVの中のファイルからデータを読み込むために使われます。

スカラーに代入する代わりに、上記の丸呑み全てを配列に代入することができます。
そしてそれはファイルを取得しますが、($/が行の終わりの印として使われて)行に分割されます。
」

my $text = do { local( @ARGV, $/ ) = $file ; <> }
っていう便利なコードで、openも使わずに$fileの内容を一気読みで丸呑みして$text
に代入できるというのはわかったのですが、
そのあとの

「スカラーに代入する代わりに、上記の丸呑み全てを配列に代入することができます。」
「行に分割されます」

というのがわからない。
上記で取得した$textに対して
@list = $text;
としたって
$textの内容が$list[0]に代入されるだけで行には分割されない
$textの内容が
a
b
c
だったとしたら、$list[0]=a,$list[1]=b,$list[2]=cとはならない。
どうして?
0419デフォルトの名無しさん2006/03/29(水) 13:37:54
@text = do { local(@ARGV, $/) = @file; <> };
# @fileで指定した複数のファイルがファイル毎に@textの要素として読まれる

とか

@text = do { local(@ARGV) = $file; <> };
# $fileが行ごとに@textに読まれる

のような使い方を言ってるんだと思うが、書いた奴に聞かないと
よくわからんね。
0420デフォルトの名無しさん2006/03/29(水) 13:51:26
>>418
> 「スカラーに代入する代わりに、上記の丸呑み全てを配列に代入することができます。」
> 「行に分割されます」
>
> というのがわからない。

分からないなら原文に当たれ。

酷い訳だな。
0421デフォルトの名無しさん2006/03/29(水) 14:43:06
>>420
原文あたったけどよくわかんなかったので訳を責めるのはかわいそう。

Instead of assigning to a scalar, all the above slurps can assign to an
array and it will get the file but split into lines (using C<$/> as the
end of line marker).

ttp://search.cpan.org/src/URI/File-Slurp-9999.12/extras/slurp_article.pod
04224182006/03/29(水) 15:19:35
>>419

なるほど、そういうことをいっていたんですね
よくわかりました。超さんくす。
0423デフォルトの名無しさん2006/03/29(水) 15:24:27
>>421
いや、ひどい訳だろう。
0424デフォルトの名無しさん2006/03/30(木) 00:22:00
ICOについて語りませんか?
0425どうぞ叩いてください2006/03/30(木) 03:17:17
>>424
メッセージ届いたときの「カッコー!」って音が大好き。
携帯メールの着信音もあの音にしちゃったよw
0426デフォルトの名無しさん2006/03/30(木) 03:26:18
>>424
> ICOについて語りませんか?

ゲーム板行け!!
0427デフォルトの名無しさん2006/03/30(木) 05:21:38
>>425
それは流石に古くないか?
0428デフォルトの名無しさん2006/03/30(木) 19:00:35
スレを間違えたのかと思いました
0429デフォルトの名無しさん2006/03/30(木) 21:36:54
Class::DBIをつかってOracle9iにつないでいます。
ORA-01000が出るんですが、原因がわかりません。
常に出るわけではなく、なにをきっかけにしているのか
ずーっと悩んでいます。

Class::DBIを使った場合、カーソルが開く(もしくは閉じる)タイミングというのは
いつになるんでしょうか?

なにかヒントのようなものでもよいので
お願いします。
0430デフォルトの名無しさん2006/03/30(木) 22:55:19
ISOについて語りませんか?
0431デフォルトの名無しさん2006/03/31(金) 02:01:30
磯釣り
0432デフォルトの名無しさん2006/03/31(金) 08:00:19
どうでもいいけどISOってアイソってテレビで読んでた
IPAもアイパなんだろうか
0433デフォルトの名無しさん2006/03/31(金) 12:07:07
ISO野波平
0434デフォルトの名無しさん2006/03/31(金) 13:26:51
昔はCDライティングを「磯焼き」と呼んだものだが
0435デフォルトの名無しさん2006/03/31(金) 13:59:22
Autrijus たんいつの間にあんなことに・・・
0436デフォルトの名無しさん2006/03/31(金) 16:33:28
>>435
Wikipediaみてみそ
俺も驚いた
0437デフォルトの名無しさん2006/03/31(金) 17:41:54
>>435-436
くわしくplz
0438デフォルトの名無しさん2006/03/31(金) 17:48:20
自己解決した。
写真みて、へぇ、女の人だったんだとおもたよ。
これからもよろしくね、鳳たん。
0439デフォルトの名無しさん2006/03/31(金) 22:59:48
>>438
blogの方には臍出し写真も… (;´Д`)ハァハァ
0440デフォルトの名無しさん2006/03/31(金) 23:02:07
>>434
呼ばねーよw
0441デフォルトの名無しさん2006/03/32(土) 00:27:08
>>434
> 昔はCDライティングを「磯焼き」と呼んだものだが
10年くらい前、そう呼んでたね。
0442デフォルトの名無しさん2006/03/32(土) 02:10:49
>>429
マルチ乙
0443デフォルトの名無しさん2006/03/32(土) 19:01:53
perlからwin32apiは使えますけど、
.netapiは使えないのでしょうか?
0444デフォルトの名無しさん2006/03/32(土) 19:10:19
ラリーがperl6の開発資金生活費として使い込んだり、
オライリーをリストラされたってのは本当?
0445デフォルトの名無しさん2006/03/32(土) 20:36:54
生活資金として使うのは問題ないんじゃない?
生活費を稼ぐべき時間をPerlの開発に充当するんだったらね。
0446デフォルトの名無しさん2006/03/32(土) 21:58:09
ラリーの一人や二人食わしてやってもいいじゃん。世界的に貢献してんだからさ。
0447デフォルトの名無しさん2006/03/32(土) 22:07:21
>>444の質問見たの3回目くらいなんだけど何かそういう情報元あんの?
俺のような認識でこの質問が出たのかも知れんけど。
0448デフォルトの名無しさん2006/03/32(土) 22:18:03
おれYAPCでラリーに握手してもらったよw
0449デフォルトの名無しさん2006/03/32(土) 23:07:20
WindowsXPでActivePerl5.8.8.816に上げたら俺様のスペシャルラーメンタイマーが
異常なんですけどコードに問題ありますか?
DOS窓開いてperl timer.plで起動すると問題ないんですけどアイコンの
ダブルクリックで起動してDOS窓からフォーカスが外れると
CPU使用率が100%になるんですけど。

$| = 1;
$time = time + 3 * 60;
while (1) {
if (time <= $time) {
printf "%05d\r", $time - time;
} else {
print "\a";
}
sleep 1;
}
0450デフォルトの名無しさん2006/03/32(土) 23:58:50
>>448
YAPCいってきたなら、ちょっとくらい感想を述べてくれもていいじゃない

誰のどんな発表がすごかった?

(個人的にはDANがどうしてあんなにえらそうなのか知りたいが)
0451デフォルトの名無しさん2006/04/02(日) 00:05:44
>>449
すいません。笑わせてもらいました。
0452デフォルトの名無しさん2006/04/02(日) 00:09:01
>>449
ちょw
ワロタw
0453デフォルトの名無しさん2006/04/02(日) 00:24:03
>>449
ちょw、それ永久ループw
0454デフォルトの名無しさん2006/04/02(日) 01:43:50
ごめん、何がおもしろいのかわからん。
時間がきたら1秒に一回ビープ鳴らすんだよね?

sleepしてるし、なんで100%になるんだろう。
0455デフォルトの名無しさん2006/04/02(日) 05:14:39
>>450

448じゃないけどDamian Conwayにサインもらった俺が来ましたよ。

> 誰のどんな発表がすごかった? 

Damian に 「sensei」と呼ばれた高橋会長の発表といったら怒る?
まじめに言うと、すごいというのとはちょっと違うけど、Damianの
初日の発表は大学の講義でも受けているようで印象に残った。
スライドはまだのようだけど、MP3の録音データは公開されてるから
よかったら聞いてみそ。


まあPerl Best Practice を買っていながらちゃんと読んでいなかったせいも
あるんだろうけど。

あとは Audrey Tangの発表といいたいところだけど、基本的には
ほかのカンファレンスなんかで発表したのを手直しして使っていた
ようで、彼女のblog追いかけていれば見覚えがあるようなものだった。


> (個人的にはDANがどうしてあんなにえらそうなのか知りたいが) 

まあそれはねえ。
0456デフォルトの名無しさん2006/04/02(日) 06:36:47
ソープンソースは集金のシステムをなんとしてでも作るべきだったね
どんな思想を持っていようと金が必要なことには変わりない。
0457デフォルトの名無しさん2006/04/02(日) 07:15:36
>>449
うちの環境だと100%にならないな
0458デフォルトの名無しさん2006/04/02(日) 09:43:08
>>449
もう少しコードを細かく切って、
どこが原因か調べてみたら?
コード的にはおかしくない気がするから、449 の環境の問題なのかも。
0459デフォルトの名無しさん2006/04/02(日) 16:17:04
お前らがAudrey、Audrey Tangなどとうるさいから
どんなやつかと思って検索してみたら・・・・・・

トランスジェンダーしちゃった人なのね・・・
なるほど、これは確かに、ねたになるというか、
強烈というか、いやね、写真みたんですよね。彼女のblogの
いやね、反則だろ、おいと。
0460デフォルトの名無しさん2006/04/02(日) 16:32:42
>>449
実行はしてないけど…。
俺は昔、win98で \a を使った瞬間落ちたことがある。
それ以来winで \a は使ってない。
たぶん永久ループは関係ないと思う。
0461デフォルトの名無しさん2006/04/02(日) 16:37:40
>>449
> WindowsXPでActivePerl5.8.8.816に上げたら俺様のスペシャルラーメンタイマーが

う〜ん、むかしWin95 + Perlで、やっぱり「フォーカス外れると」100%で難儀した記憶が
あるようなないような……
0462デフォルトの名無しさん2006/04/02(日) 18:00:40
>>456
それ気持ちよさそうだな
04634492006/04/02(日) 18:21:47
sleep 1000; が1行のみのsleep.plでも同じ現象になったので
インストールしなおしたり環境変えたりいろいろやってみたんですが
原因わからず、マニュアルのperlfuncのリンクが変になっていたこともあり
5.8.7にして解決しました。ありがとうございました。

インストーラーなんだから俺様のナウでヤングなスピリッツにオプティマイズした
コンピューターにあわせろってんだよ>ラリー
0464デフォルトの名無しさん2006/04/02(日) 18:52:25
/←の逆ってどうやって表示するんですか。
0465デフォルトの名無しさんNGNG
首を傾けるといいんじゃね
0466デフォルトの名無しさん2006/04/02(日) 19:00:42
\
0467デフォルトの名無しさん2006/04/02(日) 19:42:57
ソープンソースつぼった
0468デフォルトの名無しさん2006/04/02(日) 20:54:11
>>464
「ななめ」と書いて変換すると「\」になるw
0469デフォルトの名無しさん2006/04/02(日) 21:07:56
Perlのスカラー変数ってどの程度までの値を格納できますか?
例えばCですとcharは1バイトと規定されてますが、Perlはどうなのでしょう
0470デフォルトの名無しさん2006/04/02(日) 21:16:13
文字列だと、特に制限はなくメモリの許す限り
0471デフォルトの名無しさん2006/04/02(日) 21:18:37
>>469
デフォルトでは数値は倍精度浮動小数点型
(これはperlの内部的にはNVと呼ばれる)の表せる精度まで。
5.8ではuse bigint;
とすると多倍長整数を使用するようになって上限は無い、はず。
5.6でもプラグマが無いだけでMath::BigIntを使えば出来る。
参考: perlguts
0472デフォルトの名無しさん2006/04/02(日) 21:19:13
そうですか
数字の場合はどうでしょうか
0473デフォルトの名無しさん2006/04/02(日) 21:20:41
>>471
リロードしろよ俺orz
参考になりましたありがとうございます
0474デフォルトの名無しさん2006/04/02(日) 21:29:34
>>455
> > (個人的にはDANがどうしてあんなにえらそうなのか知りたいが)
> まあそれはねえ。

くわしく


04754292006/04/02(日) 21:30:10
>>442
じゃあどこに質問するのが
一番よいのでしょうか?
0476デフォルトの名無しさん2006/04/02(日) 22:17:34
例えば次のdo-whileがあるとします。

do{ .... }while(1);
この時 ....の部分で last if(条件);としdo-whileから抜けようとしますとエラーが出てしまいます。
ただし普通のwhile(1){ .... }ですと問題がないようです
これは仕様ですか?
Perlのバージョンは確か5.8.8〜です
0477デフォルトの名無しさん2006/04/02(日) 22:29:37
>>476
仕様です。ラベルつきブロックで囲んで対処
ttp://www.kt.rim.or.jp/~kbk/perl5.005/perlsyn.html#Simple_statements
0478デフォルトの名無しさん2006/04/02(日) 22:47:24
>>475
doブロックがwhileブロックの中にあると解釈されるからだろうね
わざわざブロックの末尾でwhile(1)使うより、redo使ったほうが自然じゃない?
0479デフォルトの名無しさん2006/04/02(日) 22:48:29
UNIXサーバで利用できるPerlモジュールの一覧を表示する事ってできますか?
0480デフォルトの名無しさん2006/04/02(日) 23:09:56
>>479
@INCから/\Q.pm\E$/なファイルを漁ればよろし。
このモジュールがやってくれる模様。
ttp://search.cpan.org/~zefram/Module-List-0.000/lib/Module/List.pm

>>475
マルチというのは何所に質問するかが問題じゃなくて
複数箇所に同じ質問をすることなんだが…
でも、漏れはマルチポスト先見てない…他に何所に質問したのよ一体
>>442
マルチを見つけたならもう一箇所のURLも書いていただけるとありがたい。
本当か判断しかねるじゃないか…
0481デフォルトの名無しさん2006/04/02(日) 23:15:32
Image::MagickでRAW画像をTIFFに変換したいのですが、
my $img = Image::Magick->new(
size=>'128x128',
colorspace=>'RGB',
depth=>'8',
);
$img->Read('fileName.raw');
$img->Write('fileName.jpg');

こんな感じでやると420エラーが出てしまいます。
コマンドのconvertで同様に行なうと変換出来ています。
どこかにサンプルコードありませんでしょうか?
0482デフォルトの名無しさん2006/04/02(日) 23:59:45
>>481
ttp://studio.imagemagick.org/script/formats.php
対応フォーマット一覧を見るとRGBがそれっぽいのでRGBフォーマットと指定して読み込み。
$img->Read('rgb:fileName.raw');
で行けるみたい。
# 資料がなかなか見つからなくて苦労した…
04834552006/04/03(月) 00:14:46
>>474

いや漏れも付き合いがあるとかネタをにぎってるとかいうわけじゃなくて、
伝え聞く中学生以降の人生(笑)とか見ていると、他人になめられたくないとか、
自分を大きく見せたいという気持ちが常に表に出ちゃうんじゃないかなあ

ということ。

ま、生まれ(育ちか?)がそーなのよ。

つーことで。
0484デフォルトの名無しさん2006/04/03(月) 00:19:11
>>480
自己レス、発見
http://pc8.2ch.net/test/read.cgi/php/1015943725/200

>>429
ttp://www.ippo.ne.jp/g/53.html
0485デフォルトの名無しさん2006/04/03(月) 00:21:47
サブルーチンの引数についてなんですが
Perl実行時にもし望まれない引数が指定された場合コンパイラがエラーを吐くようなプログラミングをしたいのですが
(C言語ライクに int hogehoge(int a)関数があってhogehoge("ぬるぽ")としたらコンパイル時にエラーを吐くような)
これはdie関数などを用いてサブルーチン内で実装するしかないのでしょうか?
0486デフォルトの名無しさん2006/04/03(月) 00:53:52
>>485
オブジェクトのメソッド呼び出しについては無視されるが、
引数の数だけならプロトタイプ宣言で出来る。
ttp://www.kt.rim.or.jp/~kbk/perl5.005/perlsub.html#Prototypes

しかし、変数の中身については基本的に不可能。
実行時にマッチングするくらいしかない。
FilterやAttributeを駆使すれば、不可能とも
言い切れないんじゃなかろうかと思ったりもするけど。
04874812006/04/03(月) 01:54:31
>>482
ありがとうございます。
ファイル名をfileName.rgbに変えたらすんなり出来ました。
0488デフォルトの名無しさん2006/04/03(月) 13:54:47
Perl言語でホスト名を取得する方法ってどうやったら出来るのですか?
教えてください。
0489デフォルトの名無しさん2006/04/03(月) 14:19:43

>>488
おっしゃってる意味が全くわかりません。
特にPerlはネットワークを介さずに実行できる仕組みになっております。
0490デフォルトの名無しさん2006/04/03(月) 14:19:53
>>488
Sys::Hostname
0491デフォルトの名無しさん2006/04/03(月) 14:49:35
>>489
あんたの言ってることの方が、全くわからん。
0492デフォルトの名無しさん2006/04/03(月) 16:11:43
>>489
日本語でおk
0493デフォルトの名無しさん2006/04/03(月) 19:40:51
>>488
perldoc -q hostname
0494デフォルトの名無しさん2006/04/03(月) 21:33:27
Solaris9標準のPerl5.6.1にモジュールをインストールしようとしたのですが、
どのモジュールもgccよりccを見に行ってコンパイルできません。
その他のオープンソースはコンパイルできる環境はあるのですが、
同様の現象ってありますか?
0495デフォルトの名無しさん2006/04/03(月) 21:55:05
CC=gcc make とか

0496デフォルトの名無しさん2006/04/03(月) 21:56:34
>>495
それは試したのですが駄目でした。
0497デフォルトの名無しさん2006/04/03(月) 22:40:32
make CC=gcc はどうですか
0498デフォルトの名無しさん2006/04/04(火) 11:44:10
質問です。
演算子のオーバーロードしたくて以下のスクリプトを書いたんですが…
package Num;
use overload {
    'cmp' => \&compare
};
sub new {
    my $classname = shift;
    my $t = {};
    $t->{'value'} = shift;
    bless $t, $classname;
}
sub compare {
    my ($x, $y)=@_;
    $x->{'value'} <=> $y->{'value'}
}

package main;

my @l = (new Num(1), new Num(4), new Num(2), new Num(3));

foreach (sort {$a cmp $b} @l) {
    print $_->{'value'}, ', ';
}
エラーはでないですがソートできません。比較するサブルーチンの内容に問題
がありそうな気はしてるんですが、そもそもNum::compareが呼ばれてないみたい
なんですけど、何が間違ってるんでしょうか。
0499デフォルトの名無しさん2006/04/04(火) 12:20:16
>>498
overloadに渡すのはリファレンスじゃない
use overload (
    'cmp' => \&compare
);
0500デフォルトの名無しさん2006/04/04(火) 12:47:39
似てる有名人 子飼弾vs江川達也
0501デフォルトの名無しさん2006/04/04(火) 13:52:22
>>499
ありがとうございます!できました!
ドキュメント見てたつもりだったんですが何故か{}を使う
と思い込んでてそこは再チェックしてませんでした…
0502デフォルトの名無しさん2006/04/04(火) 14:29:47
>>500
それガチだな
0503masaki2006/04/04(火) 14:43:41
質問させてください

WindowsXP Pro
Eclips3.1.1(日本語化済)
ActivePerl-5.8.8.817 + padwalker

でPerlをデバック実行したいのですが
ブレークポイントではとまりますが
変数を覗いたりできません。
デバッカーとエディターがリンクしていない感じです。

こんな変な状況になった人いますか?
解決法を教えてください。
0504デフォルトの名無しさん2006/04/04(火) 15:22:33
EPICの重さは何とかならないのか
メモリ256Mしかありましぇん字もうてましぇん
0505masaki2006/04/04(火) 15:23:43
Eclipseの方へ転記したので
クローズさせてください。
0506デフォルトの名無しさん2006/04/04(火) 19:43:27
EPICでプロジェクトに含めるplファイルって一つだけなの?
plファイルを追加する方法がわからない
0507デフォルトの名無しさん2006/04/04(火) 20:59:37
右クリック→New→File
0508デフォルトの名無しさん2006/04/04(火) 22:07:03
質問です。
perl -e 'print "Hello.\n";
を実行すると、
Can't find string terminator "'" anywhere before EOF at -e line 1.
というエラーがでます。

なぜでしょうか?

教えて下さい。

OS win2000
perl This is perl, v5.8.6 built for MSWin32-x86-multi-thread
0509デフォルトの名無しさん2006/04/04(火) 22:11:55
perl -e "print \"Hello.\n\";"
0510デフォルトの名無しさん2006/04/04(火) 22:24:16
DOSのコマンドラインの解釈には癖があるから、
ワンライナでは極力""を使わないほうが賢明。
q{}オペレータが便利。
perl -e "print qq[Hello.\n];"

ちなみに癖ってのはこういうのをやってみればわかる。
perl -e "print \"|\";"
原因はDOSシェルは\によるエスケープを解釈してないからの模様。
05115082006/04/04(火) 22:25:36
>509 ありがとう。

でも、実行すると、

C:\myPerl>perl -e "print "Hello.\n;"
HelloSCALAR(0x1624f80)

となります。
なんででしょう?
0512デフォルトの名無しさん2006/04/04(火) 22:43:29
>>510
DOSのコマンドライン解釈はよくわからんが、perl処理系には

print Hello.\n;

というプログラムが渡っているのだろうと思われる。文字列定数がベアワードに
なっているが、quoteを補うと

print 'Hello' . \ 'n';
05135082006/04/04(火) 23:07:31
>510
>512

ありがとう。

皆さんは、perlをどんな環境で使っていますか?
私は、win2000+ACTIVESTATE社のperlを
DOS上で使っています。
0514デフォルトの名無しさん2006/04/04(火) 23:09:59
Linux+vim
0515デフォルトの名無しさん2006/04/05(水) 00:45:22
>>508
いやさ q{}とかはいいんだけどさ。
お前さんシングルクォート閉じてない・・・
0516デフォルトの名無しさん2006/04/05(水) 03:49:13
Perl のスレッドで、親スレッドと子スレッドの間で複雑な構造のデータの内容を
共有するにはどのような手段があるでしょうか?
多段になっている配列やハッシュ変数の内容を子スレッド側で変えたいと思っています。

use strict;
use threads;
use threads::shared;

my @s : shared;

main();

sub main {
my $th = threads->new( \&thr );
$th->join;
print "in main: @s\n";
}

sub thr {
@s = ( 1, 2, 3 ); # OK
# @s = ( 1, [2, 3] ); # NG
print "in thr @s\n";
}

threads::shared のドキュメントを読んで、こういうことはできなそうだと分かったのですが、
スカラー変数などに詰め込んで渡して、親スレッド側で展開等しかないのでしょうか・・。
0517デフォルトの名無しさん2006/04/05(水) 04:27:27
>>516
> Due to problems with Perl's prototyping, if you want to share a newly created reference, you need to use the &share([]) and &share({}) syntax.

threads::sharedのPODに書いてあったよ
確認してないけどこうじゃない?
@s = ( 1, &share([2,3]) );
0518デフォルトの名無しさん2006/04/05(水) 05:11:34
>>517
ありがとうございます。

@s = ( 1 );
$s[1] = &share( [] );
@{$s[1]} = ( 2, 3 );

でいけました。
0519デフォルトの名無しさん2006/04/05(水) 10:34:57
>>507
さんすこ
0520デフォルトの名無しさん2006/04/05(水) 22:57:25
win2000pro+eclipse3.2.0+EPIC0.3.12+cygwinのperl
でperl debugger使おうとしてるけど
デバッグしようとしたとたんに
Failing to create PerlDB-Interface !!!
とか
Error within Debug UI:
と出てうまくいきません。
日本語の情報は皆無でした。
英語でぐぐってもさっぱし
Interpreter typeもちゃんとCygwinになってるし
Perlのパスもきちんとcygwin\binに通ってるし
mountコマンドもcygwinに入ってる。
上でperl debugger動いている人いたけど
どうやったの〜?
0521デフォルトの名無しさん2006/04/06(木) 00:05:29
>>520
Cygwinで普通に動くが…。
setup.exeで普通にダウンロードしたわけだが。
0522デフォルトの名無しさん2006/04/06(木) 01:23:50
ディレクトリ内のファイルの一覧を取得する際に
opendir my $dh, $dirname or die "#!";

#.や..以外のファイルを取得
@filelist = grep { !m/^(\.|\.\.)$/g } readdir $dh:

c;psedir $dh;

とやってるのをみかけたのだが
これって
@filelist = readdir $dh;
shift(@filelist);shift(@filelist);

とやっちゃまずいの?結果は同じでこっちの方が処理速度速いと
思うんだけど
あと
grep { !m/^(\.|\.\.)$/g } の正規表現の中の最後のgっていらなくね?
0523デフォルトの名無しさん2006/04/06(木) 01:35:57
@filelistって . と .. が最初にくるって保証されてるんだったら別にいいんじゃない?
0524デフォルトの名無しさん2006/04/06(木) 01:37:24
日本語がおかしいな。
@filelistの最初に . と .. が…でおk
0525デフォルトの名無しさん2006/04/06(木) 04:02:19
Encodeのモジュールを全部サーバにアップしたのに、
↓このエラーが出ます。

Can't locate loadable object for module Encode in @INC ・・・

助けて下さい!!
0526デフォルトの名無しさん2006/04/06(木) 04:34:59
>>522
速いけど環境依存になる可能性あるな。
特定の環境でのみ実行ってのならよさそう。
0527デフォルトの名無しさん2006/04/06(木) 07:03:27
use strictってrequireする全てのファイルに書くの…?
大元のファイルからrequireされたファイルに
グローバル変数を渡す時はourが必要になるんだけど、
requireされたファイルではuse strictが無視されてるみたいなんですけど。
0528デフォルトの名無しさん2006/04/06(木) 07:23:21
>>528
ほとんどのpragmaはレキシカルスコープ(myと同じ)です。

詳しくはperldoc perlmodlibのPragmatic Modulesを参照。
0529デフォルトの名無しさん2006/04/06(木) 09:20:05
>>525
そりゃ無理だろうな。Encode.pmはビルドしないと使えないXSモジュールだ。
ちゃんとsshでログインしてビルドすれ。
0530デフォルトの名無しさん2006/04/06(木) 09:41:23
>> 520
俺もいろいろ悩みましたが
結局各バージョンの相性でした。

eclipse3.1.X以上は難しいと思います。

俺の成功例は。。。
ActivePerl-5.8.8.817 + padwalker(ppm install padwalker)
eclipse-SDK-3.0.1-win32 + NLpack-eclipse-SDK-3.0.x-win32
EPICは http://e-p-i-c.sf.net/updates よりインスコ

で動きます。
0531デフォルトの名無しさん2006/04/06(木) 17:33:36
Linuxで外部コマンドを投げっぱなしジャーマンスープレックスするときは
system('rm -f /foo/bar &');
で可能でしたがwindowsの場合はどうやるのでしょうか。
上記のような感じでやると起動したプログラムが終了するまでコンソールに帰ってきません。
fork以外の方法で出来ればと思います。
0532デフォルトの名無しさん2006/04/06(木) 19:09:42
wperl
05335312006/04/06(木) 19:32:02
ありがとうございます。wperlで行ってみたのですが挙動は変わりませんでした。
wperlという物を初めて知ったのですがperlと1バイトしか相違点がないんですね。
0534デフォルトの名無しさん2006/04/06(木) 19:44:20
>>531
fork と同じようなことだけど、

use threads;
threads->new( sub { 'rm -f /foo/bar &' } );

とかどうかな。
バックグラウンド実行に比べればかなーりアレだけど・・。
0535デフォルトの名無しさん2006/04/06(木) 21:30:01
>>531
投げっぱなしではないけど、手軽なのはopenかな。
投げっぱなしが希望なら、CMD.EXEのSTARTコマンド経由。
別ウィンドウを開くのと、NT系のみが欠点。
もし、(OS/2のCMD.EXEにあるような)DETACHコマンドが(NTのCMD.EXEにも)あるなら、
(STARTのかわりに)それを使うのが楽そう。
0536デフォルトの名無しさん2006/04/06(木) 21:30:02
open (IN, "./file!");
複数のファイルを一遍にopenする事ってできますか?
0537デフォルトの名無しさん2006/04/06(木) 21:47:12
>>536
openした後どうやって処理するつもりなの?
0538デフォルトの名無しさん2006/04/06(木) 21:52:58
>>536
open(IN,"cat file1 file2 file3|");
0539デフォルトの名無しさん2006/04/06(木) 22:02:47
ある文字列の前後の任意の文字数にのみマッチする正規表現ってどう書けばいいのでしょうか?
たとえば
$str = 'foobarbazhogeほげホゲ';
$pat ='hoge';
があったとして、その前後2文字 'az', 'ほげ'にマッチさせたいのですが。


   

0540デフォルトの名無しさん2006/04/06(木) 22:08:33
>>539
マルチバイト文字を考慮するとなると、マルチバイト文字にマッチする
正規表現を使う等の工夫が必要。
(Perl 5.8 なら、そうしなくてもできる方法があるのかな)

( $a, $b ) = $str =~ /(..)$pat(..)/;
0541デフォルトの名無しさん2006/04/06(木) 22:18:57
5.8ならそのまま.が一文字に値します><
0542デフォルトの名無しさん2006/04/06(木) 22:21:49
534,535さんありがとうございました。
早速試してみます。
0543デフォルトの名無しさん2006/04/08(土) 21:03:24
perl, v5.8.7 builtをインストールしたのですが、(PCはwindows xp)
漢字の検索ができずに困っています。
どなたか対処方法をご教授願います。
if($_=~ m/漢字/) {
print "hit\n";
}
0544デフォルトの名無しさん2006/04/08(土) 21:13:25
┐(´д`)┌
0545デフォルトの名無しさん2006/04/08(土) 21:51:54
>>543
>>3 の[テクニック]あたりに答が!!
0546デフォルトの名無しさん2006/04/08(土) 22:24:53
>>543
スクリプトの文字コードがshifjisなら
use encoding "shiftjis";
でOK
0547デフォルトの名無しさん2006/04/08(土) 22:26:30
>>3のテクニックのとこのページって
いまだにスクリプトをeuc-jpで書けってとこで
アドバイス止まってない?
euc-jpで書いても日本語処理は完璧じゃないのに
0548デフォルトの名無しさん2006/04/08(土) 22:39:52
>>546
実は $_ はwebからgetしたデーターです。
制御コード等が入っているためだと思いますが、
英数字、漢字以外の文字を削除する方法がいまいち
わからなくて。

use LWP::Simple;
$_=get("http://quote.yahoo.co.jp/q?s=5401");
0549デフォルトの名無しさん2006/04/08(土) 22:54:18
<<548
Y!はeucだからソースをeucで書けば、普通に漢字でマッチできるはず。
shiftjisで書いて<<546のプラグマを使うのなら、
Encode.pmのdecode関数でutf化する必要がある。
0550デフォルトの名無しさん2006/04/08(土) 23:09:08
>>549
ありがとうございました。
eucでファイルセーブしただけでマッチするようになりました。
ただし今度は漢字のprintが文字化けますが、とりあえずは
次に進めます。
0551デフォルトの名無しさん2006/04/08(土) 23:46:24
ActivePerlのマニュアルがIE6でちゃんと動作しないのはどうにかならんの?
0552デフォルトの名無しさん2006/04/08(土) 23:55:15
動作しないって5.8.6くらいの折りたたみ式のやつのことか?
だとしたら5.8.8にすると解決。
0553デフォルトの名無しさん2006/04/09(日) 00:48:04
>>550

スクリプトがeuc-jpならprintの出力もeuc-jp
windowsの文字コードはshiftjis
したがってもしコマンドプロンプトにそのまま出力
したら化けて当然
0554デフォルトの名無しさん2006/04/09(日) 18:56:30
ゴメンクダサイ。質問です。
複数ファイルを一気に置換したいのですが、

perl -pi.bak -e 's/<FONT COLOR="white">/<FONT COLOR="blue">/g' *.html
これはWINじゃダメみたいです。
WINでやりたいのですがどうすればいいでしょうか?
ご教授お願いいたします。
0555デフォルトの名無しさん2006/04/09(日) 19:34:19
>>554
1. Windowsのシェルではシングルクォーテーションは解釈されない
2. sh系ではワイルドカードの展開をシェルが行うが、
 Windowsのシェルでは呼ばれたソフト側が面倒を見ないといけない
ttp://search.cpan.org/~sburke/Win32-Autoglob-1.01/Autoglob.pm
ということで
つ perl -MWin32::Autoglob -pi.bak -e "s/<FONT COLOR=\x22white\x22>/<FONT COLOR=\x22blue\x22>/g" *.html
# 素直に\"としてないのは漏れが510だから。
0556デフォルトの名無しさん2006/04/09(日) 19:52:57
>>555
おー早速ありがとうございました。
05575562006/04/09(日) 20:15:55
ぶっちゃけwinじゃperlは使いづらいかもですね。
0558デフォルトの名無しさん2006/04/09(日) 22:10:55
>>557
速度面で一時ActivePerlにしたがそんなに違わなかったのでCygwin-Perlに
戻して、Utf8-TeratermSSH組み込みのCygtermで使ってます。

もうコマンドプロンプトに戻れない。
0559デフォルトの名無しさん2006/04/10(月) 00:39:02
>>558
ふつー ck
0560デフォルトの名無しさん2006/04/10(月) 16:58:48
HTTPのレスポンスヘッダの時刻データなんですが、

Mon, 10 Apr 2006 07:28:55 GMT

これを秒数の整数値に変換する方法ってないでしょうか?
GNUのdateコマンドで

$date --date='Mon, 10 Apr 2006 07:28:55 GMT' +%s

というものなんですが、データの量が膨大なのでPerl内でこれをやりたいです。
0561デフォルトの名無しさん2006/04/10(月) 17:14:29
>>560
つ HTTP:Date
0562デフォルトの名無しさん2006/04/10(月) 17:29:14
>>561
ありがとう!!
0563デフォルトの名無しさん2006/04/11(火) 09:03:02
(´・ω・)
0564デフォルトの名無しさん2006/04/11(火) 09:41:24
cpan> install Bundle::LWP
MIME::Base64 is up to date (3.05).
Digest::MD5 is up to date (2.33).
Running install for module URI

The module URI isn't available on CPAN.

Either the module has not yet been uploaded to CPAN, or it is
temporary unavailable. Please contact the author to find out
more about the status. Try 'i URI'.

LWPをインストールしようとすると、こんなの出るんですが、これなんでしょうか?
0565デフォルトの名無しさん2006/04/11(火) 11:29:57
>>564
多分、ダウンロードに失敗している。ミラーを設定してみたらどう?
設定の仕方はo conf urilist辺りでググってくれ
0566デフォルトの名無しさん2006/04/11(火) 12:03:53
なぁ、List::Utilのshuffleって本当にちゃんと動いてるの?
@i = shuffle 1..500;
ってやってみたんだが
いくつか数字が欠けてる
05675662006/04/11(火) 12:27:51
四月馬鹿でした
0568デフォルトの名無しさん2006/04/11(火) 12:29:28
少なくともオレのところでは

% perl -e 'use List::Util qw(shuffle); for (1..10000) { my @i=shuffle 1..500; my %i; @i{@i}=(); for(1..500){exists $i{$_} or warn $_}}'

とやってみたがなんともなかったな。
0569デフォルトの名無しさん2006/04/11(火) 16:55:34
perlの連想配列はハッシュインデックスを使ってるんですか?
0570デフォルトの名無しさん2006/04/11(火) 17:31:10
>>569
> perlの連想配列はハッシュインデックスを使ってるんですか?

それはあなたが「ハッシュインデックス」と呼称しているものが何かによる。
0571デフォルトの名無しさん2006/04/11(火) 17:49:49
一応呼び名はハッシュだなあ。
0572デフォルトの名無しさん2006/04/11(火) 18:13:30
データベース用語なのかな? 「ハッシュインデックス」って。

データベース管理システムに「インデックス」と呼称されるエンティティがあって、
それの種別を表すのに、「ハッシュ」とか「ツリー」とかが前置されるようだね。


0573デフォルトの名無しさん2006/04/11(火) 18:34:37
普通に計算機科学用語だと思うが、
アルゴリズムとデータ構造とかからちゃんと勉強してる Perl 使いって少ないのか?
0574デフォルトの名無しさん2006/04/11(火) 18:36:11
スクナイヨ
0575デフォルトの名無しさん2006/04/11(火) 18:51:07
そんなことはないと思うがな

と今日SICPの原書を買った漏れが言って見るテスト
0576デフォルトの名無しさん2006/04/11(火) 19:00:10
>>572
で、その「インデックス」は「クラスタ」と置換可能らしい。
「インデックス」自体もデータベース用語なんだろうね。
0577デフォルトの名無しさん2006/04/11(火) 19:22:07
>>569
> perlの連想配列はハッシュインデックスを使ってるんですか?

以上を踏まえると、Perlの連想配列はハッシュテーブルですが、しかし
「ハッシュインデックスか?」と聞かれると質問の意味が良く分からないと
答えざるを得ないということですね。
0578デフォルトの名無しさん2006/04/11(火) 20:07:57
まあしかし連想配列の実装にただの配列使うやつは少ないんではないかと…。
てか、UNIXとかなら最初からライブラリあるし、ライセンスの都合で使いたく
ないにしても変な実装はしないんじゃないかなあ。
0579デフォルトの名無しさん2006/04/11(火) 20:58:48
Perlスクリプトの中で引数を使っているのですが、
引数の指定が1つでなかったらスクリプトを終了させる
記述ってどうすれば良いですか?
0580デフォルトの名無しさん2006/04/11(火) 21:11:40
>>579
引数の数を調べて、1以外の時にはexitする。
0581デフォルトの名無しさん2006/04/11(火) 21:12:50
if(@ARGV != 1){ die }
0582デフォルトの名無しさん2006/04/11(火) 21:19:50
>>578
hv.c や hv.h 見たけど、ライブラリは使ってなかった。
複数の単方向リストがあり、ハッシュ値(32bit)を元にリスト自体を選んだ後は
リストを辿りながらキーを捜してるっぽい。

これって、ハッシュ値重複が前提の直接ハッシュ法??
よくわかりません。

>>579
$#ARGV == 0 or die "引数が...";
$#ARGV != 0 and die "引数が...";
die "引数が..." unless scalar @ARGV == 1;
die "引数が..." if scalar @ARGV != 1;

たぶん、どれもこれも駄目な記述。
0583デフォルトの名無しさん2006/04/11(火) 21:29:36
579です
みなさまありがとうございます。
0584デフォルトの名無しさん2006/04/11(火) 21:41:52
質問なのですが、
perl自体をコンパイルしてインストールしたいと思ったときに、
CPAN上で提供されているパッケージが含まれてしまうのですが、
これを除外 or その一覧を取得する方法って無いでしょうか?
0585デフォルトの名無しさん2006/04/11(火) 21:48:17
$#hogeの値は$[の値で変わるので配列の要素数が1か判定するのに$#hoge == 0のように使うのには抵抗があるのだが、
だからといって $hoge[0]のかわりに$hoge[$[]とは書かないダブルスタンダードな俺。
0586デフォルトの名無しさん2006/04/11(火) 22:02:38
>>582
ハッシュはまんま実装してあるね。
今のソースは知らないけど、前はラリーウォールの名前入りの
かなり古いソースが長い間使われていた。

確か、バケット占有率だけ見て
リスト長については目をつぶるタイプのハッシュだったと思う。
アルゴリズムの本読めば分かる程度の、普通の(難しい事抜きの)実装だった。
0587デフォルトの名無しさん2006/04/11(火) 22:28:43
pugsって新種のコンパイラ、インタプリタでしょうか?
そうすると、今、普通のコンパイラ、インタプリタは、なんと言う名前なのでしょう??
0588デフォルトの名無しさん2006/04/11(火) 22:50:22
>>582
ていうか、重複しないハッシュテーブルなんて普通は作れない。
重複した時の処理で隣のハッシュ値を使うかもう一つテーブル
作って同じハッシュ値でやるかだ。
0589デフォルトの名無しさん2006/04/11(火) 22:51:03
あ、そんだけじゃない。テーブル作らなくてもリスト構造にしちゃうとかあるな。
まあいいや。
0590デフォルトの名無しさん2006/04/11(火) 23:03:53
>>588,589だけレベルが低い点について
05915732006/04/11(火) 23:51:29
あながち間違いでもなかったか。
0592デフォルトの名無しさん2006/04/12(水) 00:07:07
      ハ_ハ   
     (^( ゚∀゚)^)  ハ_ハ
     )  /   ('(゚∀゚∩    みんな仲良く
    (_ノ_ノ     ヽ  〈      みんなPerl仲間
             ヽヽ_)
0593デフォルトの名無しさん2006/04/12(水) 00:13:37
反吐が出ます
0594デフォルトの名無しさん2006/04/12(水) 01:09:41
出さないでください
0595デフォルトの名無しさん2006/04/12(水) 01:26:19
>>587
perl(Perlではない)
ttp://www.kt.rim.or.jp/~kbk/perl5.005/perlfaq1.html#What_s_the_difference_between_p

pugsのほうはPerl6のHaskellによる実装で、現状のもの(5.x)とは言語仕様から大きく違う。
また、今使われているPerl5をParrot上で動作するようにしようというプロジェクトもあってこれはponieという名前。

ただ、pugsは公式に認められた実装だけれど本家の実装ではないのでperl6は別に作られる(予定)、
ということで良いんだよね?ここのところちょっと自信なし。
0596デフォルトの名無しさん2006/04/12(水) 03:25:00
>>595
そんな感じだね。
ttp://japan.zdnet.com/sp/interview/story/0,2000056426,20100854-3,00.htm
0597デフォルトの名無しさん2006/04/12(水) 05:19:14
>>568
の
@i{@i}=();
の左辺て何やっているの?
0598デフォルトの名無しさん2006/04/12(水) 07:01:58
>>595
ありがとうございます。
perl 6 は、本家の実装が今後でてくると。
言語仕様もかなりかわっているようです。
0599デフォルトの名無しさん2006/04/12(水) 10:54:34
C,C++,PHP,MySQLなどの経験があり、
今度仕事でpostgreSQL+perl環境でWEBサービスを作るんだけど、
今のうちにperl+postgreSQLの演習として何か作ろうと思うんだが
何が良いだろう?
perlもpostgreSQLもほぼ未経験です。
0600デフォルトの名無しさん2006/04/12(水) 11:08:10
今度仕事で作るモックアップを作ればいいんじゃないの
0601デフォルトの名無しさん2006/04/12(水) 11:51:47
ありがとう、そうしてみる。
ところで、perlからPg.pm使ってpostgresql使う時って
もしかしてcloseしなくていいの?
http://www.stackasterisk.jp/tech/program/perl03_02.jsp
ここ見たんだけど。
0602デフォルトの名無しさん2006/04/12(水) 11:57:50
Pg.pmってなんじゃ?DBIの方が資料があっていいと思うよ。
0603デフォルトの名無しさん2006/04/12(水) 13:02:33
DBD-Pgがwin版ActivePerlのPPMでダウンロードできない。
search DBDってしてみても、PgPPしか見つからないんだが
PgPPとPgで構文って変わってくるかな?
変わらないなら、別にPgPPでも良いので。
0604デフォルトの名無しさん2006/04/12(水) 13:13:15
>>603
ちょっと覗いてみただけだけどPP版とは結構違うみたいだね。
DBD::PgはTheoryx5リポジトリにあったよ。最新ではないようだけど。
ttp://theoryx5.uwinnipeg.ca/ppms/
06056032006/04/12(水) 13:23:09
ありがとう。
すごく助かった。
0606デフォルトの名無しさん2006/04/12(水) 13:54:23
>>597
%iに@iのキーを手っ取り早く作る手法
ハッシュスライスに空リストを代入でキーだけ作られる
ただ、値は未定義なのでexistsで確認しなければならない
0607デフォルトの名無しさん2006/04/12(水) 14:57:52
copalってもしかしてpostgreSQL用のDBI機能はちゃんとエミュレート出来ない?
0608デフォルトの名無しさん2006/04/12(水) 15:26:54
>>597
$i{@i}=();
だったりするとまた意味合いが違うんだよね。
マジカルPerlタンハァハァ
06096072006/04/12(水) 16:00:11
ごめん、勘違いだった。
DBD::Pg使うと
perlのcommand line iterator自体が落ちるみたいだ。
インストール失敗してるのかな・・・
0610デフォルトの名無しさん2006/04/12(水) 19:13:08
ずびばぜーん
XML::DOM::ParserでXML文書から取り出したutf8化されてしまった日本語を(大元はsjis)
Jcode.pmでShift_JISに戻そうとしたんですが、失敗してしまいます。


$result = Jcode->new($target, "utf8")->sjis;

とやっても

$result = Jcode::convert($target, "sjis");

とやっても文字化けした難しい漢字の
並んだShiftJISへと変換されてしまいます。
元の日本語コードを自動判別させても同じでした。

環境はWindowsXPで、PerlはActiveStateの5.6です。
Jcode.pmは、ttp://openlab.jp/Jcode/index-j.htmlのJcode-2.03をコンパイルして使ってます。
5.8のEncodeを使おうと思ったのですが、他に利用してる重要な
モジュールが5.6じゃないと動かないとあって、5.6ははずせない状況です。

何か解決方法ってありますか?
0611デフォルトの名無しさん2006/04/12(水) 19:19:53
関係ないと思うけどJcodeは2.00以降と2.00以前でconvertの挙動違うから気をつけな
0612デフォルトの名無しさん2006/04/12(水) 19:45:39
>>610
> 何か解決方法ってありますか?

どのように変換されているのか調べて問題を突き止め、それを解消する。
06136102006/04/12(水) 19:47:47
何やらsjis変換前の文字コードをJcode::getcode($target)
で調べてみたら「ascii」とか出てきてしまいました。

おかしいと思い変換前の日本語をファイル出力して、それを
EmEditorで読ませるとちゃんとutf8として自動判別されます。
もちろん文字化けしていない、大元のShift_JISだったころの日本語です。

XML::DOM::Parserも内部処理ではutf8で処理してるはずなので、
エディタの判定が正しいのは明らかなのですが。。
06146102006/04/12(水) 19:52:06
すみません、>>613に関して大間違いでした。
ちゃんと変換前の文字コード判別は「utf8」で判別されていました。
もう少し調べてみます。。
06156102006/04/12(水) 20:14:10
自己解決できました。
お邪魔しました。
0616デフォルトの名無しさん2006/04/12(水) 20:47:55
知恵を貸して下さい。
fileにいくつか文字列が記述してあり、その記述の行をログから抽出する
Perlの記述はどうすれば良いですか?
UNIXでいう、fgrep -f ./file /var/log/messages
です。
しかし、fgrepを使わず、Perlのみで可能にしたいです。
0617デフォルトの名無しさん2006/04/12(水) 20:55:43
ttp://search.cpan.org/~mneylon/File-Grep-0.02/Grep.pm
こんなモヅールもあるが・・どうなんだろね
0618デフォルトの名無しさん2006/04/12(水) 21:01:30

様々なurlをファイル名にするのに、良い方法が見つからず悩んでいるんだが、
いい方法ないですかね?

http://www.yahoo.co.jp/ とかだったら、 www.yahoo.co.jp.txt でもいけるが、
http://search.yahoo.co.jp/search?p=2ch&fr=top_v2&tid=top_v2&search.x=1 このようなアドレスにも対応できるような、
良い方法ってないですか?


06196182006/04/12(水) 21:03:55

ユニークでなければいけません。
ハッシュ化しようかと思ったが、それでは駄目ですよね。
0620デフォルトの名無しさん2006/04/12(水) 21:07:26
URLを全部エンコードしてやれば。
例)

http://www.yahoo.co.jp/
↓
%68%74%74%70%3a%2f%2f%77%77%77%2e%79%61%68%6f%6f%2e%63%6f%2e%6a%70%2f
0621デフォルトの名無しさん2006/04/12(水) 21:13:08
>>620
長いホスト名だとPATH_MAXにひっかかるよ。
正規化してmd5でも使ってhexに変換しる。
0622デフォルトの名無しさん2006/04/12(水) 21:16:04
>>621
>様々なurlをファイル名にするのに
     ~~~ ~~~~~~~~~
0623デフォルトの名無しさん2006/04/12(水) 21:18:14
そもそも、何をしたいの?
絶対にURLがファイル名でないとだめなの?
06246182006/04/12(水) 21:25:17
はい。絶対にURLがファイル名でないとだめです。

いろいろと参考になりました。ありがとうございます。
なんらかの形でエンコードしてみます。
今情報あさってたんですが。Base64なんてどうかな。
0625デフォルトの名無しさん2006/04/12(水) 21:28:26
いいんじゃないの。なんでも。
0626デフォルトの名無しさん2006/04/12(水) 21:39:18
RFCではURLの最大文字数は定められていないが、
ファイルシステムにはMAX_PATH制約があるからURL->ファイル名の変換は不可能。
適当な方法で文字列を生成して対応関係を別の場所に記録しておくしかない。
06276182006/04/12(水) 21:44:29
>>626
わかりました。

MD5ってユニークなんですか?
ぐぐってんだが、イマイチわかんない。
0628デフォルトの名無しさん2006/04/12(水) 21:48:30
MD5に限らず固定長の一方向ハッシュ関数の結果はユニークじゃない。
MD5は128ビットだから1/2^128の確率でダブル可能性がある。
06296182006/04/12(水) 21:50:57
>>628

はい。やっと理解した。
普通に考えて、ユニークのわけないよね。
元の対象のものとハッシュに一意性があるっつーことね。この辺でこんがらがってた。

0630デフォルトの名無しさん2006/04/12(水) 21:59:00
ヒント: perl -Mbigint -e "print 2**128"
0631デフォルトの名無しさん2006/04/12(水) 21:59:11
MD5じゃ、保存・参照するとき常にURL文字列がないとできないし、
ディレクトリをlsしたときに、どのサイトのファイルかもわかんなくてちょっと困る木がするが。
0632デフォルトの名無しさん2006/04/12(水) 22:01:09
似たようなソフトいっぱいあるだろうし、
wgetとかダウンロードソフトの保存ルールでも参考にしてみたら?
0633デフォルトの名無しさん2006/04/12(水) 22:01:10
めんどくさい時はSQLに突っ込んでみよう
0634デフォルトの名無しさん2006/04/12(水) 22:04:24
どうせファイル名<->URLの変換はDB参照しなきゃいけないんだから、
既存のファイル名とかぶらない文字列をランダムに生成すれば十分。
06356182006/04/12(水) 22:24:43

説明不足の中、
いろいろとレス頂き有難う御座います。

有用な、レスばかりで感謝しております。
最終的には、どこかで線引きできると思いますので、
試行錯誤やってみます。

そういやwgetってサイトミラーリングした時、アドレスフォルダ名にしてたな。みてみよ。
0636デフォルトの名無しさん2006/04/12(水) 22:26:15
まぁ、長いURL(目的のファイルシステムで使える文字長以上の)がない
と仮定できるのなら、URIエンコードのような感じで変換するのがお手軽。
Wikiとか参考になるかも。

>>620 のように全部変換するのではなく、英数字やピリオド等は
もとのままにしておくと ls で見たときとかにも分かりやすくてgood。
0637デフォルトの名無しさん2006/04/12(水) 23:30:36
番号振っときゃいいじゃん。
0638デフォルトの名無しさん2006/04/12(水) 23:35:19
THcomp でも使っとけと
0639デフォルトの名無しさん2006/04/13(木) 09:32:49
MD5は、もう、死んでいる。
0640デフォルトの名無しさん2006/04/13(木) 09:57:02
cygwin上のperlだと、$HOMEがカレントディレクトリを返すんですが
これは仕様ですか?
0641デフォルトの名無しさん2006/04/13(木) 09:57:04
どういうこと?
0642デフォルトの名無しさん2006/04/13(木) 10:03:13
すまん勘違いでした。
perlからは$ENV{HOME}を見るのが正しいのか。
0643デフォルトの名無しさん2006/04/13(木) 10:16:53
スクリプトが自分のフルパス名を知るにはどうしたら良いのでしょうか?
__FILE__ や $0 は相対パスしかくれません。
cwd を繋げればいいのかと思ったのですが、別フォルダから実行すると
スクリプト自身のパスになりません。
よろしくお願いします。
0644デフォルトの名無しさん2006/04/13(木) 10:35:42
FindBin
06456432006/04/13(木) 10:38:30
>>644
待ってました!ありがとう!
0646デフォルトの名無しさん2006/04/13(木) 11:13:24
windowsXP+perl+dbi+postgreSQL+apache
この環境を構築する方法について情報下さい。
通常のやり方ではエラーになるのです。
0647デフォルトの名無しさん2006/04/13(木) 11:26:03
>>641
何が?
0648デフォルトの名無しさん2006/04/13(木) 11:35:43
>>646
通常のやり方って?
0649デフォルトの名無しさん2006/04/13(木) 11:40:33
誰かお馬鹿な俺でも分かるようにScalar leaked: 1の原因を説明してくれ・・・
0650デフォルトの名無しさん2006/04/13(木) 11:50:32
>>646
      , イ)ィ -─ ──- 、ミヽ
      ノ /,.-‐'"´ `ヾj ii /  Λ
    ,イ// ^ヽj(二フ'"´ ̄`ヾ、ノイ{
   ノ/,/ミ三ニヲ´        ゙、ノi!
  {V /ミ三二,イ ,  /,   ,\  Yソ
  レ'/三二彡イ  .:ィこラ   ;:こラ  j{
  V;;;::. ;ヲヾ!V    ー '′ i ー ' ソ
   Vニミ( 入 、      r  j  ,′
   ヾミ、`ゝ  ` ー--‐'ゞニ<‐-イ
     ヽ ヽ     -''ニニ‐  /
        |  `、     ⌒  ,/
       |    >┻━┻'r‐'´
      ヽ_         |
         ヽ _ _ 」    

  ググレカス [ Gugurecus ]
  ( 2006 〜 没年不明 )
06516462006/04/13(木) 12:30:43
>>648
apache,perl,postgresqlをwebを参考にインストール。
それぞれ単体で動作確認成功。
ppm使ってdbiとdbd-pgをインストール。
perlからdbiを使ってpostgresqlへコネクトしようとすると
perl command line interpreterが落ちる。

>>650
同じ言葉を返したい。
ぐぐった上にさらに自分でこの環境を構築してみてから言ってくれ。
0652デフォルトの名無しさん2006/04/13(木) 12:30:46
着々とすすむGoogleのファシズム的支配体制を阻止しよう。

すぐに、ググれという馬鹿の一つ覚えはやめましょう。Googleで探して見つからないと、
この世に存在しないのと同義になりつつあります。あらゆるものがGoogleベースで
構築されようとしています。そろそろ、どうやってGoogleの監視から逃れて、
自由なネット生活を送るかを、真剣に考えましょう。
0653デフォルトの名無しさん2006/04/13(木) 13:58:39
またエラー隠蔽者が暴れてるのか。
0654デフォルトの名無しさん2006/04/13(木) 14:20:07
>>651
んと、全く同じ環境を再現できるひとはそれほど多くないと思うので、
具体的なエラーメッセージや使ってるバージョンとか参考にしたサイトの URL とか
できるだけ詳しく出した方が良いと思うよ。
0655デフォルトの名無しさん2006/04/13(木) 14:25:36
Perl 落ちる


でググれ。
解決方法どっかにあるぞ。
0656デフォルトの名無しさん2006/04/13(木) 14:52:28
質問者の態度悪ぃなぁ
いい加減にしろよクソアマが
マジ頭くんぜ初心者!
0657デフォルトの名無しさん2006/04/13(木) 15:21:46
>>651
俺は落ちないな。
0658デフォルトの名無しさん2006/04/13(木) 15:52:04
>>656
君も相当態度が悪い
0659デフォルトの名無しさん2006/04/13(木) 16:23:46
人間とは、若い頃は年寄りから「近頃の若い者は」と言われ、自分が歳を
取ると若い者を見て「近頃の若い者は」と言い出す生き物のことである。
0660デフォルトの名無しさん2006/04/13(木) 17:25:59
Perlでスクリプト書いてて、どうしてもメモリ使用量的にキツイときって
おまえらどうしてますか?C?C++?LISP?
0661デフォルトの名無しさん2006/04/13(木) 18:26:08

 メ モ リ 増 設
0662デフォルトの名無しさん2006/04/13(木) 18:27:48
メモリを増設
0663デフォルトの名無しさん2006/04/13(木) 18:28:05
>>660
具体的な状況を書いてくれ。
0664デフォルトの名無しさん2006/04/13(木) 18:30:20
ぐは、かぶった・・・orz
0665デフォルトの名無しさん2006/04/13(木) 18:34:54
キツイのがメモリ使用量だけなら、Perlでメモリ消費を押えた記述をする。
0666デフォルトの名無しさん2006/04/13(木) 18:37:02
メモリ節約にundefって効果ある?
0667デフォルトの名無しさん2006/04/13(木) 18:47:46
アルゴリズムを見直す
0668デフォルトの名無しさん2006/04/13(木) 18:57:08
>>667
例えば具体的にどんな?
0669デフォルトの名無しさん2006/04/13(木) 19:13:07
>>668
現状の処理内容による。
0670デフォルトの名無しさん2006/04/13(木) 19:13:20
>>668
どう見直すかは状況によるに決まっとろうが。状況の例を挙げろと?

ごく簡単な例で言えばファイルの中身を全て行単位でひっくり返すものだとすれば、
最後の行から逆順に読んで書き出していくようにすれば良い。
ソートなら分割統治法で複数回に分けて挿入ソートとかいろいろあるもんだよ。
0671デフォルトの名無しさん2006/04/13(木) 19:15:22
>>660
もっとメモリが沢山あるマシンにログインする。
0672デフォルトの名無しさん2006/04/13(木) 19:17:15
・でかい変数をコピーしない
・そもそもでかい変数を作らない
・いらなくなった変数は消す

ってやってりゃそうそうメモリ足りなくなること無いと思うけど
0673デフォルトの名無しさん2006/04/13(木) 19:19:54
ちょっとしたプログラムなのに15MBもメモリを使ってしまう。
Perlはこれぐらいは覚悟して使うべき?もちろんCで書くより何十倍も楽なんだけど・・・
0674デフォルトの名無しさん2006/04/13(木) 19:31:52
俺のちょっとしたプログラムは2MBもメモリを使ってしまう。
俺はそれぐらいは覚悟して使っている。
0675デフォルトの名無しさん2006/04/13(木) 19:32:20
15Mぐらいは気にしない。気にしない。一休み。一休み。
0676デフォルトの名無しさん2006/04/13(木) 19:36:43
15MB のメモリと何十倍の開発効率とどちらを取るべきかなんて
それの程度のこと自分で判断できないようなら開発者失格だろう。
0677デフォルトの名無しさん2006/04/13(木) 19:48:17
最新の5.8.6使ってるのが駄目なのかもしれんね。
threadやめて10年前の古いバージョンでfork使って試してみるわ。
0678デフォルトの名無しさん2006/04/13(木) 19:57:50
そろそろperl6じゃないの?
0679デフォルトの名無しさん2006/04/13(木) 19:59:16
>>677
最新版は 5.8.8 。ヴァージョン下げるなら
5.005_04 まで下げないとあんまり意味無いよ。
http://search.cpan.org/~nwclark/perl-5.8.8/pod/perlhist.pod
0680デフォルトの名無しさん2006/04/13(木) 20:50:57
ちょっとしたので15Mって使いすぎじゃね?
0681デフォルトの名無しさん2006/04/13(木) 21:58:06
ちょっとしたプログラムの例

$a = `cat hello.doc`;

もちろん hello.doc は 15M のファイル。
0682デフォルトの名無しさん2006/04/13(木) 23:26:40
> もちろん hello.doc は 15M のファイル。

ちょwwwとしたプログラム。
0683デフォルトの名無しさん2006/04/13(木) 23:33:27
15Mでメモリ使い杉って・・・どんだけショボイマシン使って開発してんだよwwww
0684デフォルトの名無しさん2006/04/13(木) 23:40:44
昔はメモリが足りなくてスラッシングしたこともあったな。
その時は根本的に処理変えてメモリの中身をディスクに落とすように書き換えた。
データ分割してウィンドウ処理。
今時、テキスト処理でメモリ不足って、余程じゃなきゃ無いんじゃないの?
テキストのみなら新聞1年分読み込んでも数百MBでしょ。
0685デフォルトの名無しさん2006/04/13(木) 23:54:10
Perlスクリプトが使うメモリの量って把握できるの?
0686デフォルトの名無しさん2006/04/13(木) 23:54:37
できるよ
0687デフォルトの名無しさん2006/04/13(木) 23:55:20
メモリがきつそうだったらDBM使うのが当たり前じゃないの?
0688デフォルトの名無しさん2006/04/14(金) 00:04:18
「ちょっとした」 で15Mは無駄遣いしすぎだと思うけどなぁ

0689デフォルトの名無しさん2006/04/14(金) 00:14:31
「ちょっとした」でそこまで判断できるなんておまいらエスパーですか?
0690デフォルトの名無しさん2006/04/14(金) 00:22:00
ほんとうにちょっとしたプログラムだと、
数メガのテキストファイル読み込んで配列つくって
文字列の検索置換してあたらしく数メガのテキストファイル作っちゃったりするけどな。
メモリや速さの効率考えずに思いついたままのスクリプト書いちゃう。
0691デフォルトの名無しさん2006/04/14(金) 03:04:32
ちょっとした... (数字はi386 <STDIN>実行時点のDATA消費メモリ)
約064MB perl -e "$#a=0xFFFFFF;<STDIN>"
約256MB perl -e "$#a=0xFFFFFF;$a[$_]=undef for (0..$#a);<STDIN>"
約320MB perl -e "$#a=0xFFFFFF;$a[$_]=0 for (0..$#a);<STDIN>"
約384MB perl -e "$#a=0xFFFFFF;$a[$_]=0.1 for (0..$#a);<STDIN>"
約320MB perl -e "$#a=0xFFFFFF;@b=@a;<STDIN>"

約128MB perl -e "$a=' ' x 0x4000000; <STDIN>"
約064MB perl -e "$a=' ' x 0x4000000; undef $a; <STDIN>"
約064MB perl -e "$a=' '; $a x= 0x4000000; <STDIN>"
約000MB perl -e "$a=' ';$a x= 0x4000000; undef $a; <STDIN>"
0692デフォルトの名無しさん2006/04/14(金) 09:07:25
<STDIN> って何?
0693デフォルトの名無しさん2006/04/14(金) 09:08:46
ああ! sleep してるのね。
0694デフォルトの名無しさん2006/04/14(金) 11:21:13
ちょっとしたWin32::OLE使ったExcelリモート操作で5MB程度
0695デフォルトの名無しさん2006/04/14(金) 14:05:47
64bitCPUが主流になりつつある時代に何を言ってるんですか貴方達は
0696デフォルトの名無しさん2006/04/14(金) 14:09:17
・・・という夢を見た。
0697デフォルトの名無しさん2006/04/14(金) 14:14:53
>>687
えっ、そうなんですか?
DBMだとメモリ消費抑えられるの?
0698デフォルトの名無しさん2006/04/14(金) 16:09:13
>perl -e '<STDIN>'

タスクマネージャ:プロセス
perl.exe 3404K

何もしなくてもインタプリタで普通に3M強は喰うわけだ。
0699デフォルトの名無しさん2006/04/14(金) 23:59:48
use Data::Dumper;
sub func_A{my $H=shift();$H={key=>'val_A'}}
sub func_B{my $H=shift();%$H=(key=>'val_B')}

my $H={};
func_A($H);
print Dumper $H; # $H={} 変更されない
func_B($H);
print Dumper $H; # $H={key=>'val_B'} 変更される

上記の理由がよくわからないのですが、どう理解すればいいのでしょう?
0700デフォルトの名無しさん2006/04/15(土) 00:10:26
>>699
use Data::Dumper;
sub func_A{my $H=shift(); print "func_A : $H\n"; $H={key=>'val_A'}; print "func_A : $H\n";}
sub func_B{my $H=shift(); print "func_B : $H\n"; %$H=(key=>'val_B'); print "func_B : $H\n";}

my $H={};
print "\$H : $H\n";
func_A($H);
print Dumper $H;
func_B($H);
print Dumper $H;

これで実行してみ
07016992006/04/15(土) 01:05:36
>>700
えーっと、これは、つまり、
func_A は、「$H が指す先」でなく、「$H そのもの」を書き換えてるから、
ということですね。

言われて、よ〜く考えると、何とか理解できたのですが、奥が深い。
ありがとうございました。


use Storable;
sub save{
my ($Hash_a,$Hash_b)=@_;
store [$Hash_a,$Hash_b],'file';
}
で保存したハッシュを保存した場合、
sub load_ng{
my($Hash_a,$Hash_b)=@_;
($Hash_a,$Hash_b)=@{retrieve('file')};
}
では間違いで、やはり、
sub load_ok{
my($Hash_a,$Hash_b)=@_;
($Hash_a_file,$Hash_b_file)=@{retrieve('file')};
%$Hash_a=%$Hash_a_file;
%$Hash_b=%$Hash_b_file;
}
と書くしかなさそうですね。
0702デフォルトの名無しさん2006/04/15(土) 04:13:23
わろすww
http://chewie.f2o.org/etc/perl.png
0703デフォルトの名無しさん2006/04/15(土) 04:52:51
キマイラにも程がある
0704デフォルトの名無しさん2006/04/15(土) 09:58:33
>>698
俺が昨日作ったa.exeなんてファイル開いただけなのに4104Kぐらいつかってたぞ。
0705デフォルトの名無しさん2006/04/15(土) 11:10:06
>>702
この生物、後付けしまくったにもほどが… それが6なのか
0706デフォルトの名無しさん2006/04/15(土) 11:29:09
>>701

なんで素直に

($hash_1, $hash_b) = load();
sub load {
@{ retrieve('file') };
}

にしないの?
07076992006/04/15(土) 12:23:57
>>706
Thanks!!! おっしゃる通りです。

呼び出し側を load(\%hash1,\%hash2) の形式で書いていたので、
考え方がそっちに固まってました。
ありがとうございました。
0708デフォルトの名無しさん2006/04/15(土) 13:11:33
DBMに複雑なデータ構造を保存する時は
Storableでfreezeしてシリアライズしてからというのが定石ですか?
0709デフォルトの名無しさん2006/04/15(土) 13:30:40
PerlScriptについて
win2000pro,IE6SP1,fully patch,perl 5.8.7
かなりマイナーな質問なのですが、

ローカルに保存したhtmlファイル中に

<html><body>
<script language="PerlScript">
$window->document->write("heho!");
</script>
<body></html>

と書いています。これをIEで読み込めばちゃんと動きました。
次に上記のファイルの先頭行に

<!-- saved from url=(0005)http://a -->

を付け足します。
IEでは、htmlファイル中に上記の一行があれば
そのhtmlをマイコンピュータゾーンではなくて
インターネットゾーンのセキュリティで実行できます。

この状態でhtmlをIEで開いてもperl部分は動きません。
PerlScriptのデフォルト挙動では、セキュリティのためか、
ローカルのhtmlファイル中では動くが、ネット上のものについては
動作しないようになっているようです。
IEがhtmlファイルをネットにあるものと認識しているため
動かないのだと思います。
0710デフォルトの名無しさん2006/04/15(土) 13:31:25
#続き

それに従いレジストリエディタで
HKEY_LOCAL_MACHINE\SOFTWARE\ActiveState\PerlScript\1.0
の
REG_DWORD: EnabledZones = 0x0010 (default)
の値を0x0020(Enable Internet)
に書き換えました。
これでPerlScriptのセキュリティモードがインターネットゾーン向けに
なったと思ったら、まだ動きません。

先日PerlScriptなるものがあると知り、
しかもJavaScriptとほぼ互換性チックな使い方ができる知り、
セキュリティリスクについて実験しようと思ったのです。
例えば、どこかのHPで、
html中にPerlScriptで
'format c:';
なんてやられたらどうなってしまうんだと。
そこでローカル上でネット上にhtmlがあるかのように
振舞わせようとしたのですが、頓挫しました。
どこがおかしいんだろう。

長文失礼しました。
0711デフォルトの名無しさん2006/04/15(土) 14:02:58
>>708
定石かどうか知らないが、DB に限らずスカラーにして保存する場合、
おれもそれしか思いつかないなぁ。
Data::Dumper でも同様のことができると思うが、Storable の方が効率がいいしね。
0712デフォルトの名無しさん2006/04/15(土) 14:19:54
正規化するまでもなかったりマンドクセな時はよくやるな
0713デフォルトの名無しさん2006/04/15(土) 15:06:52
>>708
やってる事は同じだけど怠惰な人の為に。
http://perldoc.jp/docs/modules/MLDBM-2.01/MLDBM.pod
http://search.cpan.org/~timb/DBI-1.50/lib/DBD/DBM.pm
http://search.cpan.org/~neely/Data-Serializer-0.36/
0714デフォルトの名無しさん2006/04/15(土) 16:10:25
配列の要素っていくつまで入れれるのですか?
0715デフォルトの名無しさん2006/04/15(土) 16:13:10
>>714
メモリの許す限り。
0716デフォルトの名無しさん2006/04/15(土) 16:13:36
やってみればいいじゃない
0717デフォルトの名無しさん2006/04/15(土) 16:20:01
>>713
これはGOODです!
0718デフォルトの名無しさん2006/04/15(土) 16:49:30
他の言語やってきたらPerlの変数内の値の扱いについて混乱してきた…
他の変数に代入した場合に何所まで複製されるかがこんがらがってる。
Devel::Peekで色々やってみたら実装レベルで考えると文字列が特別扱いされてるようだけれど…

$fuga = $hoge = {};
の場合は、RVが複製され、その際ポインタが値として複製される。

$fuga = $hoge = 'piyo';
では、PV自体と、一つの単位である文字列の中身の複製が行われる。

Perlでは数値も文字列もリファレンスも等しくdatumであって、
その単位に応じて複製されている、と考えれば良いのかな。
0719デフォルトの名無しさん2006/04/15(土) 16:57:30
元々違うだけで、特別扱いとかじゃないんだけどね。
XS周り読むと分かるよ。

別に複製が特別な作業してるんじゃなくて、
RVの代入はRVの代入=ポインタ複製。
PVの代入はPVの代入=文字列複製。
SVの先にある構造体が何かによるだけ。
0720デフォルトの名無しさん2006/04/15(土) 17:25:05
>>719
確かにそれぞれ別のデータ構造なんだから特別扱いというのは変でしたね…
ちょっと文字列が参照として表わされた言語に慣れちゃったようで
$fuga = $hoge = 'piyo';
$hoge =~ s/piyo/hage/;
すると$fugaも変わってしまうような感覚に囚われてしまったもので(´・ω・)
perlgutsなりperlの実装なり読んで来る事にします。サンクス
0721デフォルトの名無しさん2006/04/16(日) 01:17:41
win環境でperlを使っています。
perlスクリプトを実行させると、ウインドウタイトルが
「C:\Perl\bin\perl.exe」、ウインドウ クラス名が「ConsoleWindowClass」
となりますが、このウインドウタイトルを変更する方法ってないでしょうか?
いくつも実行するとわからなくなるので、ウインドウタイトルにスクリプト名
を添付したいのです。
0722デフォルトの名無しさん2006/04/16(日) 01:53:11
win板池
0723デフォルトの名無しさん2006/04/16(日) 02:06:42
use Win32::Console;
$CONSOLE = Win32::Console->new;
$CONSOLE->Title('たいとる');
0724デフォルトの名無しさん2006/04/16(日) 02:13:20
>>723
さすがですね。
どうもありがとう!
0725デフォルトの名無しさん2006/04/16(日) 03:55:53
print \n;
ってすると
SCALAR(0x1625088)
って表示されるんだけど
これって何が起こっているの?
0726デフォルトの名無しさん2006/04/16(日) 04:02:28
>>725
perl -MO=Deparse -e 'print \n;'
print \'n';
-e syntax OK

barewordなnが文字列と解釈されて、そのリファレンスを取っている。
0727デフォルトの名無しさん2006/04/16(日) 04:09:50
use Win32::Console;

$con = Win32::Console->new();

#現在のウィンドウサイズを表示
print join('::',$con->Window()),"\n";

#ウィンドウサイズを相対指定で変更
$con->Window(0,0,0,20,20);

#変更後のウィンドウサイズを表示
print join('::',$con->Window());

これで
0::0::79::24
0::0::94::44
となることを期待しているのですが
ウィンドウサイズは変更されず
0::0::79::24
0::0::79::24
になってしまいます
なんでー
07287252006/04/16(日) 04:37:24
>>726
barewordって初めて聞いた
剥き出しの、つまり裸のワードってことなんですね
perl独特の言い回しなのかな

ところですみません
nのリファレンスを取っているってどういうこと?
たとえばprint \hとかprint \tとやっても結果は
print \nと同じ

SCALAR(0x1625088)

になるんだけど
hやtのリファレンスをとってもnと同じになるのはどうして?
リファレンスはメモリ上のアドレスだと解釈してるんですけど
リファレンスが取れるということはメモリ上にnの実体が確保されてるんだよね?
ということはこれをデリファレンスはできないの?
変数のデリファレンスはできるけど、barewordのデリファレンスはどうやるんだろ?
0729デフォルトの名無しさんNGNG
>>728
なにかnの部分を特別扱いして考えてないか?それは文字列そのものだよ。
そのリファレンスそのものを文字列に変換したもの"SCALAR(0x1625088)"
に含まれているのは型とメモリ上のアドレスだから、それを見て比較するのは筋違い。

> リファレンスが取れるということはメモリ上にnの実体が確保されてるんだよね?
それはその通り。リファレンスの指す先が文字列"n"の実体。

> ということはこれをデリファレンスはできないの?
一旦変数に入れないなら ${\n}

barewordはuse strictしてればエラー扱いだけどね。-wでも警告を吐くし。
Perlの暗黒面だろうねぇ…
0730デフォルトの名無しさん2006/04/16(日) 07:33:20
>>728
>bareword
他の言語では構文エラーと呼ぶからね
>print \hとかprint \tとやっても結果はprint \nと同じ
同じスクリプト中に複数書いたら728の想像通り別の値になるはずだけど?
print \n; print \t;
0731デフォルトの名無しさん2006/04/16(日) 11:28:20
print "\n"; だろ
と一言書けば済む話じゃないのか?

ちなみに間違えてやってることは
$s = "n";
print \$s;
0732デフォルトの名無しさん2006/04/16(日) 14:57:37
>>731
確かにそうだけど、話は広がったほうが面白い。
0733デフォルトの名無しさん2006/04/16(日) 15:45:13
>>729-730
いや、sh使いには普通かと>bareword
0734デフォルトの名無しさん2006/04/16(日) 15:50:45
>>731
> print "\n"; だろ
use strict;だろ。
0735デフォルトの名無しさん2006/04/16(日) 17:10:00
鳳たんのこのエントリーにワロタ。
ttp://pugs.blogs.com/audrey/2006/04/post.html
0736デフォルトの名無しさん2006/04/16(日) 17:20:20
Windowsでperlを使っています。versionは5.8.4です。
パッケージについての質問です。

コマンドプロンプトでperlを起動し、プログラム中で自作パッケージを
使用しようとしました。
長いファイル名の場合、読み込みに失敗するのですが、
パッケージ名を変えずに読み込むことはできないでしょうか?
ちなみに、短いパッケージ名だと読み込みができました。
0737デフォルトの名無しさん2006/04/16(日) 17:48:06
長い、短いを具体的な文字数で書いて、エラーの内容も書いてちょうだい。
0738デフォルトの名無しさん2006/04/16(日) 20:27:21
携帯電話や、写真の取り込めるmp3プレーヤーにパソコンに取り込んだ写真を転送しようと、Perlで画像をリサイズするプログラムを作成しました。
これは正常に動きました。

jpeg縦横比を判別し、横のほうが長い場合、90度回転させてからリサイズしたいのですがどのようにすれば回転させることが出来ますでしょうか?

Windows,ActivePerl 5.8を利用しています。よろしくお願いいたします。
0739デフォルトの名無しさん2006/04/16(日) 20:48:50
use Image::Magick;

rotate
0740デフォルトの名無しさん2006/04/16(日) 20:58:06
すいません、ImageMagickの入れ方が分からないためできないっす。
0741デフォルトの名無しさん2006/04/16(日) 21:04:19
ならばしかたがないのぅ。
ベクターあたりで適当なコマンドラインツール拾って
system とかで呼べばできるんじゃね
0742デフォルトの名無しさん2006/04/16(日) 21:04:54
Image::Magick の入れ方を知ろうという気はないのか・・・。
0743デフォルトの名無しさん2006/04/16(日) 21:14:20
ppm install Image-Magick
0744デフォルトの名無しさん2006/04/16(日) 21:17:56
ppmには無いよ
あと、グーグルで調べていくとドツボにはまる。
今のバージョンに全然該当しないのばかりが検索の上位
0745デフォルトの名無しさん2006/04/16(日) 21:25:31
何らかのライブラリ使ってリサイズはできてんだろ?
あとは本人がドキュメントの回転に関する項読めばいいだけだろ?
それとも比にとらわれて if( $h < $w ) という条件式に気付かなかったのか?
0746デフォルトの名無しさん2006/04/16(日) 21:44:47
>>738
回転を行なうソフトのソースを読んで、それを自分で実装すればいいよ。
0747デフォルトの名無しさん2006/04/16(日) 22:55:37
>>744
Bribes de Perl にあるし >>743 だけで使えるようになるよ。
http://www.bribes.org/perl/ppm
http://www.ss.iij4u.or.jp/~somali/web/_ppm.html#rep_about
07487402006/04/16(日) 23:07:06
離席してました。すいません。
resize2jpegとか言うのつかってsystemでコマンド送って一括でできるようにはしてます。
もちろん比率を受け取ってリサイズするので>>745の条件式は使ってます。
ImageMagickに変わる何かを探してみます。
0749デフォルトの名無しさん2006/04/16(日) 23:09:34
質問です。

いま書いてるスクリプト中で以下のようなコードがあります。
----------------------------------------------------
open FH1,"<$hoge" or die $!;
print "ループ前\n",Dumper(@main::pkgs),"\n";
while(<FH1>){
print "ループ中\n",Dumper(@main::pkgs),"\n";
----------------------------------------------------
ここでwhile分の中とあとでなぜか配列中のひとつの
値が書き換わってしまいます。しかしループ処理がない
場合は書き換わりません。

この書き換わる理由としてどういったことが考えられるでしょうか?
あと都合によりソース全体は晒せませんです。スマソ
0750デフォルトの名無しさん2006/04/16(日) 23:35:48
>>749
> この書き換わる理由としてどういったことが考えられるでしょうか?

それは、配列のどの値がどのように書き変わったかに大きく依存する。
0751デフォルトの名無しさん2006/04/16(日) 23:52:57
ImageMagickって普通に公式からexe落として
適当にインストールして適当にPATH通せば使えたような
0752デフォルトの名無しさん2006/04/17(月) 00:02:57
OSは Windowsと 同義なり
友蔵心の俳句
0753デフォルトの名無しさん2006/04/17(月) 03:57:20
>>748
おまいこいつだろ
http://pc8.2ch.net/test/read.cgi/php/1141195171/687-695
http://pc8.2ch.net/test/read.cgi/tech/1141742901/744
0754デフォルトの名無しさん2006/04/17(月) 05:07:20
ImageMagickの回転って、losslessだっけ?

わしはjpegtranちゅうのを使っているが。
0755デフォルトの名無しさん2006/04/17(月) 08:03:46
自分で検索する能力もないのはプログラムしちゃいけないとおもう
0756デフォルトの名無しさん2006/04/17(月) 08:23:23
>>755
そうだな
0757デフォルトの名無しさん2006/04/17(月) 09:34:58
>>755-756
激しく同意なんだが実際問題としてはそんなのがそこらにうようよいるんだ。
何かっつーとインタプリタやコンパイラがバグってるって言い出す始末。
自分の考えやコードは決して疑わないの。

いいから黙ってそのエラーメッセージをGoogleの検索ボックスにコピペして
Enterを押せと100万回言っても、まず人や掲示板に聞き、自説を振りかざす。
そんな自説を延々と掲示板に描いてる暇があっt(ry

0758デフォルトの名無しさん2006/04/17(月) 10:43:24
         _ ∩
      ⊂/  ノ )
      /   /ノV
≡≡≡≡し'⌒∪
     ┴┴'┴┴'

イナバウアーーーーーーーーーー!!!!

       /⌒`ヽ
  二 と(、A , ) つ  < イナバウアー
 三    V ̄Vノ( ゝ
  二    └=ヲ└=ヲ

0759デフォルトの名無しさん2006/04/17(月) 11:09:30
>>754-758
こういうやり取りこそが2ちゃんなんだな。
そして全てを達観してる俺のような奴が必ず現われるのも2ちゃんなんだな。
0760デフォルトの名無しさん2006/04/17(月) 11:18:24
>>754-759
        _,,:-ー''" ̄ ̄ ̄ `ヽ、
     ,r'"           `ヽ.
 __,,::r'7" ::.              ヽ_
 ゙l  |  ::              ゙) 7
  | ヽ`l ::              /ノ )
 .| ヾミ,l _;;-==ェ;、   ,,,,,,,,,,,,,,,_ ヒ-彡|
  〉"l,_l "-ー:ェェヮ;::)  f';;_-ェェ-ニ ゙レr-{   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  | ヽ"::::''   ̄´.::;i,  i `'' ̄    r';' }   | こういうやり取りこそが2ちゃんなんだな。
 . ゙N l ::.  ....:;イ;:'  l 、     ,l,フ ノ   |  そして「全てを達観してる俺のような奴」を
 . |_i"ヽ;:...:::/ ゙'''=-='''´`ヽ.  /i l"  < 達観してる俺のような奴が必ず現われるのも2ちゃんなんだな。
   .| ::゙l  ::´~===' '===''` ,il" .|'".    | 
    .{  ::| 、 :: `::=====::" , il   |     \________
   /ト、 :|. ゙l;:        ,i' ,l' ノト、
 / .| \ゝ、゙l;:      ,,/;;,ノ;r'" :| \
'"   |   `''-、`'ー--─'";;-'''"   ,|   \_
0761デフォルトの名無しさん2006/04/17(月) 12:25:08
jpegってヘッダ1byteだか1bitだか書き換えるだけで回転できなかったっけ?
0762デフォルトの名無しさん2006/04/17(月) 12:39:54
やってみてよ
0763デフォルトの名無しさん2006/04/17(月) 13:31:48
>>760
ちゃんと育毛しろよ
0764デフォルトの名無しさん2006/04/17(月) 16:35:29
URLでメールアドレス渡すのってどうやるんですか???
http://www.xxxx.com/xx.cgi?001&$email$
0765デフォルトの名無しさん2006/04/17(月) 16:41:22
クラスを定義する時にメンバのアクセスを制御する構文はないんでしょうか
C++系の様にprivateとか
0766デフォルトの名無しさんNGNG
>>764
日本語でおk

>>765
構文はないが手段はいろいろある。このモジュールとか使い勝手よさそうな感じ。
ttp://search.cpan.org/~miyagawa/Attribute-Protected-0.03/lib/Attribute/Protected.pm
0767デフォルトの名無しさん2006/04/17(月) 22:45:50
>>765
構文は無いので、普通(?)はprivateメソッド名の頭をアンダーバーにする。
全然privateじゃないけど、気持ちprivateなつもりになれる。
他の人にもそれを期待する。その程度。
07687402006/04/18(火) 00:08:00
>>753
いや、絶対違う
0769デフォルトの名無しさん2006/04/18(火) 02:06:52
Data::Dumperでデシリアライズする場合、evalを使っていますがセキュリティ上、不安があります。
Data::Selializer等を使えば解決出来そうですがもっとお手軽な方法は無いでしょうか。
Storableのthawのように期待するデータでない場合dieするようなメソッドを望んでいます。
0770デフォルトの名無しさん2006/04/18(火) 10:22:07
evalしてるからと言ってセキュリティが下がるかというと、必ずしもそうでもない。

てか、何故Storableじゃダメかね?
0771デフォルトの名無しさん2006/04/18(火) 16:44:15
Storableで構わないのですが開発中はData::Dumperで直接ファイル触れる方が
便利なので。で実運用でStrableに替えようと思っていても面倒くさくてそのままな事もしばしば・・・
クリティカルな物で無い場合効率優先でいってしまいます。
そういえばCGI::Sessionはどうしてるのかなと見てみたらSafe.pmなるものを使っているようなので
ちょっと調べてみます。
0772デフォルトの名無しさん2006/04/18(火) 20:42:47
Storableのがいいとおもうよ。はやいし。
0773デフォルトの名無しさん2006/04/18(火) 21:21:59
ちなみにData::Dumperのものは
my $hoge = do("fugafuga.dump")で取り込めるぞ
0774デフォルトの名無しさん2006/04/19(水) 00:52:55
>>773
いやそれ実質evalだからw
まぁセキュリティには影響ないけどな。
evalが嫌ならdoもだめちゃう?
0775デフォルトの名無しさん2006/04/19(水) 01:28:38
         ハ,,ハ
        ('(゚∀゚∩_ おいらをどこかのスレに送って!
      /ヽ   〈/\ お別れの時にはお土産を持たせてね!
     /| ̄  ̄ ̄|.\/
       |dexiosu|/
        ̄ ̄ ̄
現在の所持品:たばこ・ライター・コーヒー・ブラックブラック・枕・ケータイ電話
睡眠薬・聖教新聞 ・ダッチワイフ・外付けSCSI340MHDD・ネットランナー4月号
TYG02・小嶋進社長・ペプシNEX・モツ煮・ヌルポ・伊予柑・寒いギャグ ・7年ものキムチ
二年前購入した牛乳・阪神電気鉄道株・バイブレーター ・失くした思い出・ワイアレスマウス
GSX250FX・ポーションの空ビン・ラクダ本
0776デフォルトの名無しさん 2006/04/19(水) 14:19:39
すみません。質問です。

エクセルで処理できないくらいの行数のデータをperlを使ってエクセル
のようにソートしたいのですが、どうしたらよいのかわかりません。

3列で多数行のファイルなのですが、
一列目を第一優先に昇順で並べ替えて、かつ3列目を第二優先に昇順で並び
替えるというように、優先順位をつけるやり方がわかりません。

0777デフォルトの名無しさん2006/04/19(水) 14:24:49
>>776
そういう処理をする比較関数を作るとイイよ!!
0778デフォルトの名無しさん2006/04/19(水) 14:47:38
>>776
一つの項目で比較関数を使うやり方は略することにして(基本だから調べてくれ)、
(f($a[0]) cmp f($b[0])) or (g($a[2]) cmp g($b[2]))
というふうに、比較を優先順にorでつなげる。
0779デフォルトの名無しさん2006/04/19(水) 15:44:46
>>776
perl -e 'chomp;@d=split/,/;push(@x,\@d);END{for(sort{$a->[0]cmp$b->[0]||$a->[1]cmp$b->[1]}@x){print join(",",@$_)."\n"}}' file.csv
0780デフォルトの名無しさん2006/04/19(水) 20:40:13
ところでExcelって先頭文字大文字にしたり5-10-5とかのデータを勝手に日付型にしたりしてうぜぇよな
0781デフォルトの名無しさん2006/04/19(水) 21:46:32
シートの全範囲を選んで書式を文字列に。
但し数式もそのままの文字列として解釈される諸刃の剣。
0782デフォルトの名無しさん2006/04/19(水) 22:09:16
>>780
OpenOfficeもデフォルトの設定がそうなってて設定がどこにあるのか探すのが面倒だった。
0783デフォルトの名無しさん2006/04/19(水) 22:33:04
OpenOfficeは見つかったからいいんだが、Excel見つからないんだよね。
ってか CSV読み込んだ時点でもう変わっちゃってるからどうしようもねぇ
0784デフォルトの名無しさん2006/04/20(木) 08:42:52
CSV から Excel なんて自前で変換してやりゃ済む話だろ
0785デフォルトの名無しさん2006/04/20(木) 09:30:08
$str="aaabbbccc";という文字列にaが何文字含まれているかを調べるには
どうしたらいいんですか?
0786デフォルトの名無しさん2006/04/20(木) 09:36:12
一文字ずつ調べる
0787デフォルトの名無しさん2006/04/20(木) 09:55:14
>>786
だからどうやるんだ?
0788デフォルトの名無しさんNGNG
それが質問者の態度か。
0789デフォルトの名無しさん2006/04/20(木) 10:05:40
>>788
氏ねよチンカス。
0790デフォルトの名無しさんNGNG
$str = 'aaabbbccc';
$target = 'a';

@chars = unpack('C*', $str);
foreach $char (@chars) { $count{$char}++; }
print $count{unpack('C', $target)};

お前が死ねよマンカスw
0791デフォルトの名無しさん2006/04/20(木) 10:16:03
perl -e "print scalar(grep /a/, split'','aaabbbccc')"
0792デフォルトの名無しさんNGNG
スピード重視ならこれか
    while($str =~ /(.)/gs){ $count{$1}++; }
    print $count{$target};
0793デフォルトの名無しさんNGNG
while($str =~ /./gs){ $count{$&}++; }
print $count{$target};

遅くなったり速くなったり
0794デフォルトの名無しさん2006/04/20(木) 11:29:02
$str = "aaabbbccc";
print ($str =~ y/a/a/);
じゃだめなのか?
0795デフォルトの名無しさん2006/04/20(木) 12:36:49
for ($i = 0; $i < length $hoge; $i++) {
++$count if $hoge[$i] eq $target;
}

C言語みたいな…
0796デフォルトの名無しさん2006/04/20(木) 18:30:47
>>794がベストだろ。
念のために書き直すと
my $str = "aaabbbccc";
my $count = ( $str =~ tr/a/a/ );
print $count;

だが>>788のようなウンコちゃんは目で数えやがれ
0797デフォルトの名無しさん2006/04/20(木) 18:38:18
>>785

> perldoc -q count

とする。
0798デフォルトの名無しさん2006/04/20(木) 18:39:38
Acme::Oppaiがでましたよ。
ttp://search.cpan.org/~yappo/Acme-Oppai/
0799デフォルトの名無しさんNGNG
>>796
あ?呼んだかクソガキ
0800デフォルトの名無しさん2006/04/20(木) 18:51:23
      ハ_ハ   
     (^( ゚∀゚)^)  ハ_ハ
     )  /   ('(゚∀゚∩    みんな仲良く
    (_ノ_ノ     ヽ  〈      みんなPerl仲間
             ヽヽ_)

> だが>>788のようなウンコちゃんは目で数えやがれ

こんなひどいこと書いちゃダメだよ。
0801デフォルトの名無しさん2006/04/20(木) 20:27:59
なんかみんな初心者っぽいな
一流プログラマーのオレはこのようにする

$str="aaabbbccc";

$mozisuu=&str_mozisuu($str,"a");
print "$mozisuu";

sub str_mozisuu{
local($strlen1,$strlen2);
local($str1)=$_[0];
local($str2);
local($aaa);

$str2=$str1;

$str1=~s/$_[1]//g;

$strlen1=length($str1);
$strlen2=length($str2);

$aaa=$strlen2-$strlen1;

if(length($_[1])>=2){
$aaa=$aaa/2;
}

return($aaa);
}
0802デフォルトの名無しさん2006/04/20(木) 20:32:47
スパゲティ
0803デフォルトの名無しさん2006/04/20(木) 20:49:15
パスタと言えよオッサン
0804デフォルトの名無しさん2006/04/20(木) 20:52:41
変数のprintにダブルクオーテーションでくくる一流プログラマー
演算子の前後に空白を入れない一流プログラマー
use strictを知らない一流プログラマー
意味不明な変数名をつける一流プログラマー
localしまくる一流プログラマー
無駄に変数を作る一流プログラマー
二項演算子を知らない一流プログラマー
バグったままうpする一流プログラマー

KENT臭のする一流プログラマー
0805デフォルトの名無しさん2006/04/20(木) 21:04:32
KENTは超一流のプログラマ
0806デフォルトの名無しさん2006/04/20(木) 21:07:31
>>801
お前が一流かしらないが美しくないから却下だ
0807デフォルトの名無しさん2006/04/20(木) 21:18:12
英語でもいいから、sysopenかopenをオーバーライドしてるコード例ってどっかにない?
0808デフォルトの名無しさん2006/04/20(木) 22:04:08
>>807
http://koders.com/
08098072006/04/21(金) 01:45:13
package Foo::Bar;

use strict;
use warnings;

require Exporter;

use Carp qw/croak/;
use Fcntl qw/:flock/;
use Symbol qw/qualify_to_ref/;

our $VERSION = '0.01';
our @ISA = qw(Exporter);
our @EXPORT_OK = qw(sysopen);

sub sysopen (*$$;$) {
my ($fh, $name, $mode, $perms) = @_;
$fh = qualify_to_ref($fh, caller);
$perms ? CORE::sysopen $fh, $name, $mode, $perms
: CORE::sysopen $fh, $name, $mode
or croak "$!\n";
flock $fh, LOCK_EX or croak "$!\n";
seek $fh, 0, 0 or croak "$!\n";
truncate $fh, 0 or croak "$!\n";
$_[0] = $fh;
}

1;
# 書いてみたけど、あってるかどうか自信ない。誰か詳しい奴いない?
08107962006/04/21(金) 02:31:45
ごめん>>788
俺がウンコだと思ったのは>>789でした・・・
0811デフォルトの名無しさん2006/04/21(金) 06:36:58
ワロタw

文字数のカウントは >>796 の tr でやる方法が
ラクダ本かcookbook にも載ってたね。
0812デフォルトの名無しさん2006/04/21(金) 09:49:58
>>811
ウルトラダーティな窮極メソッドとして語り継がれているっすね。

これぞバッドノウハウ!! (ヒステリックな哄笑)
0813デフォルトの名無しさん2006/04/21(金) 10:39:50
カウントするのは、こんなのどうかな?

my $s = 'aaaabbbcccababadfababa';
my $i = 0;
$i++ while ($s =~ /a/g);
print "$i\n";
0814デフォルトの名無しさん2006/04/21(金) 11:15:11
もうこれでええやろ
my $str = "aaabbbccc";
my $count = 3;
print "「a」の個数は$count個です.";
0815デフォルトの名無しさん2006/04/21(金) 11:38:14
だれかカリー化しる!!
0816デフォルトの名無しさん2006/04/21(金) 12:05:27
suとかpasswdのような
コマンドを打ち込んでから、何か聞いてくる対話型のコマンドを実行したいのだが、
どうすればいいかさっぱり分かりません。

普通のコマンドならreadpipeやexcecでできるのですが。
教えてもらえないでしょうか?
0817デフォルトの名無しさんNGNG
Expectでググれ
0818デフォルトの名無しさん2006/04/21(金) 20:25:02
あのー
3000とかを3,000という風に
コンマを付けてくれるモジュールみたいなの
ありませんでしょうか
0819デフォルトの名無しさん2006/04/21(金) 20:26:40
>>818
赤ラクダ本にでてるよ〜〜
0820デフォルトの名無しさん2006/04/21(金) 20:30:35
sub put_comma {
my $num = $_[0];
$num = reverse $num;
$num =~ s/(\d{3})(?=\d)(?!\d*\.)/$1,/g;
$num = reverse $num;
return $num
}
0821デフォルトの名無しさん2006/04/21(金) 20:41:13
>>818
モジュールじゃないけどな
ttp://www.din.or.jp/~ohzaki/perl.htm#NumberWithComma
0822デフォルトの名無しさん2006/04/21(金) 22:05:21
>>819-821
激しく感謝です
ありがとうございました
08238182006/04/21(金) 23:01:39
どうしても正規表現を使いたくないので、
下記のコードを書いたんですが
これにバグってありますかね?すみません

#!/usr/bin/perl

$num = '1980000';
$num = int $num;

@nums = unpack 'C*', $num;
@nums = reverse @nums;

for ($i = 0; $i < length $num; $i++) {
if($i % 3 == 0 && $i != 0){ push @cnums, 44; }
push @cnums, $nums[$i];
}

@cnums = reverse @cnums;
$cnum = pack 'C*', @cnums;

print $cnum;

__END__
08248182006/04/21(金) 23:04:41
-198000000 とか与えたら変になりますね、、
0825デフォルトの名無しさん2006/04/21(金) 23:34:07
何のためにPerl使ってんだ?
どうせ次は少数点で躓くんだしCのコードでも探しな。
0826デフォルトの名無しさん2006/04/22(土) 00:26:43
少しは、役に立つかも・・・
http://www.yukinko-net.jp/computer/download/downloadlist.htm
0827デフォルトの名無しさん2006/04/22(土) 15:26:01
2つのスクリプトを同時に起動させ、プログラム間でデータ
の受け渡しをしたいのですが、下記のようなサンプルを参考
にして実行するとエラーが出ます。
「program arguments」には何を書けばよいのでしょうか?

#<受け側スクリプト:rece.pl>
$pid = open(README, "program arguments |") or die "Couldn't fork: $!\n";
while (<README>) {
print <README>;
}
close(README) or die "Couldn't close: $!\n";

#<送り側スクリプト:send.pl>
$pid = open(WRITEME, "| program arguments") or die "Couldn't fork: $!\n";
print WRITEME "data\n";
close(WRITEME) or die "Couldn't close: $!\n";

各プログラムは受け側を先に起動して、その中から送り側を
shell起動してもかまいません。
ソケット間通信でやるサンプルも見つけたのですが面倒そうです。
現状はファイルでデータの受け渡しをしています。
環境はwindwos XPで、Active perl v5.8.7です。
0828デフォルトの名無しさん2006/04/22(土) 15:44:18
>>827

……(呆れている)

> 「program arguments」には何を書けばよいのでしょうか?

送り側:
受け側スクリプトが起動し、送り側からの通信を受け取るプログラムと通信するため
のプログラムとその引数

受け側:
送り側スクリプトが起動し、受け側への通信を送出するプログラムと通信するため
のプログラムとその引数
0829デフォルトの名無しさん2006/04/22(土) 15:56:45
>>827
送り側: print STDOUT "data\n";
受け側: open(READ, "send.pl |");

か

送り側: open(WRITE, "| read.pl"); print WRITE "data\n";
受け側: while (<>) { ... };

かな。
0830デフォルトの名無しさん2006/04/22(土) 15:57:27
あ、双方向で通信したいのか?とすると Open3 とか使わないとダメか。
0831デフォルトの名無しさん2006/04/22(土) 16:54:01
127.0.0.1
0832デフォルトの名無しさん2006/04/22(土) 17:33:23
epicのVer.0.3というのは3.0対応という意味っぽい。
testingの0.3.10、0.3.12というのはそれぞれ3.1、3.2対応という事
だろうと推測できる。
08338322006/04/22(土) 17:36:04
http://sourceforge.net/forum/forum.php?thread_id=1452574&forum_id=258688

ここから非公式だけど3.2対応のEPICが落とせる
(epic-devel.zipってヤツ)
0834デフォルトの名無しさん2006/04/22(土) 17:38:01
一度図に描いて整理した方がよくね?
0835デフォルトの名無しさん2006/04/22(土) 17:48:37
>>827
一歩下がって何をしたいのか書け。
0836デフォルトの名無しさん2006/04/22(土) 20:19:19
憧れのDANさんが最新の記事で

「それもいやなら、いっそ定数は使わないで済ませた方がましである。
私は定数はあまり使わないが、それで困った事はほとんどない。
どうしてもというときは明示的に

sub DEBUG { 1 }
としている。」

と書いてるんですけど
sub DEBUG { 1 }
って一体何なの?
0837デフォルトの名無しさん2006/04/22(土) 20:37:17
>>836
PerlはConst無いから定数を返すサブルーチンで代用、という意味でしょう。
定数を扱うモジュールはあるけど、やってる事は同じ。
0838デフォルトの名無しさん2006/04/22(土) 20:37:32
>>836
> と書いてるんですけど
> sub DEBUG { 1 }
> って一体何なの?

"DEBUG" がコンパイル時に "1" に定数化する。
0839デフォルトの名無しさん2006/04/22(土) 20:38:57
perlsubの "Constant Functions" を参照のこと。
0840デフォルトの名無しさん2006/04/22(土) 20:40:15
ってあれ?

sub DEBUG () { 1 }

じゃね〜の?
0841デフォルトの名無しさん2006/04/22(土) 20:45:43
>>840
どういうこと?
0842デフォルトの名無しさん2006/04/22(土) 20:55:42
>>841
らくだのコブに聞けや、て優香、本を読んで卓袱台」
0843デフォルトの名無しさん2006/04/22(土) 21:11:17
どっちも大して代わらないよ
0844デフォルトの名無しさん2006/04/22(土) 21:16:38
perlの定数の困るところは、文字列へ埋め込んだり
ハッシュのキーに使おうとしたときに変な書き方を
強要されることだな。
0845デフォルトの名無しさん2006/04/22(土) 22:24:05
> 憧れのDANさんが最新の記事で

正気か

0846デフォルトの名無しさん2006/04/22(土) 22:29:38
>>845
ちょwwwwwwwwwww
0847デフォルトの名無しさん2006/04/22(土) 22:31:24

$format = "$word1 は $word2 です。";
&bbb($format);

sub bbb{

my $test = shift;

foreach(@ar){
($word1,$word2) = split(",",$_);
print $test;
}


}

$format 内で変数を設定とかできますか?

0848デフォルトの名無しさん2006/04/22(土) 22:35:03
>>847
sprintfのフォーマットは変数に入れることが出来る。
0849デフォルトの名無しさん2006/04/22(土) 22:37:21
>>847
@arがどこから来るか知らないけど。

$format = "%s は %s です。";
&bbb($format);

sub bbb {
 my $format = shift;
 foreach (@ar) {
  printf($format, split(",", $_);
 }
}

本当に $format に変数名を入れるなら
$format = '$word1 は $word2 です。'; # <-- シングルクォート
にして、bbb() 内で evalするという方法が無くはないけど。
08508472006/04/22(土) 22:48:22

ありがとうございます。即決ですね。感謝です。
うまくいきました。

フォーマット内に、コード埋め込んでおいて、
置換させようかなとか、考えていました・・・。
tr/_WORD1_/$word1/ てな感じでwww
0851デフォルトの名無しさん2006/04/22(土) 23:04:15
tr...
0852デフォルトの名無しさん2006/04/22(土) 23:40:52
リストを置換の条件にしたいのですが…
$text =~ s/$Substi[$i]//g;
としても置換されることなくそのまま返ってきます。
(この場合は削除ですが)

なおその前後で
print $Substi[$i];
とすると、望む文字が表示されるので
リストが誤っているようではありません。

リストはこういう使い方はできないのですかね。


一応使われているアルファベットの数を数えようという趣旨で作ってます。
0853デフォルトの名無しさん2006/04/22(土) 23:43:03
DANはI/Oのマスコット
0854デフォルトの名無しさん2006/04/23(日) 00:03:10
plaggerの質問はどこに書いたらいいんですか?
0855デフォルトの名無しさん2006/04/23(日) 00:05:11
コマンドラインからperlへ引数を渡すときって
Trimされてるの?
winで試したらどうやら引数の前後のスペース
やタブは無視されてるみたいだったから
unixでもそう?

もしも引数の最後に空白を含む文字列を指定
したかったらどうするの?

perl test.pl aiueo ←ここにスペースを含めたい
0856デフォルトの名無しさん2006/04/23(日) 00:07:30
日本を代表するperlerって誰?

Dan?
naoya?
miyagawa?

orre?
0857デフォルトの名無しさん2006/04/23(日) 00:30:54
>835
まずは子プロセスの実行完了ステータスを、親プロセスに
通知したかったのです。
下記の記述で動作しました。。

<親プロセス:rec.pl>
if( open (CH, "perl send.pl |") ){
print <CH>;
}

<子プロセス:send.pl>
・・処理実行・・
print "処理終了";

用途はWEBから大きなデータを取ってくるのに、親プロセスから
分割ダウンロードする子プロセスを複数起動して、処理を高速化
することです。
ところがここで、もうひとつ問題が発生。
上記の方法では子プロセスの処理が終了しないと親は次に進めま
せん。
perlでは子プロセスに非同期処理実行をさせることはできないの
でしょうか?
0858デフォルトの名無しさん2006/04/23(日) 01:34:22
>>855
perl test.pl "aiueo "
0859デフォルトの名無しさん2006/04/23(日) 02:48:07
>>857
>子プロセスの処理が終了しないと親は次に進めません
子が終わる前に親が終わったら子はゾンビになるよ。
最終的にはwaitするって。
パイプつかってるからそこでブロックしちゃうんじゃ?
0860デフォルトの名無しさん2006/04/23(日) 04:11:05
>>852
普通にできるはず。原因は他にあると思われ。

---
my @a = qw(a b c);
my $text = 'a1 2 a3';

$text =~ s/$a[0]//g;

print $text; # 1 2 3
0861デフォルトの名無しさん2006/04/23(日) 04:17:47
>>852
ブロックの中でmy使ってるってオチじゃないかな
0862デフォルトの名無しさん2006/04/23(日) 04:23:45
>>857
子プロセス作る方法でもいいけど、子プロセスもperlにするなら
スレッドという方法も。

---
use threads;

main();

sub main {
  my $thr = threads->new( \&thr );

  # 色々な処理

  $thr->join;
  print "in main: 処理終了\n";
}

sub thr {
  # 色々な処理
  print "in thr: 処理終了\n";
}
0863デフォルトの名無しさん2006/04/23(日) 04:28:56
>>859
嘘つくなよ。子を残して親が死んだら、initがその子の親になる。
ゾンビになるのは子が死んでるのに生きてる親がwaitしない場合。

>>857
ブロックするのは用意できてないファイルハンドルに対してreadしてるから。
readできるファイルハンドルをselectで調べてからsysreadするようにすれば
ブロックしない。
0864デフォルトの名無しさん2006/04/23(日) 07:55:44
>>857
> 用途はWEBから大きなデータを取ってくるのに、親プロセスから
> 分割ダウンロードする子プロセスを複数起動して、処理を高速化
> することです。

非同期処理は、スレッドを使うなり、socketで通信路をopenして、
それをselectでmultiplexするなりして単一プロセスでも実行できる。

複数子プロセスを使うのなら、forkして(さらに別プログラムならexecして)行なう。

0865デフォルトの名無しさん2006/04/23(日) 08:11:12
つ[POE]
0866デフォルトの名無しさん2006/04/23(日) 10:38:20
質問。

http://www.google.com/Top/Computers/Programming/Languages/
ここにでている言語の、数字別にソートした
一覧を作りたいんだけど、どうすればいい?
0867デフォルトの名無しさん2006/04/23(日) 10:49:23
>>866
言語と数字を切り分けて配列に入れて、数字でソートする。
0868デフォルトの名無しさん2006/04/23(日) 10:54:11
>>867
ちょっとやってみて
そんで、結果をどっかにアップして。
結果だけ見たいから。
0869デフォルトの名無しさん2006/04/23(日) 11:15:12
            __, --──−、_
           /::_, -‐─ ‐-、_::::`‐-、
.           /::/        `‐i:::::::ヽ
           |:./           ',ミ::::::}
           }:l             lミ::::::l'
         _!,'_ ,..-- ..、   __ !::::::::|
        lヽ! `i ィェッ、.i'゙"i';;;ィェッ;,`i===,、
         ',.l  ゙、゙゙゙゙゙,ノ  ヽ_"゙゙ ゙/ r;;;;;;/
          i|    ̄,'  ::::ヽ `''" .,{;;;;;;/
           ',.    ゙`-"゛''   ,};;;;;;'
          !   ,_、,___,  /;;;/"
         _,` 、       /;;r'
   _,, -─ '';;;;;;;;;| 、ヽ,,____,,-‐';;;;;;;;;;;\_
   ;;;;;;;;;;;;;;;;;;;;;;;;;;|  \    _//;;;;;;;;;;;;;;;`ヽ、
   ;;;;;;;;;;;;;;;;;;;;;;;;;;|   r‐ィt- '" /;;;;;;;;;;;;;;;;;;;;;;;;;;
   ;;;;;;;;;;;;;;;;;;;;;;;;;;|  /,彡彡}  ,!;;;;;;;;;;;;;;;;;;;;;;;;;;;;

      ツレマスカ [Vladimir Tzlemazka]
        (1915-1997 ロシア)
0870デフォルトの名無しさん2006/04/23(日) 11:31:12
>>868 をシバいていいですか?
0871デフォルトの名無しさん2006/04/23(日) 12:46:52
結果見るだけなら sortf で充分
0872デフォルトの名無しさん2006/04/23(日) 13:10:05
ワロス
0873デフォルトの名無しさん2006/04/23(日) 14:35:58
>>866
こんなのでいい?
ttp://homepage3.nifty.com/catfood/up/src/up4748.txt
ページを取得
正規表現を使って言語をキー、数字を値としたハッシュを作成
ハッシュの値でソートして出力
0874デフォルトの名無しさん2006/04/23(日) 16:35:44
やさしいな
0875デフォルトの名無しさん2006/04/23(日) 18:22:14
>>873
だめ
HTTPにして。
急いで。
0876デフォルトの名無しさん2006/04/23(日) 18:34:15
>>873
はやくして
0877デフォルトの名無しさん2006/04/23(日) 18:36:40
それが人に頼む態度か?
0878デフォルトの名無しさん2006/04/23(日) 18:39:49
print "hello\n"

の動作がWindowsとUnix系OSで結果違いますが、
Unix系にそろえることってできますか?
(Windowsだと改行が余計に出力される)
0879デフォルトの名無しさん2006/04/23(日) 18:51:45
>>875=>>876の言いたい事が、サッパリわからん。
「HTTPにして」って何のこと?
まさか、>>873が読めないから先頭をhttp://〜にして
貼り直してって言ってる …んじゃないよな?まさかね…
0880デフォルトの名無しさん2006/04/23(日) 18:55:02
あきらかに釣り。
人に時間と手間をかけさせようとしてるだけ。
華麗にスルーが一番。
0881デフォルトの名無しさん2006/04/23(日) 19:03:14
……
htmlって言いたいんだろうな。
0882デフォルトの名無しさん2006/04/23(日) 19:14:22
HTTPリクエストを直書きして書いてくれって意味かもしれん
0883デフォルトの名無しさん2006/04/23(日) 19:19:03
>>878
binmdoe( STDOUT );
print "hello\n";
0884デフォルトの名無しさん2006/04/23(日) 19:19:33
s/binmdoe/binmode/;
0885デフォルトの名無しさん2006/04/23(日) 20:09:08
>HTTPにして

これ流行りそうだな
0886デフォルトの名無しさん2006/04/23(日) 20:14:32
>>885
HTTPにして
0887デフォルトの名無しさん2006/04/23(日) 20:25:23
>>878
できない。
Windowsの標準コマンドシェルはプロンプト表示前に改行を表示するので、
空行が1つ余分に出力されているように見える。
実際にperlが出力している改行の数は、どちらも同じ。
0888デフォルトの名無しさん2006/04/23(日) 20:29:00
質問です
PerlでWin32のプログラムのように
ウィンドウ(コンソール?)を表示させずに起動する事は出来ますか?
宜しくお願いします
0889デフォルトの名無しさん2006/04/23(日) 20:31:19
GET HTTPにして HTTP/1.1

0890デフォルトの名無しさん2006/04/23(日) 20:44:23
乱数を用いて生成する四則演算の問題を5つユーザーに答えさせて、
最後に合計得点を表示するプログラムを作りなさい

という課題を教えて欲しいです・・・
0891デフォルトの名無しさん2006/04/23(日) 20:54:45
>>890
金額は?
0892デフォルトの名無しさん2006/04/23(日) 20:56:16
>>890
課題:
乱数を用いて生成する四則演算の問題を5つユーザーに答えさせて、
最後に合計得点を表示するプログラムを作りなさい
0893デフォルトの名無しさん2006/04/23(日) 21:01:09
>>892
という課題に対する解答を教えて欲しいですでした。
すみません。
0894デフォルトの名無しさん2006/04/23(日) 21:20:14
use Strict;

srand;
my @op = ('+', '-', '*', '/');
my $o = 0;
my $x = 0;
my $secnum = 5;
for (my $i=0; $i<$secnum; ++$i) {
$func = sprintf("%d %s %d", int(rand(9))+1, $op[rand(@op)], int(rand(9))+1);
print "$func = ";
$ans = <STDIN>;
chomp($ans);

$_ = eval($func);
if ($_ eq $ans) {
print " true\n";
$o++;
} else {
print " false\n";
$x++;
}
}

print "\nRight answer: $o, Wrong answer: $x\n";

お礼は30万円でいいよ。
0895デフォルトの名無しさん2006/04/23(日) 21:27:15
つ[30万円]

振り込んでおいた。
俺の口座番号に。
0896デフォルトの名無しさん2006/04/23(日) 21:29:27
>>883
cygwin perlで試してみましたが、
だめぽでした。

>>887
なるほど。
どうもありがうございました
0897デフォルトの名無しさん2006/04/23(日) 21:32:17
active perlで良いじゃん。
なんでcygwinなんぞ…
0898デフォルトの名無しさん2006/04/23(日) 21:34:35
>>894
すげぇぇ!!!
本当にありがとうございました。
30万円分の感謝の気持ちを送ります。
0899デフォルトの名無しさん2006/04/23(日) 21:35:54
my @op = ('+', '-', '*', '/')

がやけに可愛い。
0900デフォルトの名無しさん2006/04/23(日) 21:40:56
>>897
CygwinPerlとActivePerlはどちらも長所と短所がある
真のPerlerなら両方つかいこなすのがベストだとわかるはず
0901デフォルトの名無しさん2006/04/23(日) 21:41:20
>>897
この改行問題が解決するならactive perlでもいいんですが。。
というか、これはactive perlの問題かと思って
cygwin perlをインスコ仕直した。けどcygwinでも同じだった罠。
0902デフォルトの名無しさん2006/04/23(日) 21:48:49
('+', '-', '*', '/')
↑ ↑ ↑ ↑
長 次 三 長
女 女 女 男
0903デフォルトの名無しさん2006/04/23(日) 21:53:36
>>901
むっ?binmodeすればUNIXと同じにならない?
Windowsならbinmodeしない場合、printに渡した文字列中の\nを\r\nに置き換える
という小さな親切をしてくれるんだが、つまり、"hello\n"なら"hello\r\n"に置き換え。

で、binmodeすれば、その処理を行わないからUNIXと同じになるはずだけど。
0904デフォルトの名無しさん2006/04/23(日) 21:54:51
いやだから\nはLFと等価でないと
0905デフォルトの名無しさん2006/04/23(日) 22:00:19
そもそもPerlの問題じゃないんだからどうしようも無い気が
0906デフォルトの名無しさんNGNG
>>903
そもそも質問を勘違いしていると思う。もっと極端な例で書けば
C:\..>perl -e "print q|hoge|"
hogeC:\..>
となって欲しいってことかと。887の言うとおりシェルの問題だよね。
0907デフォルトの名無しさん2006/04/23(日) 22:01:15
2レス続けてアホなレス
0908デフォルトの名無しさん2006/04/23(日) 22:02:01
うわw いきなりレスするからタイミングずれたw
0909デフォルトの名無しさん2006/04/23(日) 22:12:54
>>906
えっ?そんな問題なの?cygwinのbashでもつかえよ
0910デフォルトの名無しさん2006/04/23(日) 22:29:49
>>873
天才ですね
本当にありがとうございます
ローカルに保存させていただきました
0911デフォルトの名無しさん2006/04/23(日) 22:30:54
Erlang: 279

これ、なんでしょうね?
0912デフォルトの名無しさん2006/04/23(日) 22:47:35
>>878ですが、おかげで解決しました。
cygwinの環境変数がこんな感じになってました。
PS1="\n\$"

ごめんなさい、とほほ。
0913デフォルトの名無しさん2006/04/24(月) 05:04:33
CygwinPerlなんですが
共有メモリって使えるのでしょうか?
PerlでIPCとかセマフォとか解説してるサイトってないでしょうかね
0914デフォルトの名無しさん2006/04/24(月) 05:27:10
なんで >>894 の
> use Strict;
に誰も突っ込まないの?
0915デフォルトの名無しさん2006/04/24(月) 06:23:15
じゃあなんでsrandはPerl5.004以降必要ないって突っ込まないの?
0916デフォルトの名無しさん2006/04/24(月) 06:35:43
下位互換性
0917デフォルトの名無しさん2006/04/24(月) 06:41:47
ApacheへhttpでアクセスしてCGIでもサーブレットでもなんでもいいんで、
そのApacheが動いているLinuxのユーザーのパスワードかえる手段ってありますかね?

CGIでもサーブレットでもシェルコマンドを実行することはできますが、
Apache自体のプロセスがrootではなくApacheユーザーで実行されているので、
Linux上のユーザーのパスワードを変更するのはroot権限を持たないといけないので
やっぱり無理?
0918デフォルトの名無しさん2006/04/24(月) 08:31:06
>>917
> やっぱり無理?

いや
0919デフォルトの名無しさん2006/04/24(月) 08:32:34
>>913
> PerlでIPCとかセマフォとか解説してるサイトってないでしょうかね

Perlをインストールすると一緒にインストールされるドキュメントにあるから、
それを公開しているサイトだったらあるんじゃね?
0920デフォルトの名無しさん2006/04/24(月) 08:47:20
>>917
あなたがそのlinuxマシンの管理者や適切な権限を持った
ユーザーならどうにでもやりようがある。
あなたがただのユーザーなら馬鹿が設定したwebサーバで
ないかぎり無理
0921デフォルトの名無しさん2006/04/24(月) 08:55:32
>917
Webminでも使ったら?
09229172006/04/24(月) 10:32:16
sudoでやる事にしました。
その前段階の実験としてApache上からlocalhostにtelnetでログインしてlsを実行する
Expectモジュールを使用したPerlスクリプトを組みました。
コマンドプロンプト上からは./telnet.cgiで問題なく動作するのですが
CGI上からはApacheに↓のように怒られます。どうすればいいのかさっぱり
malformed header from script. Bad header=Trying 127.0.0.1...: expecttel.pl
09239172006/04/24(月) 10:32:55
↓ソース
#!/usr/bin/perl --
use Expect;
my $timeout = 10; # Grundsatzlich 10 sec
# auf Antwort warten
my $host = "localhost";
my $user = "hoge";
my $passwd = "hoge";
# Telnet starten
$telnet = Expect->spawn("/usr/kerberos/bin/telnet", $host);
# Login
$r = $telnet->expect($timeout, 'login');
die "No 'login' prompt" unless defined $r;
$telnet->send_slow(0, "$user\n");
# Paswort
$r = $telnet->expect($timeout, -re => '[Pp]assword');
die "No 'password' prompt" unless defined $r;
$telnet->send_slow(0, "$passwd\n");
# Unix-Prompt
$r = $telnet->expect($timeout, '$');
die "No unix prompt (\$)" unless defined $r;
$r=$telnet->send_slow(0,"ls\r");
print $r;
$telnet->interact(); # In interaktiven
# Modus schalten
0924デフォルトの名無しさん2006/04/24(月) 11:14:14
>>922
CGI なんだから、ちゃんと HTTP ヘッダ (Content-Type: など) やコンテンツを出力しなきゃあかんがな。
0925デフォルトの名無しさん2006/04/24(月) 11:44:43
>>924
CGIなんだからちゃんとwebprog板に行けよ
0926デフォルトの名無しさん2006/04/24(月) 12:11:33
>>925
俺に言うなよ!
09279172006/04/24(月) 17:00:44
すまそ、ヘッダつけたら、一応動きました。ありがとうございます。
そこでhogeユーザーのパスワードを変更するPerlスクリプトを作成したのですが、
なぜか
「passwd: all authentication tokens updated successfully.」が延々に無限にでてしまう結果に。
Exceptの扱い方間違っているのでしょうか?
#!/usr/bin/perl --
print "Content-type: text/html\r\n\r\n";
use Expect;
my $timeout = 10; # Grundsatzlich 10 sec
# auf Antwort warten
my $host = "localhost";
my $user = "hoge";
my $passwd = "hoge";
# Telnet starten
$telnet = Expect->spawn("sudo passwd $user");
# auf Antwort warten
my $host = "localhost";
my $user = "hoge";
my $passwd = "hoge";
$telnet = Expect->spawn("sudo passwd $user");
# New password
$r = $telnet->expect($timeout, 'New password: ');
die "No 'password' prompt2" unless defined $r;
$telnet->send_slow(0.2, "$passwd\r");
# Retype password
$r = $telnet->expect($timeout, -re => 'Retype new password: ');
die "No 'password' prompt2" unless defined $r;
$telnet->send_slow(0.3, "$passwd\r");
$telnet->interact();
0928デフォルトの名無しさん2006/04/24(月) 17:15:57
コメントがドイツ語? どこから取ってきたソース?
0929デフォルトの名無しさん2006/04/24(月) 17:18:07
>>928
日本語勉強中のドイツ美少女ハッカーなんだから当たり前
0930デフォルトの名無しさん2006/04/24(月) 17:26:35
どっから持ってきたのかは知らないが

my $host = "localhost";
my $user = "hoge";
my $passwd = "hoge";

が2回でてきたり真面目に中身理解して使ってるとは
思えんな...
0931デフォルトの名無しさん2006/04/24(月) 19:37:52
>>928
とっさに「書いたのはドイツだ?」というオヤジギャグを書けないようでは君はオヤジ失格だ。
0932デフォルトの名無しさん2006/04/24(月) 19:38:01
そこは今、たまたま同じってだけじゃないか?
0933デフォルトの名無しさん2006/04/24(月) 19:49:09
>>932
同じスコープ中で二度も my 宣言しなくていいよね。
-w オプション付きなら警告される。
0934デフォルトの名無しさん2006/04/24(月) 21:04:07
ループ中でmyしちゃう人もいるぐらいだから珍しくも無いよ。
まあそういう意味では分ってないんだと思うけど。
0935デフォルトの名無しさん2006/04/24(月) 21:29:40
>>934
my はコンパイル時に解釈されるスコープ宣言だから、
ループブロックの内部にスコープを限定する為に使う事は
何の問題も無い。例えば以下のコードは警告を吐かない。

#!/usr/bin/perl -w
use strict;
my $foo = 0;
for (1..5) { $foo = my $bar = $_ }
print $foo;
__END__
0936デフォルトの名無しさん2006/04/24(月) 21:29:41
>>934
for (my $i = 0; $i < 10; $i++) {
これもループ内のmy宣言に該当する?
0937デフォルトの名無しさん2006/04/24(月) 21:39:36
ループのなかで初期化しちゃいけないの?
0938デフォルトの名無しさん2006/04/24(月) 21:57:28
質問です
1つのプロセスで同時に開けるファイルハンドルの数を教えて下さい
どこかに書いてあったような気がするのですが…
0939デフォルトの名無しさん2006/04/24(月) 21:59:22
そのループの中でしか使わない初めて出てくる変数なら何の問題もない。
しかし外側でその名前を使っていたらなるべく別の名前の方がいい。
機械はちゃんと区別してくれるけど人間はなかなかそうはいかないから
混乱のもと。
0940デフォルトの名無しさん2006/04/24(月) 22:22:33
>>938
OSやOSの設定によって違うと思う
0941デフォルトの名無しさん2006/04/24(月) 23:02:51
foreachの…名前分からないがローカル変数に値が代入されますよね。
普通は$_に入ると思いますが、入れ子にした場合はどうなるのでしょう?

foreach(@tmp){
 foreach(@tmp2){
  #$_は…?
 }
}

こんな場合はどうなるんでしょうか?
0942デフォルトの名無しさん2006/04/24(月) 23:09:48
>>941
各ループ内で別になる。やってみると分かる。
@tmp のループ内(@tmp2のループの外側)では $_ は @tmp の要素。
@tmp2 のループ内では $_ は @tmp2 の要素。
0943デフォルトの名無しさん2006/04/24(月) 23:42:13
>>941

レスありがとうございます☆

なるほどそうなるのですか〜入れ子で使うと最初のが一時的に退避して、
$_には次のforeachの値が入ると。

となると両者を比較する場合は少なくとも最初のforeachは適当な変数に
落としてからになるわけですね。

明日試してみます☆
ありがとうございました(b^-゜)
0944デフォルトの名無しさんNGNG
>>943
なんかこの構文を知らなさそうな気がするので補足レスしとこう...
foreach my $outer (@tmp){
 foreach my $inner (@tmp2){
  # $outer eq $inner
 }
}
0945デフォルトの名無しさん2006/04/25(火) 04:04:34
>>938
Linux なら kernel の source に書いてあったと思う。
自分の使ってる OS のスレで聞くとよさげ。
0946デフォルトの名無しさん2006/04/25(火) 05:51:44
>>938
> 質問です
> 1つのプロセスで同時に開けるファイルハンドルの数を教えて下さい
> どこかに書いてあったような気がするのですが…

わりと動的な値だから、実行時に調べるものです。
0947デフォルトの名無しさん2006/04/25(火) 12:19:40
>>938
man 3 getrlimit
09489382006/04/25(火) 14:20:12
>>940さん
>>945さん
>>946さん
>>947さん

ありがとうございます。
自分で調べてみます。
0949デフォルトの名無しさん2006/04/25(火) 14:36:26
>>948
むかしselect野郎だったので、ちょっと調べてみたんだが、
perlだとこの値を使う必要はないように世界が形作られているな。

関係しそうなFileCacheでさえ、投げやりに調べただけで、自分で設定した
「充分に小さな値」を使っているようだ。

ま、とにかくシステムモジュールFileCacheのPODやソースを見てみると
良いんでは?

あるいは何をしたいのか話してみるとか。
0950デフォルトの名無しさん2006/04/25(火) 14:52:47
open( my $fh, "+>", undef);

最近のperlではこれで簡単に一時ファイルができる
ようなんだけど
これで作られた一時ファイルってどこに作成されるの?
試してみたけどスクリプトと同じディレクトリじゃないみたい
かといってどんなファイル名で作られるかわからないので
findしようもない
0951デフォルトの名無しさん2006/04/25(火) 14:56:37
激しく処理系依存っぽい。ソースみて確認してみたら?
0952デフォルトの名無しさん2006/04/25(火) 15:10:15
>>950
> かといってどんなファイル名で作られるかわからないので
> findしようもない

truss or strace は使えない?
0953デフォルトの名無しさん2006/04/25(火) 15:22:50
#!/usr/bin/perl
use File::Temp;

$fh = new File::Temp;
print $fh->filename;

__END__
0954デフォルトの名無しさん2006/04/25(火) 15:29:08
チョン?
0955デフォルトの名無しさん2006/04/25(火) 15:30:46
>>952
> truss or strace は使えない?

で、ちょっとやってみたけど、/tmp/PerlIO<ランダム文字列>
というを作って、即unlinkしてファイルシステム上から消してるよ。
0956デフォルトの名無しさん2006/04/25(火) 15:37:36
On systems where this is possible, the temporary file is anonymous
(i.e. it is unlinked after creation, but held open).
0957デフォルトの名無しさん2006/04/25(火) 16:15:28
>>950
UNIX系OSの場合はだいたいはファイルを作った直後にオープンしたまま
ファイル名を unlink (削除) するようになっていると思う。これで
どうなるかというと、ファイルの読み書きは可能だがファイル名が
存在しない状態になる。ファイルをクローズしたとき(あるいはオープン
しているプロセスが終了した時)にディスク上の領域が開放される。
0958デフォルトの名無しさん2006/04/25(火) 16:16:53
UNIX系OS以外の場合は close() の時に削除されるようになっているんじゃないかな?
同じ方法が使えないとしたらそうなっていると思うよ。
0959デフォルトの名無しさん2006/04/25(火) 19:45:09
>>950
これなかなか便利ですね。
そのうちCGI.pmでも標準になるのかな。
WindowsXPだと%temp%に排他で作成されていました。
0960デフォルトの名無しさん2006/04/25(火) 19:51:24
みなさんありがとう
助かったよー〜〜
0961デフォルトの名無しさん2006/04/25(火) 21:56:17
もうそろそろ次スレの準備をよろすくー。
過去スレやリンクのアドレス間違いに気をつけて!
0962デフォルトの名無しさん2006/04/25(火) 22:54:56
active perl 5.8を入れていましたが、最近cygwinを入れました。
すると、activeperlでファイルをreadできなくなりました。
どなたか原因をご教授ください。
0963デフォルトの名無しさんNGNG
>>961
980まで建たなかったら、また漏れが行ってくる。

>>932
readってのはbuilt-in関数のreadのこと?
とりあえずActive Perlだと思って起動しているやつが
本当にActive Perlなのかperl -vで確認汁。
一行目にMSWin32-x86-multi-threadがあればActive Perl、
cygwin-thread-multi-64intになってる場合はCygwinのperlだ。
0964デフォルトの名無しさん2006/04/25(火) 23:45:28
>>963
いいえ。
open(F,"text.txt");
を使ってもtext.txtの中身を読み込めないってことです。
perl -v やったら
This is perl, v5.8.7 built for MSWin32-x86-multi-thread
でした。
0965デフォルトの名無しさんNGNG
>>964
openは色々とエラーを起きやすいからエラートラップする習慣をつけよう。
open(F,"text.txt") or die $!;
で何かエラーメッセージ出る?大抵はこのエラーメッセージを見りゃ解決するけれど…
0966デフォルトの名無しさん2006/04/26(水) 00:03:54
>>965
No such file or directory at C:\Documents and Settings\x\デスクトップ\a.pl line 1.
とでました。しかし、確かにa.plと同一ディレクトリにtext.txtはあります。
0967デフォルトの名無しさん2006/04/26(水) 00:13:04
フルパスをぶち込んでみてください。
0968デフォルトの名無しさん2006/04/26(水) 00:14:59
use Cwd;
print Cwd::getcwd();
これやってみれ
0969デフォルトの名無しさん2006/04/26(水) 00:23:04
>>967
フルパスぶち込んだらOKでした・・・。

>>968
C:/Documents and Settings/xxx
と表示されました。

0970デフォルトの名無しさんNGNG
>>969
原因は分からんが関連付けから起動したときに、
作業ディレクトリが別のところに行くようになっちゃってるようで。
根本的な原因はこのスレの範疇外だと思う。スクリプトの頭で、
use FindBin;
chdir $FindBin::Bin;
とでもやっておきなされ。これで作業ディレクトリがスクリプトのある場所に行く。
0971デフォルトの名無しさん2006/04/26(水) 04:01:41
スレざっと読んだけどPerl6って結局どうなったの?
プロジェクトが分裂してるみたいだし
本家からParrotのコードコンパイルして勉強してOKなの?
0972デフォルトの名無しさん2006/04/26(水) 04:13:41
すみません、
http://hp.bird.to/さんの所の「私書箱SP(CGI)」
を使用させて頂こうと思っているのですが
ひとつだけ中をいじりたい事があるんです。
(ちなみに、作者様はいじる事を許可されています。)

で、HTMLでサイトを作るくらいは自分も出来るんですが
Perlの知識はまったく無いので自分なりにやっても
失敗してしまいます。
どうか、知識のある方叶えて頂けないでしょうか?
0973デフォルトの名無しさん2006/04/26(水) 04:16:08
sub looking_list{
($cookie_name,$cookie_pass,$cookie_number) = get_cookie();
($c_cook,$c_name)=split(/:/,$cookie_name);
($c_cook,$c_pass)=split(/:/,$cookie_pass);
($c_cook,$c_number)=split(/:/,$cookie_number);
print <<END_OF_TEXT;
 <p>
<font color="$titlecolor" size=6>$html_title</font><p>
$error_code<p>
<form method="POST" action="$script_url">
<input type="hidden" name='command' value='access'>
<table border=1>
<TR><TH colspan=2>自分の私書箱にアクセス!!</TH></TR>
<tr><td align=right>登録名</td><td><input type="text" size=20 name="name" value="$c_name"></td></tr>
<tr><td align=right>パスワード</td><td><input type="text" size=20 name="pass" value="$c_pass"></td></tr>
<tr><td align=right>私書箱番号</td><td><input type="text" size=20 name="number" value="$c_number"></td></tr>
<TR><TD align=center colspan=2><input type="submit" value="送信"></TD></TR>
</table>
</form><P>
0974デフォルトの名無しさん2006/04/26(水) 04:16:49
<form method="POST" action="$script_url">
<table border=1>
<tr><th>ご用件をどうぞ!!</th></tr>
<tr><td>
<input type="radio" checked name='command' value='write'>私書箱に書き込む</td></tr>
<tr><td>
<input type="radio" name='command' value='mypost_regist'>私書箱の新規登録</td></tr>
<tr><td>
<input type="radio" name='command' value='mypost_delete'>私書箱の登録削除
</td></tr>
<tr><td align=center>
<input type="submit" value="送信">
</td></tr>
</table>
</form>
<form method="POST" action="$script_url">
<table width=90%>
<tr><td nowrap>
<input type="text" size=8 name="secret_pass">
<input type="submit" value="管理人専用">
</td>
<td nowrap align=right>
<font size=2><A HREF="http://hp.bird.to/index.html" target="_top">私書箱SP Ver.1.45(C)HPサービス</A></font>
</td>
</tr></table>
</form>
END_OF_TEXT
}

0975デフォルトの名無しさん2006/04/26(水) 04:19:01
>>972
WebProg
http://pc8.2ch.net/php/
0976デフォルトの名無しさん2006/04/26(水) 04:19:18
>>973>>974はそのまま続いてまして
これを読み込ませると

画面には「自分の私書箱にアクセス」といったBOXと
「ご用件をどうぞ」のBOXが表示されるんです。

で、僕は
これの上下を入れ替えたいんです。
ただそれだけを変えたいんです。

「ご用件をどうぞ」のBOXが上に来て
「自分の私書箱にアクセス」のが下に表示されているといった感じに
したいんです。

でも、単純にプログラム文を上下入れ替えただけでは
駄目みたいで、、、
表示自体は上下変わってくれたんですが
送信押してもうんともすんとも動かず
機能しなくなっているのです。

どういった入れ替え方をすれば
上下変わってくれるんでしょうか?
すみません、ほんと。
0977デフォルトの名無しさん2006/04/26(水) 04:20:14
>>975
え?ここじゃ駄目なんですか?
すみません、、、
0978デフォルトの名無しさん2006/04/26(水) 09:17:02
<form method="POST" 〜
  ・
  ・
  ・
</form>

を上下、入れ替えるだけでいいんじゃないの?
0979デフォルトの名無しさん2006/04/26(水) 10:41:31
>>975
おい
お前がこっちに誘導したから
なんか騒いでるぞコラ
0980デフォルトの名無しさん2006/04/26(水) 11:07:51
今アップローダー作ってるんですけど、ふと疑問におもったんですが、
perlが処理を始めるのはデータを全て受け取った後?
それとも受け取りながら?
0981デフォルトの名無しさん2006/04/26(水) 11:10:01
>>976
<form>〜</form>
が計3つあるけど、上の2つを入れ替え
0982デフォルトの名無しさん2006/04/26(水) 11:10:02
>>980
WebProg
http://pc8.2ch.net/php/
0983デフォルトの名無しさん2006/04/26(水) 11:14:58
>>982
ありがとう、誘導してくれて。
0984デフォルトの名無しさん2006/04/26(水) 11:18:14
>>983
変なん沸いてるから気をつけた方がいいよ
0985デフォルトの名無しさん2006/04/26(水) 11:26:37
>>972-974,976,977 はただの荒らしですので、皆さん構わないよう注意して下さい

複数スレマルチポスト・コピペ報告スレ35@全板共通
http://qb5.2ch.net/test/read.cgi/sec2chd/1143873802/478-481
0986963NGNG
さて、次スレ建てて来る
0987デフォルトの名無しさんNGNG
$$self{next} = new BBS2ch::Thread 'Perlについての質問箱 24箱目';

次スレ
http://pc8.2ch.net/test/read.cgi/tech/1146022352/

ごめん、>>1ちょっと失敗
0988デフォルトの名無しさん2006/04/26(水) 12:42:45
乙
0989デフォルトの名無しさん2006/04/26(水) 13:05:48
>>978>>981

どうもありがとうございました。
0990デフォルトの名無しさん2006/04/26(水) 13:34:09
次スレ

Perlについての質問箱 24箱目
http://pc8.2ch.net/test/read.cgi/tech/1146022352/
0991デフォルトの名無しさん2006/04/26(水) 13:34:58
>>978,981
お前らが親切に回答してやるからこの馬鹿がwebprog板で付け上がって暴れてるんだが…
すまんが、もう少し良く考えてからレスしてくれないか
0992デフォルトの名無しさん2006/04/26(水) 13:37:25
梅
0993デフォルトの名無しさん2006/04/26(水) 13:39:19
竹
0994デフォルトの名無しさん2006/04/26(水) 13:40:46
松
0995デフォルトの名無しさん2006/04/26(水) 13:41:29
鮭
0996デフォルトの名無しさん2006/04/26(水) 13:42:34
あからさまなマルチでも粘り強くやればきちんと回答が得られることがここに実証されました。

俺もこんどからこの手を使おう。
0997デフォルトの名無しさん2006/04/26(水) 13:45:12
過疎板のwebprog板が活況になっていてwarata
0998デフォルトの名無しさん2006/04/26(水) 13:59:29
>>996
やめてくれw
0999デフォルトの名無しさん2006/04/26(水) 14:01:36
999GET!!
1000デフォルトの名無しさん2006/04/26(水) 14:02:30
個室に入り便座に座るなりパンツをおろす、でも用を足すわけではなかった・・・私は股間に手を伸ばす
「はぁぁぁ・・・あんっ」
自分で自分の大事な所を触れ・・・指を股間の割れ目に潜らせて軽くかきまわす
「あ・・・あん・・・」
瞬時に体に刺激が走り、吐息が漏れ声が出る・・・誰も居ないのをいいことに感じるまま大きな声で・・・
私はそのまま指をかきまわしてさらに快感を貪っていく・・・
「んん〜〜んっ・・・・んんんっ!」
・・・そうここに来る理由・・・それは最近はまってる一人Hだった・・・
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。