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

このエントリーをはてなブックマークに追加
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://pc5.2ch.net/php/ )

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

http://www.perl.org/get.html
● 2005/03/17現在の最新版: 5.8.6
● 2005/03/17現在の開発版: 5.9.1
2デフォルトの名無しさん:05/03/17 13:52:12
3デフォルトの名無しさん:05/03/17 13:52:21
[プログラミング自体の経験が無い奴はまずココを読め]
Perlプログラミング講座: http://www5a.biglobe.ne.jp/~n_rieko/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/4873110378/

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

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

[テクニック]
Perlメモ: http://www.din.or.jp/~ohzaki/perl.htm
Perlのページ: http://homepage1.nifty.com/nomenclator/perl/
Perlの小技: http://homepage3.nifty.com/hippo2000/perltips/index.htm
4デフォルトの名無しさん:05/03/17 14:40:18
4ね
5デフォルトの名無しさん:05/03/17 15:01:02
6はまだですか?
6デフォルトの名無しさん:05/03/17 15:08:57
http://marc.theaimsgroup.com/?l=openbsd-misc&m=111038859611508&w=2

> Besides, I can't believe someone is advocating Perl on the grounds of
> readability.

Right. Perl is a write-only language...
7デフォルトの名無しさん:05/03/17 16:01:02
初心者です。教えてください。
Webのあるボタンを押したら、Perlのプログラムが走行するように
したいのですが、やり方がよく分かりません。
HTMLの"onclick="コマンドを使えばいいのでしょうか。
onclick="xxxx/xxxx/funyafunya.pl"
てな感じでしょうか?
教えて〜〜〜!
8デフォルトの名無しさん:05/03/17 16:17:39
>>7
>>1

まぁ、CGIですらないな
9デフォルトの名無しさん:05/03/17 16:19:59
ううむ。
それさえ、よくわからん・・・。
でも、教えてくだされ〜〜!
10デフォルトの名無しさん:05/03/17 16:46:39
('A`)
11デフォルトの名無しさん:05/03/17 18:37:06
まだですか〜〜!
12デフォルトの名無しさん:05/03/17 18:48:10
シリアルキー解析集「ALTEA」
大好評発売中!

http://openuser10.auctions.yahoo.co.jp/jp/user/dancexxx1960?


市販SOFTやオンラインSOFTのパスワード集です。
オークション関係から画像・OS・表計算・CAD・・・・etc
国内・国外のあらゆる分野のSoftを解析済です。


これを初めて手にされた時には、驚愕される事でしょう。
そして・・・手当たり次第にインストールを始める筈ですw
パソコンをご使用の方なら、必ず!満足されると思います。

解析結果のデータベースには15,000点を越えるパスワードが入ってます。
このパスワード集から検索するだけで、登録や制限解除が出来てしまいます。
シェアウェアを購入して、正規登録したのと同じ状態になります。
余りにもデータが多すぎる為、辞書引のようなパスワード検索SOFTで提供します。

シェアウェア以外にもパッケージ版をVectorなどでオンライン販売してるSOFTにも
多数対応しています。これらをダウンロードして無期限に試用する事も可能です(^^;

WindowsXPやOfficeなどのCDキー(プロダクトキー)ジェネレーターを使えば複数のパソコンに
インストールする事も可能です。デスクトップとノートPCなど2台以上持ってる場合は特に有効ですね。

オンラインSOFTを購入した経験は有りますか?
ありとあらゆる分野の優れたSOFTが、数多くありますよね。
しかし、ほとんどが試用期間や機能制限をして、「気に入ったら購入してください」です。

もう少し使いたいが使用期限切れで、削除・・・再インストールを繰り返していませんか?
13デフォルトの名無しさん:05/03/17 23:35:17
ブラクラ?
14デフォルトの名無しさん:05/03/18 07:28:30
13桁の数字だけにマッチさせるような正規表現はできますか?
15デフォルトの名無しさん:05/03/18 09:00:00
>>14
できます。
16デフォルトの名無しさん:05/03/18 09:06:41
>>14
length $hoge == 13 and $hoge !~ /[a-zA-Z_]/
こうか?
17デフォルトの名無しさん:05/03/18 10:06:19
/\d{13}/
18デフォルトの名無しさん:05/03/18 10:28:02
>>17
1234567890123abcde = 真
19デフォルトの名無しさん:05/03/18 10:55:22
perlでディレクトリ内の最新のファイルを取得したいのですが、どのようにすればよいでしょうか。
ディレクトリ内には20050318.pngのように日付をファイル名とするファイルがあり、その中で最新のファイルのファイル名を取得したいのです。
20デフォルトの名無しさん:05/03/18 11:04:50
>>19
いや・・・
普通に、もっとも数の大きいファイル名を選べばいいだけじゃないの?
ファイル名一覧を取得してソートしてさ・・・
21デフォルトの名無しさん:05/03/18 11:47:24
>>20
最大のものをピックアップするだけでしょ。
22デフォルトの名無しさん:05/03/18 12:37:35
だな。キーワードも揃ってんだし、後は自分で試行錯誤するべきだな。
ソース提示はこいつのためにならん
23デフォルトの名無しさん:05/03/18 12:44:26
質問です

<key>kNumber</key>
<integer>6</integer>
上のようなxmlファイルの一部分の書き換えをしたいと思っています。
最初に書いたスクリプトは以下のようなものです

use strict;
my $pref = "file.xml";
my $i = 0;
my $text;
open PL,"+<$pref" or die;
while (<PL>){
if (/kNumber/){
$i = 1;
next;
}
if ($i == 1) {
s/<integer>\d+<\/integer>/<integer>0<\/integer>)/;
$i = 0;
}
} continue {
print PL;
}
close PL;

<integer>に囲まれてる"6"を変更しているのですが、
標準出力だと成功しているにも関わらずファイルに書き込むと
うまくいきません。
この場合どのようにすればいいのでしょうか?
24デフォルトの名無しさん:05/03/18 12:46:44
`ls -t *.png|head -1`
25デフォルトの名無しさん:05/03/18 13:24:42
>>23
まず別の一時ファイルに書き出してから rename で置き換えるようにしる。
もしくは、一旦 XML の内容を変数にためてファイルを truncate してから書き出すか。
26デフォルトの名無しさん:05/03/18 14:03:59
>>23
XML::Simpleを使う手があるぞ
27デフォルトの名無しさん:05/03/18 14:20:22
ありがとうございます。
同じファイルを書き換えるのは結構大変なものなんですね・・・
変数にためてtruncateをやってみたら先頭に^@が山ほどついた
ファイルが出来上がってしまいました。

my $pref = "file.xml";
my $i = 0;
my $text;
open PL,"+<$pref" or die;
while (<PL>){
if (/kNumber/){
$i = 1;
next;
}
if ($i == 1) {
s/<integer>\d+<\/integer>/<integer>0<\/integer>)/;
$i = 0;
}
} continue {
# print;
$text .= $_;
}
truncate(PL,0);
#system("/bin/echo > $pref") ;
print PL $text;
close PL;

ゴミを除いた結果と標準出力の結果は良好なんですが、
どうもファイルに書き込む際に先頭にゴミが入ってダメでした。
truncateはきちんと動作していました。
ありがとうございます。目先を変えてXML::Simpleを試してみます。
28 :05/03/18 14:22:52
サブルーチンに複数の連想配列を渡すやり方を教えてください。

-----
$A{'A'}=100;
$B{'B'}=200;

&view(%A,%B);

sub view()
{
my (%x,%y)=@_;
print "1:$x{'A'}\n";
print "2:$y{'B'}\n";
}

-----
結果は
1:100
2:
となります。呼び元の連想配列Bのキーを変えて
 $B{'B'}=200
⇒$B{'A'}=200
とすると結果は
1:200
2:
となり、sub view内での第1引数の値が変わっているように見えます。
view内での受け取り方my(%x,%y)=@_の問題のように思えますが、
第1引数と第2引数を別々に受け取るにはどうしたらいいのでしょうか。
29デフォルトの名無しさん:05/03/18 14:33:07
>>28
> サブルーチンに複数の連想配列を渡すやり方を教えてください。
$A{'A'}=100;
$B{'B'}=200;

&view(\%A,\%B);

sub view {
my ($rx,$ry)=@_;
print "1:$rx->{'A'}\n";
print "2:$ry->{'B'}\n";
}
30デフォルトの名無しさん:05/03/18 14:34:37
>>28
> となり、sub view内での第1引数の値が変わっているように見えます。
> view内での受け取り方my(%x,%y)=@_の問題のように思えますが、
> 第1引数と第2引数を別々に受け取るにはどうしたらいいのでしょうか。

サブルーチンの引数は、べろんとリストに展開されて渡されるだけ。
3128:05/03/18 14:55:27
>>29
リファレンスで呼び出すんですね。
スカラーならリファレンス指定しなくてもいいのに
連想配列だと必要とは。。。いまいちすっきりしないです。

>>30
それは理解できるんですが、キャストのイメージが
他言語に比べ自由すぎて理解しづらいのです。
この例でも連想配列で渡したのだから連想配列変数に
直接代入できてもよさそうなものですし。
32デフォルトの名無しさん:05/03/18 15:50:14
>>31
それには伝統的な理由(ry

引数に指定された連想配列は 配列に展開されてサブルーチンに渡されるらしいんだが、
この方式には問題があってな……引数をどこで区切ったらいいか、perl は分からなくなるんだ。

まあ、そこが可愛くも(ry
33デフォルトの名無しさん:05/03/18 16:17:28
>>27
すまん、言ってなかったが seek(PL, 0, 0); してから truncate してちょ。
34デフォルトの名無しさん:05/03/18 16:21:19
>>31
リファレンスはスカラー値。
35デフォルトの名無しさん:05/03/18 16:33:26
へんてこな仕様だとは思う。
Cで可変長引数の関数をベタベタに書いたときみたいな感じ。
36デフォルトの名無しさん:05/03/18 18:14:59
前ヌレ消費しろよ
37デフォルトの名無しさん:05/03/19 20:25:25
けっこう長いことPerlを使ってたが、
リファレンス先の変数が消滅しても領域が解放
されないことを、今日初めて知ったよ・・・
今まで、Cのポインタみたく使ってたよ・・・
ショックだ・・・もうPerlやめよう・・・
38デフォルトの名無しさん:05/03/19 21:12:15
どうぞ
39デフォルトの名無しさん:05/03/19 22:51:10
>>37
たしか、いつ開放するかはPerlさんまかせだったと思う
必要になったら、Perlさんが開放してくれる
undefは破棄する関数だけどメモリを開放するとは限らないと。
40デフォルトの名無しさん:05/03/19 22:53:36
質問させてください。
0〜10までの数字入力で、
10を超える数字や、文字を入力したりするとエラーとする処理はできるのですが、
入力で、01とか、00000とか入力されると、そのまま処理されてしまいます。
先頭の余計な0を削る方法はないでしょうか?
41デフォルトの名無しさん:05/03/19 22:56:56
>>39
嘘教えるなよ。ちゃんとmyを使ってれば不要になった時点(リファレンスカウントが0になった時点)で破棄される。
俺はこれがRubyとの最大の違いだと思ってるくらいだ。

循環参照にさえ気をつければマークスイープのGCより遥かに強力だぞ。
42デフォルトの名無しさん:05/03/19 23:05:14
メモリ領域の開放の話だろ

>マークスイープのGCより遥かに強力だぞ
何故?
43デフォルトの名無しさん:05/03/19 23:20:26
>>37>>39の話は全然関係ない話じゃん。
>>39はただのアホウ。
44デフォルトの名無しさん:05/03/19 23:27:25
>>43
はいはい。悪ぅございました。
ちゃんと調べてきたよ。
45デフォルトの名無しさん:05/03/19 23:30:36
ちなみに、マークアンドスイープアルゴリズムは今後のPerlに実装されるかもしれないってさ。
46デフォルトの名無しさん:05/03/19 23:59:11
>>44
調べたのは感心だが、GCの動作の違いから
コードの書き方にどれだけ決定的な違いが生じるか、
ってのを感得しないと意味がないぞ。
Perl認定試験みたいなもんでもありゃ、用語覚えは役に立つかもしらんが。
47デフォルトの名無しさん:05/03/20 05:04:46
(・∀・)Perl認定試験
ものすごい変態コードを読み解くパズルみたいな試験なのだ!。
48デフォルトの名無しさん:05/03/20 12:16:58
ソースの暗号化をするソフトは知っているんですが。

記述によってソースを暗号化することは出来るのでしょうか?
49デフォルトの名無しさん:05/03/20 12:43:41
うん
50デフォルトの名無しさん:05/03/20 12:47:59
その方法を教えてください。
51デフォルトの名無しさん:05/03/20 13:58:33

何故?
52デフォルトの名無しさん:05/03/20 14:20:27
同じサーバ使ってる人にソース見られちゃうよー
(つд⊂)エーンって感じだったりして。
53デフォルトの名無しさん:05/03/20 18:38:56
暗号化したところでほとんど無意味
(実行時には展開されなくてはならないため)
バイトコードに変換した方がよっぽど効果的だろうな
54デフォルトの名無しさん:05/03/20 20:18:45
バイトコードもコンパイラが単純だとすぐ
ソースに戻されちゃうからね。

ソース状態でも常人には読めない暗号の
ようなコードが最強。
55デフォルトの名無しさん:05/03/20 20:26:14
qrpff.plみたいなのか
56デフォルトの名無しさん:05/03/20 21:57:30
XORHTMLみたいなのって
簡単にするとどういう手順で暗号化されているのかな?

出力する全文をそれと同じ手順を踏ませりゃいいのかと思いきや。
5740:05/03/20 22:36:20
すみません、誰かアドバイスくれる方いませんか・・・
58デフォルトの名無しさん:05/03/20 22:43:48
/^[^\D0]\d*$/
59デフォルトの名無しさん:05/03/20 22:44:17
>>57
> 先頭の余計な0を削る方法はないでしょうか?
それなら
$var =~ s/^0+//;
でできるが、その前に

> 0〜10までの数字入力で、
> 10を超える数字や、文字を入力したりするとエラーとする処理はできるのですが、
> 入力で、01とか、00000とか入力されると、そのまま処理されてしまいます。

このエラー処理がすでに間違っている。
6040:05/03/20 23:08:13
>>58
ありがとうございます。
文字列として処理しないといけないんですね・・・・
ってか、コンソールから文字を受け取る時点で数字も文字列扱いになるんでしょうけど・・・

>>59
ありがとうございます。
エラー処理が間違ってる・・・
うーん、どの部分でしょうか?
61デフォルトの名無しさん:05/03/21 00:46:29
>>60
エラー処理の考え方が間違っているってこと
まず、自分がどんな処理をしたいのかを考えて、
それから、そのためにはどんな入力である必要があるかを考えてみてごらん。
62デフォルトの名無しさん:05/03/21 01:33:21
0とか書いてるのが最大のエラーだな
63デフォルトの名無しさん:05/03/21 01:46:41
>>60
> うーん、どの部分でしょうか?
どの部分も何も
> 10を超える数字や、文字を入力したりするとエラーとする処理はできる
のなら、
01は数値としては1だし、00000は数値としては0なんだから、
そのエラー処理とやらにひっかかるはずだと言っているのだよ。
64デフォルトの名無しさん:05/03/21 02:06:42
>>63の言ってる意味がわからないのは俺だけか?

>01は数値としては1だし、00000は数値としては0なんだから、
これは意味がわかる。

>そのエラー処理とやらにひっかかるはずだと言っているのだよ。
なぜだ?
0〜10の数字なら処理するように作りたいんだろ?
で、数値として、1やら0がエラー処理にひっかかるんだ?
65デフォルトの名無しさん:05/03/21 03:33:36
>>64
> 入力で、01とか、00000とか入力されると、そのまま(エラー)処理されてしまいます。
では?
66デフォルトの名無しさん:2005/03/21(月) 10:10:25
とりあえずその気色の悪い全角数字を止めれ
67デフォルトの名無しさん:2005/03/21(月) 12:30:11
もしかして全角数字を入れたらエラーになるって事?
68デフォルトの名無しさん:2005/03/21(月) 13:45:22
もういいよ、これやるから質問者も回答者も落ち着け

$num =~ /^(?:[0-9]|10)$/
69デフォルトの名無しさん:2005/03/21(月) 21:59:57
require 'foo.pl';
とした時に、foo.plが存在しないと即↓のようなエラーが出てしまうのですが、

Can't locate foo.pl in @INC (@INC contains: /etc/perl /usr/lib/perl5/site_p
erl/5.8.5/i386-linux /usr/lib/perl5/site_perl/5.8.5 /usr/lib/perl5/site_per
l /usr/lib/perl5/vendor_perl/5.8.5/i386-linux /usr/lib/perl5/vendor_perl/5.
8.5 /usr/lib/perl5/vendor_perl /usr/lib/perl5/5.8.5/i386-linux /usr/lib/per
l5/5.8.5 /usr/local/lib/site_perl .) at bar.pl line 1.

このエラーメッセージを任意のメッセージに変更する事などはできますか?

それとも、
unless (-e 'foo.pl') {
  print "何か気の効いたエラーメッセージ\n";
}
こんな感じにしないといけないでしょうか??
70デフォルトの名無しさん:2005/03/21(月) 22:12:45
eval{
 require "foo.pl";
}:
if($@) {
 die "うんこ漏れそう";
}
71Miss!:2005/03/21(月) 22:13:28
s/:/;/;
72デフォルトの名無しさん:2005/03/21(月) 22:17:27
eval で囲んどくとか。
73デフォルトの名無しさん:2005/03/21(月) 22:18:00
ありゃ。出遅れまくり。すまん。
7469:2005/03/21(月) 22:21:54
>>70 >>72
ありがとうございます
これでいけそうです

ちなみに、参考までに聞いておきたいんですが、
requireのエラーをevalで捕捉する、っていうやり方はごく一般的なものなんでしょうか?
75デフォルトの名無しさん:2005/03/21(月) 22:28:05
二人中二人が同じ方法を提示したからねぇ?
76デフォルトの名無しさん:2005/03/21(月) 22:28:16
eval で囲んで if ($@) でキャッチするのは、
Perl での例外処理のイディオム。
7769:2005/03/21(月) 22:40:01
了解です
ありがとうございました。。
78デフォルトの名無しさん:2005/03/21(月) 22:51:36
クックブック12.2によると、モジュール読み込みが実行時じゃなくて
コンパイル時に行なわれるよう、evalをBEGINのブロックでくるんで
やるのがおばちゃまモアベターよ、とありますな。
79デフォルトの名無しさん:2005/03/22(火) 18:53:14
すみません、以下の動作の違いがわかりません。
何について調べたらよいかアドバイスをいただけないでしょうか。

#!perl
my @aaa = (1,2);
my $bbb = 'aaa';
print $$bbb[1];
-----結果 出力無し

#!perl
@aaa = (1,2);
my $bbb = 'aaa';
print $$bbb[1];
-----結果 2

よろしくお願いします。
80デフォルトの名無しさん:2005/03/22(火) 18:57:58
シンボリックリンク、シンボルテーブルで検索
8179:2005/03/22(火) 19:42:24
>>80ありがとうございます
今リファレンスの勉強をしてたんですけど、myがつくだけで結果が変わるのもシンボリック〜関係なんでしょうか?
該当部分をなかなかさがせません…
82デフォルトの名無しさん:2005/03/22(火) 19:45:35
今更だけどクックブック第2版の内容は
初版にXMLとmod_perlが加わっただけ?
他にも加筆、修正があるなら買いたいな
83デフォルトの名無しさん:2005/03/22(火) 19:53:12
>>81
myじゃない変数はシンボルテーブルに登録される
シンボリックリンクはシンボル名から変数を参照する機能
84デフォルトの名無しさん:2005/03/22(火) 19:55:12
○シンボルテーブルから変数を参照する機能
×変数を参照する機能
85デフォルトの名無しさん:2005/03/22(火) 20:40:15
~$ perl -e '@aaa = (1,2); my $bbb = 'aaa'; print ${$bbb}[1], "\n";'
2
86デフォルトの名無しさん:2005/03/22(火) 20:42:01
~$ perl -e 'my @aaa = (1,2); my $bbb = 'aaa'; print ${$bbb}[1], "\n";'

じゃあ、>>85tと>>86の違いはなんと説明すればいいのかしら。
87デフォルトの名無しさん:2005/03/22(火) 22:52:09
(; ´д`)???
88デフォルトの名無しさん:2005/03/22(火) 22:52:33
junoscript-perl-6.4I0ってやつが、たとえ正常にインストールしたとしても
cpan>install 別のモジュール
する度に毎回インストールされるのでうっとうしい。

1.これは何のためのもの?
2.こいつに何が依存している?(何のせいでインストールされている?)
3.インストールを拒否する方法(またはjunoscript is up to dateにする方法)は?

お願いします。
8979:2005/03/22(火) 22:58:02
シンボル〜とかstrict 'refs'とか知らないのがまだまだ出てきたんで解決はしてませんが
ヒント(答え?)もらって助かりました。
アリザイマシタッ!
90デフォルトの名無しさん:2005/03/23(水) 10:07:57
つーか、Perlの例外処理はError.pm使っていこうぜ。
91デフォルトの名無しさん:2005/03/23(水) 10:55:14
Perlで画像解析(指定した画像にある画像と同じ物が含まれているか。)をしたいのですが、
そう言うことをするのに便利なモジュール、あるいはサンプル等ないでしょうか?
やはり自前でBMPを解析していくしかないのでしょうか?ご教授お願い致します(_ _)
92デフォルトの名無しさん:2005/03/24(木) 15:41:27
質問します。
$QUERY{'COM'}に < が存在したときにエラーとしたいのですが
下記の正規表現ではつかまえることはできません。例えば、< をtestに変えると
testという文字を検出できるのですが、< だとできません。
\をつけてもだめでした、教えてください


if ($QUERY{'COM'} =~ /(.*)<(.*)/) { &error('<は使用できません'); }
93デフォルトの名無しさん:2005/03/24(木) 16:27:57
>>92
<の前後の文字列をキャプチャーしようというのでなければ
その正規表現は無駄で/</で十分だが、そのままでも<が
含まれていればマッチはするはずなので、$QUERY{'COM'}の
中身の方があやしいな。

とりあえずややこしいプログラムのままではわけわからん
ので、適当に$QUERY{'COM'}を表示してみるとか、if文の
直前でテスト用の値を代入するとかして切り分けた方が
いいんじゃないかね。



94デフォルトの名無しさん:2005/03/24(木) 16:37:09
>>93
ごていねいにありがとうございます
やってみます
95デフォルトの名無しさん:2005/03/24(木) 19:40:55
&lt;にエスケープされてるとか
96デフォルトの名無しさん:2005/03/25(金) 15:18:37
linux でperl5を使っていますが、
PC上での開発は、メモ帳を使っています。
デバッグとかpc上でできたり、色わけできたら開発しやすいのですが、先生方が使っているツール
教えてください。

perlをはじめよう というソフトをダウンしてつかってみましたが、windows用で動作する環境を想定して
いるので使い物になりませんでした orz
97デフォルトの名無しさん:2005/03/25(金) 15:19:17
>>95
そのとおりでした、thx
98デフォルトの名無しさん:2005/03/25(金) 18:23:02
Linux板のくだ質でもスルーされそうな質問が来てますが
99デフォルトの名無しさん:2005/03/25(金) 18:41:55
>>98
そうやってかまってしまう君は面倒見良過ぎ。
100デフォルトの名無しさん:2005/03/25(金) 20:10:30
>>96
vim
101デフォルトの名無しさん:2005/03/25(金) 21:22:53
>>96
Kate
102デフォルトの名無しさん:2005/03/26(土) 03:02:52
perlでsocks proxyを作りたいのですが、どうやって作ればいいかわかりますか?
サンプルコードとかが落ちてるなら、それへのリンクでも結構です。
103デフォルトの名無しさん:2005/03/26(土) 03:07:01
RFC 1928, RFC 1929.
104デフォルトの名無しさん:2005/03/26(土) 03:10:28
>>96
TeraPad
105デフォルトの名無しさん:2005/03/26(土) 05:42:27
106デフォルトの名無しさん:2005/03/26(土) 08:26:05
年月日を(S46/07/01)などのような書式で統一されたテキスト文書を
1971(S46/07/01)と西暦を附加するにはどうしたらいいでしょうか。

とりあえず昭和のみです。
107デフォルトの名無しさん:2005/03/26(土) 08:37:48
>>106
'(S46/07/01)'のパターンを捕捉して、'1971(S46/07/01)' に置換します。

108デフォルトの名無しさん:2005/03/26(土) 09:00:23
>>106
$aho = "(S46/07/01) べべべ \n べべべ (S12/12/23) べべべ \n (S64/01/12)\n";
$aho =~ s{(\(S(\d{2})/\d{2}/\d{2}\))}{1925 + $2 . $1 }eg;
print $aho;
109デフォルトの名無しさん:2005/03/26(土) 09:05:47
>>107
すいません。
具体的にパターン書いてもらえませんか。
110デフォルトの名無しさん:2005/03/26(土) 09:12:54
$aho
111デフォルトの名無しさん:2005/03/26(土) 10:39:16
>>100
>>101
>>104
ありがとうございます。初めて聞く名ばかりですが、調べてやってみます
112デフォルトの名無しさん:2005/03/26(土) 13:10:39
Eclipse+EPIC でどうだ?
113デフォルトの名無しさん:2005/03/26(土) 13:27:04
>>111
そんなやつにエディタを使いこなすのは無理がある
terapadはWindows専用で、有名なソフト
vimはUNIX使ってるなら知らないとおかしい

Kateが素人にはお薦めかな?
Emacsのほうがいいとは思うが
114デフォルトの名無しさん:2005/03/27(日) 10:05:36
漏れは、へてむるクリエイタ〜、Terapad、Vim(Win,lunix両方)併用
115デフォルトの名無しさん:2005/03/27(日) 10:14:52
おれは、机上マシン、押し入れマシン、ホスティングサイトの全プログラムを、
机上マシン上で動かしているemacsで、trumpを使って遠隔読み書きして
メンテナンスしてる。

emacs者でまだtrumpを使ってない人がいたら、すぐに使いはじめることを
強く推奨する。

最近めっきり見なくなった、ネットワーク透過性という言葉を思い出させてくれるぜ。
116 ◆I7KiQfoFlw :2005/03/27(日) 14:49:58
ぱぱらっちー
117デフォルトの名無しさん:2005/03/27(日) 14:55:18
>>115
TRAMP だけどな。
118デフォルトの名無しさん:2005/03/27(日) 15:12:42
恥!!
119デフォルトの名無しさん:2005/03/27(日) 15:40:16
>>115
ごめんなさい。
入れるのが面倒くさいのでange-ftpで済ましてしまっていました。
120デフォルトの名無しさん:2005/03/27(日) 20:54:25
俺もange-ftpなんだがそんなにtrampは良いものなのかね。
121デフォルトの名無しさん:2005/03/28(月) 01:01:25
実行したときにコンソールに表示する文字を
hogehoge.pl > foo.txt 見たいにしています。
プログラム中で標準出力先がコンソールかファイルかを判別させるには
どうしたらよいでしょうか?
やりたい事はコンソールだとカラー表示、ファイルへの出力だと
エスケープ文字を出さないようにしたいだけです。
よろしくお願いします。
122デフォルトの名無しさん:2005/03/28(月) 01:15:15
POSIX::isatty
123デフォルトの名無しさん:2005/03/28(月) 14:47:19
>>121
-t FILEHANDLE
124デフォルトの名無しさん:2005/03/28(月) 20:14:30
sub UNIVERSAL::attr : ATTR(CODE) {}

…な時に、

package A;

sub test : attr
{}

…ってやって

eval('use A');

…ってやると、attr : ATTR(CODE) が実行されないんだけど、これって仕様?
125デフォルトの名無しさん:2005/03/28(月) 20:46:09
それはそうと、誰でも読めるコードを書きましょうの会
126デフォルトの名無しさん:2005/03/28(月) 21:30:21
>>124

サブルーチンに対するアトリビュート付加はコンパイル時に行われる。

use attributes;
attributes->importL(__PACKAGE__, \&test, 'attr');

で、いけるかな。よくわからんけど。
127デフォルトの名無しさん:2005/03/28(月) 22:33:59
gdbのラッパをperl(5.6.0)で書こうとしています。
gdbにかぎった話しではないのですが、対話型のインタフェースを持つ
プロセスに対してラッパを書くのはどうしたらいいのでしょうか?
gdbへの入力と、gdbからの出力の双方を得る方法で
悩んでいます。
さらに困ったことに、CPANからライブラリを入手できない環境です。
128デフォルトの名無しさん:2005/03/28(月) 22:52:06
プロセス間通信
129デフォルトの名無しさん:2005/03/28(月) 23:35:10
perlスクリプトを、送るメニューから使えるようにするにはどうしたらいいでしょうか?
win32 , active perlです。
SendToフォルダにスクリプトを入れても何も起きませんでした。
130デフォルトの名無しさん:2005/03/28(月) 23:38:04
送るメニューってなんですか
131デフォルトの名無しさん:2005/03/28(月) 23:47:26
右クリックをしたときに出てくるコンテキストメニューの中の”送る”の項です
132デフォルトの名無しさん:2005/03/29(火) 00:47:43
>129
open()ではうまいこといかないですよね。
IPCというわけでもないようですし。

双方向というのが肝だと考えています。
gdbに対して入力するFileHandleを作ってから、
( "| dbx $argments" ), そこからforkして
別プロセスにし、その標準出力を名前付き
パイプに吐かせて、親プロセスで受ける、
という方法を試してみました。これは失敗。

どこがまずいのか、どのようにすれば
うまくいくのか、それとも根本的に
発想が間違っているのでしょうか。

133デフォルトの名無しさん:2005/03/29(火) 01:04:13
IPC::Open2は?
134デフォルトの名無しさん:2005/03/29(火) 01:13:42
>>129
batファイルにしてそれのショートカットをSendToに置く
135デフォルトの名無しさん:2005/03/29(火) 01:37:02
>>129
perl2exeでexe化したのを送るに登録する

常用するようなスクリプトは俺そうしてるよ
136デフォルトの名無しさん:2005/03/29(火) 04:56:01
>>129
par
137デフォルトの名無しさん:2005/03/29(火) 08:29:09
parでうまくいきました。
138デフォルトの名無しさん:2005/03/29(火) 11:17:56
Perlが手元にあるのなら、pl2batで十分なのだが。
139デフォルトの名無しさん:2005/03/29(火) 14:24:42
>>127
> さらに困ったことに、CPANからライブラリを入手できない環境です

CPANでなくても、どこからかDevel-GDBを見つけてきて
使うなり見るなりすればいいじゃん。
140デフォルトの名無しさん:2005/03/29(火) 14:49:24
>>126
どうもです。

試してみたんですが、sub test : attr {} の時と同じように、
CHECK と INIT フェイズが実行されませんですた。
コンパイル時にアトリビュートの付加が行なわれるので、
eval {} から require すると BEGIN/END しか実行されないのは仕方ないですね。
諦めます(´・ω・`)ショボーン
141デフォルトの名無しさん:2005/03/29(火) 19:48:49 ID:
らくだ本の有効活用(注意:エロあり)
ttp://www.spankingblog.com/spanking-pictures/geek-spanking.jpg
142デフォルトの名無しさん:2005/03/29(火) 20:03:42 ID:
ワロス
143デフォルトの名無しさん:2005/03/29(火) 21:50:44
Perlがモザイク生成言語だったとはw
144デフォルトの名無しさん:2005/03/30(水) 08:06:56 BE:75600746-###
>>141-142
なにそのID
145デフォルトの名無しさん:2005/03/30(水) 09:33:31
>>144
おまえもなー。って、もしかして自分も変かな?
146デフォルトの名無しさん:2005/03/30(水) 11:04:49
Perlでncursesは使えますか?
147デフォルトの名無しさん:2005/03/30(水) 11:53:07
>>146
はい。
148デフォルトの名無しさん:2005/03/30(水) 20:34:38
perlでは、行単位でテキストを読みながらちょこちょこ編集したいときに、条件節で使うのは、
/foo/ のような単純なマッチと、( index($_, 'foo') >=0 ) とでは、どちらが速いですか?
自分のCGIでベンチマークしても、どちらも2msぐらいで終わってしまうので、チラシの裏にテスト用の
コード書こうかと思ったんですが、ここで訊いてからにしようと思って。
149デフォルトの名無しさん:2005/03/30(水) 20:45:27
use Benchmark;
150デフォルトの名無しさん:2005/03/30(水) 20:58:15
以前気になってベンチとったけどindexのがエロかった
151デフォルトの名無しさん:2005/03/31(木) 00:16:48
常に0〜79のいずれかの状態である変数$Aを条件として、80ある関数のうちの一つに分岐します。
この80の関数のどれか一つに進んだら残り79の関数には進みません。
で、この分岐を上手い具合にやる方法は無いですかね?
if($A==0){
 FUNC0();
}elsif($A==1){
 FUNC1();
}elsif($A==2){
 FUNC2();
}elsif($A==3){
 FUNC3();
…………………
}else{#エラー
}
と書いて行くのも素敵ですが、こう上手い具合に格好よく。ヒーローみたいな何か。
152151:2005/03/31(木) 00:19:33
追記。
関数名は何でもいいです。
つまり、変数名自体を関数の一部として使ったり、
関数事態を配列にするような、そんな夢ドリームなファンタジーがPerlにあったりしませんか?ってこと。
153その1(Perl6の場合):2005/03/31(木) 00:25:04
switch ($A)
{
 case 0: FUNC0();
 break
 case 1: FUNC1();
 break
 case 2: FUNC2();
 break
 case 3: FUNC3();
 break
 default: 処理3;
 break
}
154その2(その他の場合):2005/03/31(木) 00:27:25
SWITCH :
{
 a==0
  && do {FUNC0(); last SELECT; };
 a==1
  && do {FUNC1(); last SELECT; };
 a==2
  && do {FUNC2(); last SELECT; };
 a==3
  && do {FUNC3(); last SELECT; };
 その他の場合();
}
155デフォルトの名無しさん:2005/03/31(木) 00:28:03
あ、>>153の処理3;はその他の場合();の書き間違い。

こんなんでどうだ。
156デフォルトの名無しさん:2005/03/31(木) 00:28:44
しかも>>154のaは$aだわ。失敬。
157デフォルトの名無しさん:2005/03/31(木) 00:29:26
さらに抜本的な解決になってないわ。スレ汚しスマソ
158デフォルトの名無しさん:2005/03/31(木) 00:29:59
関数へのリファレンスを配列につっこんどけば?
sub boo { print "boo" }
sub foo { print "foo" }
sub woo { print "woo" }
my @list_of_func = (\&boo, \&foo, \&woo);

$list_of_func[1]->(); #=> foo
159デフォルトの名無しさん:2005/03/31(木) 00:44:10
sub FUNC1{return 1};
sub FUNC2{return 2};

$A = 2;
print &{"FUNC$A"};
160151:2005/03/31(木) 00:47:42
とりあえず>158で行ってみたいと思います。皆様ありがとうございました。
161デフォルトの名無しさん:2005/03/31(木) 01:54:56
呼ぶ方はそれでいいとして80個の関数の定義はやっぱり
だらだらと並べて書いてあるんだろうか? とふと疑問に
思った。

162デフォルトの名無しさん:2005/03/31(木) 02:45:26
80もの分岐を作るなんて普通じゃない
もっと分岐を分割できるだろ?普通。
163デフォルトの名無しさん:2005/03/31(木) 02:51:48
だったら80より増えんじゃんw
164デフォルトの名無しさん:2005/03/31(木) 02:56:43
>>163
何か勘違いしてないか?
たとえば、何かのアプリのメニューバーを見ろ。
ファイルだの表示だのってメニューがあるだろ?
ファイルを選べば、そこからまた分岐する。

80分岐してるなら、
最初に8分岐させる。
1だったら、1〜10を
2だったら、11〜20を・・・
こんな感じにすれば、一番下まで評価していったとしても18回
80回も評価してたら重いし負荷大きいし、
ダラダラまとまりなくソース長いし。
165デフォルトの名無しさん:2005/03/31(木) 03:00:02
で、それのどこが「分岐の分割」なんだ?
166デフォルトの名無しさん:2005/03/31(木) 03:01:38
>>165
理解して貰えなくて残念だ。
これ以上語る事などない
167デフォルトの名無しさん:2005/03/31(木) 03:19:27
>>158 のやり方なら 80回も評価しないと思うが、
>>166 には理解してもらえなくて残念だ。
これ以上語る事などない
168デフォルトの名無しさん:2005/03/31(木) 03:20:16
>>166
分岐が100だろうと1000だろうとたいした問題にならない回答はすでになされてるだろ。
あんたがアホウだということしかわからんよ。
169デフォルトの名無しさん:2005/03/31(木) 03:22:02
>>167
ああ、そうだな。
80回も評価しない。
が、80ものルーチンをコンパイルしてメモリに常駐させておくつもりか
そんなのも現実的じゃない。
そりゃ、print文一行程度ならいいかもしれんが。

いかに軽く負荷がかからないようにするかを考えるのが醍醐味だろ?
そんなダラダラ書くのなんて誰だってできるだろ・・・
170デフォルトの名無しさん:2005/03/31(木) 03:23:35
>>169
おお、自分が間違ってたら今度は論旨のすり替えですか。
頑張ってくださいね。
171デフォルトの名無しさん:2005/03/31(木) 03:23:48
>>168
いや、負荷かかってもいいからって言うなら問題ない。
そりゃ俺がでしゃばったな。
悪い事した。
172デフォルトの名無しさん:2005/03/31(木) 03:26:43
>>170
80も一度に評価させるのも、
80もルーチン常駐させるのも、
普通はそんな不器用な事しないって事。

悪かった悪かった。
151の話では、ルーチンを配列で扱いたいって事なんだな。
158の回答で正解。
173デフォルトの名無しさん:2005/03/31(木) 03:31:20
ここにいる人達はただ動けばいいと思ってる日曜プログラマーだから
スピードなど2の次
174デフォルトの名無しさん:2005/03/31(木) 03:35:53
アホかい。
スピードやリソースの狭小さがシビアなときにPerlなんぞ使ってられるかっての。
175デフォルトの名無しさん:2005/03/31(木) 03:37:00
perlerのレベルを下げる>>174
176デフォルトの名無しさん:2005/03/31(木) 03:37:05
>>172
じゃあその80の関数を圧縮する器用で普通で現実的な方法とやらを教えてくれよ。
177デフォルトの名無しさん:2005/03/31(木) 03:39:14
>>174
たとえPerlでもいかに処理が早くできるか否かを考えるのは普通
ってか、自然と考える
それを考えれないヤツは他の言語使っても同じだって事に気づけ
178デフォルトの名無しさん:2005/03/31(木) 03:42:29
>>177
perlでは>>168のやり方が最善だ。
それがわからんのはあんたが無知の知ったかだから。
179デフォルトの名無しさん:2005/03/31(木) 03:43:33
>>178
なぜ最善なんだかを教えてくれ
180デフォルトの名無しさん:2005/03/31(木) 03:47:56
>>179
それが最善とわかるのは普通
ってか、自然とわかる
それを自然とわからないヤツは他の言語使っても同じだって事に気づけ
181デフォルトの名無しさん:2005/03/31(木) 03:53:08
>>180
・・・それが最善とわからないでよかったと思うw
182デフォルトの名無しさん:2005/03/31(木) 03:55:05
なんか伸びてると思ったら・・・
183デフォルトの名無しさん:2005/03/31(木) 03:58:53
166 :デフォルトの名無しさん sage :2005/03/31(木) 03:01:38
>>165
理解して貰えなくて残念だ。
これ以上語る事などない

----

いつまで語ってるんでしょうかね^^;
184デフォルトの名無しさん:2005/03/31(木) 04:02:30
>>179
うるさいなあ。テメエで時間はかってみりゃいいだろ。
185デフォルトの名無しさん:2005/03/31(木) 04:02:47
早く >>176 に答えて!
まさかコード出さずに空論振り回してるだけの無能?
186デフォルトの名無しさん:2005/03/31(木) 04:05:31
>>183
俺がレスしたのは・・・
>>172からは、>>181だけだな。
>>172に俺のやり方をレスしようかと思ったけど、
途中で面倒になってやめた。
考え方が違いすぎるから。
いくら最適化したのを見せた所で話が終わらないと見た。
動けばいいと思うならそれも一理有りだ。
もう何も言わないよー寝るからー
187デフォルトの名無しさん:2005/03/31(木) 04:06:22
>>185
悪い悪い、もういいかなって思い出してきてるし・・・
忘れてくれ、俺が悪かったって事で。
おやすみー
188デフォルトの名無しさん:2005/03/31(木) 04:14:45
>>158
ハンドラ関数などでよくあるパターンで、ハッシュに入れるというのもありますよね。

my $func_table = {
0 => \&boo,
1 => \&foo,
2 => \&woo,
};

$func_table->{1}->(); #=> foo
189デフォルトの名無しさん:2005/03/31(木) 04:49:18
/foo/とindex()のベンチやってみたけどマッチのほうが速かったよ。
http://www.gnu.org/software/emacs/manual/emacs.html
↑このでかいhtmlをダウンロードしてテスト。
-->
This is perl, v5.8.6 built for cygwin-thread-multi-64int

Input: ../../Web_Archives/emacs.html
Lines: 41879
BaseTime: 66 ms
Nullpo-match: 118 ms (x1.771)
Nullpo-index: 157 ms (x2.359)
190デフォルトの名無しさん:2005/03/31(木) 04:49:49
#!/usr/local/bin/perl
use Time::HiRes;
use strict;
system "perl -v |grep 'This is perl'";
my $startT = Time::HiRes::gettimeofday;
my $elapsedT;
open(FILE, "< $ARGV[0]") or die $!;
print "\nInput: $ARGV[0]\n";
undef while (<FILE>);
my $baseT = (Time::HiRes::gettimeofday - $startT)*1000;
printf "%12s: %5g\n", "Lines", $.;
printf "%12s: %.0f ms\n", "BaseTime", $baseT;
seek(FILE, 0, 0);
(/nullpo/) and die "GATT!!" while (<FILE>);
$elapsedT = (Time::HiRes::gettimeofday - $startT)*1000;
printf "%12s: %.0f ms (x%.3f)\n", "Nullpo-match", $elapsedT, ($elapsedT/$baseT);
seek(FILE, 0, 0);
(index($_, "nullpo") >= 0) and die "GATT!!" while (<FILE>);
$elapsedT = (Time::HiRes::gettimeofday - $startT)*1000;
printf "%12s: %.0f ms (x%.3f)\n", "Nullpo-index", $elapsedT, ($elapsedT/$baseT);
191デフォルトの名無しさん:2005/03/31(木) 07:21:35
>>189
> /foo/とindex()のベンチやってみたけどマッチのほうが速かったよ。

低能!
能無し!!
バグメーカー!!!
プロジェクトブレーカー!!!!
192189:2005/03/31(木) 07:57:13
右派wwwぜんぜん気付かなかったわマジでw
193デフォルトの名無しさん:2005/03/31(木) 09:31:18
メタ文字のない単純なマッチは内部でindex()並に最適化される。
だから速度的にはほぼ同じはず。

敢て言えば、index(...) != -1とm/.../では、後者のほうが最後の=-1との比較(相当)を
内部で行う分若干早くなる可能性はあるな。

まぁ速度的には気にする必要は無いってこった。使いたいほうを使うのが最善だな。
194デフォルトの名無しさん:2005/03/31(木) 14:17:04
午前4時まで議論ですか
それこそuse Benchmark
195デフォルトの名無しさん:2005/03/31(木) 20:20:51
>>150
エロイカ〜!?
196デフォルトの名無しさん:2005/03/31(木) 21:09:02
最後のexのあたりがエロいだろ
197デフォルトの名無しさん:2005/03/31(木) 21:10:07
そういう場合はFUNCnの中身もちょっとずつ違うってパターンだろうから
TemplateMethodかFactoryMethodパターンあたりに幸せが待ってます。
# 既にFUNCnの実装がそろっているならラッパを書くとかして。
# 80個も実装する必要はないだろうな。

package AbstractFuncClass;
sub foo { ... chuushoutekina nanika ... }
sub bar { ... }
--
package Func0;
use base qw(AbstractFuncClass);
sub func { ... gutaitekina nanika ... }
--
package Func1;
... hitasura tuzuku ...
--
my $baseName = 'Func';
my $concreteName = $baseName . $A;
try {
$concreteName->func();
} catch Error with {
# no such method or class
};

Func0~79は適当なローダとか書いたりして呼んどく?
198197:2005/03/31(木) 21:10:56
あ、>>151へのレスだ。
199デフォルトの名無しさん:2005/03/31(木) 22:09:44
>>197
> そういう場合はFUNCnの中身もちょっとずつ違うってパターンだろうから

そうでない場合も多々ある。
200デフォルトの名無しさん:2005/03/31(木) 22:22:00
>>199
そうでないとしたら、
処理に 1 とか 2 とか番号を振る convention 自体があまりよろしくない気も。
番号じゃなくて処理内容を適切に表す名前をあてがうべき。

まあ >>151 の具体的な「やりたいこと」がわからない以上、
全て憶測でしか言えないわけだが。
201デフォルトの名無しさん:2005/03/31(木) 22:35:53
>>200
イベントハンドラでも
コマンドディスパッチループでも
プロトコルエンジンコアでも、
なんか名前つけるよな。

しかし、抽象的な計算を行なう状態遷移マシンの場合、
名前なんかいちいちつけてられるかと
いう場合もあるし、Perlの場合、
どうやったらいいのか分からなかったり
遅くなるんじゃないかと思ったりするかも。

まあたしかに >>151 の具体的な「やりたいこと」がわからない以上、
何を言ってもよもやま話の域を出ないわけだが。

202デフォルトの名無しさん:皇紀2665/04/01(金) 09:04:08
手で80個書くと思うとぞっとしないが、何らかのデータから
プログラム生成して80個できたなんてのは普通だしな。
203デピョルトの名無しさん:皇紀2665/04/01(金) 10:13:39
ところで、
$a = $b
みたいなことってできるのか?
204デフォルトの名無しさん:皇紀2665/04/01(金) 10:33:21
while (<*>) {
  #適当な処理
}
で、カレントディレクトリのファイル名を取得する時
数字ではじまるようなファイルがちゃんとソートされてるんだけど、
それって保証されてるの?
それとも一旦、配列かなんかに入れて自分でソートしたほうがいいの?

あと、pythonのソースを自動でperlのソースに変換してくれる
ようなスクリプトとかってない?
205デフォルトの名無しさん:皇紀2665/04/01(金) 11:20:38
>>204
デフォルトで用意されてるのはソートする仕様だと思った。
ただしglob関数を置き換えることが出来るのでそのときは
わからない。

File::Globについて調べるのがいいだろう。

206デフォルトの名無しさん:皇紀2665/04/01(金) 15:32:51
>>158は、名前をいちいち考えたくない時こうすればいいよね。

my @list_of_func = (
sub{ print "boo" },
sub{ print "foo" },
sub{ print "woo" },
);

$list_of_func[1]->(); #=> foo
207デフォルトの名無しさん:int 2ch =05/04/01(金) 21:32:04
質問ですぅ
$ransuu = int( rand(9) );
を実行たら、何度実行しても$ransuuが9を吐いてくれないんですけど、それってボクだけ?
208デフォルトの名無しさん:int 2ch =05/04/01(金) 21:34:01
rand()の有名なバグです。

あきらめて乱数生成ルーチンを自作しましょう
209デフォルトの名無しさん:int 2ch =05/04/01(金) 21:40:35 BE:88200274-###
素直にint(rand(10))すればいいんじゃね?
ところで日付おかしくね?
210207:int 2ch =05/04/01(金) 21:45:35
あっ、バグなんだ
ども〜…。
>>209
ちなみに、今日はエイプリルフールですよ。
211デフォルトの名無しさん:int 2ch =05/04/01(金) 21:58:04
>>210
>あっ、バグなんだ
今日はエイプリルフールですよ。perlfunc見てみましょう。
212デフォルトの名無しさん:int 2ch =05/04/01(金) 22:08:01
ザザンザンザザン!
  1年半の月日を経て
ザザンザンザザン!
  あのウンマンコが帰ってくる・・・
213デフォルトの名無しさん:int 2ch =05/04/01(金) 22:17:16
明日質問すべきだったね・・・
214デフォルトの名無しさん:int 2ch =05/04/01(金) 22:53:05
while (<FH>){ print $_; }

みたいな時に

while $buf (<FH>)

ってやったら$_と同じ内容が$bufに入ってますか?
215ウンマンコ:int 2ch =05/04/01(金) 22:54:57
その時点で$_にははいってにゃい
216デフォルトの名無しさん:int 2ch =05/04/01(金) 23:08:33
perl5.10.0age
217デフォルトの名無しさん:int 2ch =05/04/02(土) 03:58:18
朝ナマにPerlerがでてるぞ

■小飼弾ファンクラブwwwwwwwww part7
http://live20.2ch.net/test/read.cgi/liveanb/1112372795/
218デフォルトの名無しさん:int 2ch =05/04/02(土) 04:17:59
ボロ糞に言われてるな。まぁそんなもんか。
219デフォルトの名無しさん:int 2ch =05/04/02(土) 11:07:06
プログラマーがみんなあんなのだと思われたらヤダネ。
220デフォルトの名無しさん:int 2ch =05/04/02(土) 11:37:56
動画ありませんか?
221デフォルトの名無しさん:int 2ch =05/04/02(土) 12:00:47
オープンソースカルチャーにとっては、
大ダメージだったな。
222デフォルトの名無しさん:int 2ch =5,2005/04/02(土) 14:51:39
(@buf) = split(/./, $data);
foreach (@buf) { print $_, "\n"; }

こんな感じで、$dataに入ってる文字列を1byteずつ
出力したいんですが、思う通りに動きません。
何かいい方法はないでしょうか
223222:int 2ch =5,2005/04/02(土) 14:53:22
すみません書いてからアホな事書いてる事に気づきました
吊ってきます
224デフォルトの名無しさん:int 2ch =5年,2005/04/02(土) 16:31:53
関係ないけどコメントのインデントがおかしくないか?
225デフォルトの名無しさん:int 2ch =5年,2005/04/02(土) 16:34:48
>>224
> 関係ないけどコメントのインデントがおかしくないか?
関係ない以前に、意味わかんない。
226222:int 2ch =5年,2005/04/02(土) 16:50:36
sub split_str {
my(@bufs, $i) = ();
my($buf) = $_[0];
for ($i = 0; $i <= length($buf); $i++){
push(@bufs, substr($buf, $i, 1));
}
return(@bufs);
}

これより高速な方法ってありますかね?
227デフォルトの名無しさん:int 2ch =5年,2005/04/02(土) 16:54:51
正規表現使うならこうだろ
@buf = split(//, $data)
228デフォルトの名無しさん:int 2ch =5年,2005/04/02(土) 16:59:38
>>224が何を見ていたのかが気になる・・・
229222:int 2ch =5年,2005/04/02(土) 17:03:29
>>227
なるほど・・・
ありがとうございました
230デフォルトの名無しさん:int 2ch =5年,2005/04/02(土) 17:07:52
ActivePerl5.8で下のコードを実行すると
結果が6.2となるはずが、6.19999...となってしまいます。
なぜだか教えてください。お願いします。

コード:
use FileHandle;
my $s=11;
my $e=77;
my $fo = new FileHandle "> result.txt";
if(defined $fo){
for(my $i=$s;$i<=$e;$i++){
for(my $h=1.1;$h<10;$h+=0.1){
print $fo $h,"\n";
}
}
$fo->close();
}else{print "open failed.\n";}

結果:
省略
6
6.1
6.1999999999
6.2999999999
231デフォルトの名無しさん:2005/04/02(土) 17:13:51
有効な桁が決まってるなら下駄を履かせろとあれ程言っておいたのに…
232デフォルトの名無しさん:2005/04/02(土) 17:19:19
すいません、細かい事は気にしないで
↓の様にしておきます。
:
for(my $h=11;$h<100;$h+=1){
 print $fo $h,"\n";
}
:
233デフォルトの名無しさん:2005/04/02(土) 17:35:39
printf $fo "%.1f\n",$h;
234デフォルトの名無しさん:2005/04/02(土) 23:49:10
質問です。
use File::Copy;
move($file, $dir."/".$file);
というようなファイルの移動したいとき、
WindowsのActivePerlだと"/"を"\\"に変えればOKだと思いますが、
$fileや$dirにスペースなどの特殊文字が含まれる場合、うまくコピーできなくて困っています。
このような場合は、どうすればいいのでしょうか?
235デフォルトの名無しさん:2005/04/03(日) 00:10:57
下駄の用意はいいか!!
わかる人いるかなあ
236デフォルトの名無しさん:2005/04/03(日) 00:19:25
>>225, >>228
2chのコメント部分のインデントがいつもと違う気がしたんだけど
風邪ひいて熱があるので俺の頭がおかしくなってるだけだと思う。
わけの分からん事を言ってすまん。
237デフォルトの名無しさん:2005/04/03(日) 08:24:13
>>234
#--- movetest.p ---
#!/usr/local/bin/perl -w
use strict;
use File::Copy qw(move);

local *SRC;
opendir SRC, my $src_dir = './foo' or die $!;
my @file = grep !/^\.\.?\z/, readdir SRC;
closedir SRC;

my $dst_dir = './bar baz';
move("$src_dir/$_" => "$dst_dir/$_") for @file;
__END__

T:\>dir /B /O:N /S
T:\bar baz
T:\foo
T:\movetest.p
T:\foo\勝敗表

T:\>perl movetest.p

T:\>dir /B /O:N /S
T:\bar baz
T:\foo
T:\movetest.p
T:\bar baz\勝敗表
238デフォルトの名無しさん:2005/04/03(日) 19:53:34
>>106
s{(\(S(\d\d)/\d\d/\d\d\))}{ 1925+$2 . $1}eg;
239デフォルトの名無しさん:2005/04/03(日) 22:43:00
だせーw
240デフォルトの名無しさん:2005/04/04(月) 10:40:36
>>230
perlfaq4に書いてある
241デフォルトの名無しさん:2005/04/04(月) 11:01:28
教えて下さい。

ActivePerl5.8を使っているのですが、
日本語テキストの変換で
「サーバー」を「Server」などに変換する際に
$text_data = "サーバー";
という様な値(文字)が入っていた場合
$text_data =~ s/サーバー/Server/;
と記述するとエラーになります。
どうも「−」の文字が何かのコードに引っかかるようです。
他にもそのような日本語があるようですが、
そのような場合はどうすれば良いのでしょうか?
242デフォルトの名無しさん:2005/04/04(月) 11:33:21
use UTF8;
243デフォルトの名無しさん:2005/04/04(月) 13:13:59
244デフォルトの名無しさん:2005/04/04(月) 20:11:37
現在掲示板を作成しています。
記事一つ一つが採点式となっていて、観覧側がその記事に点数をつけていくもの
なんですが(貼り付けた画像の採点等)、
点数は100 75 50 25 0があり、ラジオボックスで選択し、投票させ、点数は
獲得した合計点数/投票数とします。
ログの記録は
記事番号<>名前<>題名<>コメント<>点数合計<>投票数<>計算後の合計<>
とし、書き込みログと投票ログを同じファイルに書き込みたく、
どの記事に投票したかの判断は記事番号でしようと思います。
ラジオボックスのname属性を$num(記事番号)としています。
ここで質問なんですが、ログを書き込む際、投票した記事番号の
点数合計<>投票数<>計算後の合計<>だけを上書きさせるにはどうしたらいいでしょう?
〜番の記事の点数だけを上書きさせるということです。
言いたい事があまりうまく表現できないのですが・・お願いします。
245デフォルトの名無しさん:2005/04/04(月) 20:24:46 BE:23292443-
>>244
全部読んで全部書く。
246244:2005/04/04(月) 20:34:45
>>245
全て読み込んで全て上書きということでしょうか?
247デフォルトの名無しさん:2005/04/04(月) 20:37:22
>>244
use Fcntl qw/:seek/;

open(fd, "+<$logFile");
seek(fd, 記事のレコードの先頭, SEEK_SET);
my @rec = split(/<>/, scalar(<fd>));#4,5,6
my $A = hex $rec[4];
my $B = hex $rec[5];
my $C = hex $rec[6];

# $A, $B, $C に対して何らかの操作

$rec[4] = sprintf("%04x", $A);
$rec[5] = sprintf("%04x", $B);
$rec[6] = sprintf("%04x", $C);
close(fd);
248247:2005/04/04(月) 20:39:16
悪い、ミスッた・・・

Closeする前に
seek(fd, 記事のレコードの先頭, SEEK_SET);
print fd (join('<>', @rec));
249244:2005/04/04(月) 21:37:49
>>247
>>248
記事のレコードの先頭とはどういったものでしょうか?
恐らく数字が入ると思うのですが・・・この場合$numでしょうか?
seekというものを使ったことがないので今日調べたのですがKENT WEBやとほほのWWW入門
にも記載されてなかったので・・
# $A, $B, $C に対して何らかの操作
というのは投票の計算等の処理ですね??
250デフォルトの名無しさん:2005/04/04(月) 21:47:15
251244:2005/04/04(月) 22:02:53
>>250
ありがとうございます。
ファイルの途中から読み書きするってことですね。
seek(fd, 4, SEEK_SET);
これでfd内の前から5つ目ということになるのでしょうか?
それとも配列変数のように0は入らないで4つ目ということでしょうか?
記事番号<>名前<>題名<>コメント<>点数合計<>投票数<>計算後の合計<>
この場合、4バイト目はコメントなのか点数合計なのかということです
252デフォルトの名無しさん:2005/04/04(月) 22:29:34
とりあえず>>1を嫁。
253デフォルトの名無しさん:2005/04/04(月) 22:32:56
>>251
ちゃんと >>250 読みました?
第二引数はファイルポインタです
あとseekを使う方法はキーとなる情報がファイルポインタ(もしくは行数など)
に対応していないと使えないので、
配列に全部読み込んで処理したほうがいいかも知れないです
254デフォルトの名無しさん:2005/04/04(月) 22:38:00
>>244-251
http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlfaq5.html#How_do_I_change_one_line_in_a_fi

local(*LOG, *TMP, *LOCK);
open LOCK, '>' . $lockfile or die $!;
flock LOCK, 2;
open LOG, '<' . $logfile or die $!;
open TMP, '>' . $tmpfile or die $!;
while (<LOG>) {
  if (/^$num<>/) {
    chomp;
    my @field = split /<>/;
    ...
    $_ = join '<>', @field, "\n";
  }
  print TMP $_;
}
close TMP;
close LOG;
rename $tmpfile => $logfile or die $!;
close LOCK;
255デフォルトの名無しさん:2005/04/04(月) 23:06:56
すげえ、マニュアル読む代わりにここで質問か。
256デフォルトの名無しさん:2005/04/04(月) 23:19:09
>>255
似たようなことをやってるプログラムのコードを見つけてきて
それを読むかわりに、ここで質問でもある。
257デフォルトの名無しさん:2005/04/04(月) 23:20:01
他スレで質問したけど、すれ違いだったようなのでここで
質問します

perl5.0で携帯から、絵文字入力があったばあい(バイナリ16進で4桁)に、それを検知して
s-jisの(アスキー文字の16進4桁)に変換したいのですが、
下記の、正規表現でできると聞きました。実際に使用するとうまく変換されているようなのですが、
なぜこれで変換できるのかわかりましえん。わかるかたおながいします

s/\G((?:[\x80-\x9F\xE0-\xF2\xF4-\xFC][\x40-\x7E\x80-\xFC]|[\x00-\x7F]|[\xA1-\xDF])*)([\xF3]
[\x40-\x7E\x80-\xFC])/$1.'['.unpack('H4', $2).']'/ego;
258未承諾広告※ ◆TWARamEjuA :2005/04/05(火) 00:35:26
>>257
人に訊いているようでは・・・(哀)
259デフォルトの名無しさん:2005/04/05(火) 00:49:16
見たままだが…どの部分がわからんのか言ってみそ
260デフォルトの名無しさん:2005/04/05(火) 01:02:18
>>257
http://www.din.or.jp/~ohzaki/perl.htm#JP_Match
http://www.au.kddi.com/ezfactory/tec/spec/img/typeD.pdf
http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlre.html

s{
  \G

  # $1
  (
    (?: # Shift_JIS の "1文字"
      [\x80-\x9F\xE0-\xF2\xF4-\xFC][\x40-\x7E\x80-\xFC] # 2 byte 文字
    |  [\x00-\x7F] # ASCII
    |  [\xA1-\xDF] # 半角カタカナ
    )*
  )

  # $2
  ( [\xF3][\x40-\x7E\x80-\xFC] ) # EZweb の絵文字 (の一部)
}
{ $1 . '[' . unpack('H4', $2) . ']' }egx;
261デフォルトの名無しさん:2005/04/05(火) 01:56:42
>>259
>>260

とりあえずありがとう

わからなかったのは、
$1 の Shift_JIS の "1文字 がわからなかったです。
これが絵文字の一部だと思ってたので、そうなると、桁数が合わず混乱してました
絵文字は$2の部分だったんですね〜
ご丁寧にありがとうございました。
262デフォルトの名無しさん:2005/04/05(火) 10:45:18
>>243
レスが遅くなりました、ありがとうございます。
263244:2005/04/05(火) 14:33:36
とりあえず
$TOHYO = $FORM{"$num"};

use Fcntl qw/:seek/;

open(fd, "+<$LOGFILE");
seek(fd, 0, SEEK_SET);
my @rec = split(/<>/, scalar(<fd>));
my $ALL = hex $rec[7];
my $KAZU = hex $rec[8];
my $GOUKEI = hex $rec[9];

$ALL = $rec[7]+$TOHYO;
$KAZU = $rec[8]+1;
$GOUKEI = $ALL / $KAZU;

$rec[7] = sprintf("%d", $ALL);
$rec[8] = sprintf("%d", $KAZU);
$rec[9] = sprintf("%d", $GOUKEI);

seek(fd, 0, SEEK_SET);
print fd (join('<>', @rec));
close(fd);
として、投票のラジオボックスのname属性は記事番号にするため$numとしています。
それを$TOHYO = $FORM{"$num"};
で、TOHYOに点数を入れています。
これでとりあえず記事が1つの状態で自分が思っていた動作はしてくれていますが、
記事を増やして投票ボタンを押すと、投票した記事の上の記事に投票(1に投票すると2に投票)
され、更にその投票させたかった記事のログが無茶苦茶になってしまいます。
原因を探してみたのですがわかりませんでした。
アドバイスお願いします(゚∀゚)
264デフォルトの名無しさん:2005/04/05(火) 15:17:29
≫記事のログが無茶苦茶になってしまいます。

詳しく!  ( ゚∀゚)σ)´Д`)
265デフォルトの名無しさん:2005/04/05(火) 15:47:06
>>263
> アドバイスお願いします(゚∀゚)

あきらめる。
266247:2005/04/06(水) 00:26:58
>>263
hex & sprintf("%04x", ...) 使ってる理由わかってますよね?
新しく記事を追加する際にも、四桁の16進数文字列にエンコードしないと、
変更した時に長さが変わるんだから可笑しくなるのは当たり前田のプラモデル
267デフォルトの名無しさん:2005/04/06(水) 00:55:16 BE:188546887-#
クラッカー
268デフォルトの名無しさん:2005/04/06(水) 10:33:12
すみません。質問です。
未だにActivePerl 5.005_03 + Jperl を使用しています。
少し前(一ヶ月ぐらい前?)までは、PPM(1.1.2)が正常に使えていたのですが、
今日、PPMを使おうとしたら、
 >PPM interactive shell (1.1.2) - type 'help' for available commands.
 >PPM> verify
 >Error verifying CGI-XMLForm: Could not locate a PPD file for CGI-XMLForm
となってしまいました。
これは、ついにbuild522のPPMリポジトリがなくなってしまった、
ということなのでしょうか?
269244:2005/04/06(水) 10:51:37
use Fcntl qw/:seek/;

open(fd, "+<$LOGFILE");
seek(fd, 0, SEEK_SET);
my @rec = split(/<>/, scalar(<fd>));
my $ALL = hex "$rec[7]";
my $KAZU = hex "$rec[8]";
my $GOUKEI = hex "$rec[9]";

$ALL = $rec[7]+$TOHYO;
$KAZU = $rec[8]+1;
$GOUKEI = $ALL / $KAZU;

$rec[7] = sprintf("%04x", $ALL);
$rec[8] = sprintf("%04x", $KAZU);
$rec[9] = sprintf("%04x", $GOUKEI);
$rec[7] = hex "$rec[7]";
$rec[8] = hex "$rec[8]";
$rec[9] = hex "$rec[9]";
seek(fd, 0, SEEK_SET);
print fd (join('<>', @rec));
close(fd);
書き込まれた数字が16進数のままなので、hexで書き込む際に16進数を10進数に変換させました。
>>266
記事書き込みの処理部分でも書き込む値を16進数にしなければいけないということでしょうか?
>>264
投票した記事に点数は加算されず、存在する記事の一番上に加算され(NO3まであるとNo3に)
その一つ下の記事のログの、最初の二つ(この場合記事Noと名前($num<>$NAME<>))が消えて、表示の所でズレるんです。
(記事Noのところにコメントが入ったり)
投票する記事の指定ができていないと思います・・・投票のラジオのnameを$numにしているので、
No〜の記事の点数を変更するという指定はできないでしょうか?
問題ばかりですみません できる限り自分でやってみるつもりですがよろしくお願いします
270デフォルトの名無しさん:2005/04/06(水) 11:31:59
>>269
> CGIについての質問は板違いです。WEBプログラミング板でどうぞ。
> CGIとPerlの区別がつかない人もWEBプログラミング板に行ってください。
> (WEBプログラミング板 http://pc5.2ch.net/php/ )

271デフォルトの名無しさん:2005/04/06(水) 12:50:08
この前偶然にもテレビに出てた小飼弾を見てしまった俺は必ずPerlハカーになれるはず
272デフォルトの名無しさん:2005/04/06(水) 13:49:50
だよねー。あれ見たら自信付いちゃうよネ。
273デフォルトの名無しさん:2005/04/06(水) 14:02:31
>>271-272
詳しく
274デフォルトの名無しさん:2005/04/06(水) 14:12:50 BE:47137627-#
nyで落とせ
275デフォルトの名無しさん:2005/04/06(水) 14:27:43
それはイヤ
276260:2005/04/06(水) 14:47:41
すいませんが、また先生方に質問します。

AUの携帯用の絵文字対応の掲示板を作成しているのでが、
掲示板に、絵文字が入力された場合、16進の2バイトでperlにわたってきます。
それを絵文字の部分だけ検知して、[f0c0]のように変換することはできたのですが、
それを、さらにhtmlのタグに変換しようと、下記の置換文を作成したのですが、うまく動きません。

$value に”あいうえお+絵文字”のように絵文字が1つの場合には、タグに変換されるのですが
”あいうえ+絵文字+かきくけ+絵文字”のように絵文字が2つ以上になると、一番最後の絵文字しか
変換されません。全ての絵文字をタグに変換したいのですが、わかるかたおながいします

命令文
$value =~ s/\G((?:[\x80-\x9F\xE0-\xF5\xF8-\xFC][\x40-\x7E\x80-\xFC]|[\x00-\x7F]|[\xA1-\xDF])*)
(\[[f][0-9][0-9a-fA-F][0-9a-fA-F]\])/$1.'<img localsrc="'.EMOGET($2).'" alt="0">'/ego;

参考
[\x80-\x9F\xE0-\xF5\xF8-\xFC][\x40-\x7E\x80-\xFC] → 2バイト文字
[\x00-\x7F] → ascii
[\xA1-\xDF] → 半角かな
[[f][0-9][0-9a-fA-F][0-9a-fA-F]\] → 絵文字を [f0ba]の形に変換したもの
EMOGET($2) → 絵文字番号に変換するサブルーチン

277デフォルトの名無しさん:2005/04/06(水) 19:33:28
>>269
おいおいおいおいおい、折角sprintfで固定長の16進数値にしたのに、
hexで戻して書き込んだら意味ないでしょw

要は、桁が増えてもバイト長が変わらなきゃファイルの途中で上書き出来るってことなのよ
278260:2005/04/06(水) 19:53:32
>>276は他のやりかたで解決しますた
失礼すマスタ
279デフォルトの名無しさん:2005/04/07(木) 11:29:58 BE:68314728-
最近のこのスレの進行スピードみてると、
なんだかPerlの廃れ具合が現れているような…

好きなんだけどな、Perl。
280デフォルトの名無しさん:2005/04/07(木) 12:15:40
高い位置から人々の活動を見下ろして論評する超越者が現れました。
281デフォルトの名無しさん:2005/04/07(木) 12:26:35
つまらん
282デフォルトの名無しさん:2005/04/07(木) 13:07:26 BE:239098087-
>>280
うん、確かにそうだね。
ごめんね、単なるボヤキだからスルーしといて。
283デフォルトの名無しさん:2005/04/07(木) 13:07:44
ま、これからはawkだよな。
284デフォルトの名無しさん:2005/04/07(木) 13:17:14
aho好きです
285デフォルトの名無しさん:2005/04/07(木) 13:59:36
UTF16で書かれたファイルを開いて、いろいろ処理するにはどうしたら
いいのでしょうか?

use open IN => ":utf-16";

と書くとファイルが開けなくなってしまいます。
286デフォルトの名無しさん:2005/04/07(木) 14:02:43
環境を書くのを忘れました。
環境はWindows2000のアクティブパールの最新版を使っています。
287デフォルトの名無しさん:2005/04/07(木) 21:24:00
>>279
なんとなくわかる
ここの所仕事でPHPやらされてるし
288デフォルトの名無しさん:2005/04/07(木) 21:28:13
Perlって、VisualStudioバリの統合開発環境ないんですか?
289デフォルトの名無しさん:2005/04/07(木) 21:52:16
>>283
> ま、これからはawkだよな。

最近awk使いまくりです。
290デフォルトの名無しさん:2005/04/07(木) 22:06:05
Perl Factoryっていうのはどだろ。
メモリ食うわCPU時間食うわUTF8ファイル食わせるとエラー起こるから使ってないけどな。。
Visulaに食わせられるプラグインもあったけど、あれはどうなんだろ。
291デフォルトの名無しさん:2005/04/07(木) 22:18:15
パールで配列を使うときに、配列の値からindexを見付ける方法ってありますか?
292デフォルトの名無しさん:2005/04/07(木) 22:38:37
>>291
~$ perl -e '@ar=qw(a b c d); print \@ar, "\n";'
ARRAY(0x10133cbc)

アドレス出てるじゃん。
293デフォルトの名無しさん:2005/04/07(木) 22:43:14
配列内の特定の値が何番目か知りたいんですよ。
294デフォルトの名無しさん:2005/04/07(木) 22:55:04
いったんハッシュにつっこんじゃうのは?

@array = qw( boo foo woo );
%hash = map{$_, $i++} @array;
print $hash{'foo'}; #=> 1
295デフォルトの名無しさん:2005/04/07(木) 23:09:52
なるほど・・・。
やっぱり関数はないんですねぇ。
参考になりました。ありがとうございます。
296デフォルトの名無しさん:2005/04/07(木) 23:16:22
>>294
何回もやるならハッシュ作る価値があるけど、一度だけとかなら
grepかなんかで頭から探した方が有利かも。

あと@hash{@array} = 0..$#arrayの方がたいていはやいよ。
297デフォルトの名無しさん:2005/04/08(金) 03:25:44
>>291
パールでATMの扉をこじ開けるにはどうすればよいですか?
298デフォルトの名無しさん:2005/04/08(金) 06:21:19
>>297
ニュースではいつも「バールのようなもの」とぼかして表現していますよね。
本当はバールでは開かないのかも知れません。
299デフォルトの名無しさん:2005/04/08(金) 17:40:08
教えてください。

普通の掲示板の機能にアイコンをつけるのに
<FONT SIZE=\"2\" COLOR=\"$icon!!ココガワカラナイ!!">$icon<FONT SIZE=(ry
とあるのですがname=iconとかvulue=./icon/icon1.gifとかそういった事は出来ました。

解らないのが、ラジオボタンでチェックを入れるとvulueで指定したリンク画像を表示させる
ということなのですが。
誰か教えてくれませんか?
300デフォルトの名無しさん:2005/04/08(金) 17:42:16
あ。299ですが。
4行目の文はprint " <td valign=\"top\" nowrap>
の続きです・・・ごめんなさい
301デフォルトの名無しさん:2005/04/08(金) 17:43:14
302デフォルトの名無しさん:2005/04/08(金) 17:44:12
あ。ごめんなさい・・・。
逝って来ます
303デフォルトの名無しさん:2005/04/08(金) 22:10:46
ページAの送信ボタン(submit)を押して、返ってきたHTMLソースを受け取るやり方を
教えてください。
ページAのFORM部品や値はわかっています。

ページAのFORMに入力する内容は決まっているので、作業を自動化したのです。

宜しくお願いします。
304デフォルトの名無しさん:2005/04/08(金) 22:13:22
>>303
>>1

しかも、言ってる意味がわからん。
305デフォルトの名無しさん:2005/04/08(金) 22:28:50

@dir_list = getfile('/usr/local/share');

という感じで、ディレクトリを与えて、そのディレクトリにある
ファイルのリストを取得できるモジュールはありませんか?
306303:2005/04/08(金) 22:37:12
>>304
携帯からなんでスマソ。
LWPで解決出来そうです。スレ汚してわるかた。
307デフォルトの名無しさん:2005/04/08(金) 23:04:47
>>305


sub getfile {
my(@buf) = ();
opendir(DIR, $_[0]);
@buf = readdir(DIR);
closedir(DIR);
return(@buf);
}
308デフォルトの名無しさん:2005/04/09(土) 09:54:55
>>305, >>307
グロブじゃいかんのか?
309デフォルトの名無しさん:2005/04/09(土) 13:32:13
くだらない質問ですいません。
SMTP、POP3、FTP、DNS、などのモジュールはNetクラスの
サブクラスになっているのにHTTPだけはLWPなんですか?
310デフォルトの名無しさん:2005/04/09(土) 14:36:01
311デフォルトの名無しさん:2005/04/09(土) 23:55:28
>>310
なるほどLWPの中でNet::HTTPを使っているわけですね。
直にNet::HTTPを使ってる人って聞いたことないけど。
312デフォルトの名無しさん:2005/04/10(日) 15:44:29
質問です。
File::Findを使用して、あるディレクトリ直下のすべてのファイルに対して
ある処理をさせようとおもい、下のような感じで書いてみました。

$hogehoge = ".";
find \&hoge,$hogehoge;

sub hoge{
  if(-f $File::Find::name){
   なんか処理
  }else{
   ディレクトリなのでスルー
  }
}
ところがサブディレクトリ配下のファイルに対しては、-fの結果が
すべて偽(1だっけ)となってしまいました。
e.g.) ./hoge/foo.txtはディレクトリと判定される

-fはカレントディレクトリで使用すべきものなのでしょうか?
もしその場合、何かうまい解決方法はないでしょうか?
313デフォルトの名無しさん:2005/04/10(日) 15:53:28
じゃあファイルごとにカレント移動させりゃいいじゃん。
314デフォルトの名無しさん:2005/04/10(日) 16:20:05
>>313
それではせっかくFile::Find::nameで相対パスがでてるのに
もったいないような気がします。それに移動してまたルートに
戻る分の処理が増えますしね。
315デフォルトの名無しさん:2005/04/10(日) 16:32:47
俺、File::Findは使ったこと無いけど、今、perldocみてみた感じだと、
$File::Find::dirにchdirしてファイルの一覧を取得しつつ処理が進む
ようなことが書いてあるね。(no_chdirオプションを指定しなければ)

で、結論から言うと、 $File::Find::nameの代わりに、$_ を使うと
うまくいくんじゃないかな? というふうに読めるけど。
ちょっとperldoc読んでごらんよ。
316デフォルトの名無しさん:2005/04/10(日) 16:43:09
>>315
うまくいきました!
ついでにperldoc呼んでみます。
ありがとうございました。
317デフォルトの名無しさん:2005/04/10(日) 17:58:33
って、優香、最初に読めよw
318デフォルトの名無しさん:2005/04/11(月) 00:07:14
Tkの日本語表示で困ってます。WinXP, ActivePerl 5.8.6: 811, Tk 804.027です。
なぜかメニューの一段目(?)はSJISでないと表示されません。しかし、特定の文字群(?)が
使えないようなのです。例えば、下のスクリプトで、「ほげ」を「ツール」にすると、
「bad menu entry index ... Tk.pm line247.」と怒られてしまいます。
何かよい回避策はないものでしょうか?

use Encode; # スクリプトはEUC
use Jcode;
use Tk;
use strict;
my $mw = MainWindow->new;
my $mb = $mw->Menu(-type => 'menubar');
$mw->configure(-menu => $mb);
my $c1 = $mb->cascade(
-label => Jcode->new('ほげ','euc')->sjis, # ここが問題!
-font => "system",
);
$c1->cascade(
-label => decode('euc-jp','二段目'),
-font => 'system',
);
$mw->Label(
-text => decode('euc-jp','メニューの一段目以外はdecodeでOK'),
-font => 'System'
)->pack();
MainLoop;
319デフォルトの名無しさん:2005/04/11(月) 03:34:43
perl6の最新情報が日本語で得られるページ、ないですか?

あと、perl6はperl5のスクリプトは動かないと聞いたのですが、
そんな非道い話、ウソですよね?
320デフォルトの名無しさん:2005/04/11(月) 04:17:10
perl以前に、無茶な話かもしれないのですが、
@state = ("$a == $b and $c != $d","$a == $c or $e eq $f" )
foreach $temp (@state){
if ($temp){
$sw = "on";
}
}
といった感じに、関係式を事前に用意しておいて、後からまとめて条件を
評価す方法はありますでしょうか?
よろしくお願いします。
321デフォルトの名無しさん:2005/04/11(月) 05:33:51
evalでできるんじゃない? 眠い、、、
322デフォルトの名無しさん:2005/04/11(月) 08:31:28
>>320
my $f = eval 'sub{ ' . join(' or ', @state) . '}';

$sw = 'on' if $f->();
323デフォルトの名無しさん:2005/04/11(月) 20:54:54
do 文でも行けるかな。
32480.251.192.61.east.flets.alpha-net.ne.jp:2005/04/11(月) 20:59:27
えぇけっしとるのぉ(*´Д`)ハァハァ


うはっwwwおkwwwうえっwww??
325デフォルトの名無しさん:2005/04/11(月) 21:30:20
4桁の数字に同じ数字が2つ以上含まれているようなものに
マッチする正規表現を教えてください。
326デフォルトの名無しさん:2005/04/11(月) 21:47:01
>>319
英語ではなぜ駄目なのですか?
327デフォルトの名無しさん:2005/04/11(月) 21:48:46
>>326
スレ違い
328デフォルトの名無しさん:2005/04/11(月) 21:49:18
>>325
なかなか面白い問題を出してくれまね。
ちょっと考えてみま〜す
329デフォルトの名無しさん:2005/04/11(月) 21:49:57
>>327
レス違いhw
330デフォルトの名無しさん:2005/04/11(月) 21:55:33
自己レス
/(\d).*\1/
でできました。お騒がせしました。
331デフォルトの名無しさん:2005/04/11(月) 22:15:50
>>330
それだと4ケタじゃない(11とか1234565とか)、数字だけじゃない(ab1cd1)
といった場合でもマッチするがそれでいいのか?
332デフォルトの名無しさん:2005/04/11(月) 22:23:06
富豪的解法。

print "$_ => ", /^\d{4}\z/ && keys %{{ map { $_ , 1 } /./g }} < 4 ? 'ok.' : 'no', "\n" for @ARGV;
333デフォルトの名無しさん:2005/04/11(月) 22:25:03
>>331
対象は数字4桁だけなんでこれでOKです。ありがとうございました。
334デフォルトの名無しさん:2005/04/11(月) 22:36:47
遅かったか
/(?=\d{4})\d*(\d)\d{0,2}\1/
335デフォルトの名無しさん:2005/04/11(月) 22:52:20
Perlでの正規表現で

苗字,1 "名前A",3 "名前B",5 "名前C",7 "名前D"
例)
山田,1 "太郎",3 "ひろし",5 "浩二",7 "ほげ"

これを苗字と名前だけを変数に代入したいのですが、スマートに書くにはどうすればよいのでしょうか?
336デフォルトの名無しさん:2005/04/11(月) 22:57:11
>>335
補足です。
名前は複数います。数は1個以上確定。
苗字と名前に分けて抽出したい。
337デフォルトの名無しさん:2005/04/11(月) 23:09:34
>>335-336
my $line = '山田,1 "太郎",3 "ひろし",5 "浩二",7 "ほげ"';
my($family) = $line =~ /^([^,]+)/;
my @name = $line =~ /\d+\s*"([^"]+)"/g;
print join ' / ', $family, @name;
338デフォルトの名無しさん:2005/04/11(月) 23:12:19
>>335
なにが欲しいのかさっぱりわからん。せめてその例について
処理が終わったときなんという変数がどういう値になってる
ことを期待しているか明示してくれ。
339デフォルトの名無しさん:2005/04/11(月) 23:20:51
>>338
あーごめん。

結果は
$family  に  山田
@name  に  太郎  ひろし 浩二  ほげ
になればOK

理解できました。ありがとうございます。
340デフォルトの名無しさん:2005/04/12(火) 09:01:44
CPAN code search by gonzui
http://cpansearch.bulknews.net/

だってさ。
341デフォルトの名無しさん:2005/04/12(火) 09:51:17
検索遅いのはマシンのせい?gonzuiのせい?
342デフォルトの名無しさん:2005/04/13(水) 00:54:11
Tkモジュールで黒い窓が開かないようにする方法ってありますか?
343デフォルトの名無しさん:2005/04/13(水) 01:03:29
>>342
wperl.exe
344デフォルトの名無しさん:2005/04/13(水) 12:14:58
>>343
どうもありがとうございました。
345デフォルトの名無しさん:2005/04/14(木) 00:46:41
Tkモジュールで社会の窓が開かないようにする方法ってありますか?
346デフォルトの名無しさん:2005/04/14(木) 01:09:51
>>345
糊付けしとけ
347デフォルトの名無しさん:2005/04/14(木) 18:06:56
えーと、すみません、Perl5.8.6で、以下のスクリプトを実行しました。

use utf8;
my($str) = "kasuテ";
test($str);

sub test {
my($tmp) = @_;
my($offset) = 1;
$len = length($tmp);
for ($i = 0 ; $i <= $len ; $i++) {
print substr($tmp, $offset, 2), "\n"; #substr A
print substr($tmp, $offset, 1), "\n"; #substr B
}
}
348デフォルトの名無しさん:2005/04/14(木) 18:07:19
>>347の続きですが、これは、結果が、
 as
 a
 ...
と返ってくるはずが、
 as
 as
 ...
と返ってきます。

Substr Aをコメントアウトすると、正常に動きます。
また、$offsetを0か2にすると、やはり正常に動きます。
どうやら、LENGTHの異なるsubstrを、日本語の混在したUnicode文字列に対して、
複数回実行すると、なにか前のLENGTHが残ってしまうようです。

これって、私の環境だけの話でしょうか?
Win2000SP4上の、ActivePerl5.8.6での話です。
ActivePerl5.8.4では、正常に動いていました。
できれば、他の環境の方の検証キボンヌ。
349デフォルトの名無しさん:2005/04/14(木) 18:30:29
>>347
うちはまだAcrivePerl 5.8.4.810 (WindowsXP SP2)で問題がない。
811入れるとおかしくなるってこと?
350デフォルトの名無しさん:2005/04/14(木) 18:36:05
>>349
5.8.4だと問題なかったっす。
5.8.6だとおかしいんですよ。

回避策としては、LENGTHの違うsubstrを複数回やるときには、
同じ変数に対して実行しないで、変数を別の値に代入すると回避できました。

print substr($tmp, $offset, 2), "\n"; #substr A
$tmp2 = $tmp;
print substr($tmp2, $offset, 1), "\n"; #substr B
てな具合に。

$offsetが0とか2の時には正常に動くのが、なんとも。。。
351デフォルトの名無しさん:2005/04/14(木) 18:48:21
>>347をコピペで実行したけど問題無かったよ
This is perl, v5.8.6 built for MSWin32-x86-multi-thread
352デフォルトの名無しさん:2005/04/14(木) 19:05:09
>>351
ありがとうございます。

確認してみましたが、あのままのコピペだと通りますね、確かに。
このスクリプトを、utf-8で保存しなおして実行してみてもらえますか?
或いは、use utf8;を取って、use encoding "cp932"と差替えていただくとか。
そうすると、再現するかと。
353デフォルトの名無しさん:2005/04/14(木) 19:08:01
スクリプトをutf-8で書くときって、
use utf-8は宣言しますよね。。。

ちなみに、SJISやEUCで書いて、
use encoding ほげほげを外しても、
正常に動くみたいです。
use encodingすると動かなくなります。
354デフォルトの名無しさん:2005/04/14(木) 19:34:00
print "hoge";
print("hoge");

どう違うんですか?
また、どっちが正しいんですか?
355デフォルトの名無しさん:2005/04/14(木) 20:04:40
おなじ
どっちも正しい
356349:2005/04/14(木) 21:12:26
>>348
cygwinの5.8.6で、あなたと同じ症状の発症を確認。
併用することがあるんでちょっとこわいね。
357デフォルトの名無しさん:2005/04/14(木) 22:19:57
>>354-355
ちなみに、どっちがおすすめですか、という質問に対しては、
あなたのお好きなようにどうぞ、というのがPerl回答。
358デフォルトの名無しさん:2005/04/15(金) 02:24:52
ここ最近使い始めてみたんですが、
Perl言語 って素晴らしいですね。
設計がとても優れているのでしょうね。
359デフォルトの名無しさん:2005/04/15(金) 02:47:28
>>358
> 設計がとても優れているのでしょうね。

いえ、行きあたりばったりです。
360デフォルトの名無しさん:2005/04/15(金) 06:28:38
このあいだPerlの神と会ってきた。
・・・やっぱ極めると凄まじいんだなぁ。格の違いを思い知らされた。
361デフォルトの名無しさん:2005/04/15(金) 06:45:22
気に入らない人は Ruby に乗り換えてます
362347:2005/04/15(金) 08:28:43
>>356
確認ありがとうございます。
そうですか、やはり他の環境でも出るんですね。

他にも、どうも5.8.6は、少なくともActivePerlでは日本語処理が安定していない
(5.8.4だと出力時に問題ないのが、5.8.6では"wide character云々が出る)
感じがするので、5.8.4に戻しました。
363デフォルトの名無しさん:2005/04/15(金) 08:47:05
>>358
オブジェクト指向もどきの部分なんて、すごく設計が優れてますよ
364デフォルトの名無しさん:2005/04/15(金) 12:26:29
>>363
ちょちょいとサンプルを書いてもらえませんかね?
365デフォルトの名無しさん:2005/04/15(金) 16:06:47
>>363
> オブジェクト指向もどきの部分なんて、すごく設計が優れてますよ

そうですよね!!

これを考えたやつは神だ!! と思いましたもん。
これを考えたやつは、乳母車を軌道投入することだってできる
に違いないと思いましたもん。
366デフォルトの名無しさん:2005/04/15(金) 18:30:40
パッケージとモジュールとクラスの違いが良く分からないのですが教えて下され
367デフォルトの名無しさん:2005/04/15(金) 18:33:20
おなじ
使い方によって呼ばれ方が違うだけ
368デフォルトの名無しさん:2005/04/15(金) 18:40:25
ひとつのファイルの中に複数のモジュールを書けるのか?
369デフォルトの名無しさん:2005/04/15(金) 18:49:14
370デフォルトの名無しさん:2005/04/15(金) 19:07:55
>>366
> パッケージとモジュールとクラスの違いが良く分からないのですが教えて下され

Perlでは、クラスをパッケージを使って実装してある。
モジュールは、他のプログラムから利用されるプログラムを収めた
ファイル群のこと。
371デフォルトの名無しさん:2005/04/15(金) 22:18:25
>>368
書けるよ
372デフォルトの名無しさん:2005/04/15(金) 22:33:01
>>364
package A;
sub new {
$pkg = shift;
$data = {
"no1" => "";
}
bless $data, $pkg;
return $data;
}

sub setNo1 {
$pgk = shift;
$i = shift;
$pkg->{no1} = $i;
return $pkg;
}

-----------------------------

require A;
$test1 = A->new();
$test1->setNo1(1);
$test2 = A->new();
$test2->setNo1(2);
$test3 = A->new();
$test3->setNo1(3);
373デフォルトの名無しさん:2005/04/15(金) 22:33:23
>>365
もどき・・・
軽くけなしたつもりなんだけど・・・
オブジェクト指向もどき部分なんて、無理な建て増しって感じ
374デフォルトの名無しさん:2005/04/15(金) 23:30:54
>>373
乳母車を軌道投入って点でそれほど発言の意図に重大なすれ違いはないだろうから安心汁
375デフォルトの名無しさん:2005/04/15(金) 23:34:04
>>373
そこ、マジレスするとこちゃうで!!!
376デフォルトの名無しさん:2005/04/16(土) 04:11:36
lh7圧縮解凍するモジュールてどれ
377デフォルトの名無しさん:2005/04/16(土) 07:06:16
気に入らない人は Ruby に乗り換えてます
378デフォルトの名無しさん:2005/04/16(土) 09:05:48
質問です。

下記のソース中で、自作モジュールのSAMPLE.pmを使用してるのですが、
パッケージがmainからSAMPLEに変ると、
パッケージ名がSAMPLEのままになってしまいます。

標準モジュールのCGI.pmを使用するとこのような事はおこりません。

どこにその違いがあるのか、ご教授ください。
--------------------------------------

require "func.pl";
use SAMPLE;

$u = new SAMPLE;
$u->hoge();

&func_hoge(); # func.plの中に定義されているメソッド

--------------------------------------
これを実行すると
[Undefined subroutine &main::func_hoge called at ...]
となってしまいます。
パッケージ名(名前空間)がSAMPLEになっているからと思われます。
379デフォルトの名無しさん:2005/04/16(土) 09:21:49
>>378
EXPORT
380デフォルトの名無しさん:2005/04/16(土) 10:30:06
>>379

返答ありがとうございます。
調べてみたのですが、分かりませんでした。
JAVAのキーワードのprotectedに相当するものという印象を受けました。

JAVAの感覚で言いますと
普通にインスタンスを作成してメンバ関数を使用する。

という操作しか、自分はしてないと感じるのですが、
それだけで、なんで呼び出し元の、
名前空間が呼び出し先のものになってしまうのか・・。

ご指摘のEXPORTを使用する意味を教えて頂けないでしょうか?
381デフォルトの名無しさん:2005/04/16(土) 11:24:06
この順ならエラーにならないっていう意味か?

require "func.pl";

&func_hoge(); # func.plの中に定義されているメソッド

use SAMPLE;

$u = new SAMPLE;
$u->hoge();


382デフォルトの名無しさん:2005/04/16(土) 11:49:43
>>347
>>351だけどコピペ内容よく見てませんでした。。
勘違い&遅レスすいません

同じようなバグが5.8.3で修正されてたみたいですが
5.8.6でまた出ちゃったってことでしょうかね
ttp://66.102.7.104/search?q=cache:XWpWa41CD2MJ:naoya.dyndns.org/~naoya/mt/archives/000868.html+perl+5.8+substr+utf8+bug&hl=ja&lr=lang_ja
ttp://aspn.activestate.com/ASPN/docs/ActivePerl/lib/Pod/perl583delta.html#selected_bug_fixes
383デフォルトの名無しさん:2005/04/16(土) 11:54:35
>>381

返答ありがとうございます。

それでもエラーになりました。

推測ですが
どうもuseを使用すると、ソース中の記述より前にモジュールを読み込むようです。
ですので381さんが書いてくださったソースでも、
最初にSAMPLEモジュールが読まれ、
package名(名前空間)がSAMPLEになり、
その状態でrequireが実行されるので、
mainの名前空間にはfunc_hogeが読み込まれていないのだと思います。
384デフォルトの名無しさん:2005/04/16(土) 12:16:41
>>383

じゃこれがOKになるってこと?

require "func.pl";
use SAMPLE;
&SAMPLE::func_hoge();

それと、これだけだとどうなの?

require "func.pl";
&func_hoge();
385デフォルトの名無しさん:2005/04/16(土) 12:31:04
>>じゃこれがOKになるってこと?
>>require "func.pl";
>>use SAMPLE;
>>&SAMPLE::func_hoge();
はい、OKです。

require "func.pl";
&func_hoge();
これもOKです。

ただ、できれば以下のように、インスタンスのようなイメージで使用したいのですが・・。

$u = new SAMPLE;
$u->hoge();
386デフォルトの名無しさん:2005/04/16(土) 12:32:22
func.plの中でmain以外のpackageを宣言してるのでは?
それかfunc_hogeが定義されてないだけとか。
387デフォルトの名無しさん:2005/04/16(土) 12:35:01
ああ…時間差…orz
取り敢えずnew()が怪しいな。
388デフォルトの名無しさん:2005/04/16(土) 12:39:54
>>386

いえ、packageの宣言はSAMPLE内での一箇所のみです。
389デフォルトの名無しさん:2005/04/16(土) 12:49:08
>>388

SAMPLEの中でもrequireしてるとそうなるようだが。
理由はよくわからん
390デフォルトの名無しさん:2005/04/16(土) 13:05:40
返答ありがとうございます。

>>387

new()の内容は以下の通りです。

sub new{

my $class = shift;

my $self = {};

bless $self,$class;

return $self;

}

>>389

私の方でもSAMPLEの中からrequireを削った処、
期待通りの動作をしました。
ありがとうございます。
なぜでしょうかね・・。
391デフォルトの名無しさん:2005/04/16(土) 14:45:38
requireが対象のファイルに対して一度しか実行されないからじゃない?
SAMPLE内で呼び出されれば、そのパッケージにシンボルが登録されるからね。
バグって言うより仕様だね。

まあ、普通なら既に別のパッケージに読み込まれていたとしても
自動的にシンボルをインポートする様にすべきだろうけど。
次のバージョンに期待。
392デフォルトの名無しさん:2005/04/16(土) 17:09:42
× bless $self, $class;
  return $self;
○ my $ref = bless $self, $class;
  return $ref;
393デフォルトの名無しさん:2005/04/16(土) 18:02:10
>>381
以下のコードはちゃんと動くよ。

-- file: func.pl
#!/usr/bin/perl
sub func { print "this is func.\n"; }
1;
-- file: Sample.pm
package Sample;
sub new { return bless {}, shift; }
sub hoge { print "hoge is hoge\n"; }
1;
-- file: do.pl
#!/usr/bin/perl
require "func.pl";
use Sample;
my $u = new Sample;
$u->hoge();
&func();

たぶんtypoしてエラーになってたのと>>392の間違いを混同したんでしょう。
394デフォルトの名無しさん:2005/04/16(土) 18:40:09
>>393
だからそのSample.pmでもrequire "func.pl"; してたってことだろ。
395デフォルトの名無しさん:2005/04/16(土) 18:49:36
>>391
そのためのuseだろ。
396デフォルトの名無しさん:2005/04/16(土) 19:03:11
func.plもちゃんとpackage宣言して、必要ならシンボルをexportする。
397デフォルトの名無しさん:2005/04/17(日) 00:01:29
>>382
substrが爆弾か。ちと気にしとこ。
398デフォルトの名無しさん:2005/04/17(日) 09:38:29
みなさん、返答ありがとうございます。

>>だからそのSample.pmでもrequire "func.pl"; してたってことだろ。
その通りです。

391さんのおっしゃった内容が直接の原因かと思います。
ですので395,396さんのおっしゃったようにすべてuseで読み込むように
変更しようと思います。

ありがとうございました。
399デフォルトの名無しさん:2005/04/20(水) 00:21:57
すいません今日PERL始めた初心者なんですが、ちょっと質問させてください。

$○○○[$○○○]{△△△} = $□□□
$○○○++;

という構文はありえますか?いずれの変数、ハッシュ、配列なども事前に定義されていません。
ありえるとするなら、どういう構造なんでしょうか?
主に一行目のハッシュなんだか配列なんだかよくわからないモノについて聞きたいのですが。
400デフォルトの名無しさん:2005/04/20(水) 00:29:29
>>399
一週間勉強してそれからもう一度聞きに来てね。
がんばって。
401デフォルトの名無しさん:2005/04/20(水) 00:40:39
402デフォルトの名無しさん:2005/04/20(水) 00:49:46
「/」を置換したいんですがs///\//g;じゃ効きません
文字コードはUTF-8です

よろしくお願いします
403デフォルトの名無しさん:2005/04/20(水) 13:16:03
>>402
--------------------------
use utf8;
use encoding "cp932";
$tmp = "変/換/す/る/よ";
$tmp =~ s///\//g;
print "$tmp\n";
--------------------------

ActivePerl5.8.4で問題なく動きますが。
404347:2005/04/20(水) 16:43:01
>>382
ありがとうございます。perl583deltaに記載があったんですね。
そこまで遡らなかった。。。

>Using substr() on a UTF8 string could cause subsequent accesses on that string to return garbage.
>This was due to incorrect UTF8 offsets being cached, and is now fixed.

まさにこれですね。
5.8.6やばし。
405デフォルトの名無しさん:2005/04/20(水) 21:31:56
BerkeleyDB.pm は 0.17 で Added txn_discard をということになってるらしいのだけど、
0.26 のソースには txn_discard は見あたらない。
使っちゃダメなの?それともバグ?
406デフォルトの名無しさん:2005/04/20(水) 21:50:06
407405:2005/04/20(水) 21:57:05
>>406
うん。xsには入ってるけど、perlのインターフェースが提供されてないです。
408デフォルトの名無しさん:2005/04/20(水) 22:43:59
いや、あるって。
409405:2005/04/20(水) 23:07:28
いや、ないって。

確かにここ↓に定義してあるしpodにも書いてあるんだけど
ttp://cpansearch.bulknews.net/markup/BerkeleyDB-0.26/BerkeleyDB.xs#l3791
この↓パッケージに txn_discard メソッドがないのでつ。
ttp://cpansearch.bulknews.net/markup/BerkeleyDB-0.26/BerkeleyDB.pm#l1543
410デフォルトの名無しさん:2005/04/20(水) 23:40:35
>>409
おかしいな。確かにないようだ。バグっぽいな。

_txn_discard()はあるので、他のtxn_*同様に定義して使ってみたらどうだ?
411405:2005/04/20(水) 23:56:28
>>410
とりあえず定義してみたら一応動いてるみたい。

0.26がリリースされてしばらく経つけど txn_discard て普通使わないで
txn_abort するだけなんだろうか。
412デフォルトの名無しさん:2005/04/21(木) 17:04:25
大阪の地下鉄突き落とし犯人、一瞬マサカあの人と思ったがw
413デフォルトの名無しさん:2005/04/21(木) 23:00:39
コード中の5と数字を8に8という数字を5にしたいんけど、どうやるん?
置換2回で元に戻るw
414デフォルトの名無しさん:2005/04/21(木) 23:02:38
>>413
tr/58/85/;
415デフォルトの名無しさん:2005/04/21(木) 23:09:19
あそうかsばかり考えてた。
じゃorangeをappleにappleをorangeに換えるのは
tr/orange/apple/;
でいいの?
416デフォルトの名無しさん:2005/04/21(木) 23:14:05
それは s 。
417デフォルトの名無しさん:2005/04/21(木) 23:14:49
置換2回で元に戻っちまうけど
418デフォルトの名無しさん:2005/04/21(木) 23:14:54
ああごめん、嘘だった。
419デフォルトの名無しさん:2005/04/21(木) 23:46:41
s/orange/banana/g;
s/apple/orange/g;
s/banana/apple/g;
420デフォルトの名無しさん:2005/04/21(木) 23:57:05
>>415
my %table = (orange => 'apple', apple => 'orange');
my $re = join '|', keys %table;
$str =~ s/($re)/$table{$1}/g;
421デフォルトの名無しさん:2005/04/21(木) 23:59:06
頭イイネェ
422デフォルトの名無しさん:2005/04/22(金) 00:40:45
>>420
Perl Ideiom集みたいのがあったらそれ掲載候補だね。
423デフォルトの名無しさん:2005/04/22(金) 01:12:07
>>421-422
君等のような子達の為にクックブックという本がある。
http://www.oreilly.co.jp/books/4873112028/toc.html
パパにおねだりして買ってもらいなさい。
424デフォルトの名無しさん:2005/04/22(金) 01:13:33
マッチしたらサブルーチンで置換とか結構やらないか?
425422:2005/04/22(金) 01:41:25
>>423
料理本にゃそれ載ってないと思ったが。
このスレで何度も同じ質問がある。
426デフォルトの名無しさん:2005/04/22(金) 09:31:09

        。゜θ゙゙   ヴイィィィィン!
     (*'∀`)ノ   
     人_',ヘヘ)
427347:2005/04/22(金) 09:51:51
えーと、>>347-348で書いた、5.8.6のsubstrの問題ですが、
[email protected]にメールしておいたところ、
[perl #34976] substr uses utf8 length cache incorrectly
で受け付けてくれて、今日、ソースを直してresolveしたよ、と、
ソースの修正部分と、substr.tへの追加部分を添付したメールが来ました。
ActivePerl固有の問題ということではないようです。

で、次のバージョンでは恐らく直っている、と思います。
428デフォルトの名無しさん:2005/04/22(金) 10:15:06
初心者申し訳ないですが、教えてください。
UNIXシェルスクリプトから、perlスクリプトをコールして、戻り値を
シェルで受け取りたいのですが、
perlで”文字列”を返す方法が分かりません。

exit $文字列;
で文字列返しても、上位で参照すると、数値になってしまいます。
429デフォルトの名無しさん:2005/04/22(金) 11:18:09
>>428
exit で返すのはステータスコード。
標準出力に吐くのは print 。

$ cat test.sh test.p
#!/bin/sh
rv=`./test.p`
echo 'foo' $rv 'baz'
#!/usr/local/bin/perl
print 'bar';
exit;
$ ./test.sh
foo bar baz
430デフォルトの名無しさん:2005/04/22(金) 12:27:06
>>427
ご苦労様でした
431デフォルトの名無しさん:2005/04/22(金) 12:37:44
>>427
GJ!
432デフォルトの名無しさん:2005/04/22(金) 15:17:39
>>429
イメージですと、

# 変数=XXXX.pl
のようなかたちで、上位のシェルで変数にリターンされた文字列を
代入できるのかなと考えていたのですが、
XXXX.plにて返したい文字列をprint;にて標準に出力し、

# 変数=`XXXX.pl`
のように入力するようにでしか文字列を返せないということですね。

回答ありがとうございました。
433デフォルトの名無しさん:2005/04/22(金) 16:26:04
なんで Makefile.pl じゃなくて Makefile.PL なんだろう?
434デフォルトの名無しさん:2005/04/22(金) 16:35:36
>>433
最近流行の拡張子広告だな。
スポンサーがPL学園だったけ。
435デフォルトの名無しさん:2005/04/22(金) 17:26:32
終わらない春休み
436デフォルトの名無しさん:2005/04/22(金) 20:30:55
学校の先生が『Apachを使え!』っていっていたのですが、
『AN HTTPD』というウェブサーバではダメなのでしょうか。
Apachを使うメリットってなんなのでしょうか。
よろしくお願いします。
437デフォルトの名無しさん:2005/04/22(金) 20:36:46
CPANのWWW::Mechanizeのフォームに作用するメソッドについて質問があります。

フォームへの送信を行なうのに、下記のメソッドがあると知りました。
 submit()
 click($button[,$x,$y])
 click_button(...)

@ submit()は、ボタンクリックを模倣せず、残り二つのメソッドは
   フォームボタンのクリックを行なう、との説明を読みました。
   この説明は本当でしょうか?

A サーバーへリクエストを要求する際に、フォームボタンクリックを
   擬似的に再現する方法としない方法がもし、あるのでしたら
   その実装上の差異はどのようなものなのでしょうか?

ご教示のほど、よろしくお願い致します。
438デフォルトの名無しさん:2005/04/22(金) 22:08:05
>>436
mod_perlが使える。
mod_rewriteが使える。

俺が感じるのApacheのメリットはこの二つだな。
439デフォルトの名無しさん:2005/04/22(金) 22:28:12
俺はこう思う。
AN HTTPDはWindowsでしか運用できない。
これこそが最大の欠点だと思う。
440デフォルトの名無しさん:2005/04/22(金) 22:40:15
みんなAN HTTPDを使っている企業見たことある?
俺の関係した会社のサーバって全てIISかapachだったよ。
なんか問題あるんじゃないのかな?
ってことで一応IISかapachを覚えておいた方がいい気がします >>436
441デフォルトの名無しさん:2005/04/22(金) 22:44:56
apacheだ!
442デフォルトの名無しさん:2005/04/22(金) 22:48:43
そりゃ、AN HTTPDじゃ安全性が担保できないからな。
IISは売り物なのでいざとなったら責任転嫁できるし、
apacheはソースが公開されてるので検証可能だし、世界中で検証されてる。

でもAN HTTPDじゃ、そのどちらも不可能。
なので、トロイの木馬機能が潜まされてる可能性などは排除できない。
となれば、自動的に選択肢から消える。
443デフォルトの名無しさん:2005/04/22(金) 22:55:12
アパッチェ
444436:2005/04/22(金) 22:58:37
みんなサンクス!
445デフォルトの名無しさん:2005/04/22(金) 23:09:26
Perlは何で出来てるんですか?
やっぱCですか?
するとバッファオーバーフローのような
脆弱性もあるんでしょうか。
446デフォルトの名無しさん:2005/04/22(金) 23:09:58
てゆうか、その前にanhttpdで実行されたCGIの権限が。。
447デフォルトの名無しさん:2005/04/22(金) 23:28:12
>anhttpdで実行されたCGIの権限
え、まだ他にもanhttpdに問題があるんですか? >446
448デフォルトの名無しさん:2005/04/22(金) 23:38:09
さぁそろそろスレ違いなので移動して頂こうか
449デフォルトの名無しさん:2005/04/23(土) 00:02:22
たかが一個人のWinフリーソフト鯖なんぞ誰が使うかボケ
450デフォルトの名無しさん:2005/04/23(土) 00:51:39
>>445
C
Cによるアプリケーションにに限らず、どんなソフトウェアでも脆弱性は必ずある
451デフォルトの名無しさん:2005/04/23(土) 09:53:24
Perlで簡単に全角半角の変換をするモジュールは無いでしょうか?

php の場合、mb-convert-kana 
http://php.s3.to/man/function.mb-convert-kana.html
で簡単にできるのですが、Jcode.pm は全角英数記号の変換が出来ないようです。

123:123:アイウ:アイウabcabc!”#$%&’()
 ↓
123:123:アイウ:アイウabcabc!"#$%&'()

のようにしたいのです。
Jcode.pm を使って、

print jcode($str)->z2h

すると、

123:123:アイウ:アイウabcabc!”#$%&’() 
となってしまいます。

php だと
mb_convert_kana($str, "aKV");
だけで簡単にできるのですが.....
452デフォルトの名無しさん:2005/04/23(土) 17:36:16
自分で作った方が早そう
453デフォルトの名無しさん:2005/04/23(土) 18:57:48
半角の記号なんて数は知れてるのでJcode.pmのtr使えば
あっという間に作れるだろう

454デフォルトの名無しさん:2005/04/23(土) 19:00:34
いわゆる「半角カタカナ」には Encode::JP::H2Z があるのに、
なんで記号とか数字のためのモジュールは無いんだろう。
455デフォルトの名無しさん:2005/04/23(土) 20:24:34
foo1 を bar1 としたいのですが、次のコードだと
正しく変換できません。
変数中の $1 を有効にする方法どなたか分かりませんか?

$tmp="foo1";
$a="foo([0-9])";
$b="bar$1";
$tmp =~ s/$a/$b/g;
456デフォルトの名無しさん:2005/04/23(土) 20:44:18
< $a="foo([0-9])";
----
> $a = "foo1";
> $a =~ "foo([0-9])";
ではどうか。
457デフォルトの名無しさん:2005/04/23(土) 21:10:08
ごめん勘違いした。こういうこと?
$b="bar\$1";
458デフォルトの名無しさん:2005/04/23(土) 21:30:53
$b="bar\$1";
だと bar1 ではなく bar$1 に
なってしまうんです。
459デフォルトの名無しさん:2005/04/23(土) 23:16:28
>>451 Perl はこのへんの日本語処理が面倒だから素直に PHP 使っとけ。
460デフォルトの名無しさん:2005/04/23(土) 23:41:22
>>455
$tmp="foo1";
$a="foo([0-9])";
$b='"bar$1"';
$tmp =~ s/$a/$b/eeg;
461デフォルトの名無しさん:2005/04/24(日) 00:03:41
>>454 Perl使いは自分で車輪作るのが好きだから。
「この程度の車輪なら自分で作った方が早そう」
「車輪なんてあっという間に作れるだろう」

だからみんな Perl じゃなくて PHPを使うんだよ
462デフォルトの名無しさん:2005/04/24(日) 00:18:04
>>454
マジレスすると、半角カナはISO-2022-JPで表現できないため
互換性の問題が生じる恐れがあり、対策しておく必要があるが
記号や数字はそうではないから。
463デフォルトの名無しさん:2005/04/24(日) 01:15:52
>>461
激しく同意
464デフォルトの名無しさん:2005/04/24(日) 01:21:00
日本語おかしいぞ
465デフォルトの名無しさん:2005/04/24(日) 10:11:13
use Encode;
use Unicode::Normalize;
466デフォルトの名無しさん:2005/04/24(日) 21:22:30
s/hogehoge//g
hogehogeの部分に/が含まれる場合どうすればいいのでしょうか?
467デフォルトの名無しさん:2005/04/24(日) 21:31:27
>>466
キーワードはデミリタ
468デフォルトの名無しさん:2005/04/24(日) 21:46:04
>>467
ありがとうございます。
469デフォルトの名無しさん:2005/04/24(日) 22:45:12
デリミタ(delimiter)じゃないの?
そう思ってぐぐって見ると。

デリミタ 11,100 件
http://www.google.co.jp/search?hl=ja&q=%E3%83%87%E3%83%AA%E3%83%9F%E3%82%BF&btnG=Google+%E6%A4%9C%E7%B4%A2&lr=lang_ja

デミリタ 244 件
http://www.google.co.jp/search?hl=ja&q=%E3%83%87%E3%83%9F%E3%83%AA%E3%82%BF&lr=lang_ja

…思ったより流行っているようだ。デミリタ。
470デフォルトの名無しさん:2005/04/24(日) 23:08:36
Attribute::Handlers を使っているのですが、
ハンドラが呼び出されたとき、ハンドラ側でシンボル名を知ることは出来ないでしょうか?

例えば、
sub UNKO :ATTR(CODE) {ここで、}

sub manko :UNKO {...}
のシンボル名 "manko" を受け取りたいのですが。
471デフォルトの名無しさん:2005/04/24(日) 23:45:47
あっ、型グロブへのリファレンスでも良しです。
472デフォルトの名無しさん:2005/04/25(月) 01:36:16
>>451
未承諾広告タンでつか?
473末承諾広告:2005/04/25(月) 04:09:42
>>472
違います
474未承諾広告※ ◆TWARamEjuA :2005/04/25(月) 07:38:08 BE:6099078-#
>>472
違うけれどかなりどきっとしていました(苦笑)
香奈問題、何かいぃ方法無いかなぁ。。。

>>473
にせものさんお疲れですー♪
475デフォルトの名無しさん:2005/04/25(月) 08:01:00
そういえば、最近未承諾広告※って見かけなくなったなあ。
476ヽ(´ー`)ノ ◆.ogCuANUcE :2005/04/25(月) 08:49:33
>>471
perldoc Attribute::Handlers しる。$_[1] が GLOB。

ただし、ATTR(CODE,BEGIN) の時は __ANON__ への GLOB になるので注意。
(´-`)。oO(…これが地味に不便なんだよなぁ…)
477デフォルトの名無しさん:2005/04/25(月) 10:43:08
(CODE,CHECK) でもグロブになりませぬ…。
少しソースを覗いてみたのですが、
確かにグロブを検索してくれてる様です。
しかしこれぐらいの処理なら直ぐ書けそうなので、
なんとかなりそうです。
ご返答有り難う御座いました。
478ヽ(´ー`)ノ ◆.ogCuANUcE :2005/04/25(月) 13:20:15
>>477
はて。CHECK フェイズでも GLOB になると思うが。

use strict;
use warnings;
use Attribute::Handlers;


sub TEST : ATTR(CODE,BEGIN,CHECK,INIT,END) { print $_[-1] . ': ' . $_[1] . "\n" }

sub foo : TEST {}

試しに Attribute::Handlers に手加えてみたけど、BEGIN で簡単に GLOB を得れそうにないねぇ。
Attribute::Handlers::Prospective は Filter 使ってるからイケそうな気がする。
479デフォルトの名無しさん:2005/04/25(月) 17:36:30
>>478 さん

どうも、原因が分かりました。
Attribute::Handlerは、シンボル名(+タイプ)ごとにハッシュでハンドラを管理している為、
例えば
sub unko :CHINKO {}
sub unko :MANKO {}

とすると後に出てきた :MANKO のみ呼び出されることになります。
お騒がせ致しました。本当に有難う御座いました。
480デフォルトの名無しさん:2005/04/25(月) 17:37:12
すみません、ageてしまいました・・・
481デフォルトの名無しさん:2005/04/25(月) 17:39:19
しかも説明間違ってました。忘れてください。
482ヽ(´ー`)ノ ◆.ogCuANUcE :2005/04/25(月) 20:50:12
>>479
sub unko : CHINKO MANKO {}
sub unko : CHINKO : MANKO {}

(´-`)。oO(…しかし嫌な例だな…)
483デフォルトの名無しさん:2005/04/25(月) 23:17:41
CGI記念カキコ
484デフォルトの名無しさん:2005/04/25(月) 23:20:24
しまった、この板ID出なかったのか・・・orz
485デフォルトの名無しさん:2005/04/25(月) 23:42:53
>>484
よかったな、出なくてw
486デフォルトの名無しさん:2005/04/26(火) 19:38:15
windows上でperl使う場合って、
cygwin のと activeperl どっちが安定してるの?
487デフォルトの名無しさん:2005/04/26(火) 21:23:52
WindowsならActivePerlで問題ないでしょ。
PPMもあることだし。
488デフォルトの名無しさん:2005/04/27(水) 21:40:32
> CGIとPerlの区別がつかない人もWEBプログラミング板に行ってください。

こりゃ、ちと乱暴すぎやしないかい?
489デフォルトの名無しさん:2005/04/27(水) 22:03:08
Webprog板の方のスレ結構面白いぞ(笑)
490デフォルトの名無しさん:2005/04/28(木) 14:41:03
頭痛くなるから見たくないw
491デフォルトの名無しさん:2005/04/28(木) 17:07:43
目糞鼻糞
492デフォルトの名無しさん:2005/04/28(木) 18:51:32
Webクライアントとなり持続セッションCookiの受け取りや保存と
POSTを簡単に処理できるモジュールを探しているのですが
できれば1.1で差分ゲットできるものをおねがいします
493デフォルトの名無しさん:2005/04/29(金) 01:57:22
うぜー
494デフォルトの名無しさん:2005/04/29(金) 03:48:38
>>492
Socket
HTTPコマンドは自分で発行しろや
495デフォルトの名無しさん:2005/04/29(金) 06:28:36
old macでファイル操作(書き換え)のために
perlを使いたいのですが,
ドラッグ・ドロップ対応のインターフェースはどうやって書いたらいいですか?

496デフォルトの名無しさん:2005/04/29(金) 06:42:48
>>495
MacJperlを入れればアホウでないかぎりわかる。
アホウなら、MacPerlという本を立ち読み。
497デフォルトの名無しさん:2005/05/01(日) 23:26:26
Hash のリファレンスのリスト返すサブルーチンについて質問します

たとえば、
sub read_data{
  my ( %name2tel, \%name2addr ) = ();
  #いろいろ読み込み
  return [ \%name2tel, \%name2addr ];
}
のような関数に対し、

( \%name2tel, \%name2addr ) = read_data( $data_file );
とやると
Can't modify reference constructor in list assignment
とのエラーが出てしまいます。

以下のように一度配列として受け取って、デリファレンスすると正常にいくのですが、冗長な感じがします。
my @AoH = read_data( $data_file );
%name2tel = %{ $AoH[0] };
%name2addr = %{ $AoH[1] };

Hash のリストを受け取る良い方法はないでしょうか?
498デフォルトの名無しさん:2005/05/02(月) 00:01:11
return [ \%name2tel, \%name2addr ];

return ( \%name2tel, \%name2addr );
として
( \%name2tel, \%name2addr ) = read_data( $data_file );

( $name2tel, $name2addr ) = read_data( $data_file );
とするとか。
499デフォルトの名無しさん:2005/05/02(月) 00:12:42
>>498
> return [ \%name2tel, \%name2addr ];
> を
> return ( \%name2tel, \%name2addr );
> として

だけで出来ましたよ。
500497:2005/05/02(月) 02:20:22
>>498
ごめんなさい。return の部分が [] となっていたのは間違いです。
( いろいろ試して戻しわすれてしまいました )
確かに
( $name2tel, $name2addr ) = read_data();
とすれば OK なのは理解できます( 最初の例でも @AoH で受け取ってます )

実は、%name2addr 等を使用する部分は先に完成していているのです。
いろいろなファイルから読み込む必要が出来て、読み込み部分をサブルーチン化しようとしているのです。
しかし、こうしてしまうとたとえば、
print $_, "\t", $name2tel{ $_ } for keys %name2tel ;

print $_, "\t", $name2tel->{ $_ } for keys %{ $name2tel };
のような修正が必要となってしまいます。

修正しないですむようにするには、dereference して
%name2tel = %{ $name2tel };
%name2addr = %{ $name2addr };
のようにすればいい。
でも、これだと変数が Hash のリファレンスなのか、Hash なのかごちゃごちゃしそう。
ということで、最初に書いたように 一度、@AoH のような テンポラリの変数に読み込んで
@AoH = read_data();
%name2tel = %{ $AoH[0] };
%name2addr = %{ $AoH[1] };
としたのです。

(つづく)
501497:2005/05/02(月) 02:21:19

例では Hash は2つですが、実際には10個近い Hash を返します。
毎回毎回、;
( @AoH ) = read_data();
%name2tel = %{ $AoH[0] };
%name2addr = %{ $AoH[1] };
...以下8行
を書くのはなんかサブルーチンの意味が無いような気がするので、もうちょっとスマートに書けないか?;
と思ったのです。

最初の設計がまずかったのでしょうけど....;

502497:2005/05/02(月) 02:23:00
>>499
こちらでは出来ませんでした。
処理系にもよるのでしょうか?
Windows の ActivePerl の Binary build 638 で試験しているのですが...
503デフォルトの名無しさん:2005/05/02(月) 02:32:10
ハッシュのリファレンスを引数にしては?
read_data(\%name2tel, \%name2addr); # こんな感じ

もしくは、
no strict "refs";
local our (%name2tel, %name2addr);
(*name2tel, *name2addr) = read_data();

オススメ出来ないけど。
504デフォルトの名無しさん:2005/05/02(月) 02:36:00
>>500
を!!!
ナイスアイデアです。
すばらしい!
ハッシュのリファレンスを引数にします。
ありがとうございました。

(リファレンスの使い方が何となく苦手なので....勉強しないと....)
505497:2005/05/02(月) 02:37:09
504 = 497 です
506デフォルトの名無しさん:2005/05/03(火) 03:04:41
勘違いかもしれないが、変数名を見る限りハッシュのキーは共通っぽいけど、
もしそうだったらあえてリファレンスを2つ返す必要はないんじゃないか?
$data->{NAME} = [tel, addr] とか $data->{NAME} = (TEL=>tel, ADDR=>addr);
みたいな。
勘違いだったらスマソ
507デフォルトの名無しさん:2005/05/03(火) 03:10:18
$data->{name} = [tel, addr]
$data->{name} = {TEL=>tel, ADDR=>addr}
か。
508デフォルトの名無しさん:2005/05/03(火) 10:01:26
教えて下さい。

パケットが0116 10のときは
my $r_socket = shift;
my $index = shift;
my $amount = shift;
my $msg = pack("C*", 0x16, 0x01) . pack("S*", 0, $index, 0. $amount);
encrypt($r_socket, $msg);
となるので
パケットが00A2 7のときは
my $r_socket = shift;
my $index = shift;
my $amount = shift;
my $msg = pack("C*", 0xA2, 0x00) . pack("S*", $index, $amount);
encrypt($r_socket, $msg);
こうなると思うのですが動きません。。。

どこか間違っているんでしょうか?
509デフォルトの名無しさん:2005/05/03(火) 11:39:51
>>508
> どこか間違っているんでしょうか?

少なくとも、質問のしかたが間違っている。
510デフォルトの名無しさん:2005/05/03(火) 22:39:25
>>508
パケットって何よ?
511デフォルトの名無しさん:2005/05/03(火) 23:54:46
小包のようなもの
512デフォルトの名無しさん:2005/05/04(水) 00:48:06
>>511
そんなことは知ってる。
>>508の言うパケットというのが意味不明。
513デフォルトの名無しさん:2005/05/04(水) 01:45:33
書くのもレスるのも黄金厨か・・・
514デフォルトの名無しさん:2005/05/04(水) 15:02:23
MySQL導入して遊ぼうと思っている者ですが、
コマンドのサニタイズは自分で行う物なのでしょうか?(HTML等と同様に)
515デフォルトの名無しさん:2005/05/04(水) 15:07:21
>>513
回答側はまったく問題無い。
質問が馬鹿すぎる。
516デフォルトの名無しさん:2005/05/04(水) 18:19:38
>>514
意味が分からん。「prepared statement 使いなさい」とかそういう話?
517514:2005/05/04(水) 18:30:27
SQL始めたばっかなんで良く分からないんですよね・・・すみません
518514:2005/05/05(木) 01:56:12
なんかquoteっぽいんですけど、バイナリデータの場合はどうするんでしょう?
519514:2005/05/05(木) 02:00:09
すみません事故怪傑しました
520デフォルトの名無しさん:2005/05/05(木) 09:28:23
use Encode qw(encode decode);
$buf = '日本';
$buf2 = encode('utf-8', $buf);
print decode('shiftjis', $buf2);

ってやったら画面上に 日本 と出力されるのを期待してたんですが、

Wide character in print at 〜

と出てきてどうすればいいのか分かりません
教えて下さい
521デフォルトの名無しさん:2005/05/05(木) 09:39:41
取りあえずエンコードとデコードの意味について調べてきて下さい。
use Encode qw(encode decode);
$buf = '日本';
print encode('shiftjis', $buf);
522デフォルトの名無しさん:2005/05/05(木) 10:14:49
自動で文字コード判別して変換してくれるんじゃなかったんですか。。。
今from_to使ってます
523ヽ(´ー`)ノ ◆.ogCuANUcE :2005/05/05(木) 13:59:34
> 自動で文字コード判別して変換してくれるんじゃなかったんですか。。。
Encode::Guess。

文字コードは世界中に数多あるので、誤認識を避けるために変換と判別は別モジュールにするのが基本。
Jcode みたいに特定の文字コード(日本語)限定にするんならデフォで自動判別でもイイんだけどな。
524デフォルトの名無しさん:2005/05/05(木) 14:07:25
すみませんありがとうございます。
サンプルコードみたいなの無いでしょうかn
525ヽ(´ー`)ノ ◆.ogCuANUcE :2005/05/05(木) 14:24:54
perldoc Encode::Guess
526デフォルトの名無しさん:2005/05/05(木) 14:31:14
ども
527デフォルトの名無しさん:2005/05/05(木) 14:39:57
ttp://eAc1Ani171.tky.mesh.ad.jp/
wwwwwwwwwwwwwwwwwwうはっwうはっ
wwwうはっうぇおkwwwwwwwおkおkうはっ
うぇwうはっっwwwうぇおkwwwwwwwっおk
うはっうぇおkwwwwwwwwwwwwっうはっwww
うぇ
528デフォルトの名無しさん:2005/05/05(木) 14:49:06
気持ち悪い…
529デフォルトの名無しさん:2005/05/05(木) 14:58:28
http://ntfksm039250.fksm.nt.ftth.ppp.infoweb.ne.jp/
うぇwwwwwwwwwっうぇっうぇうぇwwwっうぇ
おkwwwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwww
っうぇwwwwwwwwwwww
530デフォルトの名無しさん:2005/05/05(木) 22:59:20
スクリプトを実行しないで、文法だけチェックしてくれる
ようなツールってないでしょうか?
531デフォルトの名無しさん:2005/05/05(木) 23:04:29
>>530
perl -wc script.pl
532デフォルトの名無しさん:2005/05/06(金) 18:13:27
test
533デフォルトの名無しさん:2005/05/06(金) 21:05:06
s/ABC/&routine()/;

とかやって、変換文字列を&routineの戻り値にしたいのですが、どうもうまく行きません
どなたか方法をご存知の方はいらっしゃらないでしょうか
534デフォルトの名無しさん:2005/05/06(金) 21:17:54
>>533
e
535デフォルトの名無しさん:2005/05/06(金) 22:33:36
>>534
どうもありがとうございました
536デフォルトの名無しさん:2005/05/07(土) 07:43:16
質問お願いします。
Cのscanfみたいなのはないでしょうか?
<stdin>だと実行直後に入力を求められるので
文章を表示させてから入力を求めるスクリプトが作れません。
どなたか、教えてください。
537デフォルトの名無しさん:2005/05/07(土) 08:20:12
>>536
つ[ バッファをフラッシュ ]
つ[ $|=1; ]
538デフォルトの名無しさん:2005/05/07(土) 08:35:19
>>537
おお、できました!
ありがとうございます。
539デフォルトの名無しさん:2005/05/07(土) 09:29:17
requireの使い方についてですけどrequireで取り込むファイルって下記のように変数にして
扱うのはエラーの原因になるんでしょうか?
$pl_file="../aaa/test.pl";
require $pl_file;
540デフォルトの名無しさん:2005/05/07(土) 11:04:16
>>539
値が同じなら文字列リテラルであろうが
変数だろうが複雑な式だろうが変わらない。

541デフォルトの名無しさん:2005/05/07(土) 11:10:02
確かめればいいのではないかと思うんだな。
542漏れはRuby使うが:2005/05/07(土) 15:44:40
Perl5のいいところって、クラス定義するのがトリック的なことで
めんどくさいから、逆にホントにOOの機能が欲しいところじゃないと
あえてクラス定義しない方針になるってことだな。

つまり、アクセサだらけの無意味なクラスを定義する愚をやらずに済む。
これやると、スクリプト言語ならまだしも、Javaとかになると致命的にメンテナンス性悪くなる。

Perlなら、データは全てハッシュ型でやれってことになっていて、逆にコードの意図が明確
になる。
543デフォルトの名無しさん:2005/05/07(土) 15:46:04
でもまぁ、気軽にクラス定義したほうが、最終的には生産性高いと思うんだよね。
メソッド気軽に追加できるし、安易にクラス定義することでメンテナンスしずらくなる
なんてことは、シンプルに設計していれば、ありえない。
544デフォルトの名無しさん:2005/05/07(土) 16:08:54
ruby は Kernel モジュールがあるということと、syntax が気に入らない。
545デフォルトの名無しさん:2005/05/07(土) 16:55:32
>>544
後者同意。構文はC言語風にして欲しかった。

Kernelモジュールがいらないってことは、
ビルトイン関数は別クラス(かモジュール)に追い出せってこと?
それなら同意。
546デフォルトの名無しさん:2005/05/07(土) 17:44:18
C構文厨ウザ。
547デフォルトの名無しさん:2005/05/07(土) 17:57:03
構文なんて飾りです。偉い人にはそれがわからんのです。
548デフォルトの名無しさん:2005/05/07(土) 18:07:51
>>545
> ビルトイン関数は別クラス(かモジュール)に追い出せってこと?
もちろん。

組み込み変数も何らかのクラスやモジュールにに追い出して、
コンソールから -e した時しか使えないようにすれば良かったのに、とか。

>>546
C like な構文じゃなくても良いけど、ALGOL 譲りのあの構文は読み辛いよ。
エディタのハイライト機能使ったり色々してみたけど、結局どうしても我慢できずに Ruby はやめた。
549デフォルトの名無しさん:2005/05/07(土) 18:21:28
> 構文なんて飾りです。偉い人にはそれがわからんのです。
その割には教祖の日記を見ると、「あれの構文がピンと来ない」とか「あの構文は嫌だ」とか
他の言語をさかんにけなしてるよな。表面的な字面の話ばっかりで、理論的な側面ゼロ。
オレはそんな言語使うのはヤダ。(そもそもバグ多いしすげー不安定だし)
550デフォルトの名無しさん:2005/05/08(日) 09:00:08
あとRubyは驚愕度が高いっつーか直感的じゃないことが多いよな。
こんなのは確かに慣れちゃえばいいんだけど、それをさも当然のように
したり顔で指摘したりするユーザ層が嫌。
551デフォルトの名無しさん:2005/05/08(日) 09:11:26
>>550
驚愕度はPerlのほうがはるかに上だろう。
Rubyは他の言語と同様、単に融通が利かないだけの話。
552デフォルトの名無しさん:2005/05/08(日) 12:43:25
> あとRubyは驚愕度が高いっつーか直感的じゃないことが多いよな。
それでいてモットーが "based on the principle of less surprise" だから笑えるよ。
553デフォルトの名無しさん:2005/05/09(月) 02:48:40
すれ違い
554perl初心者:2005/05/09(月) 19:10:10
いま解析しているPG(カートシステム)で以下のような部分がありました。
コメントに『データを受け取る』とあるのですが、
私の持っている本ではこれは『配列の初期化』と載っています。
これでデータの受け渡しが可能なのでしょうか。
よろしくお願いいたします。


#データを受け取る
%param = ();
555デフォルトの名無しさん:2005/05/09(月) 19:26:58
>>554
そこだけ見せられてもなんとも答えようがないと思います。
きっとそのあとに実際にデータを受け取る処理があるのではないでしょうか。
556perl初心者:2005/05/09(月) 19:56:42
>きっとそのあとに実際にデータを受け取る処理があるのではないでしょうか。

そうですよね、
%param = ();
だけでデータがparamに入るわけないですよね。
557デフォルトの名無しさん:2005/05/09(月) 20:11:54
ReadParse(\%param);

とかある予感
558デフォルトの名無しさん:2005/05/09(月) 20:16:18
>>556
> >きっとそのあとに実際にデータを受け取る処理があるのではないでしょうか。
> そうですよね、

だったら、もう少しプログラムを読んでから尋ねてください。
一行見ただけで質問されても困ります。
559デフォルトの名無しさん:2005/05/09(月) 20:49:44
すいません、メッセンジャー用のbotツールを常駐させているんですが、
動画やゲーム、それにATOKの文字変換などがたまらなく遅いです…。
ためしにタスクマネージャのプロセスを見るとperl.exeがCPUを99とか使ってます。

変な質問かも知れませんが、何かperlのスクリプトとその他のシステムとの
動作を別々に使い分ける方法とかないものでしょうか。
単一のPC上で。
エミュレーター、とか使っても意味ないっていうか余計遅いでしょうし…。

OSはXP、perlは最新のActivePerlを入れてます。
どなたかアドバイスなどよろしくおねがします。
560デフォルトの名無しさん:2005/05/09(月) 20:59:02
もっとまともなツールをつかえ。
561デフォルトの名無しさん:2005/05/09(月) 21:16:06
perlexeの優先度を下げろ。
562デフォルトの名無しさん:2005/05/09(月) 21:41:11
>>561
低にしてみたら大分マシになりました…
ありがとうございます。
563デフォルトの名無しさん:2005/05/09(月) 22:21:25
         \      /
    ・      \ /
        ;(●)llll((●);
       (●)(●)(●)(●)
 \__ (●)(●)●)●)(●)__/ カサカサ
      (●)(●)(●)(●)(●)
   __(●)(●)((●)((●)(●)__
 /  (●)(●)(●)(●)(●)(●)   \
   _ (●)(●)(●)(●)(●)(●)_ 
 /  (●)(●)(●)(●)(●)(●)  \
    _(●)(●)●)(●)(●)(●)_
  /  (l●)(●)(●)(●)(●l;)  \
  | .  (l;●)(●)(●)(●)(●)    |
  |  . (0●)(●)(●)(●)O)    |.   カサカサ
  ,;;    (:●)●)(●)(●;)      。
       (о●)(●)●0)
         ( ;●ξ●:)
    。      ・
564デフォルトの名無しさん:2005/05/09(月) 22:31:08
         \      /
    ・      \ /
        ;(●)llll((●);
       (●)(●)(●)(●)
 \__ (●)(●)●)●)(●)__/ カサカサ
      (●)(●)(●)(●)(●)
   __(●)(●)((●)((●)(●)__
 /  (●)(●)(●)(●)(●)(●)   \
   _ (●)(●)(●)(●)(●)(●)_ 
 /  (●)(●)(●)(●)(●)(●)  \
    _(●)(●)●)(●)(●)(●)_
  /  (l●)(●)(●)(●)(●l;)  \
  | .  (l;●)(●)(●)(●)(●)    |
  |  . (0●)(●)(●)(●)O)    |.   カサカサ
  ,;;    (:●)●)(●)(●;)      。
       (о●)(●)●0)
         ( ;●ξ●:)
    。      ・
565デフォルトの名無しさん:2005/05/09(月) 22:31:12
         \      /
    ・      \ /
        ;(●)llll((●);
       (●)(●)(●)(●)
 \__ (●)(●)●)●)(●)__/ カサカサ
      (●)(●)(●)(●)(●)
   __(●)(●)((●)((●)(●)__
 /  (●)(●)(●)(●)(●)(●)   \
   _ (●)(●)(●)(●)(●)(●)_ 
 /  (●)(●)(●)(●)(●)(●)  \
    _(●)(●)●)(●)(●)(●)_
  /  (l●)(●)(●)(●)(●l;)  \
  | .  (l;●)(●)(●)(●)(●)    |
  |  . (0●)(●)(●)(●)O)    |.   カサカサ
  ,;;    (:●)●)(●)(●;)      。
       (о●)(●)●0)
         ( ;●ξ●:)
    。      ・
566デフォルトの名無しさん:2005/05/09(月) 22:31:16
         \      /
    ・      \ /
        ;(●)llll((●);
       (●)(●)(●)(●)
 \__ (●)(●)●)●)(●)__/ カサカサ
      (●)(●)(●)(●)(●)
   __(●)(●)((●)((●)(●)__
 /  (●)(●)(●)(●)(●)(●)   \
   _ (●)(●)(●)(●)(●)(●)_ 
 /  (●)(●)(●)(●)(●)(●)  \
    _(●)(●)●)(●)(●)(●)_
  /  (l●)(●)(●)(●)(●l;)  \
  | .  (l;●)(●)(●)(●)(●)    |
  |  . (0●)(●)(●)(●)O)    |.   カサカサ
  ,;;    (:●)●)(●)(●;)      。
       (о●)(●)●0)
         ( ;●ξ●:)
    。      ・
567デフォルトの名無しさん:2005/05/09(月) 22:31:20
         \      /
    ・      \ /
        ;(●)llll((●);
       (●)(●)(●)(●)
 \__ (●)(●)●)●)(●)__/ カサカサ
      (●)(●)(●)(●)(●)
   __(●)(●)((●)((●)(●)__
 /  (●)(●)(●)(●)(●)(●)   \
   _ (●)(●)(●)(●)(●)(●)_ 
 /  (●)(●)(●)(●)(●)(●)  \
    _(●)(●)●)(●)(●)(●)_
  /  (l●)(●)(●)(●)(●l;)  \
  | .  (l;●)(●)(●)(●)(●)    |
  |  . (0●)(●)(●)(●)O)    |.   カサカサ
  ,;;    (:●)●)(●)(●;)      。
       (о●)(●)●0)
         ( ;●ξ●:)
    。      ・
568デフォルトの名無しさん:2005/05/10(火) 04:50:47
cgi-binの中のperlスクリプトから
ドキュメントルート(.../public_html)以外のディレクトリ内にあるファイルを
読み込もうとすると、サーバーエラーが出てしまいます。
残念ながらerror.logはみれない環境なのです。

次のいずれかでもエラーです
1)
open IN, "./hoge/hoge.html"
2)
$path = $ENV{'DOCUMENT_ROOT'}."hoge/hoge.html";
open IN, "$path"

パーミッションは
hogeディレクトリ=755
hoge.html=644
です

カレントディレクトリ以外のアクセスが拒否される要因は、
なにかありますでしょうか?

サーバーはFreeBSD4.7です。
569568:2005/05/10(火) 04:55:48
568ですが、
わかりにくくてすみません。

ドキュメントルート=...public_html=カレントディレクトリです。

ディレクトリ構成は、
public_html
|_ cgi-bin
です

perlスクリプトを起動直後のカレントはcgi-binですので、
直に chdir "../"; しています。(するとカレントはpublic_htmlに移ります)
その後、openしています( 568の記述の1) 2)の方法で )。

570デフォルトの名無しさん:2005/05/10(火) 04:57:49
error.logは見れなくても>>1は見れる環境だろ。ハゲ
571デフォルトの名無しさん:2005/05/10(火) 16:22:09
ディレクトリにファイルが大量にあり、中のテキストを以下のように置換したいと思います。
AAA.html というファイルがあるとき、
AAA.JPG → THUM_AAA.JPG

ABC.htmlのときは
ABC.JPG → THUM_ABC.JPG

perl -i を使ってやれば、それっぽいことを出来ることが判ってきました。しかし、この方法では
決めうちの文字列しか置換出来ません。
perl -i -p -e 's/AAA.JPG/THUM_AAA.JPG/' *.html

置換する対象と置換後の文字列はそのとき開いているファイル名を入れたいのですが、
そのとき開いているファイル名を指定することはできますでしょうか?
572デフォルトの名無しさん:2005/05/10(火) 16:43:26
>>571
$ARGV
573571:2005/05/10(火) 18:27:51
>>572
ラクダ本のリファレンスに、
$ARGV 現在<>から入力中のファイル名
とありました。これでいけそうです。

ありがとうございました!
574デフォルトの名無しさん:2005/05/11(水) 14:59:53
>>568
#!/usr/bin/perl

#以下ソースコード


上を下のように書き直せばエラーの内容を見れるから
後は、WEBプログラミング板で質問して


#!/usr/bin/perl

eval join"",<DATA>;
print "Conten-Type: text/plain\n\n$@";

__END__
#以下ソースコード
575デフォルトの名無しさん:2005/05/11(水) 20:01:17
http://search.cpan.org/src/BYRNE/SOAP-Lite-0.60a/examples/XMLRPC/xmlrpc.cgi

return +{
times10 => $number * 10,
times100 => $number * 100,
times1000 => $number * 1000
};

上記のコードにおいて、
return直後の「+」には、どういう役割が
あるのでしょうか?

分かる方教えてください!
576デフォルトの名無しさん:2005/05/11(水) 20:37:58
>>575
http://perldoc.jp/docs/perl/5.6.1/perlop.pod の Symbolic Unary Operators を読め。
577デフォルトの名無しさん:2005/05/11(水) 20:57:08
>>576

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

無事分かりました。ありがとうございました。
578デフォルトの名無しさん:2005/05/11(水) 23:04:43
本を見ながらなんとかやっている初心者です。
@aaa = ("5","10","3","7");とかある時に、その中で一番小さいのを取り出すために、
foreach (sort(@aaa)) {
$a_small = $_;
last;
}
とかしているんですが、もっと良い方法が有ると思うのですが・・・
どなたかご教授お願いします。
579デフォルトの名無しさん:2005/05/11(水) 23:22:37
>>578
# その一
# 数が少なければsortする方法と大差ないが、数が多ければこちらの方が早い
a_small = -1; # または、考えられる最小の値
foreach my $value(@aaa){
if($a_small > $value){
$a_small = $value;
}
}

# その二
# 上記のアルゴリズムををコンパイルされたネイティブコードで行う
# ただしList::Utilモジュールがインストールされている必要がある
use List::Util qw(min);
$a_small = min @aaa;
580デフォルトの名無しさん:2005/05/11(水) 23:31:27
utf-8で書かれた全角文字の16進表現を取得するにはどげん
すればよかとですか?
581デフォルトの名無しさん:2005/05/12(木) 01:46:40
>>578
@aaa = ("5","10","3","7");
$a_small = [sort{$a<=>$b}@aaa]->[0];
582デフォルトの名無しさん:2005/05/12(木) 02:06:05
583デフォルトの名無しさん:2005/05/12(木) 14:24:40
お世話になっております。
@data=('a','b','c','a');
でかぶっている要素を削除したいのですが
そのような関数等ありますでしょうか?
上記の例だと
@data_des = ('a','b','c');
としたいのですが、、、
584デフォルトの名無しさん:2005/05/12(木) 14:38:02
>>583
無いよ。
585583:2005/05/12(木) 14:39:09
ガーン
、、、
わっかりました。
自作します。
586デフォルトの名無しさん:2005/05/12(木) 14:48:27
ヒント:連想配列にぶち込む
587デフォルトの名無しさん:2005/05/12(木) 15:41:58
588デフォルトの名無しさん:2005/05/12(木) 15:51:45
らくだ本にまんま書いてあるだろ
589デフォルトの名無しさん:2005/05/12(木) 16:03:39
>583
%tmp;
@sort = grep(!$tmp{$_}++,@a);
590デフォルトの名無しさん:2005/05/12(木) 16:04:30
>>587
あんな1行課題にこんな実験版を使うのは危険だし。

>>588
んなもんわざわざ持ち出さなくても、誰の手元にもあるはずの
添付ドキュメントのFAQにあるし。
591583:2005/05/12(木) 18:37:00
う、、、自作して一息ついていたらRESがついてる、、

>>589さん
ありがとうございます。
コレを利用させていただきます。
自作のは冗長すぎ、、、
592デフォルトの名無しさん:2005/05/12(木) 18:43:00
@a = do {my %seen = (); grep {!$seen{$_}++} @a};
593578:2005/05/12(木) 20:51:25
>>579
#「その1」sortするよりforeachでまわして比較してしまった方が速いということですね。
データ数が結構ありますので速いのはありがたいです。
#「その2」List::Utilモジュール使えました。で、ついでにmax @aaaとすれば
最大になるかな、と思ったんですが違いそうですね・・・調べてみます。
>>581
難しくてよくわかりませんが、右側の[0]が添え字なんですね。[$#aaa]としてみたら
最大も取れました。

大変勉強になります。ありがとう御座いました。またお願いします。
594デフォルトの名無しさん:2005/05/12(木) 22:06:13
Tk::Canvas#createWindowでキャンバスにウィジェットを描写し、
持たせたタグにイベントをバインドしたのですが、何故か反応してくれません。。。

$cv->createWindow(..., -tags => ["ohYes"]);
$cv->bind("ohYes", "<Enter>" => ...);

ウィジェットに直接バインドしても良いのですが、
それだとキャンバス上のサイズが取得できなくて。。。
解決方法をご存知の方いらっしゃいましたら、どうかご教示お願い致します。
(描写したウィジェットがキャンバス上で機能するような方法をお願いします)
595デフォルトの名無しさん:2005/05/12(木) 22:07:10
キャンバス上のサイズではなく、座標でした。
596デフォルトの名無しさん:2005/05/13(金) 19:08:27
日本語ディレクトリやファイルにアクセスする方法って無いのでしょうか?
win2k+active perlでローカルのファイルにフルパス指定して、例えば
c:/test/日本語/test.txtなどを開こうとしても、開けません。
日本語ディレクトリ名をローマ字に変更すると正常にファイルを開けました。
597デフォルトの名無しさん:2005/05/13(金) 20:29:08
shiftjisで書くとか
598デフォルトの名無しさん:2005/05/13(金) 21:10:14
>>597
encodingは指定しています。とりあえず動かない事は無いので諦めます。
599デフォルトの名無しさん:2005/05/13(金) 22:30:15
ふつーに開けないか?
600デフォルトの名無しさん:2005/05/13(金) 22:37:52
encoding指定しなければいいじゃない。
601デフォルトの名無しさん:2005/05/14(土) 02:44:03
$str1 = "&keyhoge&keyfuga&keyfoo&keybar" ;
$str2 = "&key&key&keyhoge&keyfugafoobar" ;

$str1 =~ s/&key{1}/@@@/ ;
if ( $str2 =~ /&key{3}/ )
print "test\n" ;

print "$str1\n" ;
print "$str2\n" ;

exit ;

これがエラーになるのはどうしてでしょうか?
予想としては test が表示されるはずなのですが
602デフォルトの名無しさん:2005/05/14(土) 02:49:53
>>601
ifの{}は省略不可。もしくはifを倒置。
603デフォルトの名無しさん:2005/05/14(土) 02:54:33
>>601
エラーはifだろうけど、やりたい事が良くわかんない
『&key』を量指定でマッチさせたいのかな?
604601:2005/05/14(土) 03:00:43
>>601
$str2 = "&key&key&keyhoge&keyfugafoobar" ;  ○
$str2 = "&key&keyhoge&keyfugafoobar" ;  ×
と言う感じで、&key が3つ連続で続いてたら、if の中身を真に
させたいです。
605デフォルトの名無しさん:2005/05/14(土) 03:18:14
>>604
じゃあ、そう書けば。
606デフォルトの名無しさん:2005/05/14(土) 03:22:37
はい、書きました
607デフォルトの名無しさん:2005/05/14(土) 03:37:05
自分で書いたコードが半年後に読めなくなる言語ってどうよ
608デフォルトの名無しさん:2005/05/14(土) 03:40:08
>>607
それよりも、自分で書いたコードが半年後に読めなくなる頭脳の方を
問題にすべき。
609デフォルトの名無しさん:2005/05/14(土) 03:44:25
>>606
ウソつくな
610デフォルトの名無しさん:2005/05/14(土) 03:44:32
>>607
逆コンパイルできてしまう開発環境よりいいんじゃね?
611デフォルトの名無しさん:2005/05/14(土) 03:46:24
>>607
15年前に書いたコードも普通に読めますが。
612594:2005/05/14(土) 03:57:41
自己解決しました。失敬。
613デフォルトの名無しさん:2005/05/14(土) 06:10:19
>>606
何がいけないのかわからなかったら
正規表現のグループ化について調べると良いと思うよ
614デフォルトの名無しさん:2005/05/14(土) 07:13:42

              _,,−-、 
        _,, .. _,,-‐'": : : : : :゙ヽ
     r‐'´: : : : : : : : : : : : : : : : ` 、
    /: : : : : : : : : : :,、: : : : : : : : : :_:ヽ、
    |_: : : : : : : : : /  \: : : : : : : :ヽ、
    {: : : : : : : : l'      ヽ、: : : : : :{、
    l__: : : : : : :i、       `丶: : t‐`
   /, ヽ: : :/´          |: : : !'
   { ru l': :/  ,/二丶、     }: :,,|
  _`iヽr‐!:丶   'tェッiヽ-'' , '‐-、/:/
  : :丶t': : : ヽ        'xェァノ:/
  : : : : : : : : : : i、        }
  : : : : : ',: : : : ´  i!     _ノ
  : : : : : ヽ :   、_ `゙;;;;> .,r'/
  : : : : : : \  - ,,`''‐--//`丶、.
  : : : : : : : : :`-,; " ̄   /: : : : : :\
  : : : : : : : /       /: : : : : : : : : :',
  : : : : : : :{    ,. -‐ ": : : : : : : : : : : :
 
太宰治先生が>>605を見て人間の醜さを見出したようです。
615デフォルトの名無しさん:2005/05/14(土) 09:30:34
自分で書いたデタラメプログラムがコンパイルできなかったので、
計算機センターのCコンパイラが壊れているとクレームをつけてき
たバカ学生を思い出したぜ。
616デフォルトの名無しさん:2005/05/14(土) 11:46:15
いつの時代だよw
617デフォルトの名無しさん:2005/05/14(土) 13:22:58
今でもいるぞー。
間違ってないんですけどって奴。
618デフォルトの名無しさん:2005/05/14(土) 15:41:15
そっちじゃねーよw
619デフォルトの名無しさん:2005/05/14(土) 15:42:33
>>615
思い出されたぜ。しかも2回やったぞw
10年前だがな〜。
620デフォルトの名無しさん:2005/05/14(土) 15:42:51
open INPUT, "<test.txt" ;
while ( <INPUT> ) {
chomp ;
print "$_\n" ;
}
close INPUT ;
exit ;

このようにすると、ちゃんと一行読み込んでくれるのに、

open INPUT, "<test.txt" ;
<INPUT> ;
chomp ;
print "$_\n" ;
close INPUT ;
exit ;

のようにすると、一行読み込んでくれないのはどうしてなのでしょうか?
<>を使い、代入する変数を省略した場合、デフォルトで、$_ に保存されると
本で読みました。これは while の中だけで有効な話なのですか?
621デフォルトの名無しさん:2005/05/14(土) 15:51:47
http://z77.61-45-86.ppp.wakwak.ne.jp/

っっっうはっwwwおkwwwうぇwww

うぇwww
っうぇwwwwwwwwwwwwうぇwww
うはっwww
っうぇおkwwwおkwwwwwwうはっwww
622596:2005/05/14(土) 15:58:47
日本語PATHについて質問してた者です。あれからネットを調べまわった結果
同じようなケースが1つ見つかりました
内部で勝手にUTF8に変換されてしまうので、shiftjisに文字列をエンコードしなければ成らなかったようです
と言っても理解できてませんけど

use encoding "cp932";
use Encode;
$inputtext = "c:/perl/test/日本語/in.txt";
$inputtext = encode('cp932',$inputtext);
utf8::decode($inputtext);
print $inputtext;
open (IN, '<', $inputtext);
623デフォルトの名無しさん:2005/05/14(土) 16:09:13
2chの板/スレ/投稿一覧を取得するようなモジュールって既にありますかね?
自作してもいいんですが、車輪の再発明もなんなので…。
624デフォルトの名無しさん:2005/05/14(土) 16:24:18
どっかにあったが忘れた
625デフォルトの名無しさん:2005/05/14(土) 16:46:31
while(<>) は for(;<>;) と等価ですか?
これはいくらググっても見つかりません。不安です。
626デフォルトの名無しさん:2005/05/14(土) 16:47:38
>>620
<STDIN>は標準入力から1行読む
全部読んで$_に代入する訳ではない
ただし配列に代入する場合は別
627デフォルトの名無しさん:2005/05/14(土) 16:50:22
ラクダ嫁
628デフォルトの名無しさん:2005/05/14(土) 16:56:17
>>625
whileとforの構文の一般的な話ならperlsyn(1)のFor Loopsという
見出しのところに書いてあるし、行入力演算子を条件のところ
に書いたときの特別な振る舞いを気にしてるならperlop(1)の
I/O Operationsのところに書いてある。
629デフォルトの名無しさん:2005/05/14(土) 17:02:49
>>620
$_に代入してくれるのはwhileとfor(;;)の条件のところに
書いたときだけ。

詳しくは628にもあるがperlop(1)のI/O Operationsのところ
を読んでくれ。

630デフォルトの名無しさん:2005/05/14(土) 17:08:37
>>626-628
レスありがとうございました。
ラクダ本というものの存在をはじめて知りました。
お金ができたら買ってみようとおもいます。
631デフォルトの名無しさん:2005/05/14(土) 17:12:21
失礼 >>629 さんまででした。
本当にありがとうござました!
632デフォルトの名無しさん:2005/05/14(土) 18:16:14
>>622
自分で変換しといて「勝手に」も無いもんだ。
http://www.kt.rim.or.jp/~kbk/perl-5.8/encoding.html
633デフォルトの名無しさん:2005/05/15(日) 19:34:29
utf-8でかかれたテキストファイルに対して処理を行うのに、
改行コードが邪魔だったので置換して削除しようとしたのです
が、うまくいきません。改行コードはそのまま残っています。
以下、失敗時の対象コードです。

$hoge =~ s/\x0D\x0A//g; #gいらないかもしれませんが

\r\nもやりましたが結果は同じでした。
テキストエディタで同様の文字コードで置換するとうまくいく
のですが、、、

解決方法よろしくお願いいたします。
634デフォルトの名無しさん:2005/05/15(日) 21:12:00
> Perlメモ
635デフォルトの名無しさん:2005/05/15(日) 23:18:56
お分かりになる方、お願いします。
携帯用のページに perl で post したいんです。

HTMLのフォーム使ってではなく、直接、http://test.com/cgi/post.cgi?id=123&pas=456

・・・という具合に、送信したいんですが、携帯用のページにIEから、上記のようなアドレスを
送信すると、エラーになります。

perl の仕様? が違うのだと思いますが、どのようにすればうまく解決できるのでしょうか。
携帯用だとページが軽いので、可能なら助かります。
636デフォルトの名無しさん:2005/05/15(日) 23:23:44
質問の文章の程度からしてお前には無理。
637デフォルトの名無しさん:2005/05/15(日) 23:45:49
>>635
とりあえず>>1読もうね。
638デフォルトの名無しさん:2005/05/16(月) 00:05:35
http://www.template-toolkit.org/ Version 2.14 Released について
perl の use tmpletes (Template Toolkit)を使いたいんだけど、
使用先がレンタルサーバで、tellnetがつかえないく root 権限もないからインストールができない。
自分の /var/www/cgi-bin/lib/ にアップしたいんだけど、どのディレクトリーをアップすればいいの?
639デフォルトの名無しさん:2005/05/16(月) 00:38:39
この上なく釣りにしか見えんが
lib/Template 以下を lib にぶちこんでみれ
640デフォルトの名無しさん:2005/05/16(月) 20:55:30
perl, rubyとなるとsapphireとかtopazとかありそかもな?
641デフォルトの名無しさん:2005/05/16(月) 22:32:24
>>639

ありがとう。動いたよ。

カキコしてから、CGIじゃんって、気がついたよ。ごめん。
template toolkit って HTML::template より便利だ。
642デフォルトの名無しさん:2005/05/16(月) 23:31:50
質問があります。
相対パス表記である './' や '../' を含んだパスからそれらを出来る限り取り去りたいのですが、
そのような作業をやってくれるモジュールなり、簡単な正規表現の書き方なりあれば教えてください。

↓自力で一応それっぽい正規表現を考えてみましたが、3〜4行も打たねばならず腱鞘炎になりそうです_| ̄|○|||

my $path = 'hogera/../.././././pukya/../hell/o/world';
print "$path\n";

$path !~ m/\.{3,}/ or die;         # 3 以上の '.' の連続をはじく (assert)
$path =~ s|([/\\]\.{1,2})$|$1/|;      # 末尾が '/.' または '/..' ならディレクトリ
$path =~ s|(?<=[/\\])\.[/\\]||g;     # './' の除去
$path =~ s|[^/\\]+[/\\]\.\.[/\\]||g;   # 'hoge/../' の除去

print "$path\n";

あと、このような処理はありがちに思えるので、それっぽい名前とかありそうな気がするんですが、どうなんでしょうか・・・?
643デフォルトの名無しさん:2005/05/17(火) 00:34:43
>>642
つ[ File::Spec ]
644デフォルトの名無しさん:2005/05/17(火) 01:10:55
>>643
$cpath = File::Spec->canonpath( $path ) ;
がそのものずばりですた。
ありがとうございます!
こういう処理は、正準化ちゅうんですね。
645デフォルトの名無しさん:2005/05/18(水) 12:13:20
Windows上で動く簡単なものを作成したのですが
その際に使用するモジュールをppm・installで入れようとしたのですが
入れようとするとno suitable installation taaget found for package と出てきます。
これは何が原因なのでしょうか?
わかる方おられましたらアドバイスいただければと思います。
646デフォルトの名無しさん:2005/05/18(水) 21:02:14
>>645
no suitable installation target found for package

target
になおしてぐぐればでる。
647デフォルトの名無しさん:2005/05/18(水) 21:49:34
らくだ本を見ながらテキスト処理のスクリプトをいくつか書いてるんですが、
GUIのデバッガってないですかね?

同じスクリプトをWindows2000、SuSE Linux9.1、Solaris8の3つで
動かしているので、どのプラットフォームのでもOKです。
648デフォルトの名無しさん:2005/05/18(水) 22:01:44
>>647
perlのdebugオプションつけたんじゃだめ?
emacsでもあったよな。
649デフォルトの名無しさん:2005/05/18(水) 22:02:31
なんだ、GUIか(スマソ
650デフォルトの名無しさん:2005/05/18(水) 22:45:33
perlもdddで扱えたよーなー、と思ってぐぐってみたら、こんなんが出てきた。
ttp://www.att.or.jp/perl/cgi-debug-env/dev-env.html
元ページはえらい古いよーだが、いちおー貼っとく。
あと、今ならEclipseでEPICってのもあるな。
651647:2005/05/19(木) 00:09:13
>>648-650
レスどうもです。
dddをインストールしてみましたが、ちょっと使いにくかったので
Eclipse+EPICの方を試してみようと思います。
652デフォルトの名無しさん:2005/05/19(木) 02:13:39
マルチ+スレ違いの質問をしてしまう私をどうか許してください。
WebProgのPHPくだ質スレにて

print <<"ここから";
$info['name'] = 'taro';
$str = '%db{name}';
$ret = preg_replace("/%db{(.*?)}/", $info[$1], $str);
printf("%s", $ret);
このような感じで「taro」と表示するのを期待しているのですがエラーが出てしまいます。
シングル、ダブルクォーテーションで囲っても期待通りの動作はしませんでした。
どのような方法を使えば「taro」と表示出来ますでしょうか。

それから
foreach (range(1,5) as $key) {
なんとか $i;
print ++$i;
}
print $i;
この結果が「11111」になるよう$iを局所変数にするような関数ってありますか?
ここから

という質問をしたのですが問題のPHPコード同様、期待値を得ることが出来ませんでした。
Perlだったら
$str =~ s/%db{(.*?)}/$info{$1}/;
my $i;
でいけるのですがPHPの場合はどう記述すればいいのでしょうか。
653デフォルトの名無しさん:2005/05/19(木) 02:37:25
>>652
氏ね
654デフォルトの名無しさん:2005/05/19(木) 02:47:55
windowsで、一個上のディレクトリに移動したいときはどうするんでしょう?

chdir ( ..\ );

では、うまくいかないんですが。。。
655デフォルトの名無しさん:2005/05/19(木) 03:46:22
../
656デフォルトの名無しさん:2005/05/19(木) 05:56:35
>>655
ありがとう!
できましたーー
657デフォルトの名無しさん
>>652
正規表現内の{}をエスケープ汁