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

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

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

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

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

リンク集は>>2-3
過去スレは>>4-5
2デフォルトの名無しさん: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/
3デフォルトの名無しさん:2006/03/07(火) 23:50:07
4デフォルトの名無しさん:2006/03/07(火) 23:50:51
5デフォルトの名無しさん:2006/03/07(火) 23:51:58
6デフォルトの名無しさん:2006/03/07(火) 23:59:36
7デフォルトの名無しさん:2006/03/08(水) 00:11:28
>>1
3連乙
8デフォルトの名無しさん:2006/03/08(水) 12:08:19
実用perlプログラミング第2版はどうしてcbook24では発刊予定としてリストにあるのに
オライリーでは何も情報がないのですか?
9デフォルトの名無しさん:2006/03/08(水) 12:19:36
10デフォルトの名無しさん:2006/03/08(水) 13:26:40
>>9 ありがとうございました。
firefox1.5.0.1でそのページを見ていたのですが、なぜか表示されないんですよね。
近刊書籍の部分だけ・・・
IEで見たらちゃんと表示されました。いったいなぜなんだー
両方のブラウザでページのソースみてみたら、
firefoxの方では、近刊書籍のリストの部分がごっそり欠如していました。
広告削除拡張入れているわけでもないので、欠如する理由がわからない。
なんだよオライリーはIEびいきかよ
11デフォルトの名無しさん:2006/03/08(水) 14:11:43
> 実用Perlプログラミング 第2版 4-87311-280-X\3,360 2006年03月

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

              ,.‐- 、
              廴ミノ     J  ブーン
        ⊂二二///¨' 二二二つ
             y':;:;:;:;:;::;;;}
            (:;:;:;:;;:;:;:;::;;},
            t`'---‐';:;:;:l
           (´ .___ノ
            \\ \\  
             レ'   \\  三
                   レ' 
        ;il||||li'   ブーン
 ⊂二二二'"''、,┘二二⊃
     ノ4  /
    /..,__彡/  
    ( ヽノ  
    ノ>ノ 
三  レレ
19デフォルトの名無しさん:2006/03/08(水) 18:52:43
既に終わった人生という試合はどうすればいいですか?
20デフォルトの名無しさん:2006/03/08(水) 19:13:01
>>19
unlink
21デフォルトの名無しさん:2006/03/08(水) 20:51:28
>>19
再起動
22デフォルトの名無しさん: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");
}
23デフォルトの名無しさん:2006/03/08(水) 21:34:29
foreach (@d){
   /=/,
   printf ("問題:%s\n解答例:%s\n", $`, $');
}
printfの使いかた違うし。
24デフォルトの名無しさん:2006/03/08(水) 21:35:03
×/=/, ○/=/;
2522:2006/03/08(水) 21:54:59
ぐおお
Cが入った
26デフォルトの名無しさん:2006/03/08(水) 21:58:11
>>11
安くなったのは多分、内容が入れ替わって本自体が薄くなったから。
洋書置いてる本屋なら Advanced Perl 2nd Edition 売ってるよ。
27デフォルトの名無しさん:2006/03/08(水) 22:28:16
>>25
または
print "問題:$q\n解答例:$a\n";
か、律儀に
print '問題:', $q, "\n", '解答例:', $a, "\n";
28デフォルトの名無しさん:2006/03/08(水) 23:10:41
>>26
どの辺が入れ替わったの?
29デフォルトの名無しさん:2006/03/08(水) 23:29:45
>>28
ほとんど全部(マジで)…。
30デフォルトの名無しさん: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

この違いを見よ(笑)
31デフォルトの名無しさん:2006/03/08(水) 23:40:57
>>30
完全に別物だね。
第1巻、第2巻という風にしてもよさそうなもんなのに。
32デフォルトの名無しさん: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
33デフォルトの名無しさん:2006/03/09(木) 00:21:12
つうか著者からして違うのもんなぁー
でも 2nd Edition も有用(というか現代的)なので買ってそんはしないよ
Perl Best Practice とセットで買え
34デフォルトの名無しさん:2006/03/09(木) 00:24:06
例示に実在するドメインを使う香具師に何も教えたくない。
35デフォルトの名無しさん:2006/03/09(木) 00:31:54
>>34
元のファイルをそのままコピーしたもので。。。スマソ
36デフォルトの名無しさん:2006/03/09(木) 00:33:00
undefについて教えてください。
undef $scalar;
とすれば、undef値がスカラー変数に入ると思いますが、
undef @array;

undef %hash;
とやるとすべての要素にundef値が入るってことなのでしょうか?
それともメモリ開放ですか?
37デフォルトの名無しさん:2006/03/09(木) 00:39:01
>>36
解放です
38デフォルトの名無しさん:2006/03/09(木) 00:41:17
un defined のことです。
39デフォルトの名無しさん:2006/03/09(木) 00:43:05
補足
perlは未定義値を入れるということはできないので。
Rubyのnilみたいな
4036:2006/03/09(木) 00:43:58
ありがとうございます。
じゃあスカラー変数に対するときだけ、undef値代入ってことですね。
41デフォルトの名無しさん:2006/03/09(木) 00:44:54
undef() は undef値を返すから、それを左辺に代入する事はできるぞ
42デフォルトの名無しさん:2006/03/09(木) 00:54:02
1かundefかって話で、$hoge eq undefできないってことでは?
身近なのでJavaScriptの if (huga == false) {}みたいな
違うか。
4332:2006/03/09(木) 09:40:28
すみませんが、どなたかよろしくお願いします。
44デフォルトの名無しさん:2006/03/09(木) 10:18:42
>>43
エラーメッセージとか何か出てない?
どこまで正しく処理できててどこでどんなふうにコケたかとか、
状況が良くわからないとなんとも。
45デフォルトの名無しさん:2006/03/09(木) 10:36:31
レスありがとうございます。
SMTPの窓が開き、認証は終わり、こちらのメールアドレスを送信し終わったところで
止まります。

たぶん、
>$smtp->mail($from_address ); # use the sender address here

>$smtp->datasend("To: $to_address\n");
のどちらかだと思うのですが。

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

でも SQL の is null みたいに undef かどうかは defined() で
別途判別するのがいいような気がする。
48デフォルトの名無しさん:2006/03/09(木) 12:14:06
>>45
MAIL FROM:<XXXX>
RCPT TO:<YYYY>
のそれぞれに対する応答はどんなのが返っている?
49デフォルトの名無しさん:2006/03/09(木) 13:11:44
>>45
while () {
まさかここに条件が入ってないまま実行してたりしないだろうね。
これそのままだと無限ループだぞ・・・
50デフォルトの名無しさん:2006/03/09(木) 13:24:14
>>47
ところが、それは
my $foo = "";
if ($foo == undef) {
 print "true¥n";
}
でも trueになってしまうので defined 使うしか無いんだよね。
51デフォルトの名無しさん:2006/03/09(木) 13:38:20
>>49
<INFILE> が、投稿時に消されてしまったのではないかと思われ。
52デフォルトの名無しさん: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が入って来ます。
53デフォルトの名無しさん:2006/03/09(木) 13:52:36
>>50
そうだったのか。orz
54デフォルトの名無しさん:2006/03/09(木) 14:39:16
>>52
分裂病?
55デフォルトの名無しさん:2006/03/09(木) 14:57:09
>>54
どういう意味?
56デフォルトの名無しさん: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

57デフォルトの名無しさん:2006/03/09(木) 15:25:33
>>56
> PerlでCSVファイルから名前がBBBのタイトルを抽出する場合って下記のように一行ずつ調べていくやり方しかないんでしょうか?
そんな事はない。工夫次第。
58安西先生:2006/03/09(木) 15:32:12
>>56
>> PerlでCSVファイルから名前がBBBのタイトルを抽出する場合って下記のように一行ずつ調べていくやり方しかないんでしょうか?
>そんな事はない。工夫次第。
でもまあ、普通はそんな感じ。
59デフォルトの名無しさん: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];
}
60デフォルトの名無しさん:2006/03/09(木) 16:49:12
>>56
とっても回りくどいやり方。
http://search.cpan.org/~jzucker/DBD-CSV-0.22/lib/DBD/CSV.pm
61デフォルトの名無しさん:2006/03/09(木) 17:05:44
つ〜か、CSV全部を単一のスカラに読み込んで、indexでパターンを探して、
その行を切り出して目的の行か調べる。というのもかなり速げ。
62デフォルトの名無しさん:2006/03/09(木) 18:44:13
>>48
それぞれのメールアドレスがきちんと表示されてます。

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

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

試しに>>51さんの発言を中に入れてみたのですが駄目でした。
63デフォルトの名無しさん:2006/03/09(木) 19:27:07
どこかの人が大迷惑を被る結果に至らないこと/至っていないことを祈る。
64デフォルトの名無しさん:2006/03/09(木) 21:18:28
日本語の通るPerl用のObfuscatorってないですか?
そんなにギッタンギッタンにしてくれなくてもいいんですけど。
65デフォルトの名無しさん:2006/03/09(木) 21:56:33
ググレカス
66デフォルトの名無しさん:2006/03/09(木) 22:29:50
62です。できました誰にも迷惑はかけてなかったみたいです。
味噌汁で顔を洗いなおしてテンプレサイトで勉強してきます。
ありがとうございました。
67デフォルトの名無しさん:2006/03/09(木) 22:32:59
ググレカレー
68デフォルトの名無しさん:2006/03/09(木) 22:45:13
DIコンテナっていいよね。
Perlプログラミングでも使いまくりですよ。
69デフォルトの名無しさん:2006/03/09(木) 22:48:58
ループさせて面白いのかと
70デフォルトの名無しさん:2006/03/09(木) 23:31:23
>>66
どうやって解決したかくらい言ってくれても罰は当たりませんよ。
71デフォルトの名無しさん:2006/03/09(木) 23:49:46
>>70
<>が全角だっただなんて、ぐぐっても出てこないDQNミスは味噌汁で顔を洗うことぐらいしかお詫びできないかと思いまして・・・o...rz
72デフォルトの名無しさん:2006/03/10(金) 00:07:47
>>71
ワカメ入りの味噌汁で洗っておくれ。そんでもって、写真うp
73デフォルトの名無しさん: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!」でした。
全く歯が立たないため解決方法をお願いしたいのですが、お願いできませんでしょうか、お願いいたします。
74デフォルトの名無しさん:2006/03/10(金) 01:20:52
sendmailへの引数は合ってるのか?
75デフォルトの名無しさん:2006/03/10(金) 01:21:25
>>73
デバッグのやり方、考え直した方がいいと思う。
sendmailにおくるとき、末尾の改行の数厳密だったっけ?最後"\n\n"になってる?
76デフォルトの名無しさん:2006/03/10(金) 01:28:21
今まで特に問題なく動いていたので引数は特に問題ないと思います。
$emailsの内容も1KB未満で、$mailtoに入っているメールアドレスにも受信ができたので正しくメールは送信されています。
その他の部分はif文やfor分だけなので特に干渉している部分も無く、エラー部分がclose処理なので、エラーに心当たりが無い感じです。
77デフォルトの名無しさん:2006/03/10(金) 01:29:10
どうして固まっているのにエラーを知ることができたのだろう?
eval{}で囲んで例外キャッチするべきではないか。
78デフォルトの名無しさん:2006/03/10(金) 01:30:44
>>73
use strict
79デフォルトの名無しさん:2006/03/10(金) 01:35:07
>>75
末が\nだったので\n\nに修正したところ正しく動作しました。
今まで\nでも正常にcloseの動作がしていたため全く気付きませんでした、ありがとうございます。
正しいデバックの方法を知らないため、あんなことしてます。すいません。

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

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

>>79で解決したかに見えましたが、プログラムを何も変えずに再度実行したところまたエラーが発生しました。
やはり、エラー箇所はclose(MAIL)のようです。申し訳ないです。
82デフォルトの名無しさん:2006/03/10(金) 02:07:12
とりあえず、そのごちゃごちゃしたコードをさっくり削除して、
どこぞのサンプルコード張っただけで動くか確認してみれば?
8373:2006/03/10(金) 02:19:28
Linux逝てしまった・・・
まずLinux治します。しばらく消えます。
8473:2006/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;
8573:2006/03/10(金) 02:42:23
実行結果
1141925875...Start
1141925875...$emails input
1141925875...jcodeconvert
1141925875...if(open(MAIL))
1141925875...$emails
1141925889...close(MAIL)

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

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

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

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

Linuxが直ったらとりあえずそこらで適当にここ1〜2年で刊行された
Perl本を買ってきて読め。マジで。
8973  ◆KmJI5XgmH6 :2006/03/10(金) 02:48:20
>>88
1年前1冊買った本見ながら最近やり始めたとこなのに・・・orz
その辺りはネットで漁ってみます。問題はclose処理に10秒以上も掛かっている部分なんです・・・
9086:2006/03/10(金) 02:48:21
ミスったorz
91デフォルトの名無しさん:2006/03/10(金) 02:51:57
Perlよりsendmailを疑うけどな、普通は。
Linuxが不安定なら、ビルド失敗してるとかじゃないの?
とりあえず、Linux安定させないと問題の切り分けができませんよ。
9273  ◆KmJI5XgmH6 :2006/03/10(金) 03:00:01
ですね・・・Linux板に行って見ます。
SendmailやPerlは元々入っていたので全くもって無知ですが・・・。
93デフォルトの名無しさん:2006/03/10(金) 03:02:55
sendmailのlogとれよ。
94デフォルトの名無しさん:2006/03/10(金) 03:06:50
>>73見て思うんですがbarewordがno strictでエラーにならないのはどういう用途を想定してるんですか?
自然言語にクォートの概念はいらないって意味合いですか?
95デフォルトの名無しさん: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クエリかな?
96デフォルトの名無しさん:2006/03/10(金) 03:15:31
>>94
すまん、酔っぱらって帰ってきたんでアレなんだがどこらへんが裸語句?
9794:2006/03/10(金) 03:34:16
酔っ払い同士になるけどreturn false;のfalse
98安西先生: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使ったことないから知らんけどさ。
99デフォルトの名無しさん:2006/03/10(金) 04:42:08
そろそろBenchmarkぐらい教えてあげようよ。
100デフォルトの名無しさん:2006/03/10(金) 09:36:07
>>99
> そろそろBenchmarkぐらい教えてあげようよ。

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

もいろいろ使えるね。
111デフォルトの名無しさん: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);
112デフォルトの名無しさん:2006/03/13(月) 22:26:35
quota制限時にファイルを作成するとサイズが0バイトのファイルになってしまいますが
適当なファイルを作成し0バイトで無ければ処理へという方法以外に何かスマートな方法は
ありますでしょうか?
113デフォルトの名無しさん:2006/03/13(月) 22:43:42
日本語でおk
114デフォルトの名無しさん:2006/03/13(月) 22:54:30
>>112
作ってみてエラーになるかチェックするのが必要十分にて一番スマートな方法。

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

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

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

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

Perl のバージョンは

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

です。
123デフォルトの名無しさん: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]],
);
124119:2006/03/14(火) 11:26:48
>>123

!!

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

後者はuse fieldsでなんとかなるのかな〜。まだ使ってないけど。
130デフォルトの名無しさん: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の終わり---
131デフォルトの名無しさん: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

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

ところで、HTTPサーバからCookieを要求された場合、特別何かしなくても
WWW::Mechanize->new() で生成されたユーザエージェントがサーバにCookieを送信してくれるのでしょうか?
135デフォルトの名無しさん: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.
とあるものの有料。

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

やりたいこととしては、実行形式にしたファイルに、処理対象のテキストファイルを
ドラッグドロップで入力し、出力結果として別のテキストファイルを作成というもの。
136デフォルトの名無しさん: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
137デフォルトの名無しさん:2006/03/15(水) 22:46:53
>>135
PARなら

ppm install PAR

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

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

それだったら、実行形式にする必要ないんじゃないの?
141デフォルトの名無しさん:2006/03/16(木) 03:21:00
Tkでいいんじゃない?
142デフォルトの名無しさん: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は実験段階だろ。
143デフォルトの名無しさん:2006/03/16(木) 10:24:26
あるクラスのbase(のひとつ)を別のものに置き換えたいのだが、
丸コピーしてeditせずに継承とかそんな感じのメカニズムでうまく
やる方法はないだろうか?

具体的にはNet::POP3をPOP3 over SSL対応させたるために
IO::Socket::INETのかわりにIO::Socket::SSLを使いたいのです。
144デフォルトの名無しさん:2006/03/16(木) 11:56:25
継承で良いんじゃない?
145デフォルトの名無しさん: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だし。
146デフォルトの名無しさん:2006/03/16(木) 16:22:21
試してないけど、

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

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

全26ドライブレターについてopendirしてみるって手はあるかもね。
でもFDDドライブなんかがあるとそこでダイアログが出て止まるよ。
150149:2006/03/16(木) 18:49:55
うへ、ドライブ余計だった
フロッピーディスクドライブドライブ…orz
151デフォルトの名無しさん:2006/03/16(木) 19:03:57
cygwin の perl なら "/cygdrive" を readdir() すれば有効なドライブのみ見える。
152デフォルトの名無しさん: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番目かな。
153デフォルトの名無しさん:2006/03/16(木) 22:39:48
>>149
なんとなく余計なモジュールは使いたくなかったんです
すみませんありがとうございました
154デフォルトの名無しさん:2006/03/17(金) 03:27:57
>>141
普通に @ARGV を見ればいいんじゃない?
155デフォルトの名無しさん:2006/03/17(金) 12:43:07
「ImageMagick」は何と読むのですか?
156デフォルトの名無しさん:2006/03/17(金) 12:51:43
Image
Magick

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

ま、しかし、 Pearl にしようと思ったら既にあったから Perl ってのも何とも言えない命名。
171デフォルトの名無しさん: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
172デフォルトの名無しさん:2006/03/17(金) 18:53:23
そういえば先日、某大手チェーンPCショップYに行ったら、書籍コーナーでPealと書かれてた(´・ω・`)
# 他にもTCP/1Pになってたり
173デフォルトの名無しさん:2006/03/17(金) 18:56:49
(´・ω・)
174デフォルトの名無しさん:2006/03/17(金) 22:54:30
Pearl っていう、英単語として正しい綴りだったのを、どこかで見たような気がする。
175デフォルトの名無しさん:2006/03/17(金) 23:03:51
[\w]このような表記で全ての文字を表す場合どう記述すればいいのでしょうか。
自分の頭では[\d\D]しか考えつきませんでした。
176デフォルトの名無しさん:2006/03/17(金) 23:11:55
[\x00-\xff]
177デフォルトの名無しさん:2006/03/17(金) 23:30:04
Unicodeも考える場合5.8系だけで良いなら[\p{Any}]とか
178デフォルトの名無しさん:2006/03/17(金) 23:32:43
ありがとう。1byteが8bitでその範囲がとか考えればよかったんですね。
179デフォルトの名無しさん:2006/03/18(土) 00:46:14
>>178
いや、>>175のでいいと思うんだが。
>>176は5.8でUnicode使ってるとだめぽ。
180135:2006/03/18(土) 01:49:23
>>140

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

# まだPAR試してない…

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

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

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

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


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

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

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

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

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


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

x 付けて任意の位置で改行できないなら... もしかしてPerl4?
200デフォルトの名無しさん:2006/03/20(月) 22:07:40
つか x の続きってだけだったら /x+/ にしろとか /x{10}/ にしろとか
そんな回答しかできないんだけど。
201デフォルトの名無しさん:2006/03/21(火) 00:10:10
if(/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/)

if(/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/)
でいいんじゃねーの?
なにが不満?
202デフォルトの名無しさん:2006/03/21(火) 00:14:17
長い正規表現なら
別ファイルに正規表現だけ入れて
変数に読み込ませるのが良いんじゃないかな
203デフォルトの名無しさん:2006/03/21(火) 00:23:30
辞書総当り?
204デフォルトの名無しさん:2006/03/21(火) 00:26:59
連想配列の要素に配列を入れるのってどうやるの?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

共同開発に向かない言語ってのはよく聞くけど、
それは俺も賛成。
239デフォルトの名無しさん:2006/03/22(水) 02:58:47
今更だけどスレ違いじゃね
240デフォルトの名無しさん:2006/03/22(水) 03:03:34
>>239
>>1
> "There's more than one way to do it" ということで、Perlの奥深さについて皆で語り合い、追求してまいりましょう。
ってことだから良いんじゃなかろか
241デフォルトの名無しさん: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
242デフォルトの名無しさん:2006/03/22(水) 11:39:38

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

while(<>)

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

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

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

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

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

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

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

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

すみません。

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

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

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

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

これは何をやっているの?
275デフォルトの名無しさん:2006/03/24(金) 10:58:29
$varを要素とする無名配列のリファレンスを作成しそれをデリファレンス?
276デフォルトの名無しさん:2006/03/24(金) 11:04:08
ポポポポ( ゚д゚)゚д゚)゚д゚)゚д゚)゚д゚)ポカーン
277デフォルトの名無しさん:2006/03/24(金) 11:13:26
@{[...]}は変数じゃない式でも文字列に埋め込むかなり苦し紛れ気味だが
有名なワザ。しかし普通の変数を埋め込むのに使うのははじめて見た...
278デフォルトの名無しさん:2006/03/24(金) 11:42:52
>>277
>変数じゃない式でも文字列に埋め込む
え、それどういうの?具体例挙げておしえてください。
279デフォルトの名無しさん: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

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

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

でもパフォーマンスは大差ないのでは? 最初のコンパイルにちょっと
時間が掛かるだけで動いてしまえば変わらないと思うが。
285デフォルトの名無しさん: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されてしまいました.
出力先を標準エラー出力に変えると思い通りの動作をしたのですが,標準出力では
このようなプログラムは書けないのでしょうか?
286デフォルトの名無しさん:2006/03/24(金) 16:28:21
予め $| = 1;
287283:2006/03/24(金) 16:39:30
>>284

れすさんくす

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

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

use strict;



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

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

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

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

え?ということはuse strict;したら
逆に速度が上がるってこと?
どうしてそうなるの?
303デフォルトの名無しさん: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になってなんか使い勝手変わった?
どうもモジュール名で検索するとヒット率が落ちた気がする。
ディストリ名で検索すれば出てくるんだけどさ…今までもそうだったっけ?
304デフォルトの名無しさん:2006/03/24(金) 20:05:34
>>300
それだけなら

print "@ARGV¥n";

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

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

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

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

結果
argv is abc,123

これでも分からなければ父さんお手上げ
313デフォルトの名無しさん: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
314デフォルトの名無しさん:2006/03/25(土) 04:10:11
シングルクォート使えよ
315デフォルトの名無しさん:2006/03/25(土) 04:31:36
"表" の 2byte目 が "\" だから
316デフォルトの名無しさん: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なぜ
317デフォルトの名無しさん:2006/03/25(土) 05:32:18
末尾にあるパスセパレータの\を勝手に削っちゃってる悪寒
318デフォルトの名無しさん:2006/03/25(土) 06:01:48
解決しました。
ありがとうございます。

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

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

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


……あれ?
332デフォルトの名無しさん:2006/03/26(日) 07:43:36
Microsoft Installer 2.0だろ。
333デフォルトの名無しさん: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;
334デフォルトの名無しさん:2006/03/26(日) 20:23:37
>>333
つ \s*
335デフォルトの名無しさん:2006/03/26(日) 21:11:17
>>333
- @readarray = split(/\s|,/ ,$readline);
+ @readarray = split(/\s*,\s*/ ,$readline);

これでどうでしょ?
336デフォルトの名無しさん: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を使うのは好ましく無いのでしょうか。
337デフォルトの名無しさん:2006/03/26(日) 22:05:14
>>334
>>335
うわ、解決しました。
ありがとうございます!

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

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

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

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

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

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

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

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

第2版があるなら、第3版いらないじゃん。
344デフォルトの名無しさん:2006/03/27(月) 01:22:55
さすがに第1版しか持ってなかったら買い直した方がいいけどな
345デフォルトの名無しさん:2006/03/27(月) 02:13:23
http://www.site-cooler.com/kwl/perl/
ここで学んでいるのですが"未定義"という表現がよくわかりません
Perlにおいての未定義とはどういうことですか?
346デフォルトの名無しさん: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行目に該当するように)
のようなデータの処理を行いたいと思います。
347デフォルトの名無しさん:2006/03/27(月) 03:09:27
>>346
> よろしければどなたかおかしな所と正しい書き方を指摘していただけませんでしょうか
おかしな所: まったくデバッグしていない所
348デフォルトの名無しさん:2006/03/27(月) 03:11:44
今perlでプログラムを書いているのですが、
データの読み込みで、
必要になったときのみファイルから読み込んで実際にデータを扱う、
ということをしたいのですが、どういう形で実現するのがよいでしょうか。
データを利用する側から、いちいちデータを読み込むタイミングを指定してやるのも
変ですし・・・・。

微妙にperlから質問がずれていますが、
分かる人いたらお答えお願いできませんか?
349デフォルトの名無しさん: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
もっとどういう物を作っているかとか構造だとか
インターフェイスとか詳しく書いてもらえないと解らん。
もしくはエスパーを待て。
350デフォルトの名無しさん: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(必要で真);
351350:2006/03/27(月) 04:58:54
>>345
書き忘れた。
変数を初期化(未定義に戻す)する時は
undef
を使う。
352デフォルトの名無しさん:2006/03/27(月) 13:34:26
>>345
「未定義」という表現は、確かに分り難い。
見た感じ「未定義値」の事だと思うので、未定義値について。

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

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

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

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

>>355
!!!!!うまくいった。ありがとう。
でもCHECEなんて初めて見たよ。
日本のgoogleで「perl chece」で検索してもヒットしないよ。
らくだ本に載っていますか?
よかったらちょこっとだけ説明してくれませんか?
357353:2006/03/27(月) 16:37:04
>>355
らくだ本みても索引に載っていなかった。
一体何なのCHECEって?
358デフォルトの名無しさん: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 だけの機能かもね。
359353:2006/03/27(月) 18:15:59
checeについてローカルにインストールされたActivePerlのドキュメントに
grepかけてみたけどヒットせず、
海外でぐぐってもそれらしいページにヒットせず
なんなんだ〜
360デフォルトの名無しさん:2006/03/27(月) 18:30:07
windowsで実験したけどCHECE じゃなくて適当な文字でもストップしたよ。
たんに`pause`だけが聞いてるような希ガス
361デフォルトの名無しさん:2006/03/27(月) 18:32:09
ヒント perldelta 5.8 BEGIN END CHECK INIT
362デフォルトの名無しさん:2006/03/27(月) 18:32:46
sub END { <STDIN> }
363353:2006/03/27(月) 18:45:19
やっと謎が解けました。
自分のあほさ加減にいやけがさしました。

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

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

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

print 1;
`pause`;

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

perl
pause

っていうバッチファイルつくって関連付けしても
当然うまくいかない。
実行したperlスクリプト名がバッチファイルから
わかればいいんだけど、やりかたがわからない
371酩酊 ◆TWARamEjuA :2006/03/27(月) 20:00:46 BE:6098887-#
(´-`).。oO(「windowsでperlなスレッド」がいるのかなぁ。。。)
372デフォルトの名無しさん:2006/03/27(月) 20:04:16 BE:252598673-#
@echo off
perl %1
echo.
pause

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

>>372
できた
%1でショートカット元のファイル名が
取得できるのね、というか
バッチファイルへの第一引数が取得できるのね
ありがとう!!
374デフォルトの名無しさん:2006/03/27(月) 20:41:21
(´-`).。oO(ry)
375デフォルトの名無しさん: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 "トラップしました";
}

だけにすると何も受け付けなくなります
376デフォルトの名無しさん: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"}'
377375:2006/03/27(月) 22:31:22
>>376
すまそ勘違いだった
C-c押すとちゃんと反応していることがわかった

gotoに関してのみの質問に変更させてください
378デフォルトの名無しさん:2006/03/27(月) 22:37:47
>>377
> gotoに関してのみの質問に変更させてください
gotoを消せばよい。
379デフォルトの名無しさん: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だと)ハンドラ内では使えない機能なのだろう。
380デフォルトの名無しさん:2006/03/28(火) 01:05:20
>>366
発売と同時にゲットした俺がきましたよ.
現代的内容つーか別の本になってた.著者もちがうし.
Tk とかもうありません.CPAN ネタが増えました.
XS はちょろっとでてくるけど Inline のほうが比重が多いです.
381デフォルトの名無しさん: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が重なるのが原因で思った
通りに動かないと思うのですが、解決できませんでした。
どうすれば一つ下のフォルダに変数が展開された状態
でテキストファイルを作ることができるでしょうか?
382デフォルトの名無しさん:2006/03/28(火) 02:28:07
>>381
> open(OUT, ">card/$filename.txt"); 
に問題はないよ。
本当にちゃんと$filenameにファイル名が入っているのか確認した?
383デフォルトの名無しさん: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の状態で
展開されたということですよね、本当にありがとうございました!
384デフォルトの名無しさん: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
385デフォルトの名無しさん:2006/03/28(火) 03:26:53
>384
すみませんわざわざ!読んでだんだん精進していきます。
386デフォルトの名無しさん:2006/03/28(火) 08:29:19
10101111 のような文字列を、後から (データの一部なので最初に 0b10101111 とは書けない)
二進数として識別する簡単な方法はないでしょうか?
387デフォルトの名無しさん:2006/03/28(火) 09:40:28
388デフォルトの名無しさん:2006/03/28(火) 09:41:03
>>380
辛抱たまらず買うことにしました
ありがとう
389デフォルトの名無しさん:2006/03/28(火) 10:21:33
Attempt to free unreferenced scalar
とアパッチエラーなのかな?がでまくっています。
これメモリ異常っぽいんですが、どういうことやってると起きやすいですか?
perlだからメモリを確保・開放なんてやってないのにな…
390デフォルトの名無しさん:2006/03/28(火) 10:50:47
>>389
APTの3番とRPPの5番あたりがよく問題を起こすらしい。
391デフォルトの名無しさん:2006/03/28(火) 11:43:32
"AbcDefGhi"という文字列を、
"_ABV_DEF_GHI"と変換する簡単な方法はありますか?
392デフォルトの名無しさん:2006/03/28(火) 11:46:37
$a = "AbcDefGhi";
$a = "_ABV_DEF_GH";
393デフォルトの名無しさん: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 を使うなと習ったろうがこのバカチンが。
394391:2006/03/28(火) 11:59:47
ごめんなさい。"_ABC_DEF_GHI"の間違いでした。
でも、
$str =~ s/([A-Z][a-z]+)/"_".uc($1)/ge;
で一発でした。ありがとうございます。
395デフォルトの名無しさん:2006/03/28(火) 12:00:47
ち、ちんこは関係ないじゃないっ!
396デフォルトの名無しさん:2006/03/28(火) 12:06:50
$s = 'ん';
print "ち$sこ\n";
397デフォルトの名無しさん:2006/03/28(火) 15:51:05
jperl で
Error: Runtime exception
てでますた。これナニ?
398デフォルトの名無しさん:2006/03/28(火) 16:01:19
そのjperlそのものがどっかバグってんじゃない?
399デフォルトの名無しさん:2006/03/28(火) 16:19:19
フツーに動いてたんだけど、処理データが
飛躍的に多くなったらこうなりますた
400デフォルトの名無しさん:2006/03/28(火) 16:39:29
情報小出し者の出現です!!
401デフォルトの名無しさん:2006/03/28(火) 16:49:02
隠す気はありませんので質問があれば何でも聞いてくれたまい
402デフォルトの名無しさん:2006/03/28(火) 16:53:37
>>397
「これナニ?」って聞かれたら、実行時エラーです、としか答えようがないな。
他に質問があれば何でも聞いてくれたまい
403デフォルトの名無しさん:2006/03/28(火) 17:04:27
ActiveStateが提供してる.net対応perlの情報があるサイトってどこかありますか?
404デフォルトの名無しさん:2006/03/28(火) 17:05:52
>>397
error = 誤り
runtime = 実行時
exception = 例外
405デフォルトの名無しさん:2006/03/28(火) 17:07:18
原因は?配列とかにデータを詰め込みすぎってことだすか
406デフォルトの名無しさん:2006/03/28(火) 17:15:03
>>404
お前優しすぎ
407デフォルトの名無しさん:2006/03/28(火) 17:18:04
>>397
ナゾナゾですか?! よーし負けねーぞー
408デフォルトの名無しさん: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
409デフォルトの名無しさん:2006/03/28(火) 17:36:29
ども。 jperl が悪いのか〜。
410デフォルトの名無しさん:2006/03/28(火) 18:51:53
you are = 君は
fool = 馬鹿
411デフォルトの名無しさん:2006/03/28(火) 18:53:07
どうでもいいけど今時JPerlかよ
412デフォルトの名無しさん:2006/03/28(火) 18:55:26
△ fool
◎ foolish
413デフォルトの名無しさん:2006/03/29(水) 11:33:11
変数に$aや$bを使うなと書かれていますが
どうしてですか?

sortのときに使う$aや$bは局所化されてる
から問題ないと思うんだけど
他に理由があるの?
変数の中身が判別しにくいという視認性
の問題以外に。
414デフォルトの名無しさん:2006/03/29(水) 12:27:19
クソな変数名つけんじゃねえ
415デフォルトの名無しさん:2006/03/29(水) 12:28:35
あらゆる点でダメダメ。
そんな変数名をつける奴はプログラミングはやめとけ。
416デフォルトの名無しさん:2006/03/29(水) 12:31:08
視認性の問題以外に
417デフォルトの名無しさん:2006/03/29(水) 12:31:54
use strict をすり抜けるから怖い。
418デフォルトの名無しさん: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とはならない。
どうして?
419デフォルトの名無しさん:2006/03/29(水) 13:37:54
@text = do { local(@ARGV, $/) = @file; <> };
# @fileで指定した複数のファイルがファイル毎に@textの要素として読まれる

とか

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

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

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

酷い訳だな。
421デフォルトの名無しさん: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
422418:2006/03/29(水) 15:19:35
>>419

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

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

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

なにかヒントのようなものでもよいので
お願いします。
430デフォルトの名無しさん:2006/03/30(木) 22:55:19
ISOについて語りませんか?
431デフォルトの名無しさん:2006/03/31(金) 02:01:30
磯釣り
432デフォルトの名無しさん:2006/03/31(金) 08:00:19
どうでもいいけどISOってアイソってテレビで読んでた
IPAもアイパなんだろうか
433デフォルトの名無しさん:2006/03/31(金) 12:07:07
ISO野波平
434デフォルトの名無しさん:2006/03/31(金) 13:26:51
昔はCDライティングを「磯焼き」と呼んだものだが
435デフォルトの名無しさん:2006/03/31(金) 13:59:22
Autrijus たんいつの間にあんなことに・・・
436デフォルトの名無しさん:2006/03/31(金) 16:33:28
>>435
Wikipediaみてみそ
俺も驚いた
437デフォルトの名無しさん:2006/03/31(金) 17:41:54
>>435-436
くわしくplz
438デフォルトの名無しさん:2006/03/31(金) 17:48:20
自己解決した。
写真みて、へぇ、女の人だったんだとおもたよ。
これからもよろしくね、鳳たん。
439デフォルトの名無しさん:2006/03/31(金) 22:59:48
>>438
blogの方には臍出し写真も… (;´Д`)ハァハァ
440デフォルトの名無しさん:2006/03/31(金) 23:02:07
>>434
呼ばねーよw
441デフォルトの名無しさん:2006/03/32(土) 00:27:08
>>434
> 昔はCDライティングを「磯焼き」と呼んだものだが
10年くらい前、そう呼んでたね。
442デフォルトの名無しさん:2006/03/32(土) 02:10:49
>>429
マルチ乙
443デフォルトの名無しさん:2006/03/32(土) 19:01:53
perlからwin32apiは使えますけど、
.netapiは使えないのでしょうか?
444デフォルトの名無しさん:2006/03/32(土) 19:10:19
ラリーがperl6の開発資金生活費として使い込んだり、
オライリーをリストラされたってのは本当?
445デフォルトの名無しさん:2006/03/32(土) 20:36:54
生活資金として使うのは問題ないんじゃない?
生活費を稼ぐべき時間をPerlの開発に充当するんだったらね。
446デフォルトの名無しさん:2006/03/32(土) 21:58:09
ラリーの一人や二人食わしてやってもいいじゃん。世界的に貢献してんだからさ。
447デフォルトの名無しさん:2006/03/32(土) 22:07:21
>>444の質問見たの3回目くらいなんだけど何かそういう情報元あんの?
俺のような認識でこの質問が出たのかも知れんけど。
448デフォルトの名無しさん:2006/03/32(土) 22:18:03
おれYAPCでラリーに握手してもらったよw
449デフォルトの名無しさん: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;
}
450デフォルトの名無しさん:2006/03/32(土) 23:58:50
>>448
YAPCいってきたなら、ちょっとくらい感想を述べてくれもていいじゃない

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

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

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

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

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

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


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

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


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

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

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

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

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

くわしく


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

do{ .... }while(1);
この時 ....の部分で last if(条件);としdo-whileから抜けようとしますとエラーが出てしまいます。
ただし普通のwhile(1){ .... }ですと問題がないようです
これは仕様ですか?
Perlのバージョンは確か5.8.8〜です
477デフォルトの名無しさん:2006/04/02(日) 22:29:37
>>476
仕様です。ラベルつきブロックで囲んで対処
ttp://www.kt.rim.or.jp/~kbk/perl5.005/perlsyn.html#Simple_statements
478デフォルトの名無しさん:2006/04/02(日) 22:47:24
>>475
doブロックがwhileブロックの中にあると解釈されるからだろうね
わざわざブロックの末尾でwhile(1)使うより、redo使ったほうが自然じゃない?
479デフォルトの名無しさん:2006/04/02(日) 22:48:29
UNIXサーバで利用できるPerlモジュールの一覧を表示する事ってできますか?
480デフォルトの名無しさん: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も書いていただけるとありがたい。
本当か判断しかねるじゃないか…
481デフォルトの名無しさん: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で同様に行なうと変換出来ています。
どこかにサンプルコードありませんでしょうか?
482デフォルトの名無しさん:2006/04/02(日) 23:59:45
>>481
ttp://studio.imagemagick.org/script/formats.php
対応フォーマット一覧を見るとRGBがそれっぽいのでRGBフォーマットと指定して読み込み。
$img->Read('rgb:fileName.raw');
で行けるみたい。
# 資料がなかなか見つからなくて苦労した…
483455:2006/04/03(月) 00:14:46
>>474

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

ということ。

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

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

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

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

496デフォルトの名無しさん:2006/04/03(月) 21:56:34
>>495
それは試したのですが駄目でした。
497デフォルトの名無しさん:2006/04/03(月) 22:40:32
make CC=gcc はどうですか
498デフォルトの名無しさん: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が呼ばれてないみたい
なんですけど、何が間違ってるんでしょうか。
499デフォルトの名無しさん:2006/04/04(火) 12:20:16
>>498
overloadに渡すのはリファレンスじゃない
use overload (
    'cmp' => \&compare
);
500デフォルトの名無しさん:2006/04/04(火) 12:47:39
似てる有名人 子飼弾vs江川達也
501デフォルトの名無しさん:2006/04/04(火) 13:52:22
>>499
ありがとうございます!できました!
ドキュメント見てたつもりだったんですが何故か{}を使う
と思い込んでてそこは再チェックしてませんでした…
502デフォルトの名無しさん:2006/04/04(火) 14:29:47
>>500
それガチだな
503masaki:2006/04/04(火) 14:43:41
質問させてください

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

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

こんな変な状況になった人いますか?
解決法を教えてください。
504デフォルトの名無しさん:2006/04/04(火) 15:22:33
EPICの重さは何とかならないのか
メモリ256Mしかありましぇん字もうてましぇん
505masaki:2006/04/04(火) 15:23:43
Eclipseの方へ転記したので
クローズさせてください。
506デフォルトの名無しさん:2006/04/04(火) 19:43:27
EPICでプロジェクトに含めるplファイルって一つだけなの?
plファイルを追加する方法がわからない
507デフォルトの名無しさん:2006/04/04(火) 20:59:37
右クリック→New→File
508デフォルトの名無しさん: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
509デフォルトの名無しさん:2006/04/04(火) 22:11:55
perl -e "print \"Hello.\n\";"
510デフォルトの名無しさん:2006/04/04(火) 22:24:16
DOSのコマンドラインの解釈には癖があるから、
ワンライナでは極力""を使わないほうが賢明。
q{}オペレータが便利。
perl -e "print qq[Hello.\n];"

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

でも、実行すると、

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

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

print Hello.\n;

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

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

ありがとう。

皆さんは、perlをどんな環境で使っていますか?
私は、win2000+ACTIVESTATE社のperlを
DOS上で使っています。
514デフォルトの名無しさん:2006/04/04(火) 23:09:59
Linux+vim
515デフォルトの名無しさん:2006/04/05(水) 00:45:22
>>508
いやさ q{}とかはいいんだけどさ。
お前さんシングルクォート閉じてない・・・
516デフォルトの名無しさん: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 のドキュメントを読んで、こういうことはできなそうだと分かったのですが、
スカラー変数などに詰め込んで渡して、親スレッド側で展開等しかないのでしょうか・・。
517デフォルトの名無しさん: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]) );
518デフォルトの名無しさん:2006/04/05(水) 05:11:34
>>517
ありがとうございます。

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

でいけました。
519デフォルトの名無しさん:2006/04/05(水) 10:34:57
>>507
さんすこ
520デフォルトの名無しさん: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動いている人いたけど
どうやったの〜?
521デフォルトの名無しさん:2006/04/06(木) 00:05:29
>>520
Cygwinで普通に動くが…。
setup.exeで普通にダウンロードしたわけだが。
522デフォルトの名無しさん: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っていらなくね?
523デフォルトの名無しさん:2006/04/06(木) 01:35:57
@filelistって . と .. が最初にくるって保証されてるんだったら別にいいんじゃない?
524デフォルトの名無しさん:2006/04/06(木) 01:37:24
日本語がおかしいな。
@filelistの最初に . と .. が…でおk
525デフォルトの名無しさん:2006/04/06(木) 04:02:19
Encodeのモジュールを全部サーバにアップしたのに、
↓このエラーが出ます。

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

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

詳しくはperldoc perlmodlibのPragmatic Modulesを参照。
529デフォルトの名無しさん:2006/04/06(木) 09:20:05
>>525
そりゃ無理だろうな。Encode.pmはビルドしないと使えないXSモジュールだ。
ちゃんとsshでログインしてビルドすれ。
530デフォルトの名無しさん: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 よりインスコ

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

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

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


   

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

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

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

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

perl -pi.bak -e 's/<FONT COLOR="white">/<FONT COLOR="blue">/g' *.html
これはWINじゃダメみたいです。
WINでやりたいのですがどうすればいいでしょうか?
ご教授お願いいたします。
555デフォルトの名無しさん: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だから。
556デフォルトの名無しさん:2006/04/09(日) 19:52:57
>>555
おー早速ありがとうございました。
557556:2006/04/09(日) 20:15:55
ぶっちゃけwinじゃperlは使いづらいかもですね。
558デフォルトの名無しさん:2006/04/09(日) 22:10:55
>>557
速度面で一時ActivePerlにしたがそんなに違わなかったのでCygwin-Perlに
戻して、Utf8-TeratermSSH組み込みのCygtermで使ってます。

もうコマンドプロンプトに戻れない。
559デフォルトの名無しさん:2006/04/10(月) 00:39:02
>>558
ふつー ck
560デフォルトの名無しさん: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内でこれをやりたいです。
561デフォルトの名無しさん:2006/04/10(月) 17:14:29
562デフォルトの名無しさん:2006/04/10(月) 17:29:14
>>561
ありがとう!!
563デフォルトの名無しさん:2006/04/11(火) 09:03:02
(´・ω・)
564デフォルトの名無しさん: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をインストールしようとすると、こんなの出るんですが、これなんでしょうか?
565デフォルトの名無しさん:2006/04/11(火) 11:29:57
>>564
多分、ダウンロードに失敗している。ミラーを設定してみたらどう?
設定の仕方はo conf urilist辺りでググってくれ
566デフォルトの名無しさん:2006/04/11(火) 12:03:53
なぁ、List::Utilのshuffleって本当にちゃんと動いてるの?
@i = shuffle 1..500;
ってやってみたんだが
いくつか数字が欠けてる
567566:2006/04/11(火) 12:27:51
四月馬鹿でした
568デフォルトの名無しさん: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 $_}}'

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

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

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


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

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

以上を踏まえると、Perlの連想配列はハッシュテーブルですが、しかし
「ハッシュインデックスか?」と聞かれると質問の意味が良く分からないと
答えざるを得ないということですね。
578デフォルトの名無しさん:2006/04/11(火) 20:07:57
まあしかし連想配列の実装にただの配列使うやつは少ないんではないかと…。
てか、UNIXとかなら最初からライブラリあるし、ライセンスの都合で使いたく
ないにしても変な実装はしないんじゃないかなあ。
579デフォルトの名無しさん:2006/04/11(火) 20:58:48
Perlスクリプトの中で引数を使っているのですが、
引数の指定が1つでなかったらスクリプトを終了させる
記述ってどうすれば良いですか?
580デフォルトの名無しさん:2006/04/11(火) 21:11:40
>>579
引数の数を調べて、1以外の時にはexitする。
581デフォルトの名無しさん:2006/04/11(火) 21:12:50
if(@ARGV != 1){ die }
582デフォルトの名無しさん: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;

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

確か、バケット占有率だけ見て
リスト長については目をつぶるタイプのハッシュだったと思う。
アルゴリズムの本読めば分かる程度の、普通の(難しい事抜きの)実装だった。
587デフォルトの名無しさん:2006/04/11(火) 22:28:43
pugsって新種のコンパイラ、インタプリタでしょうか?
そうすると、今、普通のコンパイラ、インタプリタは、なんと言う名前なのでしょう??
588デフォルトの名無しさん:2006/04/11(火) 22:50:22
>>582
ていうか、重複しないハッシュテーブルなんて普通は作れない。
重複した時の処理で隣のハッシュ値を使うかもう一つテーブル
作って同じハッシュ値でやるかだ。
589デフォルトの名無しさん:2006/04/11(火) 22:51:03
あ、そんだけじゃない。テーブル作らなくてもリスト構造にしちゃうとかあるな。
まあいいや。
590デフォルトの名無しさん:2006/04/11(火) 23:03:53
>>588,589だけレベルが低い点について
591573:2006/04/11(火) 23:51:29
あながち間違いでもなかったか。
592デフォルトの名無しさん:2006/04/12(水) 00:07:07
      ハ_ハ   
     (^( ゚∀゚)^)  ハ_ハ
     )  /   ('(゚∀゚∩    みんな仲良く
    (_ノ_ノ     ヽ  〈      みんなPerl仲間
             ヽヽ_)
593デフォルトの名無しさん:2006/04/12(水) 00:13:37
反吐が出ます
594デフォルトの名無しさん:2006/04/12(水) 01:09:41
出さないでください
595デフォルトの名無しさん: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は別に作られる(予定)、
ということで良いんだよね?ここのところちょっと自信なし。
596デフォルトの名無しさん:2006/04/12(水) 03:25:00
597デフォルトの名無しさん:2006/04/12(水) 05:19:14
>>568

@i{@i}=();
の左辺て何やっているの?
598デフォルトの名無しさん:2006/04/12(水) 07:01:58
>>595
ありがとうございます。
perl 6 は、本家の実装が今後でてくると。
言語仕様もかなりかわっているようです。
599デフォルトの名無しさん:2006/04/12(水) 10:54:34
C,C++,PHP,MySQLなどの経験があり、
今度仕事でpostgreSQL+perl環境でWEBサービスを作るんだけど、
今のうちにperl+postgreSQLの演習として何か作ろうと思うんだが
何が良いだろう?
perlもpostgreSQLもほぼ未経験です。
600デフォルトの名無しさん:2006/04/12(水) 11:08:10
今度仕事で作るモックアップを作ればいいんじゃないの
601デフォルトの名無しさん:2006/04/12(水) 11:51:47
ありがとう、そうしてみる。
ところで、perlからPg.pm使ってpostgresql使う時って
もしかしてcloseしなくていいの?
http://www.stackasterisk.jp/tech/program/perl03_02.jsp
ここ見たんだけど。
602デフォルトの名無しさん:2006/04/12(水) 11:57:50
Pg.pmってなんじゃ?DBIの方が資料があっていいと思うよ。
603デフォルトの名無しさん:2006/04/12(水) 13:02:33
DBD-Pgがwin版ActivePerlのPPMでダウンロードできない。
search DBDってしてみても、PgPPしか見つからないんだが
PgPPとPgで構文って変わってくるかな?
変わらないなら、別にPgPPでも良いので。
604デフォルトの名無しさん:2006/04/12(水) 13:13:15
>>603
ちょっと覗いてみただけだけどPP版とは結構違うみたいだね。
DBD::PgはTheoryx5リポジトリにあったよ。最新ではないようだけど。
ttp://theoryx5.uwinnipeg.ca/ppms/
605603:2006/04/12(水) 13:23:09
ありがとう。
すごく助かった。
606デフォルトの名無しさん:2006/04/12(水) 13:54:23
>>597
%iに@iのキーを手っ取り早く作る手法
ハッシュスライスに空リストを代入でキーだけ作られる
ただ、値は未定義なのでexistsで確認しなければならない
607デフォルトの名無しさん:2006/04/12(水) 14:57:52
copalってもしかしてpostgreSQL用のDBI機能はちゃんとエミュレート出来ない?
608デフォルトの名無しさん:2006/04/12(水) 15:26:54
>>597
$i{@i}=();
だったりするとまた意味合いが違うんだよね。
マジカルPerlタンハァハァ
609607:2006/04/12(水) 16:00:11
ごめん、勘違いだった。
DBD::Pg使うと
perlのcommand line iterator自体が落ちるみたいだ。
インストール失敗してるのかな・・・
610デフォルトの名無しさん: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ははずせない状況です。

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

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

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

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


619618:2006/04/12(水) 21:03:55

ユニークでなければいけません。
ハッシュ化しようかと思ったが、それでは駄目ですよね。
620デフォルトの名無しさん: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
621デフォルトの名無しさん:2006/04/12(水) 21:13:08
>>620
長いホスト名だとPATH_MAXにひっかかるよ。
正規化してmd5でも使ってhexに変換しる。
622デフォルトの名無しさん:2006/04/12(水) 21:16:04
>>621
>様々なurlをファイル名にするのに
     ~~~ ~~~~~~~~~
623デフォルトの名無しさん:2006/04/12(水) 21:18:14
そもそも、何をしたいの?
絶対にURLがファイル名でないとだめなの?
624618:2006/04/12(水) 21:25:17
はい。絶対にURLがファイル名でないとだめです。

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

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

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

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

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

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

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

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

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

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

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


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

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

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

ってやってりゃそうそうメモリ足りなくなること無いと思うけど
673デフォルトの名無しさん:2006/04/13(木) 19:19:54
ちょっとしたプログラムなのに15MBもメモリを使ってしまう。
Perlはこれぐらいは覚悟して使うべき?もちろんCで書くより何十倍も楽なんだけど・・・
674デフォルトの名無しさん:2006/04/13(木) 19:31:52
俺のちょっとしたプログラムは2MBもメモリを使ってしまう。
俺はそれぐらいは覚悟して使っている。
675デフォルトの名無しさん:2006/04/13(木) 19:32:20
15Mぐらいは気にしない。気にしない。一休み。一休み。
676デフォルトの名無しさん:2006/04/13(木) 19:36:43
15MB のメモリと何十倍の開発効率とどちらを取るべきかなんて
それの程度のこと自分で判断できないようなら開発者失格だろう。
677デフォルトの名無しさん:2006/04/13(木) 19:48:17
最新の5.8.6使ってるのが駄目なのかもしれんね。
threadやめて10年前の古いバージョンでfork使って試してみるわ。
678デフォルトの名無しさん:2006/04/13(木) 19:57:50
そろそろperl6じゃないの?
679デフォルトの名無しさん: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
680デフォルトの名無しさん:2006/04/13(木) 20:50:57
ちょっとしたので15Mって使いすぎじゃね?
681デフォルトの名無しさん:2006/04/13(木) 21:58:06
ちょっとしたプログラムの例

$a = `cat hello.doc`;

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

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

689デフォルトの名無しさん:2006/04/14(金) 00:14:31
「ちょっとした」でそこまで判断できるなんておまいらエスパーですか?
690デフォルトの名無しさん:2006/04/14(金) 00:22:00
ほんとうにちょっとしたプログラムだと、
数メガのテキストファイル読み込んで配列つくって
文字列の検索置換してあたらしく数メガのテキストファイル作っちゃったりするけどな。
メモリや速さの効率考えずに思いついたままのスクリプト書いちゃう。
691デフォルトの名無しさん: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>"
692デフォルトの名無しさん:2006/04/14(金) 09:07:25
<STDIN> って何?
693デフォルトの名無しさん:2006/04/14(金) 09:08:46
ああ! sleep してるのね。
694デフォルトの名無しさん:2006/04/14(金) 11:21:13
ちょっとしたWin32::OLE使ったExcelリモート操作で5MB程度
695デフォルトの名無しさん:2006/04/14(金) 14:05:47
64bitCPUが主流になりつつある時代に何を言ってるんですか貴方達は
696デフォルトの名無しさん:2006/04/14(金) 14:09:17
・・・という夢を見た。
697デフォルトの名無しさん:2006/04/14(金) 14:14:53
>>687
えっ、そうなんですか?
DBMだとメモリ消費抑えられるの?
698デフォルトの名無しさん:2006/04/14(金) 16:09:13
>perl -e '<STDIN>'

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

何もしなくてもインタプリタで普通に3M強は喰うわけだ。
699デフォルトの名無しさん: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'} 変更される

上記の理由がよくわからないのですが、どう理解すればいいのでしょう?
700デフォルトの名無しさん: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;

これで実行してみ
701699:2006/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;
}
と書くしかなさそうですね。
702デフォルトの名無しさん:2006/04/15(土) 04:13:23
703デフォルトの名無しさん:2006/04/15(土) 04:52:51
キマイラにも程がある
704デフォルトの名無しさん:2006/04/15(土) 09:58:33
>>698
俺が昨日作ったa.exeなんてファイル開いただけなのに4104Kぐらいつかってたぞ。
705デフォルトの名無しさん:2006/04/15(土) 11:10:06
>>702
この生物、後付けしまくったにもほどが… それが6なのか
706デフォルトの名無しさん:2006/04/15(土) 11:29:09
>>701

なんで素直に

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

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

呼び出し側を load(\%hash1,\%hash2) の形式で書いていたので、
考え方がそっちに固まってました。
ありがとうございました。
708デフォルトの名無しさん:2006/04/15(土) 13:11:33
DBMに複雑なデータ構造を保存する時は
Storableでfreezeしてシリアライズしてからというのが定石ですか?
709デフォルトの名無しさん: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ファイルをネットにあるものと認識しているため
動かないのだと思います。
710デフォルトの名無しさん: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があるかのように
振舞わせようとしたのですが、頓挫しました。
どこがおかしいんだろう。

長文失礼しました。
711デフォルトの名無しさん:2006/04/15(土) 14:02:58
>>708
定石かどうか知らないが、DB に限らずスカラーにして保存する場合、
おれもそれしか思いつかないなぁ。
Data::Dumper でも同様のことができると思うが、Storable の方が効率がいいしね。
712デフォルトの名無しさん:2006/04/15(土) 14:19:54
正規化するまでもなかったりマンドクセな時はよくやるな
713デフォルトの名無しさん:2006/04/15(土) 15:06:52
714デフォルトの名無しさん:2006/04/15(土) 16:10:25
配列の要素っていくつまで入れれるのですか?
715デフォルトの名無しさん:2006/04/15(土) 16:13:10
>>714
メモリの許す限り。
716デフォルトの名無しさん:2006/04/15(土) 16:13:36
やってみればいいじゃない
717デフォルトの名無しさん:2006/04/15(土) 16:20:01
>>713
これはGOODです!
718デフォルトの名無しさん:2006/04/15(土) 16:49:30
他の言語やってきたらPerlの変数内の値の扱いについて混乱してきた…
他の変数に代入した場合に何所まで複製されるかがこんがらがってる。
Devel::Peekで色々やってみたら実装レベルで考えると文字列が特別扱いされてるようだけれど…

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

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

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

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

barewordなnが文字列と解釈されて、そのリファレンスを取っている。
727デフォルトの名無しさん: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
になってしまいます
なんでー
728725:2006/04/16(日) 04:37:24
>>726
barewordって初めて聞いた
剥き出しの、つまり裸のワードってことなんですね
perl独特の言い回しなのかな

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

SCALAR(0x1625088)

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

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

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

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

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

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

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

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

rotate
740デフォルトの名無しさん:2006/04/16(日) 20:58:06
すいません、ImageMagickの入れ方が分からないためできないっす。
741デフォルトの名無しさん:2006/04/16(日) 21:04:19
ならばしかたがないのぅ。
ベクターあたりで適当なコマンドラインツール拾って
system とかで呼べばできるんじゃね
742デフォルトの名無しさん:2006/04/16(日) 21:04:54
Image::Magick の入れ方を知ろうという気はないのか・・・。
743デフォルトの名無しさん:2006/04/16(日) 21:14:20
ppm install Image-Magick
744デフォルトの名無しさん:2006/04/16(日) 21:17:56
ppmには無いよ
あと、グーグルで調べていくとドツボにはまる。
今のバージョンに全然該当しないのばかりが検索の上位
745デフォルトの名無しさん:2006/04/16(日) 21:25:31
何らかのライブラリ使ってリサイズはできてんだろ?
あとは本人がドキュメントの回転に関する項読めばいいだけだろ?
それとも比にとらわれて if( $h < $w ) という条件式に気付かなかったのか?
746デフォルトの名無しさん:2006/04/16(日) 21:44:47
>>738
回転を行なうソフトのソースを読んで、それを自分で実装すればいいよ。
747デフォルトの名無しさん: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
748740:2006/04/16(日) 23:07:06
離席してました。すいません。
resize2jpegとか言うのつかってsystemでコマンド送って一括でできるようにはしてます。
もちろん比率を受け取ってリサイズするので>>745の条件式は使ってます。
ImageMagickに変わる何かを探してみます。
749デフォルトの名無しさん: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分の中とあとでなぜか配列中のひとつの
値が書き換わってしまいます。しかしループ処理がない
場合は書き換わりません。

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

それは、配列のどの値がどのように書き変わったかに大きく依存する。
751デフォルトの名無しさん:2006/04/16(日) 23:52:57
ImageMagickって普通に公式からexe落として
適当にインストールして適当にPATH通せば使えたような
752デフォルトの名無しさん:2006/04/17(月) 00:02:57
OSは Windowsと 同義なり
友蔵心の俳句
753デフォルトの名無しさん:2006/04/17(月) 03:57:20
754デフォルトの名無しさん:2006/04/17(月) 05:07:20
ImageMagickの回転って、losslessだっけ?

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

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

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

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

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

759デフォルトの名無しさん:2006/04/17(月) 11:09:30
>>754-758
こういうやり取りこそが2ちゃんなんだな。
そして全てを達観してる俺のような奴が必ず現われるのも2ちゃんなんだな。
760デフォルトの名無しさん: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'" :| \
'"   |   `''-、`'ー--─'";;-'''"   ,|   \_
761デフォルトの名無しさん:2006/04/17(月) 12:25:08
jpegってヘッダ1byteだか1bitだか書き換えるだけで回転できなかったっけ?
762デフォルトの名無しさん:2006/04/17(月) 12:39:54
やってみてよ
763デフォルトの名無しさん:2006/04/17(月) 13:31:48
>>760
ちゃんと育毛しろよ
764デフォルトの名無しさん:2006/04/17(月) 16:35:29
URLでメールアドレス渡すのってどうやるんですか???
http://www.xxxx.com/xx.cgi?001&$email$
765デフォルトの名無しさん:2006/04/17(月) 16:41:22
クラスを定義する時にメンバのアクセスを制御する構文はないんでしょうか
C++系の様にprivateとか
766デフォルトの名無しさん:2006/04/17(月) 16:50:21 BE:375455647-
>>764
日本語でおk

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

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

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

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

777デフォルトの名無しさん:2006/04/19(水) 14:24:49
>>776
そういう処理をする比較関数を作るとイイよ!!
778デフォルトの名無しさん:2006/04/19(水) 14:47:38
>>776
一つの項目で比較関数を使うやり方は略することにして(基本だから調べてくれ)、
(f($a[0]) cmp f($b[0])) or (g($a[2]) cmp g($b[2]))
というふうに、比較を優先順にorでつなげる。
779デフォルトの名無しさん: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
780デフォルトの名無しさん:2006/04/19(水) 20:40:13
ところでExcelって先頭文字大文字にしたり5-10-5とかのデータを勝手に日付型にしたりしてうぜぇよな
781デフォルトの名無しさん:2006/04/19(水) 21:46:32
シートの全範囲を選んで書式を文字列に。
但し数式もそのままの文字列として解釈される諸刃の剣。
782デフォルトの名無しさん:2006/04/19(水) 22:09:16
>>780
OpenOfficeもデフォルトの設定がそうなってて設定がどこにあるのか探すのが面倒だった。
783デフォルトの名無しさん:2006/04/19(水) 22:33:04
OpenOfficeは見つかったからいいんだが、Excel見つからないんだよね。
ってか CSV読み込んだ時点でもう変わっちゃってるからどうしようもねぇ
784デフォルトの名無しさん:2006/04/20(木) 08:42:52
CSV から Excel なんて自前で変換してやりゃ済む話だろ
785デフォルトの名無しさん:2006/04/20(木) 09:30:08
$str="aaabbbccc";という文字列にaが何文字含まれているかを調べるには
どうしたらいいんですか?
786デフォルトの名無しさん:2006/04/20(木) 09:36:12
一文字ずつ調べる
787デフォルトの名無しさん:2006/04/20(木) 09:55:14
>>786
だからどうやるんだ?
788デフォルトの名無しさん:2006/04/20(木) 09:56:48 BE:420997875-#
それが質問者の態度か。
789デフォルトの名無しさん:2006/04/20(木) 10:05:40
>>788
氏ねよチンカス。
790デフォルトの名無しさん:2006/04/20(木) 10:06:11 BE:252599437-#
$str = 'aaabbbccc';
$target = 'a';

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

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

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

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

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

> perldoc -q count

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

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

こんなひどいこと書いちゃダメだよ。
801デフォルトの名無しさん: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);
}
802デフォルトの名無しさん:2006/04/20(木) 20:32:47
スパゲティ
803デフォルトの名無しさん:2006/04/20(木) 20:49:15
パスタと言えよオッサン
804デフォルトの名無しさん:2006/04/20(木) 20:52:41
変数のprintにダブルクオーテーションでくくる一流プログラマー
演算子の前後に空白を入れない一流プログラマー
use strictを知らない一流プログラマー
意味不明な変数名をつける一流プログラマー
localしまくる一流プログラマー
無駄に変数を作る一流プログラマー
二項演算子を知らない一流プログラマー
バグったままうpする一流プログラマー

KENT臭のする一流プログラマー
805デフォルトの名無しさん:2006/04/20(木) 21:04:32
KENTは超一流のプログラマ
806デフォルトの名無しさん:2006/04/20(木) 21:07:31
>>801
お前が一流かしらないが美しくないから却下だ
807デフォルトの名無しさん:2006/04/20(木) 21:18:12
英語でもいいから、sysopenかopenをオーバーライドしてるコード例ってどっかにない?
808デフォルトの名無しさん:2006/04/20(木) 22:04:08
809807:2006/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;
# 書いてみたけど、あってるかどうか自信ない。誰か詳しい奴いない?
810796:2006/04/21(金) 02:31:45
ごめん>>788
俺がウンコだと思ったのは>>789でした・・・
811デフォルトの名無しさん:2006/04/21(金) 06:36:58
ワロタw

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

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

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

普通のコマンドならreadpipeやexcecでできるのですが。
教えてもらえないでしょうか?
817デフォルトの名無しさん:2006/04/21(金) 12:13:56 BE:108257033-#
Expectでググれ
818デフォルトの名無しさん:2006/04/21(金) 20:25:02
あのー
3000とかを3,000という風に
コンマを付けてくれるモジュールみたいなの
ありませんでしょうか
819デフォルトの名無しさん:2006/04/21(金) 20:26:40
>>818
赤ラクダ本にでてるよ〜〜
820デフォルトの名無しさん: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
}
821デフォルトの名無しさん:2006/04/21(金) 20:41:13
>>818
モジュールじゃないけどな
ttp://www.din.or.jp/~ohzaki/perl.htm#NumberWithComma
822デフォルトの名無しさん:2006/04/21(金) 22:05:21
>>819-821
激しく感謝です
ありがとうございました
823818:2006/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__
824818:2006/04/21(金) 23:04:41
-198000000 とか与えたら変になりますね、、
825デフォルトの名無しさん:2006/04/21(金) 23:34:07
何のためにPerl使ってんだ?
どうせ次は少数点で躓くんだしCのコードでも探しな。
826デフォルトの名無しさん:2006/04/22(土) 00:26:43
少しは、役に立つかも・・・
http://www.yukinko-net.jp/computer/download/downloadlist.htm
827デフォルトの名無しさん: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です。
828デフォルトの名無しさん:2006/04/22(土) 15:44:18
>>827

……(呆れている)

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

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

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



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

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

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

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

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

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

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

sub DEBUG () { 1 }

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

正気か

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

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

sub bbb{

my $test = shift;

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


}

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

848デフォルトの名無しさん:2006/04/22(土) 22:35:03
>>847
sprintfのフォーマットは変数に入れることが出来る。
849デフォルトの名無しさん: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するという方法が無くはないけど。
850847:2006/04/22(土) 22:48:22

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

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

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

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


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

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

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

Dan?
naoya?
miyagawa?

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

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

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

用途はWEBから大きなデータを取ってくるのに、親プロセスから
分割ダウンロードする子プロセスを複数起動して、処理を高速化
することです。
ところがここで、もうひとつ問題が発生。
上記の方法では子プロセスの処理が終了しないと親は次に進めま
せん。
perlでは子プロセスに非同期処理実行をさせることはできないの
でしょうか?
858デフォルトの名無しさん:2006/04/23(日) 01:34:22
>>855
perl test.pl "aiueo "
859デフォルトの名無しさん:2006/04/23(日) 02:48:07
>>857
>子プロセスの処理が終了しないと親は次に進めません
子が終わる前に親が終わったら子はゾンビになるよ。
最終的にはwaitするって。
パイプつかってるからそこでブロックしちゃうんじゃ?
860デフォルトの名無しさん: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
861デフォルトの名無しさん:2006/04/23(日) 04:17:47
>>852
ブロックの中でmy使ってるってオチじゃないかな
862デフォルトの名無しさん: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";
}
863デフォルトの名無しさん:2006/04/23(日) 04:28:56
>>859
嘘つくなよ。子を残して親が死んだら、initがその子の親になる。
ゾンビになるのは子が死んでるのに生きてる親がwaitしない場合。

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

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

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

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

http://www.google.com/Top/Computers/Programming/Languages/
ここにでている言語の、数字別にソートした
一覧を作りたいんだけど、どうすればいい?
867デフォルトの名無しさん:2006/04/23(日) 10:49:23
>>866
言語と数字を切り分けて配列に入れて、数字でソートする。
868デフォルトの名無しさん:2006/04/23(日) 10:54:11
>>867
ちょっとやってみて
そんで、結果をどっかにアップして。
結果だけ見たいから。
869デフォルトの名無しさん: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 ロシア)
870デフォルトの名無しさん:2006/04/23(日) 11:31:12
>>868 をシバいていいですか?
871デフォルトの名無しさん:2006/04/23(日) 12:46:52
結果見るだけなら sortf で充分
872デフォルトの名無しさん:2006/04/23(日) 13:10:05
ワロス
873デフォルトの名無しさん:2006/04/23(日) 14:35:58
>>866
こんなのでいい?
ttp://homepage3.nifty.com/catfood/up/src/up4748.txt
ページを取得
正規表現を使って言語をキー、数字を値としたハッシュを作成
ハッシュの値でソートして出力
874デフォルトの名無しさん:2006/04/23(日) 16:35:44
やさしいな
875デフォルトの名無しさん:2006/04/23(日) 18:22:14
>>873
だめ
HTTPにして。
急いで。
876デフォルトの名無しさん:2006/04/23(日) 18:34:15
>>873
はやくして
877デフォルトの名無しさん:2006/04/23(日) 18:36:40
それが人に頼む態度か?
878デフォルトの名無しさん:2006/04/23(日) 18:39:49
print "hello\n"

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

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

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

という課題を教えて欲しいです・・・
891デフォルトの名無しさん:2006/04/23(日) 20:54:45
>>890
金額は?
892デフォルトの名無しさん:2006/04/23(日) 20:56:16
>>890
課題:
乱数を用いて生成する四則演算の問題を5つユーザーに答えさせて、
最後に合計得点を表示するプログラムを作りなさい
893デフォルトの名無しさん:2006/04/23(日) 21:01:09
>>892
という課題に対する解答を教えて欲しいですでした。
すみません。
894デフォルトの名無しさん: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万円でいいよ。
895デフォルトの名無しさん:2006/04/23(日) 21:27:15
つ[30万円]

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

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

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

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

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

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

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

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

Perlをインストールすると一緒にインストールされるドキュメントにあるから、
それを公開しているサイトだったらあるんじゃね?
920デフォルトの名無しさん:2006/04/24(月) 08:47:20
>>917
あなたがそのlinuxマシンの管理者や適切な権限を持った
ユーザーならどうにでもやりようがある。
あなたがただのユーザーなら馬鹿が設定したwebサーバで
ないかぎり無理
921デフォルトの名無しさん:2006/04/24(月) 08:55:32
>917
Webminでも使ったら?
922917:2006/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
923917:2006/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
924デフォルトの名無しさん:2006/04/24(月) 11:14:14
>>922
CGI なんだから、ちゃんと HTTP ヘッダ (Content-Type: など) やコンテンツを出力しなきゃあかんがな。
925デフォルトの名無しさん:2006/04/24(月) 11:44:43
>>924
CGIなんだからちゃんとwebprog板に行けよ
926デフォルトの名無しさん:2006/04/24(月) 12:11:33
>>925
俺に言うなよ!
927917:2006/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();
928デフォルトの名無しさん:2006/04/24(月) 17:15:57
コメントがドイツ語? どこから取ってきたソース?
929デフォルトの名無しさん:2006/04/24(月) 17:18:07
>>928
日本語勉強中のドイツ美少女ハッカーなんだから当たり前
930デフォルトの名無しさん:2006/04/24(月) 17:26:35
どっから持ってきたのかは知らないが

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

が2回でてきたり真面目に中身理解して使ってるとは
思えんな...
931デフォルトの名無しさん:2006/04/24(月) 19:37:52
>>928
とっさに「書いたのはドイツだ?」というオヤジギャグを書けないようでは君はオヤジ失格だ。
932デフォルトの名無しさん:2006/04/24(月) 19:38:01
そこは今、たまたま同じってだけじゃないか?
933デフォルトの名無しさん:2006/04/24(月) 19:49:09
>>932
同じスコープ中で二度も my 宣言しなくていいよね。
-w オプション付きなら警告される。
934デフォルトの名無しさん:2006/04/24(月) 21:04:07
ループ中でmyしちゃう人もいるぐらいだから珍しくも無いよ。
まあそういう意味では分ってないんだと思うけど。
935デフォルトの名無しさん: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__
936デフォルトの名無しさん:2006/04/24(月) 21:29:41
>>934
for (my $i = 0; $i < 10; $i++) {
これもループ内のmy宣言に該当する?
937デフォルトの名無しさん:2006/04/24(月) 21:39:36
ループのなかで初期化しちゃいけないの?
938デフォルトの名無しさん:2006/04/24(月) 21:57:28
質問です
1つのプロセスで同時に開けるファイルハンドルの数を教えて下さい
どこかに書いてあったような気がするのですが…
939デフォルトの名無しさん:2006/04/24(月) 21:59:22
そのループの中でしか使わない初めて出てくる変数なら何の問題もない。
しかし外側でその名前を使っていたらなるべく別の名前の方がいい。
機械はちゃんと区別してくれるけど人間はなかなかそうはいかないから
混乱のもと。
940デフォルトの名無しさん:2006/04/24(月) 22:22:33
>>938
OSやOSの設定によって違うと思う
941デフォルトの名無しさん:2006/04/24(月) 23:02:51
foreachの…名前分からないがローカル変数に値が代入されますよね。
普通は$_に入ると思いますが、入れ子にした場合はどうなるのでしょう?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

で、ちょっとやってみたけど、/tmp/PerlIO<ランダム文字列>
というを作って、即unlinkしてファイルシステム上から消してるよ。
956デフォルトの名無しさん: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).
957デフォルトの名無しさん:2006/04/25(火) 16:15:28
>>950
UNIX系OSの場合はだいたいはファイルを作った直後にオープンしたまま
ファイル名を unlink (削除) するようになっていると思う。これで
どうなるかというと、ファイルの読み書きは可能だがファイル名が
存在しない状態になる。ファイルをクローズしたとき(あるいはオープン
しているプロセスが終了した時)にディスク上の領域が開放される。
958デフォルトの名無しさん:2006/04/25(火) 16:16:53
UNIX系OS以外の場合は close() の時に削除されるようになっているんじゃないかな?
同じ方法が使えないとしたらそうなっていると思うよ。
959デフォルトの名無しさん:2006/04/25(火) 19:45:09
>>950
これなかなか便利ですね。
そのうちCGI.pmでも標準になるのかな。
WindowsXPだと%temp%に排他で作成されていました。
960デフォルトの名無しさん:2006/04/25(火) 19:51:24
みなさんありがとう
助かったよー〜〜
961デフォルトの名無しさん:2006/04/25(火) 21:56:17
もうそろそろ次スレの準備をよろすくー。
過去スレやリンクのアドレス間違いに気をつけて!
962デフォルトの名無しさん:2006/04/25(火) 22:54:56
active perl 5.8を入れていましたが、最近cygwinを入れました。
すると、activeperlでファイルをreadできなくなりました。
どなたか原因をご教授ください。
963デフォルトの名無しさん:2006/04/25(火) 23:42:00 BE:362046839-
>>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だ。
964デフォルトの名無しさん: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
でした。
965デフォルトの名無しさん:2006/04/26(水) 00:00:11 BE:321818764-
>>964
openは色々とエラーを起きやすいからエラートラップする習慣をつけよう。
open(F,"text.txt") or die $!;
で何かエラーメッセージ出る?大抵はこのエラーメッセージを見りゃ解決するけれど…
966デフォルトの名無しさん: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はあります。
967デフォルトの名無しさん:2006/04/26(水) 00:13:04
フルパスをぶち込んでみてください。
968デフォルトの名無しさん:2006/04/26(水) 00:14:59
use Cwd;
print Cwd::getcwd();
これやってみれ
969デフォルトの名無しさん:2006/04/26(水) 00:23:04
>>967
フルパスぶち込んだらOKでした・・・。

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

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

で、HTMLでサイトを作るくらいは自分も出来るんですが
Perlの知識はまったく無いので自分なりにやっても
失敗してしまいます。
どうか、知識のある方叶えて頂けないでしょうか?
973デフォルトの名無しさん: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>
974デフォルトの名無しさん: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
}

975デフォルトの名無しさん:2006/04/26(水) 04:19:01
976デフォルトの名無しさん:2006/04/26(水) 04:19:18
>>973>>974はそのまま続いてまして
これを読み込ませると

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

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

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

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

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

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

複数スレマルチポスト・コピペ報告スレ35@全板共通
http://qb5.2ch.net/test/read.cgi/sec2chd/1143873802/478-481
986963:2006/04/26(水) 12:21:57 BE:965455889-
さて、次スレ建てて来る
987デフォルトの名無しさん:2006/04/26(水) 12:40:52 BE:241364063-
$$self{next} = new BBS2ch::Thread 'Perlについての質問箱 24箱目';

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

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

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

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

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