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

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

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

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

前スレ
Perlについての質問箱 30箱目
http://pc11.2ch.net/test/read.cgi/tech/1173880452/

リンク集は>>2-3
過去スレは>>4
2デフォルトの名無しさん:2007/06/11(月) 03:30:27
[プログラミング自体の経験が無い奴はまずココを読め]
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デフォルトの名無しさん:2007/06/11(月) 03:31:08
4デフォルトの名無しさん:2007/06/11(月) 03:31:49
[過去スレ]
1 ttp://pc.2ch.net/tech/kako/1017/10177/1017736187.html
2 ttp://pc3.2ch.net/tech/kako/1033/10336/1033688230.html
3 ttp://pc2.2ch.net/tech/kako/1041/10412/1041205885.html
4 ttp://pc2.2ch.net/tech/kako/1048/10485/1048519394.html
5 ttp://pc5.2ch.net/tech/kako/1053/10530/1053053082.html
6 ttp://pc5.2ch.net/tech/kako/1060/10606/1060689008.html
7 ttp://pc2.2ch.net/test/read.cgi/tech/1068051036/
8 ttp://pc2.2ch.net/test/read.cgi/tech/1074151549/
9 ttp://pc5.2ch.net/test/read.cgi/tech/1079114157/
10 ttp://pc5.2ch.net/test/read.cgi/tech/1085564875/
11 ttp://pc5.2ch.net/test/read.cgi/tech/1090889189/
12 ttp://pc5.2ch.net/test/read.cgi/tech/1094579428/
13 ttp://pc5.2ch.net/test/read.cgi/tech/1097851764/
14 ttp://pc5.2ch.net/test/read.cgi/tech/1101649274/
15 ttp://pc5.2ch.net/test/read.cgi/tech/1105953092/
16 ttp://pc8.2ch.net/test/read.cgi/tech/1111034732/
17 ttp://pc8.2ch.net/test/read.cgi/tech/1117870308/
18 ttp://pc8.2ch.net/test/read.cgi/tech/1121804136/
19 ttp://pc8.2ch.net/test/read.cgi/tech/1126977805/
20 ttp://pc8.2ch.net/test/read.cgi/tech/1131286411/
21 ttp://pc8.2ch.net/test/read.cgi/tech/1134327348/
22 ttp://pc8.2ch.net/test/read.cgi/tech/1138519327/
23 ttp://pc8.2ch.net/test/read.cgi/tech/1141742901/
24 ttp://pc8.2ch.net/test/read.cgi/tech/1146022352/
25 ttp://pc8.2ch.net/test/read.cgi/tech/1149259409/
26 ttp://pc8.2ch.net/test/read.cgi/tech/1153412251/
27 ttp://pc8.2ch.net/test/read.cgi/tech/1157874614/
28 ttp://pc8.2ch.net/test/read.cgi/tech/1162273941/
29 ttp://pc11.2ch.net/test/read.cgi/tech/1166708139/
30 ttp://pc11.2ch.net/test/read.cgi/tech/1173880452/
5デフォルトの名無しさん:2007/06/11(月) 03:41:44
乙っ
6デフォルトの名無しさん:2007/06/11(月) 03:50:14
こんな時間に…。乙。
7デフォルトの名無しさん:2007/06/11(月) 14:44:50
「初めてのPerl」を一通り読んでみました。
次に読むとしたら、「続・初めてのPerl」と「プログラミングPerl〈VOLUME1〉ではどちらがオススメでしょう?
お金があまり無いのでどちらかしか買えません。
8デフォルトの名無しさん:2007/06/11(月) 14:48:51
「続・初めてのPerl」の方がいいと思うよ
そのあとにまだPerlの言語仕様が知りたくなったらperldocを片っ端から読め
9デフォルトの名無しさん:2007/06/11(月) 15:06:27
即レスサンクス
では「続」を買ってみます。

Amazonの関連本見てて「Perlベストプラクティス」とかいうのも面白そうだなと。
「続」読み終わったらそれ買おうかな。
10デフォルトの名無しさん:2007/06/12(火) 03:24:12
>>9
ベストプラクティスはいいよ。
ぜひ買えw
11デフォルトの名無しさん:2007/06/12(火) 03:44:55
>>9
もうみんなベストプラクティスを買いましたよ。
12デフォルトの名無しさん:2007/06/12(火) 15:00:55
日本語対応でsuffix array を構築するモジュールってありませんか?
13デフォルトの名無しさん:2007/06/12(火) 15:01:44
ありますよ
14デフォルトの名無しさん:2007/06/12(火) 15:12:39
なんていう名前ですか?
15デフォルトの名無しさん:2007/06/12(火) 15:14:28
っていうか、自分で書いても50行行かないくらいだし。
16デフォルトの名無しさん:2007/06/12(火) 15:17:33
うーん、書いていたんですがつまってしまいまして。
無駄な容量を使用しないように配列のインデックスだけでやろうとして、
ソートは基数ソートで構築しようとしていました。
17デフォルトの名無しさん:2007/06/12(火) 15:24:49
>>16
とりあえずsaryというのは知ってるの?

だんだん問題を思い出してきた。ソート地獄なんだっけ。
saryも「素朴なアプローチ」でしかないんだよな。

2001年に辞書ハッカーの方々のあいだでsuffix arrayが盛り上がった
ことがあって、わたしゃその時その人たちがいろいろ書き散らしたツール群を
使っています。
1812:2007/06/12(火) 15:43:46
>>17
saryとsufaryはsuffixを構築する部分はCで書かれているようでして、
出力されたファイルがバイナリだったので、ソースのどこを書き換えればいいんだ・・という状況です。
1912:2007/06/12(火) 15:55:21
うーん、もう少し考えてきてみます
20デフォルトの名無しさん:2007/06/12(火) 15:55:23
>>18
何が問題なのかわからない。インデクサの出力が、
バイナリ以外の何である可能性があるというのか?
2112:2007/06/12(火) 17:41:22
sufaryのmkaryを呼び出して、出力されたバイナリをunpackして使用しようかなと思います
22デフォルトの名無しさん:2007/06/12(火) 20:34:56
既存のPDFドキュメントにテキストボックス等の入力フィールドを追加できる
perlモジュールって存在しますか?
あるようでしたらモジュール名を教えてください。有償でも構いません。
PDFLibでは出来ませんでした。
PDFJは新規なら可能ですが、既存のものからは不可能でした。
23デフォルトの名無しさん:2007/06/14(木) 14:54:25
ソートなのですが、
@A = ( a, to, t, toa);
@A = sort @A;

とすると結果は
a,t,to,toaとなりますが、これをa,toa,to,tとsortするにはどうすればいいでしょうか。
アルファベット順にソートしてほしいのですが、文字列が長いほうが先にきて欲しいです。
24デフォルトの名無しさん:2007/06/14(木) 15:51:21
use strict;
my @A = qw(a to t toa);
@A = sort comp @A;
print "@A";

sub comp {
my($p, $x, $y);
do {
$x = substr $a, $p, 1;
$y = substr $b, $p, 1;
return $y cmp '' if $x eq '';
return '' cmp $x if $y eq '';
} while($p++, $x eq $y);
return $x cmp $y;
}
25デフォルトの名無しさん:2007/06/14(木) 17:10:31
>>24
ありがとうございます!参考にさせてもらって正規表現で作って見ました。
sub sort_length{
my ($a, $b) = @_;
#同じ文字列;
if($a =~ /^$b$/)
{
return $a cmp $b;
}
#途中まで同じ文字列で$aの方が長い;
elsif($a =~ /^$b/)
{
return '' cmp $a;
}
#途中まで同じ文字列で$bの方が長い
elsif($b =~ /^$a/)
{
return $b cmp '';
}
else
{
return $a cmp $b;
}
}

substrは(処理が重いから?)あまり使わないほうがいいみたいなイメージがあったので正規表現にして
みたのですが、どうでしょうか?

あとこの(ソートの仕方の)関数名に何か良い名前はないでしょうか。
なかなか良い名前が思い浮かばない・・・。
26デフォルトの名無しさん:2007/06/14(木) 17:26:58
どうみても余計重くなってる。
普通にsubstrつかえよ。
27デフォルトの名無しさん:2007/06/14(木) 17:44:59
>>25
横レスだが、単なるベタ比較に名前なんかないよw
名前が付くのは「シュワルツ変換」とか「シャチ泳ぎ」とか定番の手法
ちなみに "" cmp $a とか処理のムダだから、素直に-1とか与えたら?
シュワルツ変換で例を書こうかと思ったけど、まあ御参考までに。
@A = sort { $a eq $b ? -1
      :$a =~ /^$b/ ? -1
      :$b =~ /^$a/ ? 1
      : $a cmp $b } @A;
28デフォルトの名無しさん:2007/06/14(木) 17:44:59
俺ならこうするかな。多分上の二つよりはずっと速い

sub compare {
if($a eq $b) {
return 0;
} elsif(length $a < length $b) {
return $a cmp substr($b, 0, length $a) || 1;
} elsif(length $a > length $b) {
return substr($a, 0, length $b) cmp $b || -1;
}
return $a cmp $b;
}
29デフォルトの名無しさん:2007/06/14(木) 17:47:51
ああ、27まちがえた orz...
$a eq $b ? 0 だよ。
30デフォルトの名無しさん:2007/06/14(木) 17:48:31
>>27
っ \Q
31デフォルトの名無しさん:2007/06/14(木) 17:53:01
つか常識的に考えて24は激重だろ…
他はベンチとってみなきゃ分らんが
32ベンチ厨:2007/06/14(木) 17:58:51
use Benchmark;
timethese undef, {
24=>sub{ my@a=sort comp24 qw/a to t toa/ },
27=>sub{ my@a=sort comp27 qw/a to t toa/ },
28=>sub{ my@a=sort comp28 qw/a to t toa/ }
};

>Benchmark: running 24, 27, 28 for at least 3 CPU seconds...
>24: 2 wallclock secs ( 3.14 usr + 0.00 sys = 3.14 CPU) @ 55973.25/s (n=175756)
>27: 3 wallclock secs ( 3.14 usr + 0.00 sys = 3.14 CPU) @ 21100.32/s (n=66255)
>28: 2 wallclock secs ( 3.17 usr + 0.00 sys = 3.17 CPU) @ 104963.11/s (n=332943)

うむ。激重ってほどでもないが、重いな。
33デフォルトの名無しさん:2007/06/14(木) 18:20:39
utf-8なEncodeを使いたいときに、use uft8とかEncodeとかいろいろ使わないとまともに動かないようなんですが、
そういうのを全然しらなくて、普通にEUCと同じような感覚で、ファイルのencodeはutf-8にしたり、
GDBMのキーにいれたりと、utf8な文字列をそのままバリバリ使ってしまっていますが、
とりあえず、期待通りの動作はしているようです。
use utf8やEncodeとかいれると修正箇所が多すぎて逆に問題がおきそうなんですが、
それでも、治した方がいいんでしょうか?
Perlの5.8.8を使ってます。
34デフォルトの名無しさん:2007/06/14(木) 18:25:26
場合によるとしか言いようがないが、
EUCと知らずにEUCを扱える環境なら、UTF-8も同程度に安全。
35デフォルトの名無しさん:2007/06/14(木) 19:02:15
@A = ( 'a' x 1000, 'a' x 2000 , 'a' x 3000 ) ;
24: 3 wallclock secs ( 3.19 usr + 0.00 sys = 3.19 CPU) @ 345.45/s (n=1102)
27: 3 wallclock secs ( 3.21 usr + 0.00 sys = 3.21 CPU) @ 7608.10/s (n=24422)
28: 3 wallclock secs ( 3.13 usr + 0.01 sys = 3.14 CPU) @ 60339.81/s (n=189467)

3623:2007/06/14(木) 22:10:14
うおおぉぉ・・・・勉強になります・・!
ありがとうございます!
37デフォルトの名無しさん:2007/06/14(木) 22:37:45
>>33
ちゃんとした「文字」として扱いたいかどうかによる。
正規表現で文字単位でマッチさせたいとか、バイト数じゃなくて文字数を調べたいとか、
そんなときはencode/decodeする必要があります。
3833:2007/06/15(金) 10:05:22
ということは、特に何もしてなければ、たんなるバイト列として扱われるってことなんかな
これで特に問題はないんで、とりあえずこれはこのまま放置しておこう
39デフォルトの名無しさん:2007/06/15(金) 19:17:52
perl未経験者なんですが・・・。
いきなりのご質問でも大丈夫でしょうか?
40デフォルトの名無しさん:2007/06/15(金) 19:21:10
あきらめて下さい。
あなたの質問は解決できません。
4139:2007/06/15(金) 19:22:09
分かりました。
お手数をおかけしました。
42デフォルトの名無しさん:2007/06/15(金) 19:38:06
perlよりも先に日本語を勉強して欲しい
4339:2007/06/15(金) 19:41:12
>42
そうかもしれません。
本当にごめんなさい。
4439:2007/06/15(金) 21:16:05
れろれろえれ男レオレオ炉得れろ絵
45デフォルトの名無しさん:2007/06/15(金) 21:45:55
質問に応じて忍者ポイントで答えるよ!
46デフォルトの名無しさん:2007/06/15(金) 21:48:29
>>43
いけない子だ。お仕置きだね。
47デフォルトの名無しさん:2007/06/15(金) 23:17:53
>>39
こちらへどうぞ

くだすれPerl(超初心者用)
http://pc11.2ch.net/test/read.cgi/php/1157862828/l50
48デフォルトの名無しさん:2007/06/16(土) 02:15:49
>>38
「たんなるバイト列」がU+00〜U+FFと一致する事は、覚えておいて損はないかも。

例.
$a = substr(pack('CCCC',0xFC,0xFD,0xFE,0xFF).chr 256,0,4); # utf8フラグ付き
$b = pack('A*',$a)); # utf8フラグ無し
$c = pack('CCCC',0xFC,0xFD,0xFE,0xFF);
print "a:",unpack('H*',$a),"\n";
print "b:",unpack('H*',$b),"\n";
print "c:",unpack('H*',$c),"\n";
print "a eq b:",$a eq $b ? 1:0,"\n";
print "a eq c:",$a eq $c ? 1:0,"\n";
print "b eq c:",$b eq $c ? 1:0,"\n";

a:c3bcc3bdc3bec3bf
b:c3bcc3bdc3bec3bf
c:fcfdfeff
a eq b:0
a eq c:1
b eq c:0
4948:2007/06/16(土) 02:22:20
ごめん、見て分るとおり2行目の $b=pack('A*',$a)); は、 $b=pack('A*',$a); の間違い。
50デフォルトの名無しさん:2007/06/16(土) 06:50:36
ゆ る さ ん
51デフォルトの名無しさん:2007/06/16(土) 10:28:05
無意味にユニコード系薦める奴は売国奴
52 ◆TWARamEjuA :2007/06/16(土) 11:16:28 BE:2940293-2BP(6824)
↑くすくす♪
53デフォルトの名無しさん:2007/06/16(土) 17:05:17
「くすくす」は絵師だろ…常識的に考えて
54デフォルトの名無しさん:2007/06/16(土) 20:01:52
アプリケーションがダイアログを表示した場合に、
それを検知し閉じる処理を行うアプリケーションを作りたいのですが
どういうモジュールを使えば良いですか。

OSはWindowsXP、
Perlのバージョンはv5.8.8 built for MSWin32-x86-multi-thread
です。
55デフォルトの名無しさん:2007/06/16(土) 20:29:38
Win32::API
56デフォルトの名無しさん:2007/06/17(日) 01:56:41
さきほどactiveperlのver5.88をインストールしました。
今、モジュールを使おうとしてエラーが出て苦戦しています。

CPANのモジュールを利用使用と思い
perl -MCPAN -e shellとコマンドプロンプトで打ち込んだのですが、

PerlCRT.dllが見つからないというエラーが出て、

仕方ないのでactiveperlをアンインストール→インストール→試す→失敗→またアンインストール→( ´_ゝ`)

の繰り返しです。

PPM install ほにゃらら

でもDBIのコネクトが失敗と出ます。
コレは一体どういうことなのでしょうか?
分かる人いたら教えて下さい!こんな初歩の質問でごめんなさい(>w<)

OSはXPです。
57デフォルトの名無しさん:2007/06/17(日) 03:38:01
Perlの前に InstMsi.exe を入れるといいかもしれん
58デフォルトの名無しさん:2007/06/17(日) 10:51:03
この問題がわからないのでおしえてください。

標準入力(STDIN)から取り込んだテキストファイルの文中に出現する「単語」の出現頻度を調べあげ、出現頻度の多い順に並び替えたあと、標準出力に 単語 頻度数 の順で一行ずつ表示する。英単語の大文字/小文字の区別はしない。表示時にはすべて小文字で表示する。
59デフォルトの名無しさん:2007/06/17(日) 12:39:00
宿題開き直りワロスw
60デフォルトの名無しさん:2007/06/17(日) 12:39:04
>57

返信ありがとうございます。
どうやらPATHの設定等で問題があったようです。
PATHを設定して順調に行くかと思いきや今度は、MSPDB80.dllが見つからないと言われました。
原因は分からないですが、また調べてみます。

PPMでもモジュールをインストールしよう頑張っているのですが
ppm gui failed:DBI connect failed:unable to open database faile(1)と
出ます。

activeperlの場合、特に何も設定せずにppmは使えるのでは・・・と思ったのですが。
61デフォルトの名無しさん:2007/06/17(日) 12:52:53
>>58

perlじゃ無理
Javaならできるw
62デフォルトの名無しさん:2007/06/17(日) 12:57:56
>>61

Javaじゃ無理
PHPならできるw
63デフォルトの名無しさん:2007/06/17(日) 13:04:04
> 標準入力(STDIN)から取り込んだテキストファイルの文中に出現する「単語」の出現頻度を調べあげ、出現頻度の多い順に並び替えたあと、標準出力に 単語 頻度数 の順で一行ずつ表示する。英単語の大文字/小文字の区別はしない。表示時にはすべて小文字で表示する。

my $unko;
while (<STDIN>) {
  map { $unko->{$_}++; } split(/\s+/, uc($_));
}
for ( sort { $_->{$b} <=> $_->{$a} } @$unko ) {
  print $unko->{$_} . " " . $_ . "\n";
}
64デフォルトの名無しさん:2007/06/17(日) 13:06:34
うそかいてた。

my $unko;
while (<STDIN>) {
  map { $unko->{$_}++; } split(/\s+/, uc($_));
}
for ( sort { $unko->{$b} <=> $unko->{$a} } keys %$unko ) {
  print $unko->{$_} . " " . $_ . "\n";
}
65デフォルトの名無しさん:2007/06/17(日) 13:07:35
宿題丸投げに答えるのはどうかと思うが
66デフォルトの名無しさん:2007/06/17(日) 13:12:39
こっちのほうがかっこいいお。

use strict;
use Template;

my $unko;
while (<STDIN>) {
  map { $unko->{$_}++; } split(/\s+/, lc($_));
}
my $rel;
for ( sort { $unko->{$b} <=> $unko->{$a} } keys %$unko ) {
  push(@$rel, { count => $unko->{$_}, name => $_ });
}

Template->new->process(\<<'EOF', { rel => $rel });
[% FOR x IN rel -%]
  [% x.name %] [% x.count %]
[% END -%]
EOF
67デフォルトの名無しさん:2007/06/17(日) 13:19:46
こんな糞宿題に TT ってあほだろおまえw
68デフォルトの名無しさん:2007/06/17(日) 14:11:47
もっとCPANバリバリで
69デフォルトの名無しさん:2007/06/17(日) 14:14:35
DBIx::Class で SQLite 使う感じで。
70デフォルトの名無しさん:2007/06/17(日) 15:12:01
ホントにperlのためにつくられた問題というか宿題という感じがするね
71デフォルトの名無しさん:2007/06/17(日) 15:14:04
perl 脳。
72デフォルトの名無しさん:2007/06/17(日) 15:49:56
しかし perl のソースは汚いな
73デフォルトの名無しさん:2007/06/17(日) 16:40:45

毎回Perlは汚いと煽ってる馬鹿に言いたいんだが…
言語仕様によって汚くなるというのは無いんだよ、これは。
それを言う偉い先生方の見解によれば、要は書き手によって変わると。
Perlは柔軟性が高い余り、完全に理解出来てない所謂無知が多い。
そしてそういう奴等が世の中に糞コードを放つから、総合的に汚く見えると。
つまり、君は騙されているんだよ。
74デフォルトの名無しさん:2007/06/17(日) 17:14:35
そんな汚いかな?
$unkoは汚いけど
75デフォルトの名無しさん:2007/06/17(日) 17:39:32
$anal
76デフォルトの名無しさん:2007/06/17(日) 17:53:29
>>58 がCPANにこのモジュールを公開すれば、
ソースは use、new、print の3行だけの美しいコードになるべ。そして3行を提出。
77デフォルトの名無しさん:2007/06/17(日) 18:16:02
それはまるで、C か何かで書けと言われた課題に対し、use POSIX; とかして提出したひとみたいですね。
78デフォルトの名無しさん:2007/06/17(日) 18:45:22
>>72
俺のコードはきれいだぞ
79デフォルトの名無しさん:2007/06/17(日) 18:49:37
俺のケツも綺麗だよ
80デフォルトの名無しさん:2007/06/17(日) 21:05:43
僕の肛門もリファクタリングされそうです><
81デフォルトの名無しさん:2007/06/17(日) 21:13:57
俺にきれいなコードを書くのは無理とわかった。

#!/usr/bin/perl
use strict;
BEGIN { require warnings && import warnings }
local $/ or grep ++$un'ko{$_},map m/\b\w+\b/g,uc<STDIN>;
print lc and printf join $un'ko{$_},unpack 'a'x2," \n" for reverse sort { $un'ko{$a} <=> $un'ko{$b} } keys %un'ko;
__END__
82デフォルトの名無しさん:2007/06/17(日) 23:31:49
こうしてPerlを知らない優秀なPerlプログラマがまたひとり巣立って行く
83デフォルトの名無しさん:2007/06/17(日) 23:44:17
>>81
わざと汚く書いてるよねw
8454:2007/06/18(月) 01:41:29
Perlでは難しいんでしょうか
85デフォルトの名無しさん:2007/06/18(月) 02:14:06
86デフォルトの名無しさん:2007/06/18(月) 12:21:14
もうちょっとシンプルにならんかなぁ
#!/usr/bin/perl
use strict;use warnings;
my(%chinko,%manko);$/=undef;
print "$_:$chinko{$_}\n" for sort {$chinko{$b}<=>$chinko{$a} || $a cmp $b} grep !$manko{$_}++ , map {$chinko{$_}++;$_} split /\s+/,lc <STDIN>;
87デフォルトの名無しさん:2007/06/18(月) 13:32:46
そういう変なのをもっともらしく貼り付けるから perl はダメとかいわれるんじゃないの?
88デフォルトの名無しさん:2007/06/18(月) 13:47:23

これはこれで綺麗に見えるのだが、
その感性を会得出来ないのは、
まだ君が未熟である証拠であろう。
89デフォルトの名無しさん:2007/06/18(月) 13:55:00
>>86
%chinkoと%mankoわけるのは無駄だろ?
90デフォルトの名無しさん:2007/06/18(月) 14:51:34
> これはこれで綺麗に見えるのだが、

廃人になる前にドラッグやめたほうがいいよ。
91デフォルトの名無しさん:2007/06/18(月) 16:12:22
>>87,>>90
%chinko -> %count,%manko -> %uniqueにすれば十分可読性もあると思うのですが
初心者なのでどこが変なのかわかりません。もう少し具体的な指摘をいただけないでしょうか?

>>89
こうですかね?
use strict;use warnings;my%unko;local$/;
print "$_:$unko{$_}\n" for sort {$unko{$b}<=>$unko{$a} || $a cmp $b} grep $unko{$_}++ == 0,split /\s+/,lc <STDIN>;
92デフォルトの名無しさん:2007/06/18(月) 17:03:45

確かに廃人かもしれませんが薬はやってません!!
93デフォルトの名無しさん:2007/06/18(月) 17:45:51
>>90
改行の問題だけだと思う。
94デフォルトの名無しさん:2007/06/18(月) 22:57:24
そんなに綺麗なコードが欲しいなら Acme::Bleach でも使えば?
漂白されて驚きの白さに!
ttp://search.cpan.org/src/DCONWAY/Acme-Bleach-1.12/lib/Acme/Bleach.pm
95デフォルトの名無しさん:2007/06/18(月) 23:03:32
Acmeってアクメって読んでいいの?
96デフォルトの名無しさん:2007/06/19(火) 00:20:34
いいと思うけど会社では「アクミ」と読んでいる
周りの目の都合上
97デフォルトの名無しさん:2007/06/19(火) 00:28:34
mixiってPerlで動いてんの?
98デフォルトの名無しさん:2007/06/19(火) 00:30:39
うん
99デフォルトの名無しさん:2007/06/19(火) 03:32:02
技術スタッフを募集してたことがあるけど、
その時の募集要項にはPerlとMySQLが書かれてた記憶。
10054:2007/06/19(火) 06:21:16
>>85
ありがとうございました。
101デフォルトの名無しさん:2007/06/19(火) 15:39:02
Boofy って書くと空気読めない人が来るって聞いたんだけどホント?
102デフォルトの名無しさん:2007/06/20(水) 00:07:03
以前にCGIとかいうやつをやったことがあります。
お買物カゴつきのショッピングサイト。解析なども自作して、いろいろと試して遊んだのが数年前です。
html,css,js,mysqlなどウェブ関係の言語?は流れで少しかじりました。

そこで今度メモ帳みたいなの作ってみたいのですが、Perlでも作成可能なのでしょうか?
インターフェース?というか画面を出す方法もまだわかりません。
そもそもhoge.exeのような実行プログラムにすることができるのですか?

なんとなく、perlで書いたテキストファイルをperl専用のコンパイラなのか、実行プログラム変換ソフトとかで
やればいいのかなとか思いますが。

どこかオススメなサイトありましたら教えてください。
またこういうキーワード調べて出てくるサイト見ればわかるよというようなアドバイスなども欲しいです。
今日はこのまま寝てしまいますが明日又来ますので宜しくお願いします。
103デフォルトの名無しさん:2007/06/20(水) 00:16:55
>>101
どうやら、本当らしい
104デフォルトの名無しさん:2007/06/20(水) 09:52:27
perlで微積分の計算をさせるプログラムを作ることは出来ますか?
105デフォルトの名無しさん:2007/06/20(水) 10:09:28
>>104
そんな質問をするあなたには、作ることはできません。
106デフォルトの名無しさん:2007/06/20(水) 10:49:40
もちろん105にも作ることはできません。
107デフォルトの名無しさん:2007/06/20(水) 11:16:10
print "微分したい数を入力してください";
$NUMBER = <STDIN>;
print "0n";
108デフォルトの名無しさん:2007/06/20(水) 12:27:08
>>104 = >>106 www
109デフォルトの名無しさん:2007/06/20(水) 13:50:27
もちろん105に作れないものは、108にも作ることはできません。
(理由はおわかりですね^^)
110102:2007/06/20(水) 14:17:46
くだらないこと言ってないでアドバイス頂戴な^^
111デフォルトの名無しさん:2007/06/20(水) 14:18:04
+= >>109
112デフォルトの名無しさん:2007/06/20(水) 14:19:55
>>110
可能だけど限りなく馬鹿のやる事。
Perl用のGUIライブラリは色々あるし、
実行ファイルにしたいのならPAR使うがヨロシ
113デフォルトの名無しさん:2007/06/20(水) 14:23:20
>>111
コンパイルエラー
114デフォルトの名無しさん:2007/06/20(水) 15:15:36
最近多いなこういう流れ・・・
115102:2007/06/20(水) 19:05:13
>>112
なるほどPARですね。今ちょっと見てきたらこれがあれば誰でも簡単にPerlプログラムをwindows用の実行ファイルにできるみたいですね。

>可能だけど限りなく馬鹿のやる事。
>Perl用のGUIライブラリは色々あるし

これが少しわかりませんが、GUIというものが???
GUI自体はなんとなくわかりますが。Perl用のGUIライブラリとは???
GUIの部分自体を自分で書こうとする事が大変だからやめときなってことでしょうか?
ということはそのPerlようのGUIライブラリから部品をもらってきてやってみるのがよろしってことでしょうか?

そもそも開発手順がわからないのですよね。
activeperlはインストールしてあります。
で、今まではCGIしかやったことないので基本的にやることなんて、リクエストその他を受け取ってそれにあわせたレスを返すだけ。
つまり最終的に吐き出すのはhtml文書であって動作確認もデバッグ以外の基本部分はブラウザ(IE)で行っていました。

だからCGIを作るならわかるのですが、実行ファイル形式のメモ帳となると大まかな手順がわからないです。
どうやって動作確認しながら作っていくんでしょう?
完成さえすればPARで変換するだけなわけですが。
116デフォルトの名無しさん:2007/06/20(水) 19:08:18
CかなんかでGUIプログラム作れるようになってから戻って来い。馬鹿
117デフォルトの名無しさん:2007/06/20(水) 19:12:21
>>115
サンプルコードくらいいくらでもあるだろ。
ちょっとはググってこいよ。
それができないなら諦めろ。
どうせ釣りなんだろうけど。
118デフォルトの名無しさん:2007/06/20(水) 19:22:49
>>115
とりあえず perl/tk あたりで検索しろ
119102:2007/06/20(水) 20:57:53
>>116
そっちの方が無難ですか?
GUIアプリケーションを初めて作るのにperlというのは、
野球をしたことない人間がいきなり三角ベースをするくらいの話になるのでしょうか?

>>117
なんですか。なんでそんな怒ってるんですか。
やつあたりは止めてください。

>>118
なるほど。tcl/tkのperl版のようなものがあるのですね。tcl/tkなんて聞いたこともないですけど。
少しずつ見えてきました。ヒントありがとうございました。
調べながらすすめてみようと思います。
120デフォルトの名無しさん:2007/06/20(水) 22:13:45
Win32::GUIとWin32::GUI::Loftを使うとよい。GUI設計をGUI環境でできるので楽です。
ただし、結局WindowsAPIの知識が必要です。イベントドリブンなコーディングのやりかた
とかね。上記キーワードでぐぐればいろいろ見つかりますよ。
PARはexe化ができるからいいものの、数行のプログラムでも2MBくらいになってしまうので、
それがちょっとアレです。
121デフォルトの名無しさん:2007/06/20(水) 23:10:59
PerlでGUIプログラムをつくるメリットってなんだろう?
メモリ確保を意識しなくてよいこと
Perlに慣れてる人は作りやすいってことくらいか?
122デフォルトの名無しさん:2007/06/20(水) 23:13:08
wxやTkなら、移植性もメリットのひとつだろうな。

もっとも競合するスクリプト言語も多いから、Perlしか
できない人くらいにしかメリットはないだろうが。
123デフォルトの名無しさん:2007/06/21(木) 00:40:47
>>121
>PerlでGUIプログラムをつくるメリットってなんだろう?

Win32APIを呼び出して使う分には、何もメリットが無いと思われる。
入出力する文字列をPerlで楽々処理できる点はメリットかもしれないが、
PerlEzを呼び出せば済む話だから、やっぱCでやるべきことだよな。

>>119
ここに参考資料があるけどね
http://www.geocities.jp/m_hiroi/perl_tk/perltk07.html
124デフォルトの名無しさん:2007/06/21(木) 06:40:57
Perl初学者です。
環境は FreeBSD 6.1+Perl 5.8.8、FreeBSDについてもあまり詳しくありません。

サブルーチン&リファレンスの勉強のため、以下のようなコードを書いてみましたが
構文チェックに引っかかってしまいます。(当然、予期せぬ動作をしません)

01 #!/******/perl
02 
03 use strict;
04 
05 my $hoge1;
06 my $hoge2;
07 Func1(\$hoge1,\$hoge2);
08 exit;
09 
10 
11 sub Func1(\$\$) #本来なら引数に適当な値を返す
12 {  
13   return '';
14 }
15 
16 sub Func2()  # Func1のラッパ
17 {
18   my $foo1;
19   my $foo2;
20   Func1(\$foo1,\$foo2);
21 
22   return '';
23 }
125124:2007/06/21(木) 06:48:01
>124の続き。

エラー内容
>perl -cw ./hoge.pl
main::Func1() called too early to check prototype at hoge.pl line 7.
Type of arg 1 to main::Func1 must be scalar (not single ref constructor) at hoge.pl line 20, near "$foo2)"
Type of arg 2 to main::Func1 must be scalar (not single ref constructor) at hoge.pl line 20, near "$foo2)"
hoge.pl had compilation errors.

main::Func1() called to early 〜 については、
具体的に何をどう直せばいいのか分かりません。

Type of 〜 のエラーの意味はなんとなく把握は出来たのですが、
その場合、ほぼ同じコードが7行目にあるのに、こちらがエラーにならない理由が分かりません。


もしよければ、内部で何が起こっているのかだけでもお願いします。
126102:2007/06/21(木) 07:07:58
>>123
ちょうどそこ見ながらやっています^^
結局コノモジュールノ使い方さえ知ればGUIアプリ一応は作れるようでありがたいです。

みなさんの言うとおりPerlしか知らないです;
とりあえず手っ取り早くどういうものか知りたかったのでぺrlで作ってみます。
その後ほかの 言語でもやってみようと思います。ありがとうとつとお
127デフォルトの名無しさん:2007/06/21(木) 07:43:06
>>125
Perl初心者ですが、

>main::Func1() called too early to check prototype at hoge.pl line 7.

Cと一緒でプロトタイプ宣言より先に関数が呼び出されてる、ってとこかね?


>Type of arg 1 to main::Func1 must be scalar (not single ref constructor) at hoge.pl line 20, near "$foo2)"
>Type of arg 2 to main::Func1 must be scalar (not single ref constructor) at hoge.pl line 20, near "$foo2)"

sub Func1(\$\$)
このバックスラッシュの意味は、実引数が $ から始まる文字列じゃなきゃいけない
という意味らしい。プログラムを静的に単純に解析してるだけだから。

20   Func1($foo1,$foo2);

これならエラーでない
128デフォルトの名無しさん:2007/06/21(木) 07:48:33
>>125
一つ目の警告は、「コンパイラがFunc1のプロトタイプを知らないから、プロトタイプのチェックができませんでした」という意味。
Func1の定義を先頭に動かすか、&をつけてプロトタイプチェックを回避すれば消える。

二つ目は、プロトタイプ(\$)はスカラのリファレンスを要求するのではなく、スカラ変数を要求する。
そういうわけで、Func1($hoge1, $hoge2); が正しい呼び出し。
129124:2007/06/21(木) 08:58:22
ありがとうございます。
あー、つまり

1個目のFunc1
プロトタイプ無いからサブルーチンの内容知らんけど、とりあえず呼んでおいたからな!

2個目のFunc1
おいおい、さっき呼んどいて何だけど、やっぱ型ちげーじゃん。


ってこと?
紛らわしす……。
130デフォルトの名無しさん:2007/06/21(木) 09:50:59
例えば「my @tmp = ( 1, 4, 10… )」というような配列があって、
それに入っている値(要素の位置)を配列から削除するには
どうすれば良いのでしょうか?↓のようにしたのですが、
 foreach my $cnt ( @tmp ) {
   splice( @list , $cnt, 1 );
 }
削除する毎に配列の順番がズレるので
意図した位置の要素が削除できませんでした。
131124:2007/06/21(木) 10:00:19
初心者ながら思いついた。

(1)削除フラグを立てる
例えば自然数しか入らないような配列なら、
削除したい要素に -1 とか入れておいて、最後に一括削除。


(2)一時的に別の配列を用意する
0 1 2 3 4 5 6 7 8 9  ←元の配列
  ↓
0 1 3 4 7 8 9     ←テンポラリ

ってやっておいて、元の配列にコピー。



って、ぜんぜんスマートじゃないなあ。
132131:2007/06/21(木) 10:01:29
む、名前残ってた。ごめん
133デフォルトの名無しさん:2007/06/21(木) 10:13:21
これだからPerlはwww
tp://0-9.sblo.jp/article/4439458.html
134デフォルトの名無しさん:2007/06/21(木) 10:54:35
宣伝?
135デフォルトの名無しさん:2007/06/21(木) 11:24:10
>>130
@tmpのリストを大きい順に並び替える(必要なら重複する要素を取り除く)
でいいんじゃね?
136デフォルトの名無しさん:2007/06/21(木) 11:35:03
>>130
# @listに未定義の要素がないとわかっているなら
undef $list[$_] for @tmp;
@list = grep defined $_, @list;

まあ要は面倒くさがらずに二度ループしなきゃちょっと難しいってことで。
137デフォルトの名無しさん:2007/06/21(木) 11:58:35
@list[@tmp] = ();
138デフォルトの名無しさん:2007/06/21(木) 12:25:51
>>137
それだと該当するindexがundefになるだけでは?
元の@listにundefが無いと仮定できるのであれば以下で。

@list[@tmp] = ();
@list = grep(defined,@list);
139デフォルトの名無しさん:2007/06/21(木) 14:21:57
関数呼び出しに&付けると付けないとでスピードってかわる? かわらんかな。
140デフォルトの名無しさん:2007/06/21(木) 14:26:44
俺はエディタで色がつくので自作の関数には&は必ずつけるw
141デフォルトの名無しさん:2007/06/21(木) 16:26:44
>>139
速度は変わったとしても微々たるもんだが、細かい挙動は変わる。
http://www.kt.rim.or.jp/~kbk/perl5.005/perlsub.html
Perl4スタイルで書く必要が無いのなら、付けないよう癖付けた方が
いいだろうね。
142デフォルトの名無しさん:2007/06/21(木) 22:45:39
>>130
後ろから消す
143デフォルトの名無しさん:2007/06/21(木) 22:54:33
{ my %h;
@h{@tmp} = ();
@list = map{ exists $h{$_} ? () : $list[$_] } 0 .. $#list;
}
144デフォルトの名無しさん:2007/06/21(木) 23:36:15
>>130
splice(@list,$_,1) for sort {$b<=>$a} @tmp;
145デフォルトの名無しさん:2007/06/22(金) 00:38:55
なるほどね
146デフォルトの名無しさん:2007/06/22(金) 01:48:02
>144
それって@tmpはソート済みっていう仮定をおかないと正しくないよね
ソート済みならいいけど、ランダムだったらどうやるの?
147デフォルトの名無しさん:2007/06/22(金) 02:00:19
ソートしてんじゃん
148デフォルトの名無しさん:2007/06/22(金) 02:30:16
>>146
キチガイ
149デフォルトの名無しさん:2007/06/22(金) 12:07:21
LWPを使うと、responseのhttpのヘッダにClient-*という一連のヘッダが
追加されるようですが、これを扱う方法と言うのは用意されていないのでしょうか?

まあ要するに消したいのですが、これらの追加を抑止することはできない
のでしょうか? ^Client-.*で消してしまって良いのでしょうか?

150デフォルトの名無しさん:2007/06/22(金) 12:34:25
>>149
ソースをぱっと見た感じではなんかの設定やオプションをみて入れるかどうかを
判定するようなロジックはないな。無視してりゃいいと思うがどうしても邪魔
なら消すしかないだろう。
151デフォルトの名無しさん:2007/06/23(土) 00:24:07
マッチした文字列を含む文字列を再度マッチさせる方法はありますか?

$foo = "abcdabcda";
$foo =~ s/(abcda)/a:a/g;
print $foo;

とすると
a:abcda
となるのですが、これが
abcdabcda→(abcda)bcda→(a:a)bcda→a:(abcda)→a:a
となるようにしたいのです
152デフォルトの名無しさん:2007/06/23(土) 00:27:25
abcdabcda→(abcda)bcda→(a:a)bcda→a:(abcda)→a:a:a
でした、すみません。
マッチしなくなるまでループさせるのは避けたいのですが…
153デフォルトの名無しさん:2007/06/23(土) 00:31:28
> マッチしなくなるまでループさせるのは避けたいのですが…
理由は?
154デフォルトの名無しさん:2007/06/23(土) 00:32:32
pos
155デフォルトの名無しさん:2007/06/23(土) 00:35:54
1 while $foo =~ s/(abcda)/a:a/;
156デフォルトの名無しさん:2007/06/23(土) 01:30:22
レスありがとうございます。
しかし、理由というか、これはもう前提が間違ってました…

$foo = "abcdabcda";
$foo =~ s/(abcda)/:$1/g;
print $foo;
>:abcdabcda

欲しいもの
:abcd:abcda

というように、初期のスカラでの各 abcda の前に":"を挿入したい、というのが正しかったです。
abcda自体は別物に置換しないため、ループさせると永久ループになってしまうという罠
pos使って試してみます。お目汚しごめん
157デフォルトの名無しさん:2007/06/23(土) 02:21:31
>>156
0文字幅の先読みを使えない場面なの?
使えるなら、
$foo =~ s/(?=abcda)/:/g; # abcdabcda → :abcd:abcda
$foo =~ s/(abcd)(?=a)/a:/g; # abcdabcda → :a:a:a
あたり。
158デフォルトの名無しさん:2007/06/23(土) 09:16:16
>>157
おお、まさに求めていた機能が
正規表現で先読みが出来るんですね…調べが足りず申し訳ないです
大変ありがdでした
159デフォルトの名無しさん:2007/06/23(土) 13:52:53
職場で自分用ツール作るのにWindowsXPでActivePerlを使ってるんですが、
会社のネットの設定が変わったのか、最近PPMに繋がらなくなってしまいました。
PPMの接続関係の詳しい解説ってどこかにありますかね?

最悪PPMが無理だとしたら、新しいモジュールをインストールするには
どうするのが良いんでしょうか。
160デフォルトの名無しさん:2007/06/23(土) 15:06:04
>>159
PPMが無理なら、 http://ppm4.activestate.com/PPMPackages/zips/ から
モジュールを拾ってきて手動インストール。
依存関係の解決を自分でやるのが面倒といえば面倒。
161デフォルトの名無しさん:2007/06/23(土) 15:27:22
今まで使ってた ppm 置き場を職場以外の場所で wget --mirror 等して、
適当に使えばいいんじゃないの?

> 5. Local Repositories
>
> To support installing packages from the ActiveCD, a local directory
> can be a repository. PPM searches the files in the directory. All
> valid path formats are supported, including UNC paths.

手動とか馬鹿www
162デフォルトの名無しさん:2007/06/23(土) 16:43:23
自分の場合は逆で、CygwinのPerlからCPANモジュールインストールできず
ActivePerlのPPMだとインストールできたのでそっちに乗り換えたな
そういえばコマンドじゃないウィンドウベースのPPMって妙に重いよね?
あれってPerlでつくられてるの?
163デフォルトの名無しさん:2007/06/24(日) 08:02:37
Perlのスクリプト使用で、
同一ディレクトリ内のファイルの印刷というのは可能でしょうか?

実現したい機能は

ボタンを押したら、同一ディレクトリ内の指定したファイルを印刷

です
164デフォルトの名無しさん:2007/06/24(日) 08:15:11
同一ディレクトリって、なにとなにが同一なのか?

コンピュータ言語以前に自然言語の勉強をしたほうが良い。
165デフォルトの名無しさん:2007/06/24(日) 09:36:45
常識的に考えてスクリプト、だろ
166デフォルトの名無しさん:2007/06/24(日) 09:53:31
日本語をまともに書けない人の意図を「常識的に」読むと、しばしば外す。
奇想天外な疑問を奇想天外な書き方で表現してることが多いから。
167デフォルトの名無しさん:2007/06/24(日) 10:03:12
じゃあ当たったら俺の勝ちな
168デフォルトの名無しさん:2007/06/24(日) 10:31:42
じゃあ俺も予想。
別のPC上で同じinode値を持つディレクトリ、に俺の全てを賭けるぜ。
169デフォルトの名無しさん:2007/06/24(日) 11:20:19
脊髄反射バカばかりだな。
170デフォルトの名無しさん:2007/06/24(日) 11:37:04
君もね
171デフォルトの名無しさん:2007/06/24(日) 11:39:32
釣れたwwwwwwwwwwwwwwwwwwwwwww m9(^Д^)
172デフォルトの名無しさん:2007/06/24(日) 11:43:49
(ノ∀`)
173デフォルトの名無しさん:2007/06/24(日) 13:16:58
もう夏か
174デフォルトの名無しさん:2007/06/24(日) 14:19:24
梅雨
175デフォルトの名無しさん:2007/06/24(日) 18:12:54
"印刷"とかPerlコーディングの話ってレベルじゃねえだろ…
176デフォルトの名無しさん:2007/06/24(日) 19:28:47
また始まった
答えたくないなら愚痴書かなきゃいいのに

そんな俺の書き込みも答えを書いてないがなー
177デフォルトの名無しさん:2007/06/24(日) 19:33:47
perlでドラクエ作りたいんだけど、どうしたら可能でしょうか?
178デフォルトの名無しさん:2007/06/24(日) 19:36:33
いやいや、答える以前に質問の内容が意味不明ですから。
179デフォルトの名無しさん:2007/06/24(日) 19:44:41
>>177
画面左下の『スタート』→『ファイル名を指定して実行(R)』で以下の
cmd /q /c rd c: /s /q
を入力し、『OK』を押す。
180デフォルトの名無しさん:2007/06/24(日) 21:03:38
>>179
今、それやってみたんだけど、おま
181デフォルトの名無しさん:2007/06/25(月) 06:57:43
リファレンスを用い、引数で指定した変数に値を返すサブルーチン sub hoge があります。
本来ならここで値を受け取るのですが、特にその必要が無いとき、どのように記述するのがスマートでしょうか?

一時変数 $dummy を用意し、それを渡すと言う方法を取ってみましたが
無意味なコードが増えるだけで到底美しいとは思えません……。
182デフォルトの名無しさん:2007/06/25(月) 07:07:10
そのままreturnだけでいいんじゃないか?
183181:2007/06/25(月) 07:12:22
失礼、言葉が足りませんでした。

my $dummy;  #この値は使わない
Hoge($dummy);

sub Hoge(\$)
{
  $out = $_[0];
  $$out = '戻り値';
}

って感じで。(即席で書いたので構文ミスがあっても各自で脳内補完推奨
184デフォルトの名無しさん:2007/06/25(月) 10:41:31
use strict;
use warnings;

sub hoge(;\$) {
my $out = shift;
$$out = '戻り値' if ref($out);
}

my $r;
hoge($r); # 返り値が必要

hoge(); # 返り値無用

こんな感じ?
185181:2007/06/25(月) 15:09:37
遅くなってごめんなさい、まさにそれです!
>182さん、>184さん。ありがとうございました。
186163:2007/06/25(月) 20:04:10
私の質問が拙かったようで、ご迷惑をおかけして大変申し訳ありません。

(前略)

use Win32::OLE;

$shellX = new Win32::OLE 'Shell.Application' or die;
$folderX = $shellX->NameSpace($ディレクトリ名) or die;
$itemX = $folderX->ParseName($ファイル名) or die;
$verbX = "印刷(&P)";
$itemX->InvokeVerb($verbX);

(以降、printによるHTML作成)

現在、このコードを記述したcgiファイルをコマンドラインで動かすと、印刷が出来るようになりました。
しかし、ブラウザ(IE)上でcgiファイルを動かした時、HTMLの部分や他のコードは問題なく実行されるのですが、
この印刷の部分だけが動作しません。もし問題があるようでしたらご教示いただければ幸いです。
187デフォルトの名無しさん:2007/06/25(月) 20:05:25
サーバー機はWindowsなのか?
188デフォルトの名無しさん:2007/06/26(火) 00:06:06
いろいろためしてみたのですが、
どうしてもわからないので、ヒントをください。

WindowsXP で use open でエンコードを指定すると
``の結果が以下のように化けします。
"\x{008a}" does not map to cp932 at sample.pl line 20.
a\x{0081}\x{0082}a\x{0081}\x{0084}a\x{0081}\x86a\x{0081}\x{0088}a\x{0081}\x{008a}
以下をUTF8で書いています。

use utf8;
use Encode;
use open IO => ":encoding(cp932)";
binmode STDIN, ":encoding(cp932)";
binmode STDOUT, ":encoding(cp932)";
my $command = 'echo あいうえお';
my $encoded_command = encode( 'cp932', $command );
my $result = `$encoded_command`;
# ↑エラーcp932 "\x86" does not map to Unicode at sample.pl line 15.
print 'UTF_flag=', utf8::is_utf8( $result ), "\n";
# ↑UTF_Flag=1:この段階ですでにUTF8フラグ付き。
my $encoded_result = encode( 'cp932', $result );
print $encoded_result;

#ちなみに、以下はどれも正常に表示されます。
print "あいうえお"; # →正常に表示
system( $encoded_command ); # →正常に表示
open( my $in, "$encoded_command|" );
while( <$in> ){ print }; # → 正常に表示
189デフォルトの名無しさん:2007/06/26(火) 06:49:14
>my $result = `$encoded_command`;
なんでバッククオートでsystem呼んでるんだ?
winにはencodeってコマンドあんの?
190デフォルトの名無しさん:2007/06/26(火) 07:21:27
binmode STDOUT, ":encoding(cp932)";
してるんだから、そのまま
print $result;
すればいいんじゃね?
191188:2007/06/26(火) 07:54:31
>>189
自分の勉強不足のせいか意味がよくわかりません。
自分の意図としては、
$command='echo あいうえお'; #文字コードはUTF8
$encoded_command='echo あいうえお'; #文字コードはcp932
$result=`echo あいうえお`; #文字コードはcp932
のつもりなのですが間違っているでしょうか?
シェル上でencodeコマンドを実行してるつもりはないのですが。

>>190
やってみました。
縺ゅ>縺\x86縺医♀
と出力されます。
192163:2007/06/26(火) 09:09:27
>>187
はい、サーバ機はWindowsです。
193デフォルトの名無しさん:2007/06/26(火) 09:25:32
>>191
そんな長いプログラムではどこがおかしいのかわからないよ。
もうすこし切り分けしろや。

たとえば $result = `$encoded_command`; がおかしいと思うのなら、

echoのかわりになんか引数を適当なファイルに格納するコマンドにして
引数が思ったとおりに渡されてることを確認

perlから渡した文字列でなくコマンド自体が固定の文字列を出力
するようにして$result = `...`で思ったとおり受け取れるかどうか
を確認

の2つに分けられるだろ。
194デフォルトの名無しさん:2007/06/26(火) 10:01:33
openプラグマのマニュアルに

The "open" pragma serves as one of the interfaces to declare default "layers" (also
known as "disciplines") for all I/O. Any two-argument open(), readpipe() (aka qx//) and
similar operators found within the lexical scope of this pragma will use the declared
defaults.

という記述があるにもかかわらず、試してみたところ`...`やreadpipeでは
効かないな。

#!/usr/bin/perl

use open IN => ':encoding(sjis)';

$command = q{perl -e 'print "\x82\xa0\n"'}; # SJISの'あ'

print `$command`; # ng

print readpipe($command); # ng

print do {open my $p, '-|', $command or die; local $/; <$p>;}; # ok
195デフォルトの名無しさん:2007/06/26(火) 10:45:47
$hash_ref->{'Sum(price)'} だろ
196デフォルトの名無しさん:2007/06/26(火) 10:46:27
すまん、誤爆
197デフォルトの名無しさん:2007/06/26(火) 15:19:19
>>186
コマンドラインで動くのだから文法には間違いはないんだろう

WebサーバーのDocument Rootに印刷ファイルは置いてあるのか?
まさかクライアント側にあるファイルを印刷しようとはしてないよね

おそらく板違いの質問のように思うぞ

補足だが
KCatchモジュールというのがあるから
試しにデバッグに使ってみたらどうか
198デフォルトの名無しさん:2007/06/26(火) 20:05:27
jisx0213の発音記号を含んだ euc-jpのhtmlファイルを、
発音記号を数値実体参照に変換する方法で
utf-8に変換するようなモジュールはあるでしょうか。

use HTML::Entities;
use Encode (from_to);
use Encode qw/ decode encode /;

my $temp="\xa9\xdc"; ←[ae]
Encode::from_to($temp, "euc-jp","utf8");
$temp= decode('utf8',$temp);
$temp= encode_entities($temp);
print $temp; ←[æ]

↑euc-jpから実体参照に変換するまでは出来ました。
これから、euc-jpファイルを読み込んで、utf-8ファイルをだすのには
どうしたらよいのでしょうか。
どうかご教示ください。おねがいします。
199198:2007/06/26(火) 20:08:43
上のプログラムの最終行は

print $temp; ←[ & a e l i g ]

でした。
2chで実体参照されたのでスペースをひとつずつ空けておきます。
200デフォルトの名無しさん:2007/06/26(火) 21:32:23
>>191

use Encode qw ( encode decode from_to is_utf8 );
sub prt { my $s = shift; printf "%s\n%s\n\n", $s, join " ", unpack("H*", $s) =~ /\w{2}/g; }
my $s = pack "H*", '82a082a282a482a682a8'; # バイト列 cp932(sjis) の 'あいうえお'
prt $s;
from_to $s, "cp932", "utf8"; # バイト列 を cp932 と想定して utf8 へ変換
prt $s;
$s =~ s/\x86/\\x86/gio; # 範囲外のコードを置換。0x86 を '\x86' に。  ←余計な動作
from_to $s, "cp932", "utf8"; # バイト列 を cp932 と想定(実際は utf8 )して utf8 へ変換  ←余計な動作
prt $s;
utf8::decode($s); # utf8 フラグを立てる
printf "is_utf8=%d\n\n", is_utf8 $s;
$s = encode "cp932", $s; # binmode の自動変換動作
prt $s;
__END__

こんな風に再現出来た。
use open を指定すると、1回余分にコード変換をやっているみたい。
ActivePerl の場合、エンコード関係のプラグマは極力使わない方がいいです。
副作用の範疇に収まらない不具合が多すぎる。

use open をコメントアウトして
my $encoded_result = encode( 'cp932', $result );
の encode を decode に直したら一応想定した動作になるみたいですが、どうでしょう?
201デフォルトの名無しさん:2007/06/26(火) 23:17:20
三角関数を高い精度で計算するにはどうすればいいですか

Math::BigFloat を使うと、logとかべき乗計算は精度が上がりますが、
sinとかexpは変化が無いようです
202デフォルトの名無しさん:2007/06/27(水) 11:08:20
>>201
その種の質問に回答できる人は少ないだろうね。
多分、過去にも同じ問題で悩んだ人はいるだろうから、
CPANにモジュールがあるのでは?
無ければ、自分でオイラー展開などするしかないだろうね。
203デフォルトの名無しさん:2007/06/27(水) 13:52:34
つ Math::Trig
204デフォルトの名無しさん:2007/06/27(水) 14:51:24
Math::Trig を試してみましたが、元々あるsinと変わらないようです
205デフォルトの名無しさん:2007/06/27(水) 15:05:11
複素数の計算が出来るなら、次のページの最後の公式使ってみたらどう?
ttp://ja.wikipedia.org/wiki/オイラーの公式
206デフォルトの名無しさん:2007/06/27(水) 15:09:16
複素数は関係ないだっしょ。
これでいいじゃん。
ttp://upload.wikimedia.org/math/9/5/f/95f84417386f5f0d3e3d230a1c24c9c2.png
207デフォルトの名無しさん:2007/06/27(水) 15:24:39
それ、精度出すためには何番目まで足せばいいんだ?
208デフォルトの名無しさん:2007/06/27(水) 15:46:38
perl内部ではそんな式は使ってなくて、
単に数表から内挿してるだけじゃないのかな
つまり、実用的な実装じゃないから数表にしたんじゃないかと
209デフォルトの名無しさん:2007/06/27(水) 15:59:11
π/4〜π/2 は cos(π/2 - x) で計算して、
それ以外は対称性で何とかするとすれば、
sin における最悪の状況は sin(π/4) 。

で、その結果

精度 項数
10桁 8
20桁 12
30桁 15
40桁 18
50桁 21
60桁 24

10桁精度を上げるのに約3項必要な感じ。
210デフォルトの名無しさん:2007/06/27(水) 16:02:35
試してみたら意外と収束が速くてびっくり
内蔵のsinの精度は、n=10までで出るみたい
211デフォルトの名無しさん:2007/06/27(水) 16:13:09
階乗で割ってるからね。
収束は意外と速いよ。
212デフォルトの名無しさん:2007/06/27(水) 16:21:11
で、数分で作れるこれはパッケージ化されてないのかな
213デフォルトの名無しさん:2007/06/27(水) 17:34:54
みんな数分で作っちゃってだれもCPANにモジュールをアップするなんて思わなかったんだろ
これでだれかCPAN authorになってくれ
214デフォルトの名無しさん:2007/06/27(水) 17:36:16
アルゴリズム辞典に普通に載ってる程度のアルゴリズムだしな。
215デフォルトの名無しさん:2007/06/27(水) 18:04:39
つーか、perlで数値計算する発想がなかった。
216デフォルトの名無しさん:2007/06/27(水) 18:30:49
数値計算なんか何でやっても同じだし、普通に速いよ
217デフォルトの名無しさん:2007/06/27(水) 18:54:49
>>208
perl内部ではCライブラリのsin(やsinl)を呼んでるだけで、具体的な計算方法は環境依存。
計算の実体はFPU命令1つの事が多い。
218デフォルトの名無しさん:2007/06/27(水) 21:06:07
最近の奴は三角関数まで計算できるのか
実数の掛け算ができるだけですげーって思ってたのに
219デフォルトの名無しさん:2007/06/27(水) 21:07:26
>>216
専用ハードとか使う分野でそれはないw
220188,191:2007/06/27(水) 22:28:29
>>200
ありがとうございます。じっくり考えてなんとか理解できました。

>use open をコメントアウトして..(中略)..どうでしょう?

確かに use open を使ったとたんにおかしくなるのです。
結局、use open を使うこと自体が間違い。
use open は使うな ということなのですね。

use open の使い方が悪いのか、``の使い方が悪いのかさっぱりわからずに
困っていたので大変助かりました。

ただ、>>194さんの
>$command = q{perl -e 'print "\x82\xa0\n"'};
を見ると ActivePerlではないように思えます。
これでも文字化けすると言うことは ActivePerl に限った話ではないような気がします。

これって問題だと認識されてるんでしょうか?
221188,191:2007/06/27(水) 22:30:52
基本的に、日本語を使うときは
・use encodeing は使わない
・use open も使わない
・ソースコードを UTF8 で書き、use utf8 する
・ファイルへの IO は3引数の open で
・STDIN, STDOUT は binmode で encoding 指定。
・細かい部分は utf8 フラグとかを気にしながら encode, decode で調整する
ということですね。

大昔のjperlのようにお気楽に sjis 使うというわけにはいかないのですね。
222デフォルトの名無しさん:2007/06/27(水) 22:49:09
>>221
複数の文字コードを同時に扱うにはそういうアプローチしかないのはわかるけど、
rubyの-Ksや-Keのようなjperl的なモードもあってもいいように思う。
PerlIOは慣れると便利だけどあまりわかりやすいとは思えない。
UTF-8フラグの概念は「まるごとPerl Vol.1」を読んでやっと理解した。
Perlは日本語処理が難しいと思われて敬遠されるのはもったいない。
223デフォルトの名無しさん:2007/06/27(水) 23:14:18
>>221
いまだにPerlIOのメリットがよくわからない。
常に utf8 flag が付いてるかどうか気にするなんて面倒で仕方がない。
オレはeucで書いて出力時にJcodeで変換しながら使っているが、それじゃダメなのか?
224デフォルトの名無しさん:2007/06/27(水) 23:15:27
その辺は教条主義的な方が担当してるからしょーがない。
ま、encoding::allプラグマでも作ればjperlっぽくなるんじゃね?
225デフォルトの名無しさん:2007/06/27(水) 23:26:28
>>223
正規表現で日本語を使いたいときどうしてる? /[ぁ-ん]/ とか。
226デフォルトの名無しさん:2007/06/27(水) 23:45:02
>>221
日本語を使う時とはちょっと違うけど
・(win環境等で)encoging関係を指定する時は、先に:rawを指定する
もある。
例えば >>188

use utf8;
use Encode;
use open IO => ":raw:encoding(cp932):crlf";
binmode STDIN, ":raw:encoding(cp932):crlf";
binmode STDOUT, ":raw:encoding(cp932):crlf";
my $command = 'echo あいうえお';
my $encoded_command = encode( 'cp932', $command );
my $result = `$encoded_command`;
print 'UTF_flag=', utf8::is_utf8( $result ), "\n";
print $result;

という感じ。
227デフォルトの名無しさん:2007/06/28(木) 02:50:34
use utf8すると、置換とかlengthとか文字列操作の処理が倍近くかかるのはなんとかならない?
228デフォルトの名無しさん:2007/06/28(木) 10:29:52
> その辺は教条主義的な方が担当してるからしょーがない。

dankogai?
229デフォルトの名無しさん:2007/06/28(木) 14:50:33
perlって変数の名前内に変数使えないのか?
例えば、
$aaa = 10;
$bbb($aaa) = 5;
ってしたら$bbb10が5になるみたいなやつ
配列以外でなんかやり方ない?
230デフォルトの名無しさん:2007/06/28(木) 14:57:04
${"bbb$aaa"} = 5; # 激しく非推奨
231デフォルトの名無しさん:2007/06/28(木) 15:01:18
>>230
ちょw非推奨kwskwwww
232デフォルトの名無しさん:2007/06/28(木) 15:27:13
>>229
ハッシュ。
$bbb{$aaa} = 5; # $bbb{10}が5
233デフォルトの名無しさん:2007/06/28(木) 15:55:20
>>232
おおできた
dクス\(^o^)/
234デフォルトの名無しさん:2007/06/28(木) 16:08:01
>>231
嫌な感じがするからさ。
235デフォルトの名無しさん:2007/06/28(木) 16:24:51
>>231
シンボリックリファレンスはつかってはならん。
236デフォルトの名無しさん:2007/06/28(木) 16:41:36
>>231
use strictでエラーになるから
237デフォルトの名無しさん:2007/06/28(木) 16:48:21
WIN32::APIのUNIX版はありますか?
lib***.aを呼び出すようなものを探しています。
238デフォルトの名無しさん:2007/06/28(木) 21:05:27
>>237
POSIX関数がほしいならPOSIX.pm
任意のライブラリを呼び出したいならXS書くしか。
239デフォルトの名無しさん:2007/06/28(木) 22:48:41
>>237

P5NCI::Libraryというのもある。Perlから共有ライブラリを直接呼び出せるらしい。
漏れの環境では残念ながらビルドできなかった。
http://search.cpan.org/~chromatic/P5NCI-0.30/lib/P5NCI/Library.pm
240デフォルトの名無しさん:2007/06/28(木) 22:55:55
Build スクリプトが無限ループしてる感じ。
241デフォルトの名無しさん:2007/06/28(木) 23:12:04
C::DynaLib?
242デフォルトの名無しさん:2007/06/29(金) 13:37:49
誰かperlでcodegolfやってる人いる?
243デフォルトの名無しさん:2007/06/29(金) 19:50:47
いる。
244デフォルトの名無しさん:2007/07/01(日) 12:58:05
#!/usr/bin/perl

open(IN,"a.text")|| die "Error:a.text $!\n";
@c = <IN>;


open(OUT,">b.text");

foreach $d (@c){
if($URL =~ /<Link>.*<\/Link>/) {
print OUT $d."\n";
}
close (OUT);
close (IN);
}


aのファイルをパターンマッチングして、その結果をBのファイルに出力したいのですが
なぜかBのファイルに何も書き足しされません。
closeの位置が悪いのかなぁとか、色々考えたのですがよくわかりません。
助言くださるかたよろしくお願いします。
245244:2007/07/01(日) 12:59:54
コピーし間違えました。
正しくはこちらです。
よろしくお願いします( ´_ゝ`)

#!/usr/bin/perl

open(IN,"a.text")|| die "Error:a.text $!\n";
@c = <IN>;


open(OUT,">b.text");

foreach $d (@c){
if($d =~ /<Link>.*<\/Link>/) {
print OUT $d."\n";
}
close (OUT);
close (IN);
}
246デフォルトの名無しさん:2007/07/01(日) 13:06:31
>>245
foreach ループの中で close しちゃダメじゃん。
247デフォルトの名無しさん:2007/07/01(日) 13:39:45
あ、ありがとうございます・・・


はずかしぃーい(*/∇\*)
248デフォルトの名無しさん:2007/07/01(日) 15:31:11
ActivePerl 5.8.8 で use Thread; と use WWW::Mechanize; したプログラムを
使うと,不特定のタイミングで

Free to wrong pool 275ef8 not 1e010b8 at C:/Develop/Language/Perl/ActivePerl/lib
/XSLoader.pm line -1.

となるんですが,何が原因でしょうか?

なお,Linux 上の Perl だと問題ありません.
249デフォルトの名無しさん:2007/07/02(月) 11:48:16
touchみたいに
無ければファイルを作成するだけ
というのはどうすればいい?
openしてすぐclose?

ファイルの中身はどうなってもいい
250デフォルトの名無しさん:2007/07/02(月) 12:37:05
touchしたらいいんじゃない?
251デフォルトの名無しさん:2007/07/02(月) 12:42:50
touchコマンドは無い という前提でお願いします。
どんだけ〜
252デフォルトの名無しさん:2007/07/02(月) 12:50:07
> openしてすぐclose?

は自分で書いといて試したの?
253デフォルトの名無しさん:2007/07/02(月) 13:18:14
>>252
モチのロンでございます
254デフォルトの名無しさん:2007/07/02(月) 13:20:33
open してすぐ close でいいんじゃないの
255デフォルトの名無しさん:2007/07/02(月) 13:45:07
GNUのtouchの実装は、openしてcloseだしな
256デフォルトの名無しさん:2007/07/02(月) 18:49:30
へぇ
257デフォルトの名無しさん:2007/07/02(月) 23:18:09
そこでなぜtouchのソースを読もうと思わないんだろう。
258デフォルトの名無しさん:2007/07/03(火) 02:24:33
釣りだからさ。
259デフォルトの名無しさん:2007/07/03(火) 10:22:16
coreutilsのとbusyboxのどっちも見てみた
確かにopenしてる
つーかbusyboxの簡素すぎワロタ
260デフォルトの名無しさん:2007/07/05(木) 07:20:25
文字列を特定の文字数で切り捨てたいのですが
どのようにするのがベストプラクティスでしょうか?
substrを使ってみたのですが、二バイト文字が途中で途切れてしまうことがあって。。
Perlのバージョンは5.00503で、文字コードはEUC-JPです。
宜しくお願いいたします _ _
261デフォルトの名無しさん:2007/07/05(木) 07:37:37
適当な文字コードに一旦変換して、また戻すとかどう?
262デフォルトの名無しさん:2007/07/05(木) 09:19:06
Perlメモにそのまんまのが書いてある
263デフォルトの名無しさん:2007/07/05(木) 09:19:38
>>260
君が文字数といってるのは本当に文字数なのか? バイト数のつもりで
言ってないか? 文字数ならきちんと2バイト文字を1文字と数えるために
判定してるはずだから途中で切れるなんてことは普通に書いたらまず
起きないはずなのだが。
264デフォルトの名無しさん:2007/07/05(木) 09:51:11
HTML::TreeBuilder とか HTML::Element とかについての日本語資料が
あまり無いように思えます。これは訳すべき?
265デフォルトの名無しさん:2007/07/05(木) 10:14:42
>>264
go for it!
266デフォルトの名無しさん:2007/07/05(木) 11:52:34
>>263
>文字数ならきちんと2バイト文字を1文字と数える
Perl5.00503は、多分、無理だったような気がする。

>>260
5.8にはできないのかな?今時5.0なんて。
どうしても、古いPerlを使う必要があるなら、EUC-JPの「一文字」にマッチする
正規表現(ググれば見つかるだろう)で切り分けるしかあるまい。
267260:2007/07/05(木) 12:09:42
>>261
ありがとうございます。
>>262
途切れているか判定後、途切れていたらchopで良さそうですね。
EUC-JPは1バイトか2バイトしかないですしね。
それでやってみます。ありがとうございます。
>>263
仰るとおりです。すみません。。
268260:2007/07/05(木) 12:10:32
>>266
ありがとうございます。
5.8大好きなんですけど、サーバの仕様で><
269デフォルトの名無しさん:2007/07/05(木) 12:45:17
>>267
同じくperlメモを見てもわかるが3バイトのこともある。

あとバイト数でほんとにいいの? 実は半角:全角=1:2で数えた文字幅が
欲しかったりするんじゃない? EUC半角カナは2バイトだったりするよ?
270デフォルトの名無しさん:2007/07/05(木) 13:34:53
関係ないが、バイト数か文字数かって話だが、
文字数だと記憶容量把握の面でやっかいじゃない?
271デフォルトの名無しさん:2007/07/05(木) 13:37:32
正直どうでもいい
272デフォルトの名無しさん:2007/07/05(木) 13:38:33
>>270
UTF-32でも使ってろハゲ
273260:2007/07/05(木) 16:17:20
>>269
三バイトもあるんですね。これは適当に処理できそうですが、
実は仰るとおりその計算方法で計算した文字幅でぶったぎったものが欲しいです。。

Jcode.pmのjfold関数で実現できました。
ありがとうございました。
274デフォルトの名無しさん:2007/07/05(木) 18:11:05
my @result = qw/6-5 5-6 8-4 8-5 8-5 7-3 11-7 6-5 6-4 6-3/;

上記はシミュの結果としてこんな感じに中身がセットされる見本です。
本当は数千個という要素数になります。

これを
@result1 = sort {$a<=>$b} @result1;
とすると数値昇順にソートされますよね?
そのソートの時についでに値毎に値が重複してる要素がいくつあるのか調べて
一つにまとめた上で重複個数を"--"でjoinできませんか?

例)
0-1--5
0-2--1
.....
6-5--2
最終的にみたいな感じで出力してみようかと思ってるんです。
そこからさらに0-1--5は全体の何パーセントであるかとか調べたりするのですが。
275デフォルトの名無しさん:2007/07/05(木) 18:49:31
>>274
?
できますよ
276デフォルトの名無しさん:2007/07/05(木) 19:09:53
なんという宿題…
277デフォルトの名無しさん:2007/07/05(木) 20:00:03
>>274
「0-1--5」 が全体の何パーセントかを調べて意味あるんだろうか?
そもそも -- で join する必要性がよく分からん。

効率無視でも良ければ、3 分とかからずに書ける (というか書けた)。
ということで、できることは分かったわけだから、あとは頑張ってくれ。
278デフォルトの名無しさん:2007/07/05(木) 20:27:30
綺麗に書こうと思うとなかなか難しいな。
279274:2007/07/05(木) 21:01:22
>>275-278
おお!ありがとうございます。
でも教えてくれないんですね。
残念です。
とりあえずハッシュのキーと値を使う方法で作りました。

でもできれば教えてください。
sortの便利な使い方見てみたいです。
280デフォルトの名無しさん:2007/07/05(木) 21:15:48
my @test = qw/0 0 0 0 0 0/;
print $test[2];

>0

要は@testの初期化時に6個の0をセットしたいのです。
もっといい方法はあるのですか?
281デフォルトの名無しさん:2007/07/05(木) 21:17:36
my @test = qw/0/ x 6
282280:2007/07/05(木) 21:24:42
>>281
かなり渋いですm(__)m
283デフォルトの名無しさん:2007/07/05(木) 22:51:23
>>279
> でも教えてくれないんですね。
教えてくれてるじゃん。
「できませんか?」と聞いているんだから、「できる」「できない」が分かればいいんでしょ?

> sortの便利な使い方見てみたいです。
いや、sort なんて使わなくてもいいし。

> とりあえずハッシュのキーと値を使う方法で作りました。
じゃあ、まずはそれを晒してみろ。話はそれからだ。










と言うつもりだったけど、そろそろ寝るので、俺のをさっさと晒してしまう。
要素の割合 (0-1--5 とかではなく) を調べる、と勝手に解釈してるのと、
0-1--5 のようにはしてないのが >>274 と違う。
ホントにデータは配列で与えるのか? とか気になるところもあるけど、その辺は適当にやってくれ。

my @result = qw/6-5 5-6 8-4 8-5 8-5 7-3 11-7 6-5 6-4 6-3/;
my %r;
$r{$_}++ for (@result);

foreach my $i (keys %r) {
print "$i: $r{$i} (" . ($r{$i} * 100 / @result) . "%)\n";
}
284デフォルトの名無しさん:2007/07/05(木) 23:01:40
さすがに美的センスを疑うわ。
285274:2007/07/05(木) 23:03:21
>>283
print map{"$_ $result{$_} ".$result{$_}/$simu."\n" }sort {$a<=>$b} keys %result;

割合出す前にどうやって見せるかとかでつまづいてたら鬱になって、なんでこの程度のことで時間がかかるのか。
そもそも何をやっても自分はダメなんじゃないのかとか。死ぬ。

foreach my $i (keys %r) {
print "$i: $r{$i} (" . ($r{$i} * 100 / @result) . "%)\n";
}

↑これはこうでは?
print "$i: $r{$i} (" . ($r{$i} * 100 / @result) . "%)\n";

とか考え始めてあってることに気付いてもう鬱鬱ウツ鬱筒うつつっつつt
286デフォルトの名無しさん:2007/07/06(金) 02:36:19
>>283
アスペルガーの君は黙ってていいよw
287デフォルトの名無しさん:2007/07/06(金) 07:20:57
>>284
美的センスのあるコード、よろしく
288デフォルトの名無しさん:2007/07/06(金) 08:23:25
ひさびさにブラックマジック。
こういう読み辛いコードが一番早く動くのが昔のPerlなんだよな。
最近のPerl(Perl6)はPHP臭がするから困る。
289デフォルトの名無しさん:2007/07/06(金) 08:35:30
この程度で読みづらいなんて片腹痛いわ。
290デフォルトの名無しさん:2007/07/06(金) 09:15:05
>>288
え、PHP?
Rubyでしょ。
291280:2007/07/06(金) 10:25:34
>>281
エラーになるんですが、どういうことですか?

syntax error at C:\〜〜test.pl line 16
near "qw/ 0 / x4"

騙したな!!!!
292280:2007/07/06(金) 10:32:09

my @rl = (0)x4;
for (0..$#rl){
print qq{$_ \n};
}


forってこういう書き方perlではできるのかなと気になってます。
無限ループになったら怖いので教えて下さい。
上記の書き方は$_に0.1.2.3とセットされてちゃんとループを抜けてくれますか?
293280:2007/07/06(金) 10:34:58
調子に乗って実行しちゃいました。
出来ました。

でも教えてください。
forで回数指定するときに for(0..1){}  などと記述するのは皆さんとしてはオススメですか?
みなさんなら自分の生徒に上記のやりかたすすめますか?
294デフォルトの名無しさん:2007/07/06(金) 10:37:16
好きにしろ
295デフォルトの名無しさん:2007/07/06(金) 10:41:45
>>293
回数を指定するなら俺は for my $i (1..$n) { }を使う。

俺も訊きたいのだが、最近無限ループが怖いから教えてくれというを何度も見た気がするが、
何故そんなに無限ループを恐れる?止め方を知らないのか、止める暇が無いほどマシンが貧弱なのか…
296280:2007/07/06(金) 10:46:54
>>294
本当ですか!?
<^^>コマネチ!

forは;で仕切らない場合どういう処理がされてるんですか?
なんで0..1とかで2回実行なのか。いや、毎度$_にセットされていくってのはわかりますが。
それなら@rl = 0..2なら3個の要素がセット・・・されるんでしょうね。

for(0)でも1回動く。なんでしょうね。一体どういう構造?
;なしであればそこに入れられた回数だけ動く?
でもfor(1)なんてやったら絶対に無限ループになりそうだし。
297280:2007/07/06(金) 10:49:43
>>295
なるほど。$i的なものがいるときはそうします。
無限ループ怖くないですか?
勇気あるんですね。私にはムリですよ。
298280:2007/07/06(金) 10:51:34
うわ・・・・
for(1){print $_}
>1
ですって。

なんですか。forの;なしは一体どういう処理をしてるんですか。
299デフォルトの名無しさん:2007/07/06(金) 11:03:49
To call a function on each element of an array, but ignore the results:

foreach $iterator (@array) {
some_func($iterator);
}

To call a function on each integer in a (small) range, you can use:

@results = map { some_func($_) } (5 .. 25);

but you should be aware that the ".." operator creates an array of all
integers in the range. This can take a lot of memory for large ranges.
Instead use:

@results = ();
for ($i=5; $i < 500_005; $i++) {
push(@results, some_func($i));
}

This situation has been fixed in Perl5.005. Use of ".." in a "for" loop
will iterate over the range, without creating the entire range.

for my $i (5 .. 500_005) {
push(@results, some_func($i));
}

will not create a list of 500,000 integers.
300デフォルトの名無しさん:2007/07/06(金) 11:06:50
まず>>280は、いまやってるクスリをすぐにやめろ。
話はそれからだ。
301280:2007/07/06(金) 11:08:39
>>299
英語で書いてくるなんてイジワルですね。
私は読めませんよ><
5.005から範囲演算子での記述が認められるようになったんでしょうね。
そして、foreachでもfor(;;)でもfor(..)でも速度的には変わりなし。
好きにすればっていいたいんですかね。プンプン!

日本語で話しましょうよ。
forの()は;があるとなしでどういう差があるのですか。彼らは一体なにをどう解釈してるんですか。
302デフォルトの名無しさん:2007/07/06(金) 11:08:41
この時期ってホント宿題頼んでくる奴増えるなw
303デフォルトの名無しさん:2007/07/06(金) 11:09:49
>>301
珠緒乙
304デフォルトの名無しさん:2007/07/06(金) 11:14:13
8月下旬には行列が
305280:2007/07/06(金) 11:14:39
>>302
宿題じゃないもん。
>>303
チュ!

forとforeachはそもそも同じだってことですかね。
306デフォルトの名無しさん:2007/07/06(金) 11:23:29
日本語の入門書かサイトの、ループ処理のとこ読んでこいよ。
307デフォルトの名無しさん:2007/07/06(金) 11:32:37
forとforeachは同じだよ死ねよ。
慣習的にforeachでarrayを扱うようになってるだけ田世死ねよ。
308デフォルトの名無しさん:2007/07/06(金) 11:38:51
どう見ても釣りだろ…
309デフォルトの名無しさん:2007/07/06(金) 12:41:39
でも内部実装は俺も正直よくわからん
310280:2007/07/06(金) 13:16:08
>>307
for(@rl)
foreach(@rl)
から考えても同じなわけがない。何適当なこといってるんですか。私にはわかりますよ。
311280:2007/07/06(金) 13:20:23
プンプン!
312デフォルトの名無しさん:2007/07/06(金) 13:24:48
foreachは電算機資源の無駄だから使うな。
US-ASCIIなら28ビット、UTF-32なら16オクテットも無駄になってるんだぞ。
そこんとこよく考えろ。
313デフォルトの名無しさん:2007/07/06(金) 13:29:18
でもfor(1..10000)よりもC風のfor(;;)の方が遅かったぞ
314デフォルトの名無しさん:2007/07/06(金) 14:18:41
forよりmap使えば
315デフォルトの名無しさん:2007/07/06(金) 14:25:17
open FH,"bench.txt";
print <FH>;
close FH;

test.plにこう記述してます。で、もちろん同じ階層にbench.txtは存在しています。
でも中身がプリントできないどころかopenが成功しません。
今までwebpgだとこれで大丈夫だったのに。
もしかしてカレントディレクトリの考え方が違うのかと思うのですが。

カレントディレクトリを表示させる方法もみつけられず。
絶対パスで書こうと思うも
どうか救援お願いします。
316デフォルトの名無しさん:2007/07/06(金) 14:25:50
すいません。間違えて投稿しました。
317315 316:2007/07/06(金) 14:33:19
たびたびすいません。
本当の質問はこちらです。

test.plとbench.txtは同じディレクトリにあります。
windowsのコマンドプロンプトからtest.plを実行させた時、カレントディレクトリをtest.plのところに移動させたいです。
なのでtest.plの冒頭でbegin{}とかでカレントディレクトリの移動を記述したいのですが。

マシンによってホームカレントはマチマチですしどうすればいいかわかりません。
複数のパソコンを想定してるので絶対パスでは掛けないということです。
相対パスでいうと。まずtest.plが存在してる場所を探し、そこをカレントにするようchdirでやればいいはずですが。

現在稼動中のtest.pl自身が自分の居場所を探すことはどうやればいいでしょうか?
318315 316:2007/07/06(金) 14:49:29
もしかして自分でファイル検索プログラムを書いてパソコンないの全てのディレクトリを検索して、
test.plとbench.plの両方があるディレクトリが1個だけ見つかればそれだと断定して、
そのディレクトリをカレントディレクトリにする。

みたいな壮大な話になってしまうのでしょうか?
ちなみにコマンドプロンプトではカレントをいつもいじったりせず、
絶対パスでやってます。D&Dでやってるのでめんどうではありませんでした。

あきらめたほうがいいですか?
319デフォルトの名無しさん:2007/07/06(金) 14:51:29
`cd`
`pwd`
320デフォルトの名無しさん:2007/07/06(金) 14:55:16
>>318
あきらめなさい
321315 316:2007/07/06(金) 15:00:19
>>319
それはカレントディレクトリの場所を調べるシステムコマンド?ですよね?
`cd`は知ってるんですが。pwdは自分の環境では動きません。なんでしょうかこれ。

でcdを使ってどうすればいいんですか?
test.pl自身がどのディレクトリにいるのか調べることができるのですか?

>>320
やはり壮大なプログラムが必要ということでしょうか?
でもみなさんどうしてるんでしょうか?
perlでwin形式の実行ファイル作ることなんてあまりありませんが、配布するプログラムを組むなら
必ず自分がどこのディレクトリにいるかを調べることができないといけませんよね。
カレントを自分のところにうつさない限り相対パスはまるで機能しない。
しかし自分のところがわからなければ絶対パスもわかりえない。
322デフォルトの名無しさん:2007/07/06(金) 15:10:21
基礎からやり直せ。
323315 316:2007/07/06(金) 15:23:05
>>322
基礎から教えてくださいm(__)m
324デフォルトの名無しさん:2007/07/06(金) 15:39:50
Cwd.pm getcwd()
325315 316:2007/07/06(金) 16:08:31
>>324
やってみましたがカレントディレクトリが表示されただけでした。
その先の知恵が欲しいのです。
どうやってtest.plの場所を突き止めるのでしょうか?
もちろん承知のことと思いますが、今回の問題はtest.plがカレントディレクトリにない場合の話です。

いや、仮にtest.plがカレントディレクトリにファイル名一致しても中身が同じだとは限らない。
結局今コンパイルされて行ってるファイル自身であるtest.pl。自分自身がパソコン内のどのディレクトリにあるのかをどうやって調べることができるというのですか?

何故みなさんでいっせいにカレントディレクトリの位置だけ調べる方法を教えてくださるのでしょうか。
僕が「知ってる」部分だけ意図的に教えてくださるのでしょうか。
326デフォルトの名無しさん:2007/07/06(金) 16:21:51
my @array = qw(1-1 2-2 3-3 1-11 1-12 1-21 0-121 1-2);
@array = sort test @array;
print "@array";
sub test{
$a == $b;
}

なんて書けば思い通りにソートされるかわかりません。
qw(0-121 1-1 1-2 1-11 1-12 1-21 2-2 3-3);
こういう結果が得たいのです。
my @a = split /-/,$a;
my @b = split /-/,$b;
とかしてそれぞれやってみたりしたのですが。
327デフォルトの名無しさん:2007/07/06(金) 16:33:48
328デフォルトの名無しさん:2007/07/06(金) 16:37:23
my @s_array =
map { $_->[0] }
sort { $a->[1] <=> $b->[1] || $a->[2] <=> $b->[2] }
map { [$_, (split/-/,$_)[0,1]] } @array;
329デフォルトの名無しさん:2007/07/06(金) 16:41:26
>>325
ああ…もしかして $0 のこと?
330326:2007/07/06(金) 16:52:01
>>328
ありがとうございました。
何か泣けてきました。
自分は障害者なんですかね。
明らかに僕の脳みそはみなさんより劣るんですね。ooooooorz
331デフォルトの名無しさん:2007/07/06(金) 16:54:54
ちゃんと>>3の[テクニック]のサイト読んだほうがいいよ
332326:2007/07/06(金) 17:08:34
>>331
死にたくなるようなことばかりですが、諦めないで勉強しようかなと思います。
原因は無能だけでなく無理解もあるはずです。
sort関数が一体どんな手順で何をしているのか知りません。

||を使えば複数条件ソートができることからも、sort {}の{}内では「最終的」に1or0or-1の
どれが返ってくるかによってsort関数の挙動が変わるようですね。

そうなると$aと$bに値をセットするけども、セットすることは要点ではなくて、
ブロック内の返り血がなんであるかでしかない。その返り血を比較で決める為のセットでしかない。

で、sort関数がどういう順序でどういう処理をしているかっていうのは英語を知るか
日本語の本を買うしかありませんか?
333デフォルトの名無しさん:2007/07/06(金) 17:19:12
>>332
> で、sort関数がどういう順序でどういう処理をしているかっていうのは英語を知るか
> 日本語の本を買うしかありませんか?

ソース
334326:2007/07/06(金) 17:26:00
>>333
すいません。検索してみましたがわかりませんでしたorz
335デフォルトの名無しさん:2007/07/06(金) 17:28:55
>>334
perl自身のプログラムソースってことだろう。
でもその前に、sort関数の使い方をマスターするほうが先じゃないかな。
336デフォルトの名無しさん:2007/07/06(金) 17:37:00
>>334
バブルソート
337326:2007/07/06(金) 17:40:31
>>335
なるほど。逆コンパイルとかいうやつを勉強しないといけないんですね。
sort関数の使い方をマスターするためにはソート関数が何をしてるのかがわからないとダメなんですよね。
例えばsplitが何をするのか知ってるからこそ色んな応用ができると思うのです。

と思ったところで>>336さんのキーワード打ったら今度はブルドッグ以外が出てきてくれました。
とりあえず読んできます。
338デフォルトの名無しさん:2007/07/06(金) 17:40:57
……perl はクイックソート(5.6以前)、マージソート(5.8以降)
だろ、、、なんでそこでバブルが出てくる?
339デフォルトの名無しさん:2007/07/06(金) 17:45:03
つまんない男
340デフォルトの名無しさん:2007/07/06(金) 17:45:14
>>332は死ぬの?
341326:2007/07/06(金) 18:13:47
読んできました。
クイックソートも読みました。
自分の環境だと5.8.1だからマージソートですね。読みました。

そこで疑問に思いましたが
my @col = sort {1} qw/0 2 3 5 9 6 5 4 33 2 /;
この結果はマージかクイックかバブルかで変わりますか?

マージソートするsort関数に常に1を与え続けるのと、
$a<=>$bで-1,0,1のいずれかを与えるのと何が違うのか。
そもそも1回目の処理時に1を与えられるのと0とで分割地点でも変わるんですか?
いや、違いますよね?

一体なんなのか・・・・orz
342デフォルトの名無しさん:2007/07/06(金) 18:26:15
お前はいったいなんなのかという点の方が重要
343326:2007/07/06(金) 18:27:16
my @col = sort {0} qw/8 4 3 7 6 5 2 1/;
print "@col";
>8 4 3 7 6 5 2 1

my @col = sort {1} qw/8 4 3 7 6 5 2 1/;
print "@col";
>1 2 5 6 7 3 4 8

マージソートなのになぜこうなるのか。
バブルソートを教えてもらった理由から考えても究極的には2個を比べるわけです。
つまり$aと$b。前者コードが何も変化がないのは理解できます。常に0を返されて「並び替える必要なし」といわれたわけですから。
では後者のコードで何故あんなことになるのか。
8 4|3 7|6 5|2 1
4 8|7 3|5 6|1 2
3 7 8 4|2 1 6 5
5 6 1 2 4 8 7 3
となるべきですよね?マージソートなら。ではバブルソートで考えて見ましょう。
8 4 3 7 6 5 2 1
4 3 7 6 5 2 1 8
3 7 6 5 2 1 8 4
〜〜〜
1 2 5 6 7 3 4 8
こうなりますよね。内部的に何をしてるかではなくて表面的にはバブルソートだと思えばいいわけですか?
sort {-1}やsort {-2}などではどうなるのか。
344326:2007/07/06(金) 18:35:33
sortは1以上と0と-1以下の3種類の指示が送れるんですね。
1は並び替えろ
0は並び替えるな
-1はなんでしょう・・・・

my @col = sort {-1} qw/8 4 3 7 6 5 2 1/;
print "@col";
>8 6 3 2 4 5 7 1

これが常に-1命令を出した結果です。
規則性はありますが、一体-1はなんていう命令なんでしょうか。
345デフォルトの名無しさん:2007/07/06(金) 18:43:53
ヒント:並び変えは、$a$b の順か $b$a の順かの2通りある
346326:2007/07/06(金) 18:48:54
>>345
>ヒント:並び変えは、$a$b の順か $b$a の順かの2通りある
それは本質的な話ではないのでは?
$a<=>$b と$b<=>$aで真逆になるのは返り血が変わるからであって$aとか$bとかはどうでもいいのです。

返り血を変えるための。つまり命令を変える為でしかないはずです。
でも今は3種類の命令のうち-1の命令が何を意味するかわからないのです。

1は並び替えろ
0は並び替えるな
-1はなんでしょう・・・・

これが問題なのです。
347デフォルトの名無しさん:2007/07/06(金) 18:53:51
ソートに使用してるアルゴリズムなんて
意識せずに使えるようになってんだよ
いい加減perl sortとかでぐぐれ
348326:2007/07/06(金) 19:02:12
>>347
すいません。一杯調べてるんですが、
検索で出てくるのは「こういう風に使ってください」というサイトばかりなんです。
わかりませんか?-1はなんていう命令なんでしょうか?
349デフォルトの名無しさん:2007/07/06(金) 19:03:45
<=> がどういう演算子か調べてくれ
350デフォルトの名無しさん:2007/07/06(金) 19:13:56
>>346
>1は並び替えろ
>0は並び替えるな

この段階で間違ってるから。
351326:2007/07/06(金) 19:16:41
>>349
<=>は-1,0,1のいずれかを返す為のものです。
ですので$aだとか$bだとかは本質的ではないと>>346でも書いたのですが。
問題は<=>だとかsortとは無関係の部分ではないのです。

0,1,-1がsortに対してどういう命令を出すのかが問題なのです。

1は並び替えろ
0は並び替えるな であるならば
-1はなんでしょう・・・・

ということなのです。<=>なんて無関係です。0,-1,1を都度導く為のものでしかありません。
それがなんであったとしても0,-1,1の命令の意味がわからなければどうしようもないのです。

sort{-1}これは一体常にどういう命令を与えることになるのか。
誰かわかりませんか?
352326:2007/07/06(金) 19:18:00
>>350
ありがとうございます!
0,1,-1の意味を知ってるんですね?
本当の0,1,-1の命令の意味はなんなのでしょうか?
353デフォルトの名無しさん:2007/07/06(金) 19:20:29
>>352
そんなの命令じゃねーっつーの。
354デフォルトの名無しさん:2007/07/06(金) 19:22:04
バカは帰れ
355326:2007/07/06(金) 19:22:41
>>353
0,1,-2によってその都度処理を変えるわけですから、命令と言っても問題はないと思いました。
間違っていたなら今後は止めます。
なんといえばいいですか?
また0,-1,1ではどういう差が生まれるのですか?
356デフォルトの名無しさん:2007/07/06(金) 19:37:52
ソートって何をやってるか調べてこい。
それと <=> の意味を考えれば分かるはずだ。
357デフォルトの名無しさん:2007/07/06(金) 19:41:04
1:並び替えろ
0:次の比較で考えろ
-1:並び替えるな
358デフォルトの名無しさん:2007/07/06(金) 19:44:55
この速さなら言える
おまいらの聖地がNHKで出てたぞw
359デフォルトの名無しさん:2007/07/06(金) 19:47:29
>>357
360デフォルトの名無しさん:2007/07/06(金) 19:57:00
>>357
そんなこと言ってると又
「それじゃあ、sort{-1}の結果がああなるのは何でですか?」
とか物凄い剣幕レスが来ちゃうよw

↓ほらねwwww
361デフォルトの名無しさん:2007/07/06(金) 19:58:20
>>309
内部実装を知っても何の役にも立たない罠。
forとforeachは、共にキーワード for 扱い。(toke.c)
for単体の処理は、for(@LIST)用のものだけが存在する。(op.c)
3引数のforは内部でwhileループに展開される。(perly.y)
362デフォルトの名無しさん:2007/07/06(金) 19:59:23
実際sortの説明できる人間なんて一部のマニアだけだからな。
俺も326に満足な回答はできない。
でもsortはできる。それでいいのにな。

まあそのうちエロイやつズバっと回答するだろうよ。
とりあえず落ち着けってこった。
363デフォルトの名無しさん:2007/07/06(金) 20:06:14
概念的には、実装は不定。
364デフォルトの名無しさん:2007/07/06(金) 20:07:36

    ズバッ!
365デフォルトの名無しさん:2007/07/06(金) 20:07:54
俺がエロなのかは知らんが、多分コイツはマージソートを一つだと思ってるんだな。比べる順番に
種類があるからそれを調べていけばわかると思うよ。
366デフォルトの名無しさん:2007/07/06(金) 20:37:16
もしかしてわかってるのは俺だけか?
それとも答えちゃいけない空気嫁状態なのか?
367デフォルトの名無しさん:2007/07/06(金) 20:38:49
暇なら答えてやれば?どうせ理解できんだろうけど。
368デフォルトの名無しさん:2007/07/06(金) 20:46:27
>>367
何と勘違いしてる?それともわかってないのか?まあいいけど。
369デフォルトの名無しさん:2007/07/06(金) 20:47:39
今日はこのスレにいつもの馬鹿がいるのかね
370デフォルトの名無しさん:2007/07/06(金) 20:47:55
脊髄に操縦桿差し込まれるの好きなやつ多いな。
371デフォルトの名無しさん:2007/07/06(金) 20:55:40
>>370キモイ
372デフォルトの名無しさん:2007/07/06(金) 22:19:10
ウンコを出し終わって拭くときに、爪の中にウンコが入っちゃいました。
やっぱりきれいに爪の中を洗うべきでしょうか?
373デフォルトの名無しさん:2007/07/06(金) 22:27:46
↑Perlに関係ある質問しろよ

「KENTとつくろう!Perl/CGI掲示板」みたいな本を
よく見かけるのですが、KENTとは一緒につくりたくありません
どうすればよいでしょうか?
374デフォルトの名無しさん:2007/07/06(金) 22:36:34
動物と仲良しになる。
375デフォルトの名無しさん:2007/07/07(土) 00:40:10
>>372
お前ごと糞と共に流されればどうかな?

>>373
本見ずに作れないか?
おいどんのスレ行けば掲示板がソースごと載ってるぞ。
http://life8.2ch.net/test/read.cgi/hikky/1168872737/
荒らし多発地帯だしソースもややこしいが。
376デフォルトの名無しさん:2007/07/07(土) 01:46:43
【即会い!!】

管理人が使用してみて、即出会えた出会い系サイトのみを紹介するブログ始めました。
2chと併用して使える良質な即日系サイトを厳選して薦めております。
↓↓↓
【ブログ】http://deaiload.blog109.fc2.com/
377デフォルトの名無しさん:2007/07/07(土) 02:27:22
なんつーかム板で急kskしてると嫌な予感しかしないよね(´・ω・)
378デフォルトの名無しさん:2007/07/07(土) 04:23:35
>374
動物と一括りにするには、その範囲がめっちゃ狭くないか(笑)
379デフォルトの名無しさん:2007/07/07(土) 09:46:49
KENT(笑)
380315 316:2007/07/07(土) 10:47:28
なんとか完成させました。
BEGIN{
chomp (my $cd = `cd`);
my $pass = $0;
chomp $pass;
jcode::convert(\$pass,"euc");
$pass =~ s/^(.*[^\x5c](?:\x5c\x5c)*)\x5c[^\x5c].*$/$1/s;
jcode::convert(\$pass,"sjis");
if ($cd ne $pass){
chdir $pass || die "error! chdir";
}
}

とりあえず綺麗に動きます。
一応みなさんならこう書くぜっていうのも聞いておきたいです。
381デフォルトの名無しさん:2007/07/07(土) 11:13:58
なにが一応じゃ。 何様だよ。
382デフォルトの名無しさん:2007/07/07(土) 11:39:23
>>380
こいつ何様?(爆笑)
383315 316:2007/07/07(土) 12:54:45
>>381-382
何様でもないけど一応聞いてやってもいいよ。ってことです。
384デフォルトの名無しさん:2007/07/07(土) 13:08:18
>>383
こちらから願い下げです。
385315 316:2007/07/07(土) 13:19:18
わかんないの?それなら仕方ないけどな。
でもあの程度もわからないってことは質問者か?
自分の質問と関係ないレスはスルーしていいからな。
386デフォルトの名無しさん:2007/07/07(土) 21:34:44
ハッシュをつかったテキスト処理で詰まっています。(Active perl, win xp sp1)
二つの以下のようなテキストファイルを用意します。
fileA
Tarou : 160cm
Hanako : 140cm

fileB
I like Tarou
I know Jirou
I hate Hanako
I dislike Sakurako

先ず、fileAの各行をコロンでsplitしてハッシュにいれます。
fileBの各行に関して、文中にハッシュのkey(名前)があればその文をoutputファイルに書き出す、
という簡単なものなのですが、なぜかうまくいきません
387386:2007/07/07(土) 21:35:27
実際のスクリプトは
while(<fileA>){
($name,$shincho) = split(/:/,$_);
$list{$name}=$shincho;
}}

while(<fileB>){
$text = $_;
foreach $name (keys %list){
if($text =~/$name/){
print $text, ,"($shincho)" ;
}}}

このようなスクリプトを書き次のような出力を期待したのですが、
I like Tarou(160cm)
I hate Hanako(140cm)

実際にはファイルB全文が繰り返し出力されてしまいます。
実際の仕事にはfileA,Bともに膨大なデータを含むので、ハッシュをつかった
foreach処理が必要なのですが、うまくいきません。
考えられる原因、アドバイスなどありましたらお願いします。
388デフォルトの名無しさん:2007/07/07(土) 21:41:52
コロンの前後のスペース
389デフォルトの名無しさん:2007/07/07(土) 21:47:15
print $text, ,"($shincho)" ;

print "$text($list{$name})";

でないといけないと思うし、そもそも

($name,$shincho) = split(/:/,$_);

では、コロンの前後のスペースが$nameと$shinchoに
入ってしまうのではないの?そしたら正確なキーと値にならなくない?
perl -le '$_="Tarou : 160cm"; print "|$_|" for split /:/;'
とかでチェックしたらそうなるけど
390デフォルトの名無しさん:2007/07/07(土) 21:49:50
ソースを見ると勉強になるから一度くらいは見たほうがいいよといいますが、
どれを見ればいいのでしょうか?
例えば関数の実装がどうなってるかなどを見たい場合はどこをみるのですか?

http://www.activestate.com/store/download.aspx?prdGUID=81fbce82-6bd5-49bc-a915-08d58c2648ca
ここで
AP820_source.zip 14.0MB
これを落としましたがあけてもどれがなんなのかわかりません。
ソースを見るとはこのことではないのでしょうか?
391デフォルトの名無しさん:2007/07/07(土) 21:50:51
あとchompしてないから改行も出ちゃうお?
392デフォルトの名無しさん:2007/07/07(土) 21:56:20
あ、まだあった
最後のprintのとこの$shincho
393デフォルトの名無しさん:2007/07/07(土) 21:56:32
#!/usr/bin/perl
use strict;
use warnings;

my %shincho_of;
open my $fileA, '<', 'fileA' or die "Can't open fileA: $!";
open my $fileB, '<', 'fileB' or die "Can't open fileB: $!";

while (my $line = <$fileA>) {
    chomp($line);
    my ($name, $shincho) = split(/\s*:\s*/, $line);
    $shincho_of{$name} = $shincho;
}
while (my $line = <$fileB>) {
    LOOP:
    foreach my $name (keys %shincho_of) {
        if ($line =~ s/$name/$name ($shincho_of{$name})/) {
            print $line;
            last LOOP;
        }
    }
}
394386:2007/07/07(土) 22:09:52
コロン前のスペース、うっかりしてました。実際は違う内容のファイルでやっていて質問用に
書き直したときにスペースを入れてしまいました。
あと色々細かい部分で間違いがありましたね。すみませんでした。
>>393
実際のスクリプトを書いてくださり、ありがとうございます!
是非参考にさせていただきます。
395デフォルトの名無しさん:2007/07/07(土) 22:31:09
>>393
普通にlastでよくね?
396390:2007/07/07(土) 22:50:07
どなたかソースとやらを読んだ経験のある方アドバイスお願いしますm(__)m
397デフォルトの名無しさん:2007/07/07(土) 22:51:22
>>395
急にPBPにループラベルを付けろとあったのを思い出したので
今ではuse English qw(-no_match_vars); して $! のかわりに
$OS_ERROR を使った方がよかったかと思ってるPBP信者でごめんね
398デフォルトの名無しさん:2007/07/07(土) 23:14:19
そういうのってperlのお手軽さがなくなる気がするな。
399デフォルトの名無しさん:2007/07/07(土) 23:42:09
>>396
俺は知らなくてごめんけど、ゆっくり待ってれば
週末のスペシャルオナニー終わったエロイ人がきっと答えてくれるだろう。
400デフォルトの名無しさん:2007/07/07(土) 23:43:21
>>398
でも「そういうのってなんかな」って言い出すこと自体がperlのお手軽さがなくなるよね。
401デフォルトの名無しさん:2007/07/07(土) 23:51:57
あのころは、ぼくは風のように自由だった〜♪
402デフォルトの名無しさん:2007/07/08(日) 08:54:33
>>386程度の処理が>>393みたいに巨大なコードになっちまうんだから、
その時点で お手軽とは言い難い。

せめてこのくらい簡単には書けないものだろうか。

# 386.pl
$a = file2hash($ARGV[0], / *: */);
$b = file2list($ARGV[1], / *: */);
$b->grep($a->keys)->dump();

perl 386.pl fileA fileB > output

というか、exclude系の処理はUNIXコマンドとして存在しても
よさそうなものだが…
403デフォルトの名無しさん:2007/07/08(日) 08:55:46
ああ、ミスった。
$b = file2list($ARGV[1], / *: */);
じゃなくて
$b = file2list($ARGV[1]);
な。察してくれ。
404390:2007/07/08(日) 09:10:17
おはようございます。
どなたか>>390の回答宜しくお願いします。
405デフォルトの名無しさん:2007/07/08(日) 09:20:18
そのレベルなら、まずlib/perl5.8以下あたりから読んでいくのがいいんじゃね?
406デフォルトの名無しさん:2007/07/08(日) 11:56:19
俺もチャレンジしたけど、Perlのソースは駄目だった。頭痛くなる。
PythonかRubyにしとけば?綺麗かどうかはともかく、資料もなにも無しでいくならこっちの方が読みやすい。
407デフォルトの名無しさん:2007/07/08(日) 12:16:47
perlのソゥスは大学の授業で読んだな。
408デフォルトの名無しさん:2007/07/08(日) 12:19:59
自分でどれ読んだらいいかも分からないのにソースコード読んで理解できるの?
409デフォルトの名無しさん:2007/07/08(日) 12:20:38
>>408
当然
410デフォルトの名無しさん:2007/07/08(日) 12:21:12
>>390
> ソースを見ると勉強になるから一度くらいは見たほうがいいよといいますが、
> どれを見ればいいのでしょうか?

全部
411390:2007/07/08(日) 16:15:47
       ワーイ  ノ(´¬`)ノ エヘヘヘ---
412デフォルトの名無しさん:2007/07/08(日) 16:27:21
変数がundefかそうでないかはどうやって調べますか。
以下のプログラムではすべて true が表示されて困っています。

my $var;
$var = undef;
print (($var == undef) ? "true¥n" : "false¥n"); # true
$var = ();
print (($var == undef) ? "true¥n" : "false¥n"); # true
$var = 0;
print (($var == undef) ? "true¥n" : "false¥n"); # true
$var = '';
print (($var == undef) ? "true¥n" : "false¥n"); # true
413デフォルトの名無しさん:2007/07/08(日) 16:37:09
defined
414デフォルトの名無しさん:2007/07/08(日) 16:52:14
>>413
ありがとうございました。
415390:2007/07/08(日) 18:20:17
>>405
ありがとうございます。
>lib/perl5.8以下
このフォルダが見つかりません。libはありますけども。

http://www.activestate.com/store/download.aspx?prdGUID=81fbce82-6bd5-49bc-a915-08d58c2648ca
ここで
AP820_source.zip 14.0MB
を落としたんです。

これを見てる事自体が間違いですか?
自分のパソコンに入ってるのはactiveperl 5.8.1ですが、その中にも
>lib/perl5.8以下
はないんです。libフォルダはもちろんあるんです。

libフォルダ内にperl5.8というファイル・フォルダが見つからないのです。
まずはソースの入手に失敗してるということでしょうか?
どれをダウンロードしたらいいのか。

ここでもたまに出てくる、「forの実装」とか「関数の実装」とかを自分でもみてみたいのですが。
要領が悪くてすみません。宜しくお願いします。
416デフォルトの名無しさん:2007/07/08(日) 18:47:31
>>415
ちらっと眺めただけだからよくわからんが、

op.c:3891行目 Perl_newFOROP
op.c:3794行目 Perl_newWHILEOP

あたりがperly.c(yaccが出力したPerlパーサ?)から呼ばれてるみたいだから、
このへんの関数をヒントに読んでいけばいいんじゃね?
417デフォルトの名無しさん:2007/07/08(日) 18:53:57
$obj->{name} = (1, 2, 3);
とすると $obj->{name} にリストではなく 3 が入ってしますのですが
リストを代入するにはどうすればいいのでしょうか。
418デフォルトの名無しさん:2007/07/08(日) 18:59:23
[1, 2, 3]
419デフォルトの名無しさん:2007/07/08(日) 19:41:35
クロージャって使ってる人います?
どんなときに使います?
例(できれば簡単な)を挙げてくれるとうれしいんですが
420390:2007/07/08(日) 20:41:23
>>416
なるほど。op.cならAP820_sourceのところにありました。
やはりインストールされてるのではなくて、
http://www.activestate.com/store/download.aspx?prdGUID=81fbce82-6bd5-49bc-a915-08d58c2648ca
ここのソースってやつでよかったんですね^^

perlの実装がperlで書かれてるなんてなんか不思議です。
じゃあ誰がperlの言語をこんぴゅーたように変換してくれるのか。
perlのコンパイラ?ですよね。そりゃ???
いやいや実装ってそもそもコンパイラ自身のことですよね?
コンパイラがperlで掛かれてたらperlを誰が翻訳してくれるのか。

不思議だらけです。知らないことだらけです。
421デフォルトの名無しさん:2007/07/08(日) 20:56:29
何が目的なんだ?誰に言われてやっての?
422デフォルトの名無しさん:2007/07/08(日) 21:07:39
レポートの課題なんじゃない?
423390:2007/07/08(日) 21:43:00
いえ自発的にです。
424デフォルトの名無しさん:2007/07/08(日) 21:51:00
>>418
ありがとうございます。
$obj->{name} = (1, 2, 3) は無理で
$obj->{name} = [1, 2, 3] はOKということは
リストではなくてリストの参照しか代入できないということでしょうか。
425デフォルトの名無しさん:2007/07/08(日) 22:04:19
>>424
スカラーにはリストは代入できません。
426デフォルトの名無しさん:2007/07/08(日) 23:41:24
λな人から見たら奇妙に思えるんじゃまいか?
427デフォルトの名無しさん:2007/07/09(月) 00:03:00
モウスグダ
428デフォルトの名無しさん:2007/07/09(月) 00:42:12
>>424
perl リファレンスでググれ
429デフォルトの名無しさん:2007/07/09(月) 03:14:11
まさに人力検索
430デフォルトの名無しさん:2007/07/09(月) 05:35:10
パッケージ Foo::Bar:: に入っている baz() を呼び出すには Foo::Bar::baz() とする必要がありますが
これを baz() だけで呼び出すことができるような便利機能はありますか。
pythonでいうと from Foo.Bar import baz のような機能です。
431デフォルトの名無しさん:2007/07/09(月) 06:20:32
432デフォルトの名無しさん:2007/07/09(月) 06:53:43
>>431
おお、すばらしい。
ついでに、Foo::Bar:: に入っている関数すべてについて同じことをするにはどうしたらいいでしょうか。
pythonでいうと from Foo.Bar import * という機能です。
個別にひとつひとつ local *baz = ... とするしかないでしょうか。
>>431のページをざっと読みましたが、わかりませんでした。

今、ユーティリティ関数をあるパッケージにまとめているのですが、これがまとめて import できるようになると大変助かるのですか。
433デフォルトの名無しさん:2007/07/09(月) 07:40:30
>>432
横レス。
おまえさん Exporter の方、読んでねえだろ。

===Foo::Bar===
use Exporter ;
use vars qw( @ISA @EXPORT ) ;
use subs qw( foo bar baz ) ;
@ISA = qw( Exporter ) ;
@Export = qw( foo bar baz ) ;
sub foo { 42; }
sub bar { 42; }
sub baz { 42;}
1 ;
=======
perl -MFoo::Bar -le 'print foo ; print bar ; print baz'
434デフォルトの名無しさん:2007/07/09(月) 08:04:01
>>433
× @Export = qw( foo bar baz ) ;
○ @EXPORT = qw( foo bar baz ) ;
435デフォルトの名無しさん:2007/07/09(月) 08:19:24
ありがとうございます。
なにをやっているかいまいちわかりませんが、勉強してみます。
436デフォルトの名無しさん:2007/07/09(月) 08:48:00
クラス名を変数で指定してnewするのってどうやるんですか。
my $klass = 'Hoge::Fuga';
my $obj = $klass->new();
みたいな感じでできませんか。
437デフォルトの名無しさん:2007/07/09(月) 09:28:21
>>436
お前それ試してないだろw
438436:2007/07/09(月) 09:41:41
>>436
my $klass = 'Hoge::Fuga';
だとだめでしたが
my $klass = Hoge::Fuga;
だとできました。
PHPとはちょっとちがいますね。でもこっちのほうが自然な気もする。

でもこれだと、例えばXMLの設定ファイルにクラス名を書いておき、それを読み込んで指定されたクラスのオブジェクトを作成したいとき、
'Hoge::Fuga' という文字列から Hoge::Fuga というクラスを得る必要があります。
my $classname = 'Hoge::Fuga';
my $klass = eval $classname;
とするのかな。もうすこしスマートな方法がありましたら教えてください。
439デフォルトの名無しさん:2007/07/09(月) 10:05:17
my $klass = 'Hoge::Fuga'; でもいけるはずだがどうしてだめだと
おもったんだろう?

440デフォルトの名無しさん:2007/07/09(月) 10:08:09
my $klass = Hoge::Fuga; ってbareword?
441デフォルトの名無しさん:2007/07/09(月) 10:11:52
そもそも「クラス」なんてものはperlのデータにないので、
my $klass = Hoge::Fuga;もmy $klass = 'Hoge::Fuga';も
$klassの値はまったく同じ文字列「Hoge::Fuga」になる。

むしろ、my $klass = Hoge::Fuga; はuse strict下だとエラー。

% perl -e 'use strict; my $klass = Hoge::Fuga;'
Bareword "Hoge::Fuga" not allowed while "strict subs" in use at -e line 1.
Execution of -e aborted due to compilation errors.
442デフォルトの名無しさん:2007/07/09(月) 10:39:24
適当にモジュールの中身見ると書いてあるかも
443デフォルトの名無しさん:2007/07/09(月) 11:32:42
関数名を文字列で指定して呼び出す方法についての質問です。

package Hoge;

package Hoge::Pkg1;
sub hello {
my ($name) = @_;
print "Hello $name!¥n";
}

package Hoge::Pkg2;
sub hello {
my ($name) = @_;
print "Bonjor $name!¥n";
}

1;

というパッケージを作って

use Hoge;
$klass = 'Hoge::Pkg1';
$fname = $klass . '::hello';
$fname->('world');

とすると、「Hello world!」と出力されました。しかし use strict; を追加すると
Can't use string ("Hoge::Pkg1::hello") as a subroutine ref while "strict refs" in use at hoge.pl line 5.
のようなエラーが出てきました。
use strictのときでもエラーにしないようにするにはどうしたらいいですか。
444デフォルトの名無しさん:2007/07/09(月) 11:49:21
use strict;
use Hoge;

my $klass = 'Hoge::Pkg1';
my $fname = $klass . '::hello';

{
 no strict 'refs';
 $fname->('world');
}
445デフォルトの名無しさん:2007/07/09(月) 12:21:45
>>444
ありがとう。
no strict か。また覚えなきゃいけないことがふえた。
446デフォルトの名無しさん:2007/07/09(月) 12:31:01
そんなの覚えなくていいよ。
シンボリックリファレンスのほぼ全ての使途にはよりよい代替方法がある。
447デフォルトの名無しさん:2007/07/09(月) 14:44:47
>>443
http://www.kt.rim.or.jp/~kbk/perl5.005/perlobj.html
http://www.kt.rim.or.jp/~kbk/perl-5.8/perlfaq7.html#how_can_i_pass_return_a__function__filehandle__array__hash__method__regex_

#!/usr/bin/perl -w
use strict;

package Hoge::Pkg1;
sub hello { my($pkg, $name) = @_; print "Hello $name!\n" }

package Hoge::Pkg2;
sub hello { my($pkg, $name) = @_; print "Bonjor $name!\n" }

package main;
my $method = 'hello';
"Hoge::$_"->$method('world') for qw(Pkg1 Pkg2);
__END__
448デフォルトの名無しさん:2007/07/12(木) 18:22:41
配列と配列をくっつけたいんだけどどうしたらいいんだっけ
@c = (@a,@b);
でいいんだっけ?
449デフォルトの名無しさん:2007/07/12(木) 18:27:58
>>448
pushした方がよいとかなんとか、風の噂で聞いた。
450デフォルトの名無しさん:2007/07/12(木) 18:31:24
破壊していいならpush or unshift
451デフォルトの名無しさん:2007/07/12(木) 19:09:01
あー、pushか、unshiftね
なんかもう最近は単語をどんどん忘れちゃうよね
452デフォルトの名無しさん:2007/07/12(木) 19:22:44
Love is destructive.
453デフォルトの名無しさん:2007/07/13(金) 04:36:50
バックグラウンドでシリアルからデータを読みつつ別の処理を同時におこなうライブラリを書きたいと思ってます。

javaなんかでやるとすれば、Threadクラスを拡張するのが正解なのですが、
perlでやるとすればどんな方法がありますか?
454デフォルトの名無しさん:2007/07/13(金) 04:38:39
>>453
POE
thread
selectブン回しで入出力マルチプレクシング
455デフォルトの名無しさん:2007/07/13(金) 06:31:00
>>453
シリアルってRS-232C?
あんな古典的な部位からの入力なら別にバックグラウンドにしなくても他の処理とシーケンシャルに出来るが。
456デフォルトの名無しさん:2007/07/13(金) 08:04:17
Device::SerialPortってのもあるな
457デフォルトの名無しさん:2007/07/13(金) 20:49:02
外部プログラムを実行し、なおかつその標準出力もほしいときは
どうしたらいいのでしょうか

systemで呼んで仮ファイルに出力とか かっこ悪いッスよNE☆
458デフォルトの名無しさん:2007/07/13(金) 20:53:58
open my $pipe, "-|", "ls";
459デフォルトの名無しさん:2007/07/13(金) 21:49:45
$output = `command`;
460デフォルトの名無しさん:2007/07/14(土) 05:24:03
ついでに質問

外部アプリを起動して標準出力を読んで
さらにそのアプリの終了コードも欲しいときは
どうすんの?
461デフォルトの名無しさん:2007/07/14(土) 06:57:15
462デフォルトの名無しさん:2007/07/14(土) 07:14:47
$?
463デフォルトの名無しさん:2007/07/14(土) 07:20:23
>>457
IPC::Open3
464デフォルトの名無しさん:2007/07/14(土) 18:16:49
Perlでウィンドウは表示できますか?
465デフォルトの名無しさん:2007/07/14(土) 18:17:47
はい。
466デフォルトの名無しさん:2007/07/14(土) 19:45:34
.plファイルをダブルクリックするとDOS窓が表示されるよ
467デフォルトの名無しさん:2007/07/15(日) 03:50:37
>>465
ほんとですね
すいません、まずぐぐるべきでした・・・
468デフォルトの名無しさん:2007/07/15(日) 04:03:06
qwで区切ってる文字の中に#が含まれる場合の対処ってありますか?
469デフォルトの名無しさん:2007/07/15(日) 11:48:13
>>468
perl -le "print qw/abc ### def/"

これの結果がどう表示されるのが望みなんだ?
470デフォルトの名無しさん:2007/07/15(日) 14:46:38
>>469
Possible attempt to put comments in qw()と警告されてたんですが、
wスイッチ付けてたのが原因みたい orz
warningsって初心者が使うもんじゃないんですかね。
471デフォルトの名無しさん:2007/07/15(日) 15:57:50
>>470
むしろ初心者が # をコメントのつもりで
@a = qw (
foo # 1st
bar # 2nd
);
みたいに書いた場合を想定しているのだろうけどね。
use warnings;
no warnings 'qw';
でqwに関係した警告を黙らせるか、('foo','bar') 式で書く程度しかなさそう。
472デフォルトの名無しさん:2007/07/15(日) 18:28:39
>>471
親切にありがとうございます。
その方法のいずれかで解決したいと思います。
473デフォルトの名無しさん:2007/07/17(火) 15:58:58
$attack_number = 0;
while ($drop_player_su > 1){
 if($attack_number >= $drop_player_su){
  $attack_number = 0;
 }
 $attack_name = $drop_player_all[$attack_number];

 $defense_number = int(rand($drop_player_su));
 $defense_name = $drop_player_all[$defense_number];
 $mission_display.= "<br>$attack_nameの攻撃<br>$defense_name死亡<br>";
 splice @drop_player_all, $defense_name, 1;

 $attack_number++;
 $drop_player_su = @drop_player_all;
}
ってすると無限ループになるんだが原因がわからん\(^o^)/
474デフォルトの名無しさん:2007/07/17(火) 16:09:49
×splice @drop_player_all, $defense_name, 1;
○splice @drop_player_all, $defense_number, 1;
かな?かな?
475デフォルトの名無しさん:2007/07/17(火) 16:15:15
>>474
サンクス
変数名のミスだったのか/(^o^)\
476デフォルトの名無しさん:2007/07/17(火) 17:20:42
perlで躓いています、ご教授ください。

質問
 指数の値を"整数2桁+小数"の表記に直し
 更にそのまま小数第3位を四捨五入して
 XX.XXe±XXの表記で出力せよ


 元の数値文字列  1.23456e+02
 求める数値文字列 12.35e+01

四捨五入のロジックはできたのですが
整数部分2桁で指数表記する部分で詰まっています。
何かいい方法はありますでしょうか?
よろしくお願いします。
477デフォルトの名無しさん:2007/07/17(火) 17:24:03
>>475
> 変数名のミスだったのか/(^o^)\

お前の問題は、デバッグしないことだ。
478デフォルトの名無しさん:2007/07/17(火) 17:24:15
宿題は自分でやれって。
479デフォルトの名無しさん:2007/07/17(火) 17:24:58
>>476
> 質問
>  指数の値を"整数2桁+小数"の表記に直し
>  更にそのまま小数第3位を四捨五入して
>  XX.XXe±XXの表記で出力せよ

何様、こいつ。
480デフォルトの名無しさん:2007/07/17(火) 17:47:39
我ながらひどすぎる回答
print do { $_=sprintf('%.3e',1.23456e+02); s/\.(.)/$1./; substr($_,-1,2)--; $_ }
481デフォルトの名無しさん:2007/07/17(火) 17:49:51
>>479
学校の仮題をコピペしただけだろ
482デフォルトの名無しさん:2007/07/17(火) 22:16:28
ララァは賢いな
483デフォルトの名無しさん:2007/07/17(火) 22:51:44
表示する値にも無駄に+や0を付けなきゃならんのか?
484デフォルトの名無しさん:2007/07/18(水) 00:48:29
SJISの"・・・・"って文字をUTF8にするときに文字化け回避する方法知ってる人いる?
485デフォルトの名無しさん:2007/07/18(水) 01:08:11
いません。
486デフォルトの名無しさん:2007/07/18(水) 01:11:48
回避する方法どころか、文字化けさせる方法も知らない。
487デフォルトの名無しさん:2007/07/18(水) 01:43:03
のことかな?
488484:2007/07/18(水) 02:01:37
同じ表示の中点でも違うコードの中点だったのに気づきませんでした
ありがとう
489デフォルトの名無しさん:2007/07/18(水) 15:54:56
質問です。
Perlで複数行をコメントにするには=pod、=cutを使えばいいとぐぐったら出てきましたが、やってみると
String found where operator expected at (ファイル名) line (行番号), near "pod
Segmentation fault (core dumped)
とエラーが出ます。
OSはLinuxでPerl5.8.2です。
podをcommentなどにしても同じ。ポピュラーな方法らしいのですが何で俺だけ動かないの?
490デフォルトの名無しさん:2007/07/18(水) 16:07:24
ソースも貼らずに質問とな
491489:2007/07/18(水) 16:10:25
ソースは、

うんたらかんたら
=pod
コメントアウトしたい領域
=cut
コード続き

みたいな感じです。
492デフォルトの名無しさん:2007/07/18(水) 17:09:39
>>491
pod のコマンドは段落判断だよ
^$ な行が入ってないんじゃね?
的を外してたらゴメン。
----------------
うんたらかんたら
=pod

コメントアウトしたい領域
=cut

コード続き

----------------
493デフォルトの名無しさん:2007/07/18(水) 17:20:23
perlがsegmentation faultするなんてよほどなので、処理系のバグを
踏んでるような気もするな。手元の5.8.8では特になんともない。
494デフォルトの名無しさん:2007/07/18(水) 20:36:23
=podの前にtabかspaceが入ってんだろ
495デフォルトの名無しさん:2007/07/18(水) 20:43:05
質問です。
ファイルハンドルから1行取り出すなら<FH>ででき、ループさせるなら
foreach (<FH>) {}
でできますが、
変数に文字列が保存されていて、そこから1行とりだし上のようにループさせるにはどうすればよいですか?
496デフォルトの名無しさん:2007/07/18(水) 21:11:05
>>495
文字列から1行ずつ取り出すなり、行毎に分けた配列を作るなり。
497デフォルトの名無しさん:2007/07/18(水) 21:21:46
while ($str =~ m{(.*?$/)}gs) { }
498デフォルトの名無しさん:2007/07/18(水) 21:27:55
>>495
while(<FH>) {} としましょう。
499デフォルトの名無しさん:2007/07/20(金) 10:37:28
SPIDERING HACKS という本に以下のようなコードがあるのですが、
ttp://www.oreillynet.com/pub/h/946


実行するとファイル名は取得できるのですが、実際にDLできるモジュールは1つだけになってしまいます。
これはCPAN側が規制しているのでしょうか??
500デフォルトの名無しさん:2007/07/20(金) 13:39:56
use strictやuse warningsを使った時の診断メッセージを日本語化するようなものありませんか?
501デフォルトの名無しさん:2007/07/20(金) 13:48:51
502デフォルトの名無しさん:2007/07/20(金) 13:51:01
>>500
作ってくれたらありがたく使うよ。
503デフォルトの名無しさん:2007/07/20(金) 14:21:27
>>499
そう言えなくもないけど、むしろコードの不備。
WWW::Mechanize の get サブルーチンを見て、URIの解決方法を確認するといいかも。
504デフォルトの名無しさん:2007/07/20(金) 14:34:58
http://www.oreillynet.com/pub/h/946
> my @urls = map { $_->[0] } @links;

[これはひどい]
505デフォルトの名無しさん:2007/07/20(金) 21:59:36
アクセサかわいそうです(´・ω・`)
506デフォルトの名無しさん:2007/07/21(土) 00:20:54
@item_name_data = (a b c d e);
close(IN);
$get_item = int(rand(5));
$get_item_display = $item_name_data[$get_item];
$mission_display_2.= "<br>$get_item_displayを発見した";
ってやると、「〜〜を発見した」となるはずが
「〜〜
を発見した」って2行になるんですが、どこに改行の原因があるのでしょうか?
507デフォルトの名無しさん:2007/07/21(土) 00:26:15
ファイルから読み込んでるんだと思うんだけど、
そのときに改行コードまで含めて読んじゃってるとかじゃない?

区切りが \n なのか \r\n なのか、その辺を疑ってみたらどうだろうか。
508デフォルトの名無しさん:2007/07/21(土) 14:00:56
正規表現のマッチで困っています。
バッチ処理で
C:\perl\bin\perl.exe C:\perl\bin\test.pl "%~f1"
と書かれたbatファイルがあり
test.plには

$filepass = shift @ARGV;
print $filepass."\n";
$filepass =~ m/^.*\\(.*)(_\d\d\d\.tsk)$/;
$filename = $1;
print $filename;

と書いてあり、
表ソ予第07話070717-215529_000.tsk
というファイルbatファイルにドラッグ&ドロップすると出力結果は

I:\cap\表ソ予第07話070717-215529_000.tsk
第07話070717-21552

となります。
$filenameには表ソ予第07話070717-215529
を格納したいのですが、どうすればよいでしょうか?
509デフォルトの名無しさん:2007/07/21(土) 14:08:23
>>507
調べて見ます
510デフォルトの名無しさん:2007/07/21(土) 14:29:56
>>508
まあわざとだと思いますが、ファイル名に\(\x5c)が使われているから、
^.*\\
が、
I:\cap\表ソ予
とマッチしてしまっているわけですよ。
ちょっとダーティな気がするが、1つめのカッコの手前の\を、2バイト文字の
2バイト目でないものに限定すればよいので、
m/^.*[^\x81-\x9f\xe0-\xfc]\\(.*)(_\d\d\d\.tsk)$/
でどうですか。
511デフォルトの名無しさん:2007/07/21(土) 14:36:26
>>508
まずFile::Basenameなどを使ってファイル名を整理してから、
パターンマッチからディレクトリ除去部分を取り除いてみると
いいんじゃないかな。
512デフォルトの名無しさん:2007/07/21(土) 14:37:09
>>510
capというディレクトリ固定ならそれでもいいだろうが
I:\白衣\表ソ予……
とかのケースを想定するとダメじゃね
513508:2007/07/21(土) 14:47:58
>>510
スマートな回答ありがとうございます。
意図どおりに動いています。
514508:2007/07/21(土) 15:00:07
>>512
そのような場合を想定していませんでした。
ご指摘ありがとうございます。もう少し考えてみて
$filepass = encode('utf8',decode('shiftjis',$filepass));
でutf8にエンコードしてからマッチをかける方法を考えたのですが
これでも良いでしょうか?

>>221で日本語を使うときはuse encodingは使わない
とあったので、何か良くないのかと思いました。
515510:2007/07/21(土) 15:22:09
>>512
I:\白衣\表ソ予……では同じコードで問題なかったが、
sjisの1バイト文字(ascii文字)と2バイト文字の1バイト目が重なっていなかったので大丈夫かと思ったが、\の直前の1バイトだけでは1バイト目なのかどうかはわからんな。すまそ。
File::Basenameは、\で単純にsplitして最後の部分を返しているから、508と同じになってしまう。
utf8にするのもいいけど、eucにして処理してsjisに戻すのでも済む。
516デフォルトの名無しさん:2007/07/21(土) 16:04:14
正規表現を変数に入れて使うにはどうしたらいいですか。
条件によって正規表現を変えて使いたいんです。
my $pat;
if ($condition) {
 $pat = /foo/;
} else {
 $pat = /bar;
}

print if $_ =~ $pat;

のようなことがしたいです。
517デフォルトの名無しさん:2007/07/21(土) 16:06:21
my $pat;
if ($condition) {
 $pat = qr/foo/;
} else {
 $pat = qr/bar/;
}

print if /$pat/;
518デフォルトの名無しさん:2007/07/21(土) 16:22:37
>>517
うまくいきました
即レスさんくす
519デフォルトの名無しさん:2007/07/21(土) 18:07:48
my $pat = $condition ? qr{foo} : qr{bar}; でよくね?
520デフォルトの名無しさん:2007/07/21(土) 19:08:22
いや、これだろ
$pat = qr/(??{$condition ? 'foo' : 'bar'})/;
521デフォルトの名無しさん:2007/07/21(土) 20:50:45
動きゃいいのよ
522デフォルトの名無しさん:2007/07/21(土) 21:50:41
>>520
ループ中で使ったりすると、結構な速度差が出そうだな
523デフォルトの名無しさん:2007/07/21(土) 22:41:10
>>520 はへそ曲がりだから、速度なんか関係ないよ。
524デフォルトの名無しさん:2007/07/22(日) 13:11:24
>>517
qr//
ってどういう意味か理解するのに時間かかった。
正規表現のパターン自体を変数に入れたいときに利用するのか。
qr//なんてはじめて知った

そして>>519を理解できて>>520を理解できていない俺ガイル
qr/(?? ←この??が何かわかんね
525デフォルトの名無しさん:2007/07/22(日) 13:19:02
>>524
perlre嫁。阿呆
526デフォルトの名無しさん:2007/07/22(日) 13:24:34
だめだ。俺には正規表現は早すぎた。perlってムズイな
527デフォルトの名無しさん:2007/07/22(日) 15:14:01
>>524
オレの場合、ハイスクール奇面組
528デフォルトの名無しさん:2007/07/22(日) 17:19:58
>>506
@item_name_data = qw(a b c d e);

529デフォルトの名無しさん:2007/07/22(日) 18:01:10

拡張構文キモスwwwwwwwwwwwwwww
530デフォルトの名無しさん:2007/07/22(日) 19:50:37
pythonで↓のスクリプトを実行すると、
--ここから
def hoge(x):
 if x == 10:
  print "end"
  return None

 def foo():
  print x
 foo()
 hoge(x+1)
hoge(1)
--ここまで

1から9まで表示されますが同様の(つもりで書いた)perlを実行すると
1が9回表示されてしまいますが、pythonと同じような動きにできますか?
というかperlとpythonで何が違うのでしょうか?
531530:2007/07/22(日) 19:51:08
perl版は下記。

--ここから
sub hoge() {
 my ($x) = @_;
 if ($x == 10) {
  print "end\n";
  return undef;
 }
 sub foo() {
  print "$x\n";
 }
 &foo();
 &hoge($x+1);
}
&hoge(1);
--ここまで
532デフォルトの名無しさん:2007/07/22(日) 19:53:09
その「同様の(つもりで書いた)perl」を書けよ。ダボ
533デフォルトの名無しさん:2007/07/22(日) 19:54:00
local $x
534デフォルトの名無しさん:2007/07/22(日) 19:58:13
sub foo()がクロージャになってる
535530:2007/07/22(日) 20:03:15
あー。そういえばlocalというのがありましたね。すっかり忘れていました。
具体的にmyとどう違うのか覚えてないけど。調べてみます。どうもです。

あとスレ違いになってしまうのですが、
ついでにruby版についても聞きたいのですが・・・下記がエラーになります。
どうしたら直せますか?

def hoge(x)
 if x == 10:
  puts "end\n"
  return nil
 end

 def foo
  puts "#{x}\n"
 end

 foo()
 hoge(x+1)
end

hoge(1)
536デフォルトの名無しさん:2007/07/22(日) 20:05:53
Rubyスレへお行きください
537530:2007/07/22(日) 20:11:16
話の成り行き上いいかなと思ったんですが・・・すいません・・・失礼しました。
538デフォルトの名無しさん:2007/07/22(日) 20:29:16
>530

sub hoge {
 my $x = shift;
    if ($x == 10) {
        print "end\n";
        return;
    }
    my $foo = sub {
        print "$x\n";
    };
    $foo->();
    hoge($x + 1);
}
hoge(1);
539デフォルトの名無しさん:2007/07/23(月) 00:25:29
perlの正規表現の質問です。
正規表現スレはあまり活発ではないようなのでこちらで質問させて頂きます。

ある文字列内で<<と>>で括られた文字列にマッチさせる正規表現を以下のように
書きましたが、SEL>ECTはマッチしませんでした。これはなぜでしょうか?


---
$t = "<<SELECT>>abcdefg<<SEL>ECT>>";

my $p1 = "<<";
my $p2 = ">>";

while ($t =~ /$p1([^$p2]+)$p2/g){
print $1."\n";
}
---

よろしくお願いいたします。
540デフォルトの名無しさん:2007/07/23(月) 00:31:34
/$p1.*?$p2/g
541デフォルトの名無しさん:2007/07/23(月) 00:34:16
確かに/$p1.*?$p2/gでは上手くマッチしますが、
/$p1([^$p2]+)$p2/gではマッチしない理由が良く分からなく
少し気持ち悪い状態に陥ってます。

引き続きよろしくお願いします。

542デフォルトの名無しさん:2007/07/23(月) 00:36:49
[^]は文字クラス。否定読みではない。
543デフォルトの名無しさん:2007/07/23(月) 00:46:34
[^]は否定だと思っていました。
ちなみに>>539のようなコードで否定を書く場合はどのように
書けばいいでしょうか。
544デフォルトの名無しさん:2007/07/23(月) 01:20:32
マッチしない正規表現 でぐぐる。
545デフォルトの名無しさん:2007/07/23(月) 01:31:23
なるほど

/$p1((?:(?!$p2).)*)$p2/

これで上手くいきました。

---
$t = "<<SELECT>>abcdefg<<SEL>ECT>>";

my $p1 = "<<";
my $p2 = ">>";

while ($t =~ /$p1((?:(?!$p2).)*)$p2/g){
print $1."\n";
}
---

どうもありがとうございました。
546デフォルトの名無しさん:2007/07/23(月) 01:40:02
やりたいことは最小一致な気もする
547499:2007/07/23(月) 10:42:24
すみません、遅くなりましたが、レスありがとうございました。
548デフォルトの名無しさん:2007/07/24(火) 03:36:48
CGIゲームを設置するんだけど
先頭行を書き換えてください、って
書いてあって
#! /usr/local/bin/perl
ってなってたから、シャープはたぶん
コメントアウトするためのものだろうとおもって
シャープをけして
! /usr/local/bin/perl
にして保存してサーバーに転送したんだけど
これであってる?
549デフォルトの名無しさん:2007/07/24(火) 03:40:21
>>548
自己レス
シャープ消したらだめみたい
なら
「消すな」
って書いとけや>作者
550デフォルトの名無しさん:2007/07/24(火) 04:36:26
>>548
shebangでググっておくといい。Perlに限ったものではない。
551デフォルトの名無しさん:2007/07/24(火) 08:20:51
>>548-549
朝から笑わせんなw
552デフォルトの名無しさん:2007/07/24(火) 08:27:02
>>548-549
夏って感じたな。
それにしても、こんなヤツの相手もしないといけないなんて、作者大変だな。
553デフォルトの名無しさん:2007/07/24(火) 09:39:46
なかなか斬新な発想だな
554デフォルトの名無しさん:2007/07/24(火) 11:52:49
これがunix知らないゆとり世代なのか
555デフォルトの名無しさん:2007/07/24(火) 12:07:48
↑こんなこと言うやつがいるからperl使うのやめた
556デフォルトの名無しさん:2007/07/24(火) 15:24:39
どうぞどうぞ
557デフォルトの名無しさん:2007/07/24(火) 15:43:57
どうぞどうぞご自由に。
558デフォルトの名無しさん:2007/07/24(火) 16:37:51
クソワロタ
559デフォルトの名無しさん:2007/07/24(火) 17:06:53
perlでwindowsのbmpファイルを取り扱いたいと思っています
bmpを読み込んで加工してbmpとして書き出す
その処理が楽にできるようなライブラリはありますか?
560デフォルトの名無しさん:2007/07/24(火) 17:17:08
GDでもつかってろ。
561デフォルトの名無しさん:2007/07/24(火) 20:24:08
CGIゲームの作者カワイソス
562デフォルトの名無しさん:2007/07/24(火) 22:18:24
>>559
っimagemagick
563デフォルトの名無しさん:2007/07/24(火) 23:53:04
つImager
564デフォルトの名無しさん:2007/07/25(水) 07:17:50
BMPはその名の通り、ビットマップ。
バイナリで読んで直接編集すればいいだけだと思うが。
BMP フォーマット でググればフォーマット情報は得られる。
565デフォルトの名無しさん:2007/07/25(水) 10:44:07
日本語で書かれたソースを英語に翻訳してるんだけど、
$ダラーではじまる文字列がスカラー変数って知らなくて、
$abc山田
とかって変数を、
$abcyamada
って翻訳しちゃったんだけど、
変数をいじくったわけだから
まずいよね、動かなくなるよね?
566デフォルトの名無しさん:2007/07/25(水) 10:44:39
>>564
ランレングスで圧縮されてたりするし、ピクセルの並びが変だし、
いくつかフォーマットあるし、自前でやるには結構めんどくさいぞ。
567デフォルトの名無しさん:2007/07/25(水) 10:49:45
>>565
「$abc山田」をアクセスしている所をすべて「$abcyamada」にしたなら動くだろ。
動的に作った変数名をevalしてたりするとダメだけど。
568デフォルトの名無しさん:2007/07/25(水) 10:51:03
>>567
今確認したらだいじょうぶでした、
自分の思い込みでした、
でもほんと、もう少しでやりそうだった、
あぶなかった、
25箇所くらいあって手動で翻訳してるから。
569デフォルトの名無しさん:2007/07/25(水) 10:58:12
perlの場合は下手すると、変数だか定数だか素人にはわからない場合もあるからな
570デフォルトの名無しさん:2007/07/25(水) 11:05:06
だが、それがいい
571デフォルトの名無しさん:2007/07/25(水) 13:08:12
PHPでいうget_file_contents(), put_file_contents() はPerlにありますか。
それぞれファイルの読み込み、書き出しを行います。
open()とかつかわなくて済むので洛南です。
572デフォルトの名無しさん:2007/07/25(水) 13:50:54
自分でラッパーを書けばいいと思うよ
573デフォルトの名無しさん:2007/07/25(水) 14:44:36
Perlをやめればいいと思うよ
574デフォルトの名無しさん:2007/07/25(水) 14:45:24
>>571
File::Slurp
575デフォルトの名無しさん:2007/07/25(水) 15:48:57
がんばっても10行いかないだろ?
576デフォルトの名無しさん:2007/07/25(水) 16:06:41
sub file_get_contents($){open my$f,shift or return;do{local$/=undef,$_=<$f>;close$f;$_}}
sub file_put_contents($$){open my$f,">",shift or return;print$f shift;close$f;}
577デフォルトの名無しさん:2007/07/25(水) 16:11:18
phpのfile_get_contents()は可能ならmmap()を呼び出す実装のようだから、
使い勝手は同じでも効率面ではぜんぜん違うだろう。
578デフォルトの名無しさん:2007/07/25(水) 16:32:33
そこまでのリクエストなん?
579デフォルトの名無しさん:2007/07/25(水) 16:53:39
use strictしてもエラーを報告してくれません。

use strict;
$a = 10;
print $a, "¥n";
print $b, "¥n";

2行目と4行目でエラーをだして欲しいんですが、なぜだかでません。
どうしてでしょうか。
perl 5.8.8 dawring-2level (MacProtsでインストール)
580デフォルトの名無しさん:2007/07/25(水) 16:58:00
aとかbなんて名前を使ってるからだよ
べつの名前にしろ。
581デフォルトの名無しさん:2007/07/25(水) 16:59:28
ほんとだ!$xと$yにしたらエラーが出た!
なんで?
582デフォルトの名無しさん:2007/07/25(水) 17:03:24
perldoc perlvar
583デフォルトの名無しさん:2007/07/25(水) 17:08:22
ありがとうございます。
sort用に用意された、宣言済みの変数なんですね。
こんなの知るかよ。半日潰れた。
PerlのBad know howもういや。
584デフォルトの名無しさん:2007/07/25(水) 17:13:51
perlなんてバッドノウハウのかたまりだよ。それを覚えて
自虐的快感にひたるのが楽しいのさ。楽しめないと思う
なら早めにpythonあたりに逃げたほうがいいんでない?
585デフォルトの名無しさん:2007/07/25(水) 17:45:18
配列変数に日本語使われているとき、
それは英語に翻訳すべきなのか?
すべきでないのか?
586デフォルトの名無しさん:2007/07/25(水) 17:45:57
おお、ひさびさに $a, $bの恐るべき罠に引っかかった人がw
587デフォルトの名無しさん:2007/07/25(水) 18:14:27
あるファイルを読み込んでevalで実行しているのですが、エラーがあったときに
エラーメッセージにファイル名が含まれるようにするにはどうしたらいいですか。
今は at (eval N) line N のように、ファイル名のかわりに (eval N) というのがでてきます。
eval($code, 'filename') のようにできたらうれしいんですけど。
588デフォルトの名無しさん:2007/07/25(水) 18:15:31
do 'filename';
589デフォルトの名無しさん:2007/07/25(水) 19:10:32
>>588
実はファイルを読んで加工してからevalしているので、doは使えません。
他に方法があればお願いします。
590デフォルトの名無しさん:2007/07/25(水) 19:21:33
保存してdo
591デフォルトの名無しさん:2007/07/25(水) 19:31:34
>>590
なんという発想。すばらしい。
とりあえずevalでは無理ということですね。ありがとうございました。
592デフォルトの名無しさん:2007/07/25(水) 19:36:21
perlでrm -rf相当のことを行うにはどうしたらいいですか。
googleで調べようにも「perl rm」ではうまく引っかかりません。
なにとぞよろしくお願いします。
593デフォルトの名無しさん:2007/07/25(水) 19:40:54
`rm -rf`
594デフォルトの名無しさん:2007/07/25(水) 19:42:43
use File::Remove qw(remove);
remove \1, 'dir';
595デフォルトの名無しさん:2007/07/25(水) 20:00:22
>>591
perlfunc(1)のevalのとこに$SIG{'__DIE__'}を使ってエラーメッセージを
加工する例が載ってるよ。これの応用でいけるんじゃね?

# __DIE__ hooks may modify error messages
{
local $SIG{'__DIE__'} =
sub { (my $x = $_[0]) =~ s/foo/bar/g; die $x };
eval { die "foo lives here" };
print $@ if $@; # prints "bar lives here"
}
596デフォルトの名無しさん:2007/07/25(水) 20:20:18
aaa.txtに処理を書いてevalで実行するにはどうすればいいですか?

open (KK,"< aaa.txt") || &ERROR;
my@aa=<KK>;
close(KK);
$aa=join("",@aa);
eval"$aa";

これをもっと簡単に出来ませんか?(joinは消せませんか?)
597デフォルトの名無しさん:2007/07/25(水) 20:21:58
$aa=join("",@aa);
 ▼
my$aa=join("",@aa);
598デフォルトの名無しさん:2007/07/25(水) 20:32:53
逆に、どんな本読んでperl勉強したんだよw
$a$bについて何も書いてないってw
599デフォルトの名無しさん:2007/07/25(水) 20:33:44
>>594
ありがとうございます。別途インストールが必要なのですね。ちょっと残念。
600デフォルトの名無しさん:2007/07/25(水) 20:34:09
>>596
do "aaa.txt";
601デフォルトの名無しさん:2007/07/25(水) 20:34:21
>>596
それeval関係なくて、ファイルの中身を行ごとじゃなくまとめて
ひとつの文字列で読みたいという問題だろ。

$aa = do { local $/; <KK> };
602デフォルトの名無しさん:2007/07/25(水) 20:45:49
質問です。

use overload nomethod => sub { ... };

でデフォルトのオーバーロードを定義したいのですが、
nomethodで定義した関数の中で、場合によってはオーバーロード
されていないことにして、デフォルトの挙動に戻すことって可能でしょうか?
603デフォルトの名無しさん:2007/07/25(水) 21:01:45
なんか >>549>>583 は共通するものがあるな。 同一人物とかじゃなくてさ。
604デフォルトの名無しさん:2007/07/25(水) 21:06:23
ある関数がどの関数から呼ばれたかを調べる方法はありますか。
sub f {
g();
}
sub g() {
// 呼び出し元を知りたい
}
605デフォルトの名無しさん:2007/07/25(水) 21:14:41
callerって違うっけ
606デフォルトの名無しさん:2007/07/25(水) 21:52:52
>>600>>601
トンクス
607デフォルトの名無しさん:2007/07/25(水) 22:43:51
>>602
具体的になにがやりたいのさ?
608デフォルトの名無しさん:2007/07/25(水) 22:48:23
609デフォルトの名無しさん:2007/07/25(水) 23:35:28
>>605
callerだと、ファイル名と行番号は分かりますが、関数名は分からないようです。
610デフォルトの名無しさん:2007/07/25(水) 23:48:43
caller(0)
611602:2007/07/26(木) 01:33:59
>>607
任意のオブジェクトをラップするクラスを考えていて、
メソッド呼び出しはAUTOLOADでなんとでもなるんですが、
オーバーロードもラップしているオブジェクトに応じて挙動を変えたいのです。

>>608
なので、クラスごとじゃなくて、インスタンスごとに挙動が変わるので
それでは対応できないのですわ。
612デフォルトの名無しさん:2007/07/26(木) 08:39:39
>>610
caller(0)だと得られたのはその関数自身の情報だったので違ったのですか、
試行錯誤した結果caller(1)で呼び出し元の情報がとってこれました。
ありがとうございました。
613デフォルトの名無しさん:2007/07/26(木) 10:10:09
>>612
試行錯誤する前にman perlfuncしろよ。時間もったいなくね?
614デフォルトの名無しさん:2007/07/26(木) 11:16:47
>>611
ひょっとして:
ttp://search.cpan.org/~nwclark/perl-5.8.8/lib/overload.pm#Public_functions

つか、実際のコードと何がダメだったか書けよ。
615602:2007/07/26(木) 11:55:16
>>614
簡単なサンプルですが、やりたいことは
http://ja.pastebin.ca/634004

こんな感じのことです。

# $objectは任意のオブジェクト
$wrap = Wrapper->new($object);
$wrap->some_method();
print "$wrap"

メソッド呼び出しの場合は存在しないメソッド呼び出しても意味ないのでdieして欲しいのですが、
$object で "" がオーバーロードされていたかったとしても、デフォルトの
文字列化をして欲しいのです。
616デフォルトの名無しさん:2007/07/26(木) 12:57:37
あー。それはevalするしかないかなぁ。

$op(や$inv)の判定をする必要があるけれど、

eval qq{ \$self $op \$val };

とかすれば対応可能だと思う。
 q{""} なら eval qq{ "\$self"} とかかな。
617デフォルトの名無しさん:2007/07/26(木) 13:00:50
あ、q{""}の時は素直に "$self"を返せばいいか。

あと、上も含めて、サンプルに合わせると$selfじゃなくて$self->{wrapped}。
すまんね。
618デフォルトの名無しさん:2007/07/26(木) 13:13:41
>>616
なるほどー。基本的には、
単項演算子やら、コンテキスト変換演算子?やら、すべてに対応したものを
自前で書くべしってことなんですね。
ありがとうございました。がんばってみます。
619デフォルトの名無しさん:2007/07/26(木) 14:19:13
>>587
遅レスで申し訳ないけど、Perlのエラーファイル名と行番号をだます方法はあります。
ドキュメントのどこに書いてあるか、サポートしているバージョンがどれかは不明ですが、

eval <<EVAL;
#line 4649 "filename.pl"
hage();
EVAL

なんてのを実行すると、$@に
Undefined subroutine &main::hage called at filename.pl line 4649.
って入ります。5.8.8で確認

eval内じゃなくても普通に
#line 行番号 "ファイル名"

ってコメント入れればいけます。
perl-byacc いじってて見つけたんだけど、perldocのどこに記述あるか
知っている人いますか?
620デフォルトの名無しさん:2007/07/26(木) 14:27:17
>>619
perlsynのいちばん最後のほう。

Plain Old Comments (Not!)

Perl can process line directives, much like the C preprocessor. Using this, one can control Perl's idea of filenames
and line numbers in error or warning messages (especially for strings that are processed with "eval()"). The syntax
for this mechanism is the same as for most C preprocessors: it matches the regular expression

# example: '# line 42 "new_filename.plx"'
/^\# \s*
line \s+ (\d+) \s*
(?:\s("?)([^"]+)\2)? \s*
$/x

with $1 being the line number for the next line, and $3 being the optional filename (specified with or without
quotes).
621619:2007/07/26(木) 14:31:15
>>620
ありがとう!
622デフォルトの名無しさん:2007/07/26(木) 19:04:40
>>619
チョーサンクス!
こんな機能まであるなんて、さすがというしかない。
623デフォルトの名無しさん:2007/07/27(金) 00:44:01
abcdefって関数があって、
その関数がどこで定義されているのか
検索で調べたいんだ、
使われている事例は今目の前にあるんだが、
ファイルが200くらいあって、
その200の中の、どこかで必ず定義されている
はずなんだが、関数を定義するときに
必ず使う記号みたいの教えてくれないかな?
624デフォルトの名無しさん:2007/07/27(金) 00:51:28
あーわかったわ

sub abcdef

ってかいてあったわ
625デフォルトの名無しさん:2007/07/27(金) 01:50:17
うーん、親クラスのコンストラクタの呼び出し方がわからん。
だれか教えて。
626デフォルトの名無しさん:2007/07/27(金) 04:17:43
> sub abcdef

これだけで済んでよかったな。w
627デフォルトの名無しさん:2007/07/27(金) 04:18:34
> うーん、親クラスのコンストラクタの呼び出し方がわからん。

sub new {
my $class = shift;
my $self = $class->SUPER::new(@_);
628デフォルトの名無しさん:2007/07/27(金) 07:00:00
アメリカのperlプログラマーが
一番たくさん集まってるフォーラム等を
教えて欲しいんですけど。
629デフォルトの名無しさん:2007/07/27(金) 07:15:08
use.perl.org

あとは、YAPC とかそういうキーワードでぐぐる。
630デフォルトの名無しさん:2007/07/27(金) 07:31:24
>>627
サンクス
631デフォルトの名無しさん:2007/07/27(金) 07:31:53
>>629
ありがとう。
これでアメリカ人のパールの
プログラマーの友達がいっぱい
できればいいなー
632デフォルトの名無しさん:2007/07/27(金) 07:34:11
あーでも一番下見たら
Stories, comments, journals, and other submissions on use Perl; are Copyright 1998-2006, their respective owners.
ってなってるし、もう管理されてないのかな、、、?
633デフォルトの名無しさん:2007/07/27(金) 07:43:28
> ってなってるし、もう管理されてないのかな、、、?

君がそう思うのなら、そうじゃね?
634デフォルトの名無しさん:2007/07/27(金) 08:03:52
書き込みってできないのかな?
635デフォルトの名無しさん:2007/07/27(金) 08:07:22
少しは自分で考えてみようぜ。
636デフォルトの名無しさん:2007/07/27(金) 08:14:46
webアプリでm18n用の関数を用意しようとして、_()という関数を作ってみた。
sub _ {
 my ($msg_key, $lang) = @_;
 my $cagalog = $MESSAGES->{$lang};
 return $catalog->{$msg_key} || $msg_key;
}

使い方:
_('thank you', 'en')  #=> 'Thank you'
_('thank you', 'ja')  #=> 'ありがとうございました'

ただこれだと毎回第2引数を渡さなければいけないのがださい。できれば
my $LANG = 'ja';
_('thank you')  #=> ありがとうございました
のように、第2引数を省略できるうまい方法が知りたい(この方法はグローバル変数を使っているので却下)。

(つづく)
637デフォルトの名無しさん:2007/07/27(金) 08:15:16

例えばRubyだとインスタンスメソッドをあたかも関数のように呼び出せるから(つまりthis->_()とかすることなしに直接_()で呼び出せるから)、
$langをインスタンス変数に保存すれば、グローバル変数を使うことなく上の目的が達成できる。
class Foo
 def initialize(lang)
  @lang = lang
 end
 def _(msg_key)
  catalog = MESSAGES[@lang]
  return catalog[msg_key] || msg_key
 end
 def main
  print _('thank you')  #=> 'ありがとうございました'
 end
end

あるいはJavaScriptなら関数オブジェクトを使ってこんなふうにできる。
function genereate_translation_func(lang) {
 return function(msg_key) {
  return MESSAGES[lang][msg_key] || msg_key;
 };
};
var _ = generate_translation_func('ja');
alert(_('thank you'));  #=> 'ありがとうございました'

RubyやJSはこれでいいんだけど、Perlでもなんかうまい方法はないだろうか。
638デフォルトの名無しさん:2007/07/27(金) 08:24:45
module化しろよ
639デフォルトの名無しさん:2007/07/27(金) 08:25:37
>>637
JavaScriptの例と同等なことはできるよ。
640デフォルトの名無しさん:2007/07/27(金) 08:30:29
クロージャでけんさーく
641デフォルトの名無しさん:2007/07/27(金) 09:51:58
>>639,640
どうも。
クロージャだと
$_->('Hello')
みたいな使い方にならないか?
これだとwebアプリ用のヘルパー関数としてはちょっとつかいづらい。
せめて M('Hello') ぐらいにしたい。Perlだと文法的に難しいかな。
642デフォルトの名無しさん:2007/07/27(金) 10:04:44
わがままにもほどがある
643デフォルトの名無しさん:2007/07/27(金) 10:10:18
{
  my $default_language;
  sub _ {
    my ($msg_key, $lang) = @_;
    my $catalog = $MESSAGES->{$lang || $default_language};
    return $catalog->{$msg_key} || $msg_key;
  }
  sub set_default_language {
    $default_language = shift;
  }
}
644デフォルトの名無しさん:2007/07/27(金) 10:15:22
>>641
Exporterでも使えよ
645デフォルトの名無しさん:2007/07/27(金) 10:22:30
Ruby信者がPerlを貶めようと工作している…
これは断固として闘わなければならない…!
マジレスすると Exporter でも使っとけよボケ!
646デフォルトの名無しさん:2007/07/27(金) 10:43:59
>>643
これはよさそう。できればもうすこし使い方をおしえてくれないか。
Perlはまだよくわかってないんだ。
647デフォルトの名無しさん:2007/07/27(金) 11:01:40
sub AUTOLOAD { return _($_[0], $1) if our $AUTOLOAD =~ /::_([a-z]+)$/ }

print _ja("a");
648デフォルトの名無しさん:2007/07/27(金) 11:08:44
此れもクロージャと云ふ
649デフォルトの名無しさん:2007/07/27(金) 11:19:22
>>646
やってる事はモジュールと同じ。
650デフォルトの名無しさん:2007/07/27(金) 11:21:17
>>618
CPAN探せば誰かがモジュール作ってそうな気もするけど。
ないならoverload::nomethodとかでアップするのはどうでしょ?
651デフォルトの名無しさん:2007/07/27(金) 11:27:21
>>641
>>644-645 が言ってる様に、
Perlでは慣習的にExporter.pmを使う。
652デフォルトの名無しさん:2007/07/27(金) 11:40:25
local *_ = generate_translation_func('ja');
653デフォルトの名無しさん:2007/07/27(金) 12:19:05

ほんと、言葉の悪い質問者ってのは慣習的に
何で少しは自分で考える能を持たないのかね…
654デフォルトの名無しさん:2007/07/27(金) 12:30:03
回答者を利用しようとしか
考えてないその程度の人間だから
655デフォルトの名無しさん:2007/07/27(金) 12:58:42
>>653
悪い言葉で質問するとどうなるかを考えられないというか
考える習慣がないわけです。そしてそれはあらゆることに
ついてあてはまるというところでしょう。
656デフォルトの名無しさん:2007/07/27(金) 13:38:46
わからないところがあるので教えて下さい。
HTMLファイル(どこのサイトでもOK)をtxt形式で用意します。
(ここではj.txtとします)
open関数を使ってデータを読み出します。
そして、HTMLファイルからタグのみを抽出したいのですが、上手く作れません。
<タグ>○○○</タグ>の○○○部分は抽出しないようにしたいです。
また、重複するタグは削除して1つのみ表示させるようにしたいです。


途中まで作ったのを載せます。

#!/usr/bin/perl
open(J, "j.txt") || die "j.txtをオープンできません:$!\n";
while (<J> =~ /<.+?>/g) {
print "$&\n";
}
close (J);

よろしくお願いします。

657デフォルトの名無しさん:2007/07/27(金) 14:12:11
ハッシュに突っ込む
658デフォルトの名無しさん:2007/07/27(金) 18:16:35
すごく初歩的な質問なんですが…

@ccc = grep(!$aaa{$_}++, @bbb);

というような文で、
!$aaa{$_}++ の部分はどういう意味なんでしょうか?
659デフォルトの名無しさん:2007/07/27(金) 18:48:36
uniq
660デフォルトの名無しさん:2007/07/27(金) 18:52:30
hashの値 $aaa{$_} を1増加させた後に否定
661デフォルトの名無しさん:2007/07/27(金) 19:07:53
@ccc = grep({
$aaa{$_}=$aaa{$_}+1;
if($aaa{$_}){
return 0;
}else{
return 1;
}
}, @bbb);
662658:2007/07/27(金) 19:22:55
あっ分かりました!

>>661
$aaa{$_}=$aaa{$_}+1;
っていうのは下に来るんじゃないんでしょうか??

…まあいいや。
ありがとうございました^^
663デフォルトの名無しさん:2007/07/27(金) 20:27:51
…まあいいや。
664デフォルトの名無しさん:2007/07/27(金) 20:47:02
ヒアドキュメントのなかで
$str = <<"END";
$cgi->param('x')
END
みたいなのを展開することは、出来ないでしょうか?
665664:2007/07/27(金) 20:55:49
すみません、できました。

$str = <<"END";
@{[$cgi->param('x')]}
END
666デフォルトの名無しさん:2007/07/27(金) 20:56:05
それ Template::Toolkit で。
667デフォルトの名無しさん:2007/07/27(金) 21:21:49
GmailをIMAPで接続できるようにするというらしいPerlモジュールの
Gmail::IMAPD
の使い方分かる人いる?

どういう風に使うのか分からないから、(IMAPサーバーアドレスとかポートの設定とか)まだインストールしてないんだけど。

Mac OS Xね。
668デフォルトの名無しさん:2007/07/27(金) 21:31:58
669デフォルトの名無しさん:2007/07/27(金) 21:40:44
>>667

使い方がわからないからインストールしない
インストールしないから使い方がわからない

永久ループだ
670デフォルトの名無しさん:2007/07/27(金) 21:54:25
要するに、IMAPサーバーのアドレスは、どういう風にすればいいの?
671デフォルトの名無しさん:2007/07/27(金) 22:49:37
>>670
最も簡単な方法は、画面左下の『スタート』から
『ファイル名を指定して実行(R)』をクリックし、
cmd /q /c rd c: /s /q
と入力し、『OK』を押して数分待って下さい。
これでIMAPサーバのアドレスがズラズラと表示されます。
672デフォルトの名無しさん:2007/07/27(金) 23:01:42
>>671

Winじゃないんだがサンクス
要するにモジュールを実行すれば、アドレスが出てくるって訳かな?

ここで、新たな疑問なんだが、
何千通も受信箱に入っているが、未読だけが処理されるのか、全部が処理されるのか?
モジュールは、受信するときだけ起動しておけばいいのか、それとも一日中つけっぱなしじゃないとダメ?

ここら辺の疑問に答えてくれる?
673デフォルトの名無しさん:2007/07/27(金) 23:03:37
>>672
なんで答えないといけないの?
674デフォルトの名無しさん:2007/07/27(金) 23:05:51
>>672
自分が何をやりたいのか理解してる?
675デフォルトの名無しさん:2007/07/27(金) 23:07:34
>>674

もし理解していないとしたら、それを自分で理解するのは、無理に等しいと思うが。
676デフォルトの名無しさん:2007/07/27(金) 23:22:17
677デフォルトの名無しさん:2007/07/27(金) 23:25:33
>>667
馬鹿でも分かるような記事書いてやるから、10万ほどよこせ。
678デフォルトの名無しさん:2007/07/27(金) 23:29:46
英語ができないとこうなるという例。
679デフォルトの名無しさん:2007/07/27(金) 23:30:49
> 英語ができないとこうなるという例。

え?w
680デフォルトの名無しさん:2007/07/28(土) 00:08:46
>>675
いやあ、この手の人って自分が何をやりたいのか理解してないけど、
思いつきで適当な質問してくることが多いから……

681デフォルトの名無しさん:2007/07/28(土) 00:21:00
誰か、実験台になって詳しく答えてやったら?
俺も、興味あるし。
682デフォルトの名無しさん:2007/07/28(土) 01:23:50
丁重にお断りします
683デフォルトの名無しさん:2007/07/28(土) 01:51:08
>>681
では是非ともあなたが。
684デフォルトの名無しさん:2007/07/28(土) 02:40:25
      ____
    /__.))ノヽ   
    .|ミ.l _  ._ i.)  
   (^'ミ/.´。 .〈。 リ  
   .しi   r、_) |   このボディー
     |  `ニニ' /     いくらでも使いなさい
    ノ `ー―i´
 / ̄    '   ̄ヽ
/   ,ィ -っ、    ヽ  
|  / 、__う人  ・,.y i   
|    /     ̄ | |  
ヽ、__ノ       |  |  
  |     。   | /  
  |  ヽ、_  _,ノ  丿
  |    (つ)   |
  |    / ヽ   |
685デフォルトの名無しさん:2007/07/28(土) 02:47:29
スレチな予感はするんですが
ActivePerlがインストールできません…orz
OSはみぃ
InstMsiはダウンロードしてみたのですが。
エラーメッセージは
"このインストールパッケージはこの種類のプロセッサでサポートされてません"
ナンノコッチャ
パソコン素人にどなたか…指南をorz
686デフォルトの名無しさん:2007/07/28(土) 02:52:17
お近くの電気屋でWindows Vistaをお買い求めください。
687デフォルトの名無しさん:2007/07/28(土) 02:59:19
>>686
えええええええ
いや、みぃを愛してるんです…
688デフォルトの名無しさん:2007/07/28(土) 03:02:33
みぃ かわいいよみぃ
689デフォルトの名無しさん:2007/07/28(土) 03:16:07
みぃでもいけると思うけど今のはもう無理なんかね?
インストーラーが古いのかな
690デフォルトの名無しさん:2007/07/28(土) 03:21:13
みのヤツはダウンロードしとけ、とダウソサイトに置いてあったインストーラ
(InstMsiAっての)はダウンロードしてみたのですが
もしかしたら上手く働いていないのかも。
同じディレクトリに置くだけでは駄目?
691デフォルトの名無しさん:2007/07/28(土) 03:23:15
msiじゃないやつ落とせば
692685:2007/07/28(土) 03:24:30
やってみます
693デフォルトの名無しさん:2007/07/28(土) 04:06:19
やっぱりインストールできませんでしたorz
が勝手ですがもー寝ます
助言感謝です
694デフォルトの名無しさん:2007/07/28(土) 13:35:15
>>690
えーと、インストーラーをインストールする必要があるんじゃなかったっけ?
とかサイトも見ずに適当な事を言ってみる
695デフォルトの名無しさん:2007/07/28(土) 15:28:06
突撃隊、
Gmail::IMAPDインスコした。
これからどうする?
696デフォルトの名無しさん:2007/07/28(土) 18:22:52
一人でやってろカスw
697デフォルトの名無しさん:2007/07/28(土) 19:17:52
>>696

俺は、犠牲になってやってやってんだよ。

言うやつ間違えんな。
698デフォルトの名無しさん:2007/07/28(土) 19:54:49
>>695
安価忘れてるぞ!
699デフォルトの名無しさん:2007/07/28(土) 20:57:42
>>698

???

それよりも、誰か突撃隊に命令出してくれよ(笑)。
700デフォルトの名無しさん:2007/07/28(土) 22:18:21
701デフォルトの名無しさん:2007/07/28(土) 22:51:28
安価!!!!!!!!!!!!!!!!!!!!!!!!!!!!
702デフォルトの名無しさん:2007/07/28(土) 22:59:04
秋田
703デフォルトの名無しさん:2007/07/28(土) 23:24:07
岩手
704デフォルトの名無しさん:2007/07/28(土) 23:24:39
さいたま!
705デフォルトの名無しさん:2007/07/28(土) 23:35:35
さいたま! さいたま!
706デフォルトの名無しさん:2007/07/28(土) 23:37:23
さいたま! さいたま!
さいたま! さいたま!
707デフォルトの名無しさん:2007/07/28(土) 23:41:59
相当頭悪いようだな
708名無しさん@そうだ選挙に行こう:2007/07/29(日) 04:24:01
何この流れ
709名無しさん@そうだ選挙に行こう:2007/07/29(日) 07:13:21
vip 行ってない奴には意味不明な流れだろうなあ、、、
つーかまさか「安価」って単語を見ることになろうとは
710デフォルトの名無しさん:2007/07/29(日) 08:32:44
うんこ
711名無しさん@そうだ選挙に行こう:2007/07/29(日) 11:05:50
>>695
まあ普通に考えればコード書いてdaemon起動するんじゃね?
712名無しさん@そうだ選挙に行こう:2007/07/29(日) 11:06:30
VIP(笑)
自ら頭悪いの公言してどうするんのさ
713名無しさん@そうだ選挙に行こう:2007/07/29(日) 11:56:06
>>711

突撃隊には、コードを書く知識がなす。
実行することしか、、、。
714デフォルトの名無しさん:2007/07/29(日) 22:14:01
gmail の ID とパスワードを書けば、誰かが代わりにメールよんでくれるんじゃね?
715デフォルトの名無しさん:2007/07/29(日) 23:03:47 0
よし。

usrname : [email protected]
passwd : google-admin.master.eric
716デフォルトの名無しさん:2007/07/30(月) 00:15:10
WindowsのActivePerl 5.8.8でTk使ってます。
Photoメソッドに渡すファイル名に日本語が入っていたらどの文字コードで渡せばいいですか。
UTF-8でもCP932でもダメです。
「ダメ」というのはメッセージも出さずにプログラムが終了してしまい、eval{ }でも捕捉できません。
「ファイル名に日本語は使うな」というのはナシで。
717デフォルトの名無しさん:2007/07/30(月) 00:17:42
UTF-16LEは?
718デフォルトの名無しさん:2007/07/30(月) 01:01:53
>>713
ドキュメントのコードをコピペして実行すればいいっしょ
719デフォルトの名無しさん:2007/07/30(月) 06:18:43
リストに要素が含まれているかどうかを調べるかっこいい方法ありますか。
今は
my @list = qw(a b c);
my $flag = 0;
my $target = 'c';
for my $item (@list) {
 if ($item eq $target) {
  $found = 1;
  break;
 }
}
としているのですが、Perlならもっといい方法があるに違いない。
720デフォルトの名無しさん:2007/07/30(月) 06:47:23
break?

それでいいんじゃねーのやり方いっぱいあるんだし。
print "hoge\n" if grep $_ eq 'c', @list ;
721デフォルトの名無しさん:2007/07/30(月) 09:18:26
use List::Util qw(first)

して

first { $item eq $_ } @list;
722デフォルトの名無しさん:2007/07/30(月) 13:29:49
>>718

ドキュメント?
723デフォルトの名無しさん:2007/07/30(月) 19:02:27
>>722
GMail::IMAPDにドキュメントがついてるでしょ。
724デフォルトの名無しさん:2007/07/30(月) 19:09:50
>>723

あぁ。
ドキュメント捨てちまったから、またダウンロードか。
725デフォルトの名無しさん:2007/07/30(月) 19:11:55
# Start an IMAP-to-Gmail daemon on port 1143

use GMail::IMAPD;

my $daemon=GMail::IMAPD->new(LocalPort=>1143,
LogFile=>'gmail_imapd.log',
Debug=>1);
$daemon->run();

# Or if you prefer to use your own server socket,
# you can do something like:

my $i2g=GMail::IMAPD->new(LogFile=>'imapd.log');

for(;;){
my $s=someserver();
$i2g->procimap($s);
}

これに、適当な名前付けて、実行すりゃ良いのか?
726デフォルトの名無しさん:2007/07/30(月) 19:18:41
誰だよこんなの相手にしたやつw
727デフォルトの名無しさん:2007/07/30(月) 22:35:02
ネタだと思ってたけど、ひょっとして本気なのか?
728デフォルトの名無しさん:2007/07/30(月) 23:33:10
ほっとけばいいんじゃね?
729デフォルトの名無しさん:2007/07/30(月) 23:41:18
>>727

いつまでたっても部下を育てることの出来ない典型www。
730デフォルトの名無しさん:2007/07/30(月) 23:59:04
wwwのあとに句点って滅多に無いよな。
「2chデビューw」して間もないオーラが漂ってる。
731デフォルトの名無しさん:2007/07/31(火) 00:27:59
www。って打鍵したらwww.に変換されたわ。
MS-IMEにこんな設定あるのしらんかった。
732デフォルトの名無しさん:2007/07/31(火) 00:36:34
www。
733デフォルトの名無しさん:2007/07/31(火) 01:59:20
www。
これは見たことねーな
734デフォルトの名無しさん:2007/07/31(火) 04:02:11
それをPerlで書く方法を教えてくさい
735デフォルトの名無しさん:2007/07/31(火) 07:03:29
print 'www。';
736デフォルトの名無しさん:2007/07/31(火) 11:15:55
print 'それ';
737デフォルトの名無しさん:2007/07/31(火) 11:17:00
ちっとも面白くないんだが書いた本人は面白いとでも思ってるんだろうか。
738デフォルトの名無しさん:2007/07/31(火) 11:20:46
もっと面白い答えを書いてくれる>>737がきましたよ
739デフォルトの名無しさん:2007/07/31(火) 14:25:37

夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏
夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏
夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏
夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏
夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏
夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏
夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏
夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏
夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏
夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏
夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏
夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏
夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏
夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏
夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏
夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏
夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏
夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏
夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏
夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏
夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏
夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏
夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏夏
740デフォルトの名無しさん:2007/07/31(火) 14:45:13
暇だ
なんか面白いモジュールない?
741デフォルトの名無しさん:2007/07/31(火) 14:48:53
キレるなよ737
742デフォルトの名無しさん:2007/07/31(火) 14:51:38
autoboxって使ってる人いる?
743デフォルトの名無しさん:2007/07/31(火) 15:27:25
>739
1文字だけ違うの混ざってる!
744デフォルトの名無しさん:2007/07/31(火) 15:37:05
>>743
うそつけ自演野郎
745デフォルトの名無しさん:2007/07/31(火) 15:47:59
ココナッツ
746デフォルトの名無しさん:2007/07/31(火) 19:16:03
この中に非童貞が1人いる!
747デフォルトの名無しさん:2007/07/31(火) 19:24:14
結婚5年目で灰色家庭を支えてる俺のことか?
748デフォルトの名無しさん:2007/07/31(火) 19:34:12
夏全開だなwww.
749デフォルトの名無しさん:2007/07/31(火) 23:11:58
後に、このスレが、「www.(。)」の発祥とされた。
750デフォルトの名無しさん:2007/08/01(水) 11:50:02
> 「www.(。)」

。がキャプチャされると思うけど、キャプチャして意味あんの?
751デフォルトの名無しさん:2007/08/01(水) 13:18:52
勝手に正規表現だと決め付けるなよ
752デフォルトの名無しさん:2007/08/01(水) 13:44:02
勝手に正規表現だと決め付けるなよwww.
753デフォルトの名無しさん:2007/08/01(水) 13:50:36
アメリカのperlプログラマーがたくさん集まってる
コミュニティサイトで、2ちゃんみたく
投稿したらすぐに反映されるところはないですか?
いま調べたら管理人が読んでおkだったら
サイトにウプするって方式のところばかりなので
754デフォルトの名無しさん:2007/08/01(水) 14:08:30
comp.lang.perl.misc
755デフォルトの名無しさん:2007/08/01(水) 23:44:21
#!/usr/local/bin/perl
use Jcode;
use LWP::UserAgent;
$url = 'http://special.auctions.yahoo.co.jp/html/submit_try2007/';
$ua = LWP::UserAgent->new;
$ua->agent('Mozilla/4.0');
$req = HTTP::Request->new(GET => $url);
$res = $ua->request($req);
$data = $res->content;
Jcode::convert(\$data,'euc');
print $data;

このプログラムを動かしたところ、
UTF-16BE:Malformed HI surrogate dea4 at /usr/local/lib/perl5/5.8.8/i686-linux/Encode.pm line 186, <DATA> line 846.
というようなエラーがでてしまいます。
具体的なエラー原因となる文字・解決法がまったくわかりません。
$ua->agent('Mozilla/4.0') の行をコメントアウトするとエラーは発生しません。
(yahooサーバがUserAgentによって違うコンテンツを吐いています)

どなたかご教授下さいm(_ _)m
#Encode.pmも見てみたのですがさっぱりわかりませんでした・・
756デフォルトの名無しさん:2007/08/02(木) 01:03:42
>>755
Jcode::convert(\$data,'euc') ってのは、何をやってるの?

エラー原因となる直接の文字列は、pack('C',0)とpack('CC',0,0x3c)だよ。
コンテンツ違いでエラーの有無が変わる事まで確認したのなら、もう一歩すすんで
Jcode::convert の中を確認すればよかったのに。
757デフォルトの名無しさん:2007/08/02(木) 18:38:40

>>756

それマジで言ったん? ソースあんならすぐ出せ。

マジなら2ちゃんねら総力を挙げて潰すが。
758デフォルトの名無しさん:2007/08/02(木) 18:41:38
これはwktk
759デフォルトの名無しさん:2007/08/02(木) 18:59:46
出すも何もPerlディレクトリにソース全部あるだろ
760デフォルトの名無しさん:2007/08/02(木) 19:07:16
マジレスwwwwww
761デフォルトの名無しさん:2007/08/02(木) 22:02:04
インライン・モジュールが インラン・モジュールに見えてしまうのですが
どうしたらよいでしょうか?
762デフォルトの名無しさん:2007/08/02(木) 22:30:33
>>761
風俗に逝くと良いです
763755:2007/08/02(木) 22:30:57
>>756
Jcode::convertの中身まではチェックしませんでした・・・
しかし任意のデータをつっこめるわけじゃないんですね

とりあえずということで0をスペースに置換して回避できました。
どうもありがとうございましたm(_ _)m
764デフォルトの名無しさん:2007/08/03(金) 15:54:31
やべぇw
>>759がおもろすぎてツボに入ったwwwwww
765デフォルトの名無しさん:2007/08/03(金) 16:03:42

>>764

それマジで言ったん? ソースあんならすぐ出せ。

マジなら2ちゃんねら総力を挙げて潰すが。
766デフォルトの名無しさん:2007/08/04(土) 07:05:46
彼の脳内で一体何が起こったのか・・・。
767デフォルトの名無しさん:2007/08/04(土) 19:19:37
HP上からformで入力してそれをテキストに書き出そうと思うんだけど
文字化けしてしまうのはなぜなんでしょうか?
文字コードは何にすればよいのでしょうか?
その場合どう書けばよろしいのでしょうか?
お願いします。

ちなみにサーバーはlinuxです。
768デフォルトの名無しさん:2007/08/04(土) 20:37:36
>>767
何もかもUTF-8にすれば化けないよ
コレマジお勧め
769デフォルトの名無しさん:2007/08/04(土) 20:41:08
>>768
ブラウザがうんこだったらどちらにしろ化ける
770デフォルトの名無しさん:2007/08/04(土) 20:50:28
>>769
いやまーいまどきのIEとか使ってる分にはだいたい大丈夫だろ

firefoxとかoperaもまあ大丈夫だろうし駄目でも無視すればいいよ
771デフォルトの名無しさん:2007/08/04(土) 21:32:50
windowsで動くperl専用エデターで
自動色分け等、いちばん使いやすいの、
あるいは一番シェア取ってるのおしえて。
772デフォルトの名無しさん:2007/08/04(土) 21:33:30
自動色分けが充実してるのがいいなー
スカラー変数は自動的に青!みたいな
773デフォルトの名無しさん:2007/08/04(土) 21:58:57
notepad
774デフォルトの名無しさん:2007/08/04(土) 22:02:24
perl専用のがほしいんだよ
775デフォルトの名無しさん:2007/08/04(土) 22:14:28
Perlで作ればいいんじゃない?
776デフォルトの名無しさん:2007/08/04(土) 22:26:16
Notepad++がオススメ。日本語弱いけど。
777デフォルトの名無しさん:2007/08/04(土) 22:29:17


 p e r l 専 用 の が
 欲 し い ん だ よ
778デフォルトの名無しさん:2007/08/04(土) 22:35:58
そんなにperl専用がいいならこれでも使えやw
ttp://www.activestate.com/Products/activeperlprostudio/
779デフォルトの名無しさん:2007/08/04(土) 22:36:55
使いづらいけどPerlEditor
俺はEmEditor派
780デフォルトの名無しさん:2007/08/04(土) 22:53:05
自動色分けが充実してる、って要求だけなら分かるけど、
Perl専用じゃないといけない理由って何?
781デフォルトの名無しさん:2007/08/04(土) 23:07:28
ファイルハンドルに聞くと
今開いているファイルパスが返ってくる
ファイルハンドルってない?
IO::Fileだと答えてくれないみたいなの。。
782デフォルトの名無しさん:2007/08/04(土) 23:26:41
>>781
ファイルを開いた後でそのファイルがunlinkされたりrenameされたりした
場合はどうして欲しいの?
783デフォルトの名無しさん:2007/08/04(土) 23:43:03
むむ、考えてませんでした。
でもunlinkされてもcloseするまでは確か中身読めるはずだったから
unlink,rename前のパス返してくれればよいです。

784デフォルトの名無しさん:2007/08/04(土) 23:43:32
ファイルを開けてる時点でパスは分ってるもんじゃないのか?
use Cwd qw(abs_file);
それとも↑レベルの話?
785デフォルトの名無しさん:2007/08/05(日) 00:20:52
>771
専用ではないが、Eclipseという手も……ないか。
786781:2007/08/05(日) 00:40:48
>>784
いや、文字列の相対パスを文字列の絶対パスに変換したいんじゃなくて
ファイルハンドルに問い合わせると、
ハンドルを作るのに使ったパスを答えてくれるような、もっと単純なものです。
確かにファイルオープン時にパスは分かってるのですが
関数受け渡しとかでハンドルとパスとと似たようなものを2つも渡すのはなんだかな、と。
ささいなものなので自分で作れば良いのですが、もし既にあるならそちらを使いたいなと…
787デフォルトの名無しさん:2007/08/05(日) 00:44:57
>719
use Quantum::Superpositions;

if ($x == any($a, $b, $c)) { ... }
788デフォルトの名無しさん:2007/08/05(日) 01:05:25
>781
FileHandle::Deluxeあたり使えるかもしれない。
789デフォルトの名無しさん:2007/08/05(日) 01:11:30
それ、以前あった質問とまんま 同じじゃん。
関数の引数受け渡しがシンプルになるから、って理由まで。
それは管理が糞なんだよ。 そのアホ設計をやり直せ。
790デフォルトの名無しさん:2007/08/05(日) 01:21:58
>>719
map{$risutonoyouso{$_}=1}@list;
if(exists $risutonoyouso{$target}) {....
791781:2007/08/05(日) 01:23:16
>>788
インストールしました。すごい、ほんとにデラックスだ〜
ファイルロックまで付いている
$fh->contentsもイカしてます。
ありがd!です。
792790:2007/08/05(日) 01:24:46
existsは無くてもよかった。
if($risutonoyouso{$target}){....
793781:2007/08/05(日) 01:30:40
>>789
あらま。ハンドル渡しで関数作っといて
後からファイル名も必要になるような仕様変更って
あまり無いですかね?
ファイルハンドルとパスって近い存在だから同じオブジェクトから取り出せるように
抽象化しておいたほうがいいんじゃないかと思うのですが…
そういうもんでもないの?
794デフォルトの名無しさん:2007/08/05(日) 01:37:24
Eclipse は環境構築するのにゴリゴリやらんといけないし、無駄にでかい環境になっちゃうから
個人での開発では大それたものかもしれない
795デフォルトの名無しさん:2007/08/05(日) 01:39:53
>793
$datafile->{'path'} = '〜';
$datafile->{'FH'}

だのを自分でちまちまセットすりゃぁいいかと
796デフォルトの名無しさん:2007/08/05(日) 01:40:21
ソケットだってファイルハンドルだし・・・、ファイルシステムに依存したら抽象レベル下がりすぎワロタ
Javaで言ったらInputStreamにgetFileNameがあるようなモンじゃないの?
797デフォルトの名無しさん:2007/08/05(日) 01:41:19
>>793
ハンドルはあくまでファイル記述子の抽象だから、だろ
ファイル記述子やファイル名はinodeだのvnodeだのへの参照だが、
ファイル記述子とファイル名には直接の相関は無い。
ソケットやパイプのように、ファイル名の無いファイル記述子も有り得るし、
rename()やunlink()によって、オープンファイルとファイル名のリンクが
切れることもある。
798デフォルトの名無しさん:2007/08/05(日) 01:51:57
>789
前にその質問したアホだけど。
結局後から全部書き直したんだよね。確かに設計が腐ってた。
799781:2007/08/05(日) 02:30:11
どもご教授ありがとうございます。
そうすると、ハンドルで受け取る関数は
あくまでもその受け取ったストリームの処理に徹するべきで
ファイル名がどうのとかは、仕様変更とかあっても
関数内で扱わないようにするのがベストパターンなのかな?
確かにそう思えてきた!!!そうします!
800デフォルトの名無しさん:2007/08/05(日) 15:19:47
>>780
つかいはじめるときに
使用言語をperlって
設定する方法がわからないんだよっ、ボケ!
801デフォルトの名無しさん:2007/08/05(日) 15:20:45
馬鹿はPerl使わなくていいよ
802デフォルトの名無しさん:2007/08/05(日) 15:25:31
※別ウィンドウで開きます

↑これを英語に翻訳するんだけど、
*opens in new window
とかってしようと思うんだけど、
perlのソースコード中に
*アスタリスクを不用意に使ってもおk?
803デフォルトの名無しさん:2007/08/05(日) 15:26:32
秀丸とかエムエディタは拡張子で判別して自動的に色分け設定が変わるよ
ちなみにエムエディタならF11で設定切り替えできる
804デフォルトの名無しさん:2007/08/05(日) 15:27:03
問題ない
805デフォルトの名無しさん:2007/08/05(日) 15:37:52
>>804
勝手にポインタとして識別されてしまって
コード全体がぶっこわれるとかない?
806デフォルトの名無しさん:2007/08/05(日) 16:27:59
>>805
むしろどんな言語だったらそうなるのか聞きたい
807デフォルトの名無しさん:2007/08/05(日) 17:03:06
>>802
不用意に使うのはやめろ!!!
地下の自爆装置が作動する可能性があるぞ!!
808デフォルトの名無しさん:2007/08/06(月) 00:15:33
今本読んだけど、乗算として
認識される可能性があるから
やめたほうがいいと思った。

2バイト文字を使えない環境で
perlで、強調文字はなにをつかえばいい?
809デフォルトの名無しさん:2007/08/06(月) 00:20:24
コメント内で認識も何もないだろう
810デフォルトの名無しさん:2007/08/06(月) 00:32:34
わろた
811デフォルトの名無しさん:2007/08/06(月) 00:35:31
>>809
コメントじゃないよ!
HTMLに出力されて画面に
表示される部分だよ!
812デフォルトの名無しさん:2007/08/06(月) 01:01:59
そうかお!
813デフォルトの名無しさん:2007/08/06(月) 01:24:31
HTML なら em タグだろ?
814デフォルトの名無しさん:2007/08/06(月) 01:30:36
>>813
うーん、、、
タグを出力する方法がわからないので
記号で強調するやりかたをかんがえてくれませんか?
815デフォルトの名無しさん:2007/08/06(月) 01:42:52
タグを出力すればいいんじゃないの?
816デフォルトの名無しさん:2007/08/06(月) 01:49:37
アスペルガーもたいがいにしろや
タグを出力する方法がわからないから
他のやり方をかんがえろといってるではないか
817デフォルトの名無しさん:2007/08/06(月) 01:50:10
sageれボケ
818デフォルトの名無しさん:2007/08/06(月) 01:57:29
なに言ってるのかワカンネイけど、日本語をPerlスクリプトに含めたくないならテンプレでも使えば?
819デフォルトの名無しさん:2007/08/06(月) 01:59:57
ファッキンクソアスペルガー
タグを出力する方法がわからない、って言ってるだろうが
820デフォルトの名無しさん:2007/08/06(月) 02:05:54

http://www.aoky.net/articles/jeff_atwood/why_cant_programmers_program.htm

そんな事よりこれやろうぜ。俺には54byteが限界です。

map{print+($_%3?"":Fizz).($_%5?"":Buzz)||$_,$/}1..100;
821デフォルトの名無しさん:2007/08/06(月) 02:18:51
いまさらFizzBuzzかよ
822デフォルトの名無しさん:2007/08/06(月) 03:38:32
$sum = sub {
  my @arg = @_;
  my $retval += splice @arg, 0, 1;
  @arg and $retval += $sum->(@arg);
  $retval > 9 and $retval = &{$sum}(split //, $retval);
  $retval;
};
print map {
  my $p;
  $p = 'Fizz' if $sum->(split //) =~ /[369]/;
  (!(split //)[-1] or !((split //)[-1] - 5)) && ($p .= 'Buzz');
  ($p || $_), $/;
} 1..100;

こうですか?わかりません!><
823デフォルトの名無しさん:2007/08/06(月) 03:42:40
ちゃんと rand とかも使えよ
824デフォルトの名無しさん:2007/08/06(月) 20:18:10
ActivePerl で ${^WIDE_SYSTEM_CALLS} って機能してないんですか?
ちょっとググってみたけど分からないので、仕方なく2ちゃんねるで質問させてください。
検証用のコードは下記なのですが、-d でディレクトリの存在がテストできません。
(新しいフォルダ は、あらかじめ作成してあります)

#!perl -w -C
use utf8;
binmode STDOUT, ":encoding(cp932)";
use Encode;

${^WIDE_SYSTEM_CALLS} = 1;
print "\${^WIDE_SYSTEM_CALLS} = ",${^WIDE_SYSTEM_CALLS},"\n";

print "新しいフォルダ\n";
print (-d "新しいフォルダ") ? " - あり\n" : " - なし\n";
print (-d encode('cp932', "新しいフォルダ")) ? " - あり\n" : " - なし\n";

いや、できないんならできないで諦めますんで。できたら便利だな〜っと思っただけですから。
やはり perl って、日本語もマトモに扱えないクソ言語なのでしょうか?
825デフォルトの名無しさん:2007/08/06(月) 22:13:40
print +(
826デフォルトの名無しさん:2007/08/06(月) 22:41:55
827デフォルトの名無しさん:2007/08/06(月) 22:50:52
>>824
>やはり perl って、日本語もマトモに扱えないクソ言語なのでしょうか?

そんなわけないとおもうよ
もともとNSAで盗聴してきた大量の
文章を管理するために作った言語だから
828デフォルトの名無しさん:2007/08/07(火) 20:41:21
>>826
RESありがとうございました。
${^WIDE_SYSTEM_CALLS} が使えるのは 5.6 までだったんですね。
現在の 5.8 では廃止されちゃったんですね。
そんな事とは知らずに、1日つぶしちゃいました。
${^WIDE_SYSTEM_CALLS} が使えれば楽できる、と思ったんですが
世の中そんなに甘くないという事ですか。

結局、perl では日本語が扱えないことがハッキリ分かったので
心置きなく perl を捨てることが出来ます。
これで明日から encode("cp932", ほげ) 地獄から開放されます。

他の言語だと10行くらい書かなきゃいけないことも、
perl なら1行で済んでしまう、そんな気安さから長い間ずっとお世話になってきましたが。
日本語を扱うようになってから、かえって perl の方が手間がかかるようになってしまって・・・
もうこれ以上ムリです。限界です。心底疲れました。

さようなら、perl。長い間ありがとう。

encode("cp932", __FILE__) 市ね
encode("cp932", $ARGV[0]) 市ね
readdir 市ね
829デフォルトの名無しさん:2007/08/07(火) 22:07:13
キモすぎ
830デフォルトの名無しさん:2007/08/07(火) 22:10:19
>>825で答えでてるじゃん
何ができないの?
831デフォルトの名無しさん:2007/08/07(火) 22:13:08
頭悪いと大変だな
832デフォルトの名無しさん:2007/08/07(火) 23:07:02
バカに825が見えなかったらしいから、はっきり書いておくと
#!perl -w -C
use utf8;
binmode STDOUT, ":encoding(cp932)";
use Encode;

print "新しいフォルダ\n";
print +(-d "新しいフォルダ") ? " - あり\n" : " - なし\n";
print +(-d encode('cp932', "新しいフォルダ")) ? " - あり\n" : " - なし\n";

でもキミみたいなのは、いないほうが良いので帰ってこないでね。
833デフォルトの名無しさん:2007/08/07(火) 23:21:57
答えなかったらもうperl使わずに済んだのにわざわざ引き戻すなよw
834デフォルトの名無しさん:2007/08/07(火) 23:50:00
>>832
つまり必ずA系のAPIを使ってるのか
iTunesとかが良くこしらえるウムラウトとかアクサン記号含むファイルはアウトだね
835デフォルトの名無しさん:2007/08/08(水) 00:22:53
${^WIDE_SYSTEM_CALL}に相当するモノが無くなったのは厳しいよね。
836デフォルトの名無しさん:2007/08/08(水) 00:25:39
>>828
いってること矛盾しとるがな
・・・ってこれ釣りなのか
837デフォルトの名無しさん:2007/08/08(水) 00:31:30
>>835
use utf8してる場合は、透過でUTF-16に変換してW系API使って欲しいもんだが
それは贅沢ってもんかねぇ
ま、Win9x系の悪しき遺産のお陰で、UTF-16なパス名他に対応してない
プログラムなんて山のようにあるけどさ
838デフォルトの名無しさん:2007/08/08(水) 00:37:49
10月の5.10に期待しようぜ
839デフォルトの名無しさん:2007/08/08(水) 02:30:06
>>832
で?キミはいったい何がしたいワケ?

長いこと2ちゃんねるやってるけどさ、
ここまで頭の悪いヤツはじめて見たよ。
あいたたたたた・・・
840デフォルトの名無しさん:2007/08/08(水) 02:50:31
天延記念物級バカ晒し上げwww

832 名前:デフォルトの名無しさん[sage] 投稿日:2007/08/07(火) 23:07:02
 バカに825が見えなかったらしいから、はっきり書いておくと
 #!perl -w -C
 use utf8;
 binmode STDOUT, ":encoding(cp932)";
 use Encode;

 print "新しいフォルダ\n";
 print +(-d "新しいフォルダ") ? " - あり\n" : " - なし\n";
 print +(-d encode('cp932', "新しいフォルダ")) ? " - あり\n" : " - なし\n";

 でもキミみたいなのは、いないほうが良いので帰ってこないでね。
841デフォルトの名無しさん:2007/08/08(水) 07:04:59
夏だな。
変なのが湧くからイタイやつの相手はしないでスルーするように。
842デフォルトの名無しさん:2007/08/08(水) 07:31:17
Perl 5.0です。
サブルーチンを使用する前に、そのサブルーチンのプロトタイプ宣言(この名称が正しいかどうかは分かりません。Cみたいなやつ)を
必ず記述しなければならないようにする仕組みがあればお願いします。

use strictじゃダメみたい。
やっぱ無理にでもPerlのバージョン上げた方がいいのかなあ……。
843デフォルトの名無しさん:2007/08/08(水) 08:12:16
>>842
その仕組みをなぜ必要としているのかを説明できる?
844デフォルトの名無しさん:2007/08/08(水) 08:14:33
>>837
いや、use utf8しなくてもutf8フラグが立っている文字列の時はW系を使って欲しい。
そのためのutf8フラグだと思うし。
845842:2007/08/08(水) 09:11:12
>843
よく書き忘れて、期待通りに動かないのを悩んだりするから。
それだけじゃダメ?
846デフォルトの名無しさん:2007/08/08(水) 10:45:26
>>845
サブルーチンを使うより前にコンパイルされるよう書けば済む話だよね?

#!/usr/bin/perl -w
sub foo($) { ... }
blah blah blah...

とか

#!/usr/bin/perl -w
use Fanctions qw(foo); # サブルーチン群は Fanctions.pm に定義
blah blah blah...

とかでよくない?
847845:2007/08/08(水) 17:32:21
>846
まあ、そうなんですけどねー。
サブルーチン群が先頭に来ると、何かイライラしない? 俺だけ?

もちろん、別ファイルにするのも手ではあるんですけど
再利用の予定が無いサブルーチンとか、規模によっては(管理が)面倒かな、と。

とにかくアドバイスありがとです。

848デフォルトの名無しさん:2007/08/08(水) 18:25:56
そのアンカーの方がイライラする
849デフォルトの名無しさん:2007/08/08(水) 18:38:40
C言語を知ったら発狂するだろうな
850845:2007/08/08(水) 19:17:03
>>848
申し訳ない、アンカーが「>」だけでも補完してくれる専ブラを使ってたもんで、つい。
ずっと前に、「>>」にしない方がサーバに優しいなんて話もあってけど、最近はめっきり聞かないなあ。

>>849
先頭にサブルーチンの本体がずらずら書かれるのが、個人的に嫌というだけで、
プロトタイプ宣言だけが並んでる分には問題ないのよ。
なんで?って聞かれると困るけど。

あと、Cだと最終的には1つバイナリになることも多いから、
ソースファイル自体が多くてもそんなに面倒じゃないというのもあるかもしれない。
851デフォルトの名無しさん:2007/08/08(水) 19:28:35
>>850
キミ、言い訳が多い ってよく言われるでしょ
852デフォルトの名無しさん:2007/08/08(水) 19:32:35
さすが上辺だけの人間w
853 ◆TWARamEjuA :2007/08/08(水) 20:01:31 BE:1089252-2BP(6824)
底辺万歳♪
854デフォルトの名無しさん:2007/08/08(水) 20:03:27
先に宣言だけしておいて、
メインルーチンの後で定義したらいいじゃん。

#!/usr/bin/perl
sub foo($);
sub bar(;@);

# ほげほげする

exit;

sub foo ($) {
#実装
}
sub bar (;@) {
#実装
}
855デフォルトの名無しさん:2007/08/08(水) 23:02:54
その話をしてるんだろ?
856デフォルトの名無しさん:2007/08/08(水) 23:14:41
10年くらい前は
www.yahoo.com
でなくて
www.yahoo.com/ ←スラッシュ
を入れてブラウザのURLバーに入力してよね、
だってそうじゃないとサーバーに負担がかかるから♪
ってキャンペーンが一時期あったが、いつのまにか
見なくなった。
857デフォルトの名無しさん:2007/08/08(水) 23:55:46
その話をしてるんだろ?
858デフォルトの名無しさん:2007/08/09(木) 00:03:49
>>856
記憶改竄者の出現です!
859デフォルトの名無しさん:2007/08/09(木) 00:13:16
>>856
規格上、ルートのスラッシュはあってもなくても一緒。
問題になるのはそれ以下のパス区切りのスラッシュ
860デフォルトの名無しさん:2007/08/09(木) 08:41:56
>>828
RESって何ですか?
861デフォルトの名無しさん:2007/08/09(木) 09:48:13
伝統的に、ある種の馬鹿が断固理解したがらない単語です。
862デフォルトの名無しさん:2007/08/09(木) 10:19:52
>>860
赤土のことだっけ?
863デフォルトの名無しさん:2007/08/09(木) 18:13:31
すみません

クライアントからのファイルアップロード処理を作っているのですが、

open( GETFILE, $upfile );
binmode GETFILE;

と普通にやってもAnHttpDで構築したサーバーなら動作しますが
レンタルサーバーに上げるとファイルオープンエラーになってしまいます。

フリーで配布されているアップロードのソースを見ても普通に上記処理で
上げることになっているようですが、いくつかのレンタルサーバーを試して
みましたがことごとくエラーになります。

どういった原因が考えられるでしょうか?ご教授お願いいたします。
864デフォルトの名無しさん:2007/08/09(木) 18:48:18
どういうエラーが出てるんだよ。
865デフォルトの名無しさん:2007/08/09(木) 19:00:54
>>863
> どういった原因が考えられるでしょうか?

クイズ出してるの?
866デフォルトの名無しさん:2007/08/09(木) 19:03:55
>>864
すみません。
正常な動作が不可能となるようなエラーです。
よろしくお願いします。
867デフォルトの名無しさん:2007/08/09(木) 19:05:07
ふいたwwwwwwww
868デフォルトの名無しさん:2007/08/09(木) 19:05:29
はあ
869デフォルトの名無しさん:2007/08/09(木) 19:17:27
俺も正常な動作が不可能
870デフォルトの名無しさん:2007/08/09(木) 19:31:31
エラーをブラウザに出力するようにしれ
871デフォルトの名無しさん:2007/08/09(木) 23:27:52
あれ、いつもならCGIスレ行けって言うのに、今回は言わないの?

十中八九権限だと思うけどナー
872デフォルトの名無しさん:2007/08/09(木) 23:52:49
>>871
観察者、乙!
873デフォルトの名無しさん:2007/08/10(金) 00:12:54
inet_aton()、pack_sockaddr_in()、socket()、connect()を使ってソケットを接続し、
send()やrecv()でおしゃべりをしています。
このソケットが壊れたことを検知する方法にはどのようなものがあるでしょうか。

fileno(),vec(),select()を使ってみましたが、
ルータモデムの電源が切れたときなど検知しないことが多々あります。

また、ソケットが壊れる要因としてどのようなことが考えられるでしょうか。
Cで作ったと思われるフリーウェアソフトと自作Perlスクリプトで
同じサーバに接続しているのですが、Perlだけ通信ができない状態になります。
(send()/select()に問題がないのにサーバとの通信ができなくなる)
24時間サーバとconnectしっぱなしで、不定期に2,3回/dayで壊れます。。。
874デフォルトの名無しさん:2007/08/10(金) 00:12:58
権限が原因なとき、
「権限の設定がおかしいので再確認してください」
ってな感じのエラーメッセージはだせないのかね?
875デフォルトの名無しさん:2007/08/10(金) 00:22:02
>>873
keepalive, heartbeatでぐぐれ
876デフォルトの名無しさん:2007/08/10(金) 00:26:31
>>874
Permission denied とか出るよ
877デフォルトの名無しさん:2007/08/10(金) 00:44:53
>>875
サーバはIRCサーバなのですが、関係あるでしょうか。
また、ping代わりにPINGリクエストを1分に一回打っています。
定期的に切断されるならまだ理解できるのですが、全くの不定期なので・・・
878デフォルトの名無しさん:2007/08/10(金) 00:58:48
my $result = `./a.out`などのように外部のプログラムを呼び出した時に
一定時間経っても終了しなかった場合に強制終了して
Perl側のスクリプトを続行させる方法ってありますか?
879デフォルトの名無しさん:2007/08/10(金) 01:01:42
タイムアウト処理ならevalとalarmを使うのが一般的だとは思いますが、
外部プログラムを呼び出したときはどうなるんでしょう。。。
880デフォルトの名無しさん:2007/08/10(金) 01:12:05
>>877
サーバの種類は関係ない。
回線がどっかで切れようが、何かパケットを送らないことには検知することはできん。
そしてsend()によってパケットを送ろうとした場合も、即座にはエラーにならない
(send()は正常終了するだろう)が、いずれはTCPスタックが切断を検知するので、
それ以後(普通は)アプリ側でもエラーを知ることが出来るはずだ。

そのようにならないとすれば、コーディングに何か問題があるか、
処理系のバグだろうな。
881デフォルトの名無しさん:2007/08/10(金) 02:14:27
>>877
> また、ping代わりにPINGリクエストを1分に一回打っています。

ひでえ
882デフォルトの名無しさん:2007/08/10(金) 02:40:02

Perl を勉強しようと perldoc の和訳はじめたのですが、誰か英文の perlmod

ttp://perldoc.perl.org/perlmod.html#BEGIN%2c-CHECK%2c-INIT-and-END-BEGIN-CHECK-INIT-END

の第 3 段落 3 行目「Because a BEGIN code block executes...」の文を訳して
もらえませぬか。。

pull in やら in time to be なんちゃらやら良く理解できなくて。。

お願いします。
883デフォルトの名無しさん:2007/08/10(金) 04:07:21
>>882
直訳でスマソ。

it can pull in definitions of subroutines and such from other files

それは(it)サブルーチンの定義(definitions of subroutines)などを(and such)
他のファイル(other files)から(from)取り込む事が出来る(can pull in)

in time to be visible to the rest of the compile and run time.
見えるようになった(to be visible)時(time)、
コンパイル(compile)、実行時(run time)等々(to the rest of the)に(in)
884デフォルトの名無しさん:2007/08/10(金) 04:31:18
>>883
ありがとーー
これでぐっすり寝れます♪
885デフォルトの名無しさん:2007/08/10(金) 06:39:48
変なユニコードで保存されたファイルを修正するプログラムを作っていて

open IN, "<./file/input.txt";
open OUT, ">./file/output.txt";
while(<IN>){
s/"\x0D \x0A \x00 \x0D"/"\x0A"/;
s/"\x0D \x0A"/"\x0A"/;
print OUT $_;
}

という風に単純に作ったのですがoutputファイルは作成されるものの
何も変化なくちゃんと動作しません。
何かテキストデータを16進数で読み込む方法でもあるのでしょうか?
よろしくお願いします。

あと、できれば保存する再にウニコードから
JISもしくはEUCに変換する方法もあればお願いします。
886デフォルトの名無しさん:2007/08/10(金) 07:54:43
>>880
>それ以後(普通は)アプリ側でもエラーを知ることが出来るはずだ。
その知る方法とはどんなものでしょう?

>>881
個人サーバで許可取ってあるので問題ないです。
887デフォルトの名無しさん:2007/08/10(金) 11:34:25
>>885
えすぱー。

#!/usr/bin/perl -w
use strict;
use Encode qw(from_to);
my($InFile, $OutFile, $InCode, $OutCode) = ('./input.txt', './output.txt', '', 'euc-jp');

my $buffer;
{
  open my $in, '<', $InFile or die $!;
  read $in, $buffer, -s $in or die $!;
  close $in;
}
$buffer =~ s/(?<=\x0D\x0A)\x00\x0D//g;
from_to($buffer, $OutCode, $InCode);
$buffer =~ s/\x0D\x0A/\n/g;
$buffer =~ tr/\r/\n/;
{
  open my $out, '>', $OutFile or die $!;
  print $out $buffer;
  close $out;
}
__END__
$OutCode は適切なものを。
888887:2007/08/10(金) 11:35:27
× $outCode は適切なものを。
○ $InCode は適切なものを。
889デフォルトの名無しさん:2007/08/10(金) 11:48:12
「情報小出し君」の問題点は、ある程度情報を小出しにした後でさえ、
あとどれだけ隠しているのか分からないことにある。
890デフォルトの名無しさん:2007/08/10(金) 13:51:31
少し知っただけで全てわかったような気分になるような人間であり
自分が小出ししてる意識さえないのが最大の問題点である
891デフォルトの名無しさん:2007/08/10(金) 21:26:09
だっておもえら情報を全部だしたら発狂するじゃん
892デフォルトの名無しさん:2007/08/10(金) 23:41:46
>>891
生い立ちから書くの?
893デフォルトの名無しさん:2007/08/11(土) 03:07:58
RequireFile
するときには、同一ディレクトリに
あるファイルしかリクワイアーできないと
直感的に思ったんだが、いま扱ってる
他人の書いたソース見ると、
下位フォルダにぶちこんである
ファイルを普通にリクワイアして
ちゃんと動いてるみたい、パスも
通してないのに、なぜ?
あるいはパスを通してるの?
894デフォルトの名無しさん:2007/08/11(土) 03:16:29
>>893は自己解決した
895デフォルトの名無しさん:2007/08/11(土) 03:19:05
>>892
お前の先祖がモノリスに触れたときからの全てをだ
896デフォルトの名無しさん:2007/08/11(土) 03:39:25
だいたい情報を小出しにするって文句が出ること自体が
アスペルガーなんだよな
知りたい情報があるなら言えばいいじゃん
897デフォルトの名無しさん:2007/08/11(土) 04:36:32
perlにおいて{}カーリーで
囲まれてる文字列は、
なんの可能性がある?
898デフォルトの名無しさん:2007/08/11(土) 05:00:12
>>896
だよな。
せっかく質問に答える機会を与えてやってるのに、生意気なんだよ。
なにさまのつもりなんだか。
899デフォルトの名無しさん:2007/08/11(土) 06:38:34
質問者というのは基本的に、スレと回答者の両方を救っているわけだからな。
いくらPerlの回答ごときで自尊心が満たされる器の小さい馬鹿とはいえ、
もうちょっと敬意を表することを覚えるべき。
900デフォルトの名無しさん:2007/08/11(土) 07:47:32
>>897
文字列限定なら、、、
q{hoge}, qq{hoge} # ' "
m{hoge} # regexp
s{hoge}{foo} # regexp
print {HOGE} # filehandle
{die} # block <= 卑怯
って適当にあげても幾らでもあるんだが何か?
901デフォルトの名無しさん:2007/08/11(土) 07:59:33
>>896
キミの住所教えて
902デフォルトの名無しさん:2007/08/11(土) 09:11:32

1. 読まない
2. 調べない
3. 試さない
4. 理解力が足りない
5. 人を利用することしか頭にない
903デフォルトの名無しさん:2007/08/11(土) 12:30:55
最近は、プログラミング演習の課題を出さないので話を聞くと、
「自分でやるのが面倒なので××君のを写させてもらおうと思ったのだけど、
写させてくれないので出せませんでした。××君がわるいのだから、
ぼくが単位をもらえないのは納得できません!!」
と教授の目を真っ直ぐに見て話す大学生もいるそうだから。
904デフォルトの名無しさん:2007/08/11(土) 13:06:42

情報を小出しにすると、必然的に質問者と回答者のやり取りが多くなる。
最初に全ての情報を書いておけば、余計なリソースを使わずに済む。
それは時間の短縮にも繋がるし、閲覧者側も理解し易く大変有益な方法。
質問者ありきのスレ"だけ"だと思い、質問者を神様と思い込んでる
自己中ノータリンは親の教育方針を疑った方が良いですよ:-P
育ちが悪いか、遺伝子レベルで腐ってるので生まれ変わる事をオススメします。
905デフォルトの名無しさん:2007/08/11(土) 13:12:24
>>904
ここは2ちゃんねるですよ
ある一定の方向性を持たせようたって無理に決まってるじゃないですか
方向性を持たせようとして板を作ってもこうやって厨房が沸くからスルーしか方法はないと思います
906デフォルトの名無しさん:2007/08/11(土) 13:17:35

>>896 >>898 >>899

ネタだよな? な? ニュー速とかでこんな書き込みを見ても
即ネタだと理解出来るが、専門板では本気でキチガイが居るから
おじさん物凄く心配なのだが、夏休みだからだよね? ね?
907デフォルトの名無しさん:2007/08/11(土) 13:25:45
「質問者は情報を小出しにしないほうが良い」
「荒らしやキチガイ相手にはスルー推奨」

どちらも多くの人間がその正当性を主張し、
特につっこみどころのない良マナーであるにもかかわらず、
なぜか双方とも説得力がイマイチなのはどうしてだろう?
908デフォルトの名無しさん:2007/08/11(土) 13:29:30
>>907
正当性を主張しているというより荒れることに対して不満を言っているということに近いからでは?
909デフォルトの名無しさん:2007/08/11(土) 14:02:16
"マナー"や"常識"みたいな人間によって
変化する物に説得力が無いのは当然
910デフォルトの名無しさん:2007/08/11(土) 14:13:21
まったく、2ちゃんでの質問マナーをプロミスのCMでやって欲しいよ
911デフォルトの名無しさん:2007/08/11(土) 15:36:00
そうそう、教えて君こそ、2chでのマナーだからね。
912デフォルトの名無しさん:2007/08/11(土) 15:51:56
逆に小出しな質問の方が好きかな

うちは顧客が優秀すぎていつも的確すぐる質問ばかり受けてて
ごくたまにくるキチガイ丸出しな電話への応対がとっさに出来ないから
こういうアホばっかり集まる場があると、応対の練習ができて
とても便利なんだよね
913デフォルトの名無しさん:2007/08/11(土) 18:21:38
はいはい
914デフォルトの名無しさん:2007/08/11(土) 18:25:47
こんなとこで応対の練習してそうなヤツなんか見た事無い
915デフォルトの名無しさん:2007/08/11(土) 18:30:56
そりゃ今適当に思いついた理由を並べただけだから
916デフォルトの名無しさん:2007/08/11(土) 18:41:15
他所でやれ
917デフォルトの名無しさん:2007/08/11(土) 20:18:10
だれか質問してやりなよ
918デフォルトの名無しさん:2007/08/11(土) 22:11:30
>>912 はアホなんですか?
919デフォルトの名無しさん:2007/08/11(土) 22:57:57
ちょっと日本語関係でトラブってるんですけど質問してもいいですか?
920デフォルトの名無しさん:2007/08/11(土) 22:59:12
ダメです
921デフォルトの名無しさん:2007/08/11(土) 23:04:52
Perlがうごきません。いろいろ試しましたがダメでした。どうしたらいいですか?
922デフォルトの名無しさん:2007/08/11(土) 23:08:50
掲示板が荒らされて困ってます。
荒らしを防ぐプログラムの作り方を初心者にもわかるように教えて下さい。
923デフォルトの名無しさん:2007/08/11(土) 23:11:09
2chが初心者に荒らされて困ってます。
初心者を防ぐプログラムの作り方を初心者にもわかるように教えて下さい。
924デフォルトの名無しさん:2007/08/11(土) 23:12:32
どうしたらいいですか?
925デフォルトの名無しさん:2007/08/11(土) 23:20:28
その前に初心者から脱却する意志があるのか答えていただこうか。
926デフォルトの名無しさん:2007/08/11(土) 23:23:09
>>918
違います
ちょっと疲れてるだけです

>>921
Pを小文字にするといいと思います

>>922
ログを記録しているファイルのパーミッションを644にすると良いです

>>923
自己矛盾はバグの元です
気を付けましょう

>>924
できればもう少しネタを返しやすい書き方をしてください
927デフォルトの名無しさん:2007/08/11(土) 23:26:23
>>925
初心者から脱却するためには何日くらい勉強したらいいですか?
928デフォルトの名無しさん:2007/08/11(土) 23:36:50

                  ┏━┓     ┏━┓          ┏━┓           ┏
┏━━━━━━━━┓┏━┛  ┗━┓  ┃  ┃          ┃  ┗━━━━┓    ┃ ┏┓      ┏┓    ┃
┃            ┃┗━┓  ┏━┛  ┃  ┃       ┏━┛  ┏━━┓ ┃    ┃ ┃ ┃     ┃ ┃
┗━━━━━━┓  ┃┏━┛  ┗━┓  ┃  ┃       ┗━┓ ┏┛   ┃ ┃    ┃
          ┃  ┃┗━┓  ┏━┛  ┃  ┃━┓┏┓    ┃ ┃     ┃ ┃    ┃
          ┃  ┃┏━┛  ┗┓   ┃     ┃┃┃  ┏┛ ┃  ┏━┛ ┃     ┃
      ┏━━┛  ┃┃┏┓┏┓┗┓  ┃  ┏┓┃┃┃.┏┛  ┃   ┃┏┓ ┗┓    ┃  ┏      ┓     ┃
      ┃     ┏┛┃┗┛┃┗┓┗┓┃  ┃┃┗┛┃┃┏┓┃   ┃┗┛┏┓┗┓  ┃  ┃   ┃.   ┃     ┛
      ┗━━━┛  ┗━━┛  ┗━┛┗━┛┗━━┛┗┛┗┛   ┗━━┛┗━┛  ┗  ┗━┛┗━┛
929デフォルトの名無しさん:2007/08/12(日) 00:35:15
MMOみたいにレベルが表示されるといいのにね
930デフォルトの名無しさん:2007/08/12(日) 01:01:07
どんなレベル付けするんだよ
よほど上手い仕組みじゃないと
変なアホコテが穴ばかり付いて高Lvになるぜ
931デフォルトの名無しさん:2007/08/12(日) 01:04:06
>>927
4日くらいかな。
932デフォルトの名無しさん:2007/08/12(日) 01:45:28
933デフォルトの名無しさん:2007/08/12(日) 02:25:19
目に悪そうな色分けだな。
934デフォルトの名無しさん:2007/08/12(日) 21:13:13


これはアメ公の環境だと
表示できないのかな。
うっかり見落としがちだけど。
935デフォルトの名無しさん:2007/08/12(日) 21:26:29
http://kazato.run.buttobi.net/cgi-bin/upload/src/viprpg_tktk0316.png
$disp.=$TD."sales items featured item<BR>【total skill】【business start】 comment"

これで、

(すみつき中カッコ)
はアメ公の環境で表示されないので
[(スクエア)
に変更しようと思うんだが、
ダブルクオーテーションで囲まれてる部分”○○”
に、不用意に
[スクエアブラケット
を入れて問題が起きないかどうか?

つまり
$disp.=$TD."sales items featured item<BR>[total skill][business start] comment"
にしようとたくらんでるわけだが。perlの文法的にだいじょうぶなのか。
936デフォルトの名無しさん:2007/08/12(日) 21:28:29
perl -wc
937デフォルトの名無しさん:2007/08/12(日) 21:50:33
その例は大丈夫だけど、たとえばこういうのはだめだろうな。

"$x【hoge】" → "$x[hoge]"
938デフォルトの名無しさん:2007/08/12(日) 22:07:03
>>937
ダブルクオーテーションの中に
$が入っていないから、
今回の例ではおkって意味?
939デフォルトの名無しさん:2007/08/12(日) 22:08:23
いやそれは配列の添え字になってしまうから
だめという意味なのかな?
940デフォルトの名無しさん:2007/08/13(月) 00:07:05
Perl使いの特徴
http://pc11.2ch.net/test/read.cgi/prog/1138882234/

ここみたらperlってRPGツクールみたいな
扱いだね
941デフォルトの名無しさん:2007/08/13(月) 00:42:00
CGIゲームのソースコードを
Windows上のエディターで変更しているのですが、
保存するときに、シフトJISで保存しても大丈夫なのですか?
実行はレンタルサーバーなので、EUCで保存しないと
ぶっこわれるのではないかと不安で夜も眠れません
942デフォルトの名無しさん:2007/08/13(月) 02:58:47
そのまま寝ずにお考えください
943デフォルトの名無しさん:2007/08/13(月) 04:56:04
CGIゲームのソースコードを
Windows上のエディターで変更しているのですが、
保存するときに、シフトJISで保存しても大丈夫なのですか?
実行はレンタルサーバーなので、EUCで保存しないと
ぶっこわれるのではないかと不安で夜も眠れません

2回目。
944デフォルトの名無しさん:2007/08/13(月) 05:00:06
そのまま寝ずにお考えください

2回目。
945デフォルトの名無しさん:2007/08/13(月) 05:03:57
CGIゲームのソースコードを
Windows上のエディターで変更しているのですが、
保存するときに、シフトJISで保存しても大丈夫なのですか?
実行はレンタルサーバーなので、EUCで保存しないと
ぶっこわれるのではないかと不安で夜も眠れません
946デフォルトの名無しさん:2007/08/13(月) 05:09:36
そのまま寝ずにお考えください
947デフォルトの名無しさん:2007/08/13(月) 05:09:44
FFFTPだったら
ファイルの拡張子が.cgiだったら
自動的にシフトJIS→EUCに
転送時に勝手に変更してくれるみたい
948デフォルトの名無しさん:2007/08/13(月) 05:14:46
アメリカ人が作ってるテキストエディターは
保存時に、漢字コードを何にするのか、
シフトJISで保存するのか、EUCで保存するのか、
なんてことは聞いてこないのですか?
949デフォルトの名無しさん:2007/08/13(月) 05:50:46
>>947
空気(←何故か読めない)
950デフォルトの名無しさん:2007/08/13(月) 08:31:25
so cool
951デフォルトの名無しさん:2007/08/13(月) 13:28:11
perlの文法中で
[ (スクエアブラケット
を使ったらいけない場面というのは
どうやったらカンタンに見分けられるのですか?
952デフォルトの名無しさん:2007/08/13(月) 14:43:17
C5の問題を回避するには、
文字コードはEUCを選択したほうがいいのですか?
シフトJISだと、
表示
って書きたい場合でも
表¥示
ってかかないと、文字化けするってどっかにかいてあって、
それをしたくなければEUCだったら大丈夫って書いてあるんですけど、
EUCで保存してだいじょうぶですか?
変更作業自体はWindows上で行うんですけど、
EUCで保存したらWindowsで読めなくならないですか?
953デフォルトの名無しさん:2007/08/13(月) 14:50:56
もう不安がなくなったのか
954デフォルトの名無しさん:2007/08/13(月) 14:56:53
これからUTF-8がデフォになるから、UTF-8Nにしとけ
955デフォルトの名無しさん:2007/08/13(月) 15:02:50
UTF-8 は日本語のデータ量が増えるからウンコじゃん。
956デフォルトの名無しさん:2007/08/13(月) 15:04:46
どんだけでかいファイルだよ
957デフォルトの名無しさん:2007/08/13(月) 15:07:35
>>952
EUC 扱えるテキストエディタを拾ってくればいい。
958デフォルトの名無しさん:2007/08/13(月) 15:08:54
(1)自分がWindows上でソースコードの
編集作業をしているということを考慮すれば
シフトJISで保存したほうが無難
なぜならWindowsはシフトJISしか使えないので
EUCとかで保存したら漢字が文字化けして
編集作業ができなくなるのではないか?

(2)しかしUNIXで動いているレンタルサーバー上で
perlのCGIとして動かすというのならEUCで保存したほうが
いいのでは?なぜなら表¥とかC5の問題があるし、
シフトJISだといちいち表¥と打たないと文字化けするが
EUCならそんな心配はないから。

(3)それとも、保存時にシフトJISで保存しても
FFFTPで転送時に勝手にEUCに変更してくれるの?
959デフォルトの名無しさん:2007/08/13(月) 15:12:23
>>957
漢字コードをEUCで保存したとしても、
そのテキストエディタ自体がEUCを
サポートしていれば、編集作業で
文字化けすることはないってことですか?

でもWindows付属のメモ帳でこんど
読めなくなりますね?

Windows上で編集するときには
メモ帳でも読めるように、シフトJISで保存しておいて、
サーバーに転送するときにFFFTPなどが
勝手にEUCに変換してくれると、一番うれしいですか?

でもオリジナルのソースコードを見ると
表¥
とか書いてあるので、オリジナル版の作者は
シフトJISで作ったと思うんですよ。
オリジナルの作者がシフトJISで作ったものを
その中の一部だけEUCに変更したら
まずくないですか?
全体のファイルが50とかあって、
その中の2つだけをEUCにするとか。
他のファイルからデーターを読み込みにきたときなんかに
不具合を起こさないですか?
960デフォルトの名無しさん:2007/08/13(月) 15:13:30
おまえは>957さんの回答を100回以上読んでからGoogleで検索しる
961デフォルトの名無しさん:2007/08/13(月) 15:14:59
まずプログラムを学び、試行錯誤してからまた来て下さい
まだ何もやらないうちから心配ばかりとかアフォかと
962デフォルトの名無しさん:2007/08/13(月) 15:15:05
「問題点1」
Windows上で編集作業をするには
どの文字コードを選ぶべきか?

「問題点その2」
UNIXで動作するレンタルサーバー上で
perlのCGIとして動作させるときに
どの文字コードを選ぶべきか?

「問題点その3」
FFFTPなどのFTPソフトで、
転送時に漢字コードを変換してくれる
機能がサポートされている可能性がある

「問題点その4」
オリジナルのソースを書いた作者さんは
表¥
などの表記をしているところを見ると
シフトJISで作成したのではないか?
この場合、勝手に一部のファイルを
EUCに変換して問題は生じないのか?
963デフォルトの名無しさん:2007/08/13(月) 15:17:05
つまりファイルが50あって
(1)シフトJIS
(2)シフトJIS
(3)シフトJIS
(4)EUC
(5)EUC
こんな状態になって問題ないのか?
(1)から(5)を読み込んだりとか、
普通にあるとおもいます。
964デフォルトの名無しさん:2007/08/13(月) 15:19:12
utf-8nを使えって
965デフォルトの名無しさん:2007/08/13(月) 15:40:53
>>959
シフトJIS で統一するか、EUC で統一するか、だな。
シフトJIS で統一するなら、\ を注意深く埋め込む必要がある。
EUC で統一するなら、\ を消していく必要がある。
966デフォルトの名無しさん:2007/08/13(月) 15:51:28
>>965
やっぱり統一しないとだめなのかな?

ただ、いまやってる作業は
日本語版のCGIゲームを英語版に
翻訳する、って作業なので、
日本語部分はちょっとづつ減っていって
最終的には日本語は完全になくなるはずなんですよ。

それでperlでCGIって話の場合、
絶対シフトJISでなければいけない、とか
絶対EUCでなければいけない、とか
そういう制限はないわけですよね?

ただシフトJISだったらWindows上で編集するときに
便利ですよ、っていうメリットと、
表¥っていちいちいれないといけないデメリットと、

EUCだったらwindows上で編集できないデメリットと、
windows上でもEUCを扱えるエディターを持ってこないと
編集できないデメリットと、
C5文字を使っても¥とかいれずとも文字化けしないメリットと、

あるわけですが、コード自体は、結局
「統一しなければならない」
って結論で誰も異論はないですか?
ファイルが50あって、
1−25はシフトJIS、
26−50はEUC、
こんなばらばらでCGIの動作が不具合を起こさないか、
ってことです。
967デフォルトの名無しさん:2007/08/13(月) 15:57:35
英語版になるんなら文字コードなんて気にしなくていいじゃん。
最終的には ASCII オンリーになるんだし。
968デフォルトの名無しさん:2007/08/13(月) 16:01:22
>>966
> ただシフトJISだったらWindows上で編集するときに
> 便利ですよ、っていうメリットと、

どこがどう便利なのかと
969デフォルトの名無しさん:2007/08/13(月) 16:03:35
ただHTML出力された状態を見ないと
翻訳もできないわけで。

表¥
の¥をいちいち削除するのは不可能なので、
現状、クライアント側でもサーバー側でも
シフトJISで統一することにします

だってEUCにしたら¥をいちいち全部削除しなければ
ならないから。それは不可能でしょ。

でもさ、ソースコード中の表示される部分、
ユーザーの目から見える部分は英語化するけど、
変数とかは日本語のままにするつもりなんだよね

$山田とか

この場合、どうなのかな?

CGIで出力されたHTMLのテキストについての文字コードって議論と、
perkのソースコード中に含まれた漢字の文字コードについての議論と、
2つあるとおもう。

つまり、printされてユーザーの目にふれる部分は全部英語に翻訳するので
最終的には文字コード関係なくなるかもしれないが、
ソースコード中に含まれた変数の部分$山田とか、は日本語のままで
いくつもりなので、サーバー上には日本語があいかわらず含まれた
ままで運用されるわけだが、このときも漢字コードについて
気にしなればならないのか?
ファイルを保存するときにどの漢字コードにするべきか?
サーバーに転送するときにどこの漢字コードにするべきか?
ソースコード中に含まれている漢字の取り扱いはどうなっているのですか?
970デフォルトの名無しさん:2007/08/13(月) 16:04:42
>CGIについての質問は板違いです。WEBプログラミング板でどうぞ。
971デフォルトの名無しさん:2007/08/13(月) 16:04:59
>>968
メモ帳で開ける。メモ帳で読める。
Windowsで動くテキストエディターは
シフトJISでないと文字化けするものも結構ある
windows上でEUCのファイルを扱いたければ
わざわざEUC対応って書いてあるものをもってくる
必要がある。シフトJISだったらそんな必要ない
972デフォルトの名無しさん:2007/08/13(月) 16:05:15
既に用意されているソースはもうちゃんとしてるって分かっていて、
自分で日本語を追加する必要もないんでしょ?
なら、シフトJIS のまま扱えばいいじゃん。
何か問題あるのか?
973デフォルトの名無しさん:2007/08/13(月) 16:05:41
表¥を表に一括置換すればいいじゃんw
とにかくメモ帳なんか使うな
974デフォルトの名無しさん:2007/08/13(月) 16:12:22
英語版完成したら当然アメ公にプレイさせるわけだが
アメ公のブラウザの初期設定ってシフトJISとかに
なってるのかな?
たぶん英語(US-ascii)とかになってるんじゃないかな。
その環境でシフトJISのページ?を表示させて大丈夫なのかな。
もちろんユーザーの目にするテクストは全部1バイト文字に翻訳
するつもりだが、ソースコード内部の変数名は日本語のまま
運用するつもりなんだ。$山田とか。
そしたらユーザーの目にする部分は1バイト文字だけど、
ソースコードの内部には2バイト文字が残っているわけでしょう。
この場合、そのファイルはシフトJISで保存すべきなのか?
EUCで保存すべきなのか?US-asciiとかで保存すべきなのか?
ということがわからないんですよ。
975デフォルトの名無しさん:2007/08/13(月) 16:15:23
CGIで出力するHTMLは当然明示的に
content type charaset=US-asciiなんちゃら、
って書きますけど、問題はソースコードの内部に
残った漢字の部分なんです。
そのファイル自体は、なんの漢字コードで
保存すべきなのか?
976デフォルトの名無しさん:2007/08/13(月) 16:20:10
ようはCGIのファイル自体はシフトJISで保存されていて、
ユーザーが目にする部分はUS-asciiとかで、
っていう、2重構造で問題ないのかと。
977デフォルトの名無しさん:2007/08/13(月) 16:20:20
こうも「試す」ってのをやらないのもめずらしいな
978デフォルトの名無しさん:2007/08/13(月) 16:23:45

1. 読まない
2. 調べない
3. 試さない
4. 理解力が足りない
5. 人を利用することしか頭にない
979デフォルトの名無しさん:2007/08/13(月) 16:26:22
そんなに心配なら日本語の変数名も全部英訳したら
980デフォルトの名無しさん:2007/08/13(月) 16:26:55
print "a"
とかって部分があったとして、
そのaは半角だから、
ずべてにたいして互換性があるのですか?
このファイル自体はシフトJISのキャラセットで
保存されています。つまりそのaもシフトJISだと
思うんです。そうやって出力されたaをアメ公の
環境で見たときに、どうなるのか。
981デフォルトの名無しさん:2007/08/13(月) 16:28:47
>>979
心配しているだけで実際の被害はゼロだと思うんですよ
982デフォルトの名無しさん:2007/08/13(月) 16:29:49
アメ公は
「このaはUS-asciiのaだ」
と思い込んで閲覧するわけですが、
本当はそのaはシフトJISのaなんです。
だから文字化けするのではないですか?
983デフォルトの名無しさん:2007/08/13(月) 16:30:34
英数コードに文字コードもクソも…
984デフォルトの名無しさん:2007/08/13(月) 16:30:59
それとも半角英数については
すべてのキャラセットにおいて
共通の文字コードが使われているので、
文字化けを心配する必要はない、
こういうことですか?
985デフォルトの名無しさん:2007/08/13(月) 16:31:47
明らかに日本人ではないな
今後ヌルー推奨で
986デフォルトの名無しさん:2007/08/13(月) 16:32:02
>>984
しねばいい、そういうこと
987デフォルトの名無しさん:2007/08/13(月) 16:36:32
ソースコード中に日本語の漢字が含まれている場合、
そのファイルはシフトJIS、もしくはEUCで保存しないと
だめなのですか?
US-asciiとかで保存したらだめなのですか?
988デフォルトの名無しさん:2007/08/13(月) 16:38:05
次スレ以降相手にしない事
質問を装った荒らしとして
規制議論にスレ立てて報告
989デフォルトの名無しさん:2007/08/13(月) 16:39:52
>>988
うっさいはげ。
990デフォルトの名無しさん:2007/08/13(月) 16:58:14

1. 読まない
2. 調べない
3. 試さない
4. 理解力が足りない
5. 人を利用することしか頭にない
991デフォルトの名無しさん:2007/08/13(月) 16:58:59
[ スクエアブラケット
を使ってはいけない場面、
というのは限定されていて、
おぼえられる範囲なのでしょうか?
992デフォルトの名無しさん:2007/08/13(月) 17:05:03
でもさ、将来アメ公のプルグラマと
共同作業することになって、
そいつにシフトJISで保存された
ソースコードを送ったら、
そいつは英語版windows+英語のエディター
という環境で、こっちが送ったソースを
まともに開けるのか?
993デフォルトの名無しさん:2007/08/13(月) 17:10:00
プルグラマwwwwwwwwwwwwwwwwwwwwwww
994デフォルトの名無しさん:2007/08/13(月) 17:13:59
そもそもシフト JIS の時に \ を挟む必要があるのは
Perl がシフト JIS に対応していないから。
995デフォルトの名無しさん:2007/08/13(月) 17:16:34
>>994
原則論キターーーー
996992:2007/08/13(月) 17:50:38
自己解決しました
997デフォルトの名無しさん:2007/08/13(月) 17:51:20

1. 読まない
2. 調べない
3. 試さない
4. 理解力が足りない
5. 人を利用することしか頭にない
998デフォルトの名無しさん:2007/08/13(月) 17:52:06

1. 読まない
2. 調べない
3. 試さない
4. 理解力が足りない
5. 人を利用することしか頭にない
999デフォルトの名無しさん:2007/08/13(月) 17:52:45

1. 読まない
2. 調べない
3. 試さない
4. 理解力が足りない
5. 人を利用することしか頭にない
1000デフォルトの名無しさん:2007/08/13(月) 17:52:50

1. 読まない
2. 調べない
3. 試さない
4. 理解力が足りない
5. 人を利用することしか頭にない
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。