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

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

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさんNGNG
"The duct tape of the Internet" こと、Perlについての質問箱です。
"There's more than one way to do it" ということで、Perlの奥深さについて皆で語り合い、追求してまいりましょう。

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

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

http://www.perl.org/get.html
● 2004/11/28現在の最新版: 5.8.5
● 2004/11/28現在の開発版: 5.9.1
0002デフォルトの名無しさんNGNG
● 過去ログ

1 http://pc.2ch.net/tech/kako/1017/10177/1017736187.html
2 http://pc3.2ch.net/tech/kako/1033/10336/1033688230.html
3 http://pc2.2ch.net/tech/kako/1041/10412/1041205885.html
4 http://pc2.2ch.net/tech/kako/1048/10485/1048519394.html
5 http://pc5.2ch.net/tech/kako/1053/10530/1053053082.html
6 http://pc5.2ch.net/tech/kako/1060/10606/1060689008.html
7 http://pc2.2ch.net/test/read.cgi/tech/1068051036/
8 http://pc2.2ch.net/test/read.cgi/tech/1074151549/
9 http://pc5.2ch.net/test/read.cgi/tech/1079114157/
10 http://pc5.2ch.net/test/read.cgi/tech/1085564875/
11 http://pc5.2ch.net/test/read.cgi/tech/1090889189/
12 http://pc5.2ch.net/test/read.cgi/tech/1094579428/
13 http://pc5.2ch.net/test/read.cgi/tech/1097851764/
0003デフォルトの名無しさんNGNG
[プログラミング自体の経験が無い奴はまずココを読め]
Perlプログラミング講座: http://www5a.biglobe.ne.jp/~n_rieko/perl/

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

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

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

[テクニック]
Perlメモ: http://www.din.or.jp/~ohzaki/perl.htm
Perlのページ: http://homepage1.nifty.com/nomenclator/perl/
Perlの小技: http://homepage3.nifty.com/hippo2000/perltips/index.htm
0004デフォルトの名無しさんNGNG
>>1-3
スレ立て乙!
0005デフォルトの名無しさんNGNG
v5.8.6age
0006デフォルトの名無しさんNGNG
>>5
http://www.perl.com/CPAN/src/
まだ出ていないのか、もうすぐ出るのか、ガセなのか、、、
0007デフォルトの名無しさんNGNG
>>6
あれ?なんでperl.comに無いんだろう。

http://search.cpan.org/~nwclark/perl-5.8.6/
0008デフォルトの名無しさんNGNG
お前ら音速が遅すぎ
0009デフォルトの名無しさんNGNG
cpanがどうのいう人は英語がわかるんですか?
0010デフォルトの名無しさんNGNG
>>6-7
それよか、5.8.5→5.8.6の変更点教えれ。
それによってインスコするかどう−か考えるから。
0011デフォルトの名無しさんNGNG
・perl-5.8.6 が出ています。

メンテナンスリリースです。
http://www.cpan.org/src/
http://www.cpan.org/src/perl-5.8.6.tar.gz

Changes はこちら。
http://search.cpan.org/src/NWCLARK/perl-5.8.6/Changes
0012デフォルトの名無しさんNGNG
>>11
Changes より perldelta の方が嬉しい人多いんじゃないかな。
http://search.cpan.org/src/NWCLARK/perl-5.8.6/pod/perl586delta.pod
0013デフォルトの名無しさんNGNG
>>11-12 thanks
結構、バグフィクスありまつね。utf-8の扱いで不正な文字があっても
正常に対応できるようになったとか。漏れなんか、utf-8で多言語扱って
るからバージョンアップした方がいいみたい。
0014デフォルトの名無しさんNGNG
Linux colinux 2.6.8.1-co-0.6.2-pre6 #58 Sun Oct 24 21:48:46 IST 2004 i686 GNU/Linux
Debian GNU/Linux 3.1 colinux tty1
This is perl, v5.8.4 built for i386-linux-thread-multi

colinux/Debian で環境構築中です。
CPANからいろいろモジュールをインストしようとしてるのですが、
たとえばJcodeを入れようとすると、

/usr/lib/perl/5.8/CORE/perl.h:380:30: sys/types.h: No such file or directory
/usr/lib/perl/5.8/CORE/perl.h:411:19: ctype.h: No such file or directory
(延々と続く)

などといわれてインストールできません。
他に、Email::Valid::Loose はテストに失敗するようで、
これも駄目でした。

RHL9環境下の This is perl, v5.8.4 built for i686-linux では問題なく
インストールできているのです。

最初、makeがないといわれてmakeをいれ、次にccがないと怒られたので
gcc入れました。

原因わかる方いらっしゃいますか?
0015デフォルトの名無しさんNGNG
レスしたくないよなあ、こういうの
0016デフォルトの名無しさんNGNG
DebianならDebianのパッケージとして入れればいいじゃん。
なんのためにメンテナーががんばってると思ってんじゃボケ
0017デフォルトの名無しさんNGNG
#apt-get install libc6-dev
0018デフォルトの名無しさんNGNG
指定したURLのHTMLファイルをダウンロードしたいのですが、
wget を使って実現するにはどうすればよいでしょうか。
0019デフォルトの名無しさんNGNG
koko ha perl sure desu.
0020デフォルトの名無しさんNGNG
>19
すいません。>18はperlの話です。
0021デフォルトの名無しさんNGNG
system("wget options...");
002214NGNG
>>17
ありがとうございました。
>>16
DebianのパッケージでPerlモジュール入れられるの
知りませんでした。ありがとうございました。
ただ、探すの大変です。
0023デフォルトの名無しさんNGNG
>21
そういうことじゃないです。脳が少ないようなのでもういいです。
0024デフォルトの名無しさんNGNG
>>23
もっとちゃんと説明する必要があるんじゃないの?
>>18 の質問だと、おそらくみんな >>21 が正解だと思うよ。
0025デフォルトの名無しさんNGNG
>24
みんなって誰と誰と誰ですか?
あなたの脳内の人たちですか?
0026デフォルトの名無しさんNGNG
つまんない。
0027デフォルトの名無しさんNGNG
>26
ウワ。逃げやがった。
0028デフォルトの名無しさんNGNG
>>25
まあ私の脳内と思ってもらってもいいけども、
実際、ちゃんとしたレスがもらえて無いじゃない?
0029デフォルトの名無しさんNGNG
はい。あなた含め、皆さんの脳が少ないために
ちゃんとしたレスがもらえませんでした。
0030デフォルトの名無しさんNGNG
つまんない。
0031デフォルトの名無しさんNGNG
>30
また逃げやがった。
0032デフォルトの名無しさんNGNG
>21
そういうことじゃないです。脳が少ないようなのでもういいです。
0033デフォルトの名無しさんNGNG
>24
みんなって誰と誰と誰ですか?
あなたの脳内の人たちですか?
0034デフォルトの名無しさんNGNG
日時っぽぃ文字列をマッチさせるために以下のようにしました。

$date1 = '(?:(\d+)[-/.](\d?\d)[-/.](\d?\d))';
$date2 = '(?:(\d\d\d\d)(\d\d)(\d\d))';
$time1 = '(?:(\d?\d)\:(\d?\d)\:(\d?\d))';
$time2 = '(?:(\d\d)(\d\d)(\d\d))';
$regex = "^(?:$date1|$date2)(?:\\s+(?:$time1|$time2))?\$";
@dateval = $targetstr =~ m%$regex%;

ここで言う「日時っぽぃ文字列」とは
●日付部
・区切り文字「-/.」があれば桁揃え不要…710/3/10等
・区切り文字なしなら8桁固定…20041129等
●時間部
・区切り文字「:」があれば桁揃え不要…1:1:1等
・区切り文字なしなら6桁固定…235959等
という定義で、日付部と時間部は1つ以上のスペースで区切って
時間部は省略可とし、日時としての妥当性チェックは
正規表現だけだと閏年判定等で大変なのでこの後の処理で行う予定です。

で、上記コードでマッチング自体はできるのですが、
@dateval[3 .. 5]に何かがキャプチャされてしまいます。
@datevalは年,月,日,時,分,秒になるようにしたつもりなんですがこれはなんでしょうか?
#ActivePerl 5.8.3で確認

あるいは他にいい正規表現があれば教えてください。
0035デフォルトの名無しさんNGNG
>>34
たとえば、 (:?$date1|$date2) に着目すると、
$date1 か $date2 のどちらか片方にマッチしたとしても、
そこだけで $1 から $6 まで占めちゃう。

ので、@dateval の内容を取り出す際に、
$1, $2, $3 または $4, $5, $6 のうちのセットされているどちらか一方だけを
とりだして 年,月,日 とするようにすればいいかと。
0036デフォルトの名無しさんNGNG
>>35
> たとえば、 (:?$date1|$date2) に着目すると、
> $date1 か $date2 のどちらか片方にマッチしたとしても、
> そこだけで $1 から $6 まで占めちゃう。

なるほど。
たしかに例えば「2004/11/29 235959」という文字列に対してマッチングさせたら
@dateval[0 .. 2]と@dateval[9 .. 11]にキャプチャされていて
仮に時間が省略されていたとしてもマッチさえすれば
$#dateval=11になっていることも確認できました。
ありがとうございましたm(_"_)m
0037デフォルトの名無しさんNGNG
cpan> i Filter::Simple
Strange distribution name [Filter::Simple]
Module id = Filter::Simple
DESCRIPTION Simplified source filtering
CPAN_USERID DCONWAY (Damian Conway <[email protected]>)
CPAN_VERSION 0.79
CPAN_FILE D/DC/DCONWAY/Filter-Simple-0.79.tar.gz
DSLI_STATUS RdpO (released,developer,perl,object-oriented)
MANPAGE Filter::Simple - Simplified source filtering
INST_FILE /usr/local/lib/perl5/5.8.6/Filter/Simple.pm
INST_VERSION 0.78

直して欲しいかも。

$VERSION = '0.78';
のままだし。。。
0038デフォルトの名無しさんNGNG
>>37
あれ?CPANのは0.79になっているなぁ。。。
0039デフォルトの名無しさんNGNG
正規表現でのマッチングで、『\S』というのはスペース以外の文字を表しますよね。
これを使って、『半角文字5個分』のマッチングを行いたいのです。
例えば、

:abcde:
:fgh__:
:ijkl_:
:m____:
:no___:
(_ は半角スペースだと思ってください)

のようにコロンとコロンの間に半角文字5個分の領域を取って書いてあるテキストで
パターンマッチングを行いたいのですが、:と:の間のマッチングを
どのように記述していいのかわからないのです。

\w{5} を使えば:abcde: の部分はマッチングが行えますが、他の4行はダメですよね。
\S{5} を使っても、\Sは『スペース以外の全ての文字』なのでダメだと思います。
全ての文字と、スペースを含めて半角5個分をマッチングさせる方法があったら教えてください。
よろしくお願いします。
004039NGNG
すみません。
>>39の最初の1行は余計です。
\Sを使うことにこだわりはありません。
0041デフォルトの名無しさんNGNG
.....
0042デフォルトの名無しさんNGNG
>>39
これでいい?
/[\w\s]{5}/
0043デフォルトの名無しさんNGNG
[\w ]{5}でよいのではないかと思われ。
004439NGNG
ありがとうございます!
0045デフォルトの名無しさんNGNG
.................
0046デフォルトの名無しさんNGNG
\sには\tとか\nも含まれるからね・・・
0047デフォルトの名無しさんNGNG
\w{1,5}
0048デフォルトの名無しさんNGNG
テキストデータに表示不可能文字(バイナリ?)が混ざったファイルとテキストのみのファイルを
見分ける手段というのはありますでしょうか?
別にPerlじゃなくたってこれでできるというのがあれば、ポインタでも教えて頂ければありがたいです。
0049デフォルトの名無しさんNGNG
>48
あるかないかと言えばある。回答終わり。

ポインタ?
0050デフォルトの名無しさんNGNG
>>48
jcode.pl の getcode() 関数を使うとできるかも。
0051デフォルトの名無しさんNGNG
>>49
ポインタっていうか、ここ見たらあるから見れとかそういうのでもってことでした。
ちなみに、手間でなければその方法をお教え願えないでしょうか?m(_ _)m
>>50
ありがとございます。
試みてみます。
0052デフォルトの名無しさんNGNG
>>48
$binary = 1 if $str =~ /[\x0-\x8\xb\xc\xe-\x1f]/;
こんな感じかな。どうせ厳密なのはできないし。
0053デフォルトの名無しさんNGNG
>>52
それだと ISO-2022-JP が救えなさそうだけど大丈夫かな?
0054デフォルトの名無しさんNGNG
MS-wordのファイルをテキストファイルにするスクリプト書いた香具師いる?
見てみたら、ドイツ語と日本語混在のDOCてutf-16で書かれてたよ。
>>48は、ひょっとして同じことやろうとしてるのか。
0055デフォルトの名無しさんNGNG
>>54
COM でやれば?
0056デフォルトの名無しさんNGNG
↓これ使えば?
http://www.dehenken.co.jp/products/doccat/doccat.html
0057デフォルトの名無しさんNGNG
>>54
wv でやれば?
005854NGNG
>>55-57
情報、どもども。
とりあえず、wv(うぉーunix対応)ダウソしてみまつた。
これまで、xdoc2txt(free)つーのと「なんでもテキスト屋さん」
(share)つーの試して未丹やけど、日本語はうまくいくんだが、
ドイツ語特殊文字がぜんーぶダメポだったんよ。
でけたら、いつか報告始末ね。(今日は忙し)
005954NGNG
あ、わっしが作ったword2txt.plも結構行けますたよ。英語とか独語
だけだと。何つうかな、記号類(機種依存文字かな)をいちいち指定
しないとダメポですたが。
006054NGNG
あちちち、wvてwindows用だた。unixでこいうのあれば、
OpenOffice入れなくて済むのにぃ。
0061デフォルトの名無しさんNGNG
リッチテキストファイルの表の部分を
カンマ区切りかタブ区切りかぐらいにしてくれるツール無い?
perlで作ったやつ一人くらい居そうな気がするんだが
0062デフォルトの名無しさんNGNG
あるけどおまえにはやらん
0063デフォルトの名無しさんNGNG
>>61
で、 CPAN は調べたんだろうな?
0064デフォルトの名無しさんNGNG
初歩的な質問で恐縮なんですが・・・
foreach (@abc) {
 と
foreach (@$abc) {
の違いって何でしょうか?
前者は 配列 abc の各要素毎の処理で、
後者は 変数 abc で示された文字列の名称の配列の各要素毎の処理、
という理解であってますか?
0065デフォルトの名無しさんNGNG
後者は$abcという変数に格納された「配列へのリファレンス」が示す配列の各要素
@{$abc}の省略記法です。ラクダ本のリファレンスの章を読んでみると分かりやすいと思います。
0066デフォルトの名無しさんNGNG
>>65
あえがとうございます。
リファレンス、ですね。
勉強してみます。
0067デフォルトの名無しさんNGNG
あのー、ウインドウズでPerlができるソフトは何があるのでしょうか。
0068デフォルトの名無しさんNGNG
>>67
ActivePerl
ttp://www.activestate.com/

GUI作りたいならPerl/Tk使っとけ
0069デフォルトの名無しさんNGNG
$ua = LWP::UserAgent->new;
$ua->cookie_jar($cookie_jar);
$ua->timeout(600);
$request = POST("https://〜hogehoge〜/" ,[%form_data]);
$res = $ua->request($request);
$_ = $res->content;

上で'500 read failed:'って帰ってくるんですけど、対処方法はないですか?
timeoutは意味をなしていない見たいだし。
0070デフォルトの名無しさんNGNG
いや、Win32::Guiだ
0071デフォルトの名無しさんNGNG
use strict;
$c=4;
ではエラーになる(当然)のに、
use strict;
$a=4;
ではエラーにならないのはなぜですか? $aを$bにしても同じです。
0072デフォルトの名無しさんNGNG
sort() によって使われるという理由で $a と $b はこのチェックの適用外という特別扱い
0073デフォルトの名無しさんNGNG
っていうかperldoc見ると普通に理由書いてあるぞ
ちゃんと読め
0074デフォルトの名無しさんNGNG
あれ?
DBDにSQLserver用のドライバありませんでしたっけ?
前に見た記憶があるんですが..私の記憶違い??

CPANさんやーいorz
0075デフォルトの名無しさんNGNG
のーびすな質問です。
CPAN
って、どう読めばいいのでつか?
0076デフォルトの名無しさんNGNG
>>75
惜しい! 7秒前に書き込めば・・・
0077デフォルトの名無しさんNGNG
どちらの板が正式なのかわからなかったので、両方に質問します
ハッシをまだ使いこなせていません。例えば、
一つのファイルは、
106 1473
106 764
1762 48
1762 38
1762 91
と、左の数字に対して、いくつかデータがあって、もう一つのファイルは、
106 30
1762 50
と、左の数字に対して一つしかデータがないものがあった時に、
これを、
106 1473 30
106 764 30
1762 48 50
1762 38 50
1762 91 50
のようにハッシュをつかって表示させるのはどうやればいいのでしょうか?
0078デフォルトの名無しさんNGNG
ループ{
$hash[$file1_leftvalue} = $file1_rightvalue;
}
ループ{
printf("%d %d %d\n", $file2_leftvalue, $hash{$file2_leftvalue}, $file2_rightvalue);
}
0079デフォルトの名無しさんNGNG
質問します

@NEW1 ← 1データ
@NEW2 ← 2データ
・
・
@NEW100 ← 100データ

が入っており
これを 
if (!open(OUT,">$ufile"))
print OUT @NEW1;
close;
if (!open(OUT,">$ufile"))
print OUT @NEW2;
close;

と別のファイルに出力します。@NEWの数が多いので
下記のようにループでやろうと思うのですが、print 分の@NEWの記載方法がわかりません
@NEW1 @NEW2 **** @NEW100 のようにカウントを用いたいのですがうまく認識してくれませんでした。
お願いします。

foreach my $num(1..100){
$ufile = $UDATA_DIR_C[$num].;
if (!open(OUT,">$ufile")) { &error('個人ファイルが書き込めません'); }
print OUT "@NEW$num";     ←   これではだめでした
close(OUT);
}

0080デフォルトの名無しさんNGNG
if (!open(OUT,">$ufile"))
print OUT @NEW1;
close;
if (!open(OUT,">$ufile"))
print OUT @NEW2;
close;

同じファイルに出力しているようなのですが?・・・
0081デフォルトの名無しさんNGNG
>>80
$ufile = $UDATA_DIR_C[$num].;
としているので、違うファイルです
0082デフォルトの名無しさんNGNG
print OUT eval("\@NEW$num");
0083デフォルトの名無しさんNGNG
ソフトリファレンス使って

print OUT "@{'NEW'.$num}";

とすればその部分はいけると思うけど、全体見直した方がいくない?



 
0084デフォルトの名無しさんNGNG
ネタだと思う
0085デフォルトの名無しさんNGNG
>>82
>>83

まじ、サンクスコです

0086デフォルトの名無しさんNGNG
質問します
配列の中の空白をとる置換をしようとおもうのですが
@NEW =~ tr/ //;

だと置換が行われないようです。一レコードづつ置換しないとだめでしょうか?
0087デフォルトの名無しさんNGNG
>>86
YES.

tr/ //d for @NEW;
0088デフォルトの名無しさんNGNG
>>86
おまえはスクリプトが完成するまで質問し続ける気かね
0089デフォルトの名無しさんNGNG
作ってくださいスレへ行け、と。
0090デフォルトの名無しさんNGNG
質問の>>77と>>79を見る限り
最初はハッシュ要素に配列入れようとしてたが、方法が分からずに
>>79みたいな変な実装になってるんだろう

>>78は全然間違った回答してるしw
0091デフォルトの名無しさんNGNG
>>87
サンクスです
0092デフォルトの名無しさんNGNG
質問します
foreach $num (0 .. $#STOCK) {
$line = $STOCK[$num];
($WORD,$PRON,$MEAN,$LVL,$CAT1,$CAT2,$YOBI1,$YOBI2,$YOBI3,$YOBI4,$YOBI5) = split(/@@@/,$line);
$line2 =$WORD.'@@@'.$CAT1.'@@@0@@@'.$CAT2.'@@@0@@@'.$YOBI1.'@@@0@@@'.$YOBI2.'@@@0@@@'.$YOBI3.'@@@0@@@'.$YOBI4.'@@@0@@@'.$YOBI5.'@@@0@@@'."\n";
#カテゴリーごとにユーザファイルを分割する
if ($CAT1 > 100 && $CAT1 < 200){push(@NLINE,$line2);}
}

@STOCKの内容を取り出して、条件に合えば、@NLINEに吐き出すのですが、
一行目が AAAAAAA だとするとちゃんとはいるのですが、2レコード目以降
BBBBBBだとすると先頭に半角の空白が入って@NLINEにはいってしまいます 具体的には

AAAAAA
BBBBBBB
CCCCCCC

です。直前(PUSHする前の)$line2のダンプを取ってみても空白は、まったくはいっていないので
pushをすると自動的に空白がはいってしまうようです。なぜでしょうか?
0093デフォルトの名無しさんNGNG
>>92
前スレ866さん、出番です(笑)

866 名前:デフォルトの名無しさん 投稿日:04/11/23 19:26:38
>>864
どっかで
print WRITE "@value";
とかやってんだろ。

0094デフォルトの名無しさんNGNG
>>92
おまえはスクリプトが完成するまで質問し続ける気かね
0095デフォルトの名無しさんNGNG
Sir! No! Sir!
Sir! 完成後も続けます! Sir!
0096デフォルトの名無しさんNGNG
質問箱なんだからはよおしえれ
0097デフォルトの名無しさんNGNG
改行コードじゃないの
0098デフォルトの名無しさんNGNG
>>97
んや、半角の空白
どう考えてもおかしい pushする直前にダンプしてもはいてないけど、push後にははいっている
perl5のバグかな
0099デフォルトの名無しさんNGNG
そんなしょーもないバグがあるはずないんですけど。
'@@@0@@@'."\n";
を
'@@@0'."\n";
ではだめですか?
010092NGNG
>>99

どうもです、今試したんですが
なぜかうまくいきました・・・ サンクスです
が理由がわかりましぇん
0101デフォルトの名無しさんNGNG
どうでもいいが、

foreach $num (0 .. $#STOCK) {
$line = $STOCK[$num];

なんてやるぐらいならはじめから

foreach $line (@STOCK) {

にしろよ。$numそこでしか使ってないからいらないだろ。
0102デフォルトの名無しさんNGNG
見てて吐き気のするコードだなおい
0103デフォルトの名無しさんNGNG
ほんとにどうでもいいです。
010492NGNG
解決したからまあいいや
0105デフォルトの名無しさんNGNG
週末はこのスレはreadonly
それがPerl流
010654NGNG
書き込めるけど読めません。chmod間違えてませんか。>>105
0107デフォルトの名無しさんNGNG
Perl6の正規表現ってやばすぎですよね。
0108デフォルトの名無しさんNGNG
間の悪い時にくだ質御免。

while(open(IN,<*.txt>)) {

みたいなファイルの開き方しちゃった時、
ループ内で「今開いとるファイル名」を得る方法ってありませんでしょか。
前もって$filename = glob("*.txt");
とかするより楽な方法が、なんかあるんじゃないかと気になって眠れない。
0109デフォルトの名無しさんNGNG
>>108
そんなファイルの開き方しちゃダメです。@負荷増大
opendir Dir_entry, './' or die;
for (grep /\.txt$/, readdir Dir_entry){
open IN, '<', $_ or last;
...
}
とか。
0110デフォルトの名無しさんNGNG
そうなんですか。ありがとうです。
ひとつひとつ横着せずにやりますか。
0111デフォルトの名無しさんNGNG
while(<*.txt>)) {
open IN $_;
my $file = $_;

とか
0112デフォルトの名無しさんNGNG
ループの最後でちゃんとcloseしてれば問題ない気がするが
0113デフォルトの名無しさんNGNG
えっと、ワイルドカード(<*.txt>、glob(*.txt))が負荷を掛けているってことですので、、、
0114デフォルトの名無しさんNGNG
>>107
どうやばいの?
0115デフォルトの名無しさんNGNG
>>114
超使いやすい。やばすぎる。
0116デフォルトの名無しさんNGNG
>>114
http://www-6.ibm.com/jp/developerworks/linux/041203/j_l-cpregex.html
0117デフォルトの名無しさんNGNG
質問します。
Win32のActivePerl5でドライブのレディ状態を調べたいのです。

if ( &drive_ready_check( 'A' ) ){
print "Aドライブはレディー状態です\n";
}else{
print "Aドライブはノットレディー状態です\n";
}

という感じで使いたいのです。
よろしくお願いします。
0118デフォルトの名無しさんNGNG
>>117
CPANぐらい検索しろよ。driveとreadyをキーワードでひけば

ttp://search.cpan.org/~mblaz/Win32-DriveInfo-0.06/DriveInfo.pm

てのが一発で出るよ。これのIsReadyってのがソレっぽい。

0119デフォルトの名無しさんNGNG
>>118
早速の返答ありがとうございました
やってみます
0120デフォルトの名無しさんNGNG
>>116
Parse::RecDescent(以下、P::RDと呼びます)はnew() モジュール・メソッドを使って新しい文法を作ります。
各P::RD文法は、P::RDクラスにブレスされたオブジェクトになり、文法中の各ルールはメソッドとして、
アクションを起こすために使用します。P::RD文法は構文解析プロセスに統合された 一部として、
それぞれのルールにアクションを関連付けます。これは非常に重要なことです。
Perl 5では構文解析は自分自身へのイベントであり、アクションは、大都会に至る道すがら、
遠くからでも猫を混乱させることが証明されている拡張構文を使って轢き殺した、路上轢死体のようなものです。
この違いにより、一致が検出された時に何かが起こるようにするという点で、
P::RDはPerl 5の正規表現よりもずっと効果的なものになります。

翻訳されてても読めません、先生。
0121デフォルトの名無しさんNGNG
>>113
どうやばいの?
0122どNGNG
よく使うサブルーチンがいっぱいあって、いちいちコピペするのが面倒なんですが、
その場合は
routine.pl
に全部入れておいて、呼び出す方のファイルに
require "routine.pl";
と書けばいいだけなのでしょうか?
0123デフォルトの名無しさんNGNG
>>122
そだね"1;"を忘れないように。
ってかファイル名気持ち悪いので複数形に汁
0124デフォルトの名無しさんNGNG
もおプログラミングするのツカレタ・・・・
0125どNGNG
ありがとうございました。
できたのですが、最後の1は何か意味があるのでしょうか。よく理解できません。
0126デフォルトの名無しさんNGNG
>>125
perlfunc(1)のrequireの項よめ。

初期化コードの実行がうまくいったことを示すた
めに、ファイルは真を返さなければなりませんから、真を
返すようになっている自信がある場合を除いては、ファイ
ルの最後に "1;" と書くのが習慣です。 実行文を追加す
るような場合に備えて、"1;" と書いておいた方が良いで
しょう。
0127デフォルトの名無しさんNGNG
A | ON 1.500000 | OFF 4.000000 | 2.500000
A | ON 2.300000 | OFF 3.400000 | 1.100000
C | ON 0.400000 | OFF 8.200000 | 7.800000
B | ON 4.100000 | OFF 5.500000 | 1.400000

と言うような行が書かれているデータファイルを読み込んで、一番右側の数値でソートし、

A | ON 2.300000 | OFF 3.400000 | 1.100000
B | ON 4.100000 | OFF 5.500000 | 1.400000
A | ON 1.500000 | OFF 4.000000 | 2.500000
C | ON 0.400000 | OFF 8.200000 | 7.800000

といった出力することはできるでしょうか?

if ( $_ =~/(A|B|C) \| ON (\S+) \| OFF (\S+) \| (\S+)/)

の$4でソートをするというのはなんとなくわかるのですが、ソート結果出力を
その値がある行全体を表示して出力する、というやり方がわからないのです。

どなたかわかる方いらっしゃいましたら教えていただきたいです。
よろしくお願いいたします。
0128デフォルトの名無しさんNGNG
>>127
先に分解するんじゃなくてソートするときに分解したら
0129128NGNG
>>127
ほれ。

sub get_sortkey ($) {
return $1 if shift =~ /(?:A|B|C) \| ON \S+ \| OFF \S+ \| (\S+)/;
# ちなみにこのフォーマットならこっちのほうが良いかも
# return $& if shift =~ /[\d\.]+$/;
return 0;
}

my @sorted = sort {get_sortkey($a) <=> get_sortkey($b)} @src;
0130デフォルトの名無しさんNGNG
print map { $_->[ 0 ] }
sort { $b->[ 1] <=> $a->[ 1 ]}
map { [ $_ , m/ (\S+)$/ ] } <>;
0131デフォルトの名無しさんNGNG
>>128, >>129, >>130

ありがとうございます。
>>129さんの方法を組み込もうと思っているのですが、せっかく教えていただいたのに
使い方がイマイチ理解できません・・・。

>>127の時点で考えていたことは、

sub sort
 {
 $i = 0;
 while ( $_ = <FP> )
  {
   if ( $_=~ /(A|B|C) \| ON (\S+) \| OFF (\S+) \| (\S+)/ )
    {
     $value[$i] = $4;
    }
  $i++;
  }
 }

@value_sort = sort {$a <=> $b} @value;
print WRITE @value_sort;

というような考えだったのです。
>>129さんの最後の行をこの関数sortの中に入れて、関数 get_sortkey を
関数sortの外に記述する、といった感じなのですか?

せっかく教えていただいたのに理解できずに申し訳ないです。
勉強を続けなくては…。
0132デフォルトの名無しさんNGNG
>>131
そもそもsort関数が、perlで用意されてるのをご存じか?と、訊きたい。
0133デフォルトの名無しさんNGNG
$a<=>$bってやってるじゃん。つかこの辺の仕組みで誤解して悩んでる気がする
>>127に近い形で書くとすると

use strict;
my @value;

while( <> ) {
 if( /(A|B|C) \| ON (\S+) \| OFF (\S+) \| (\S+)/ ) {
  push ( @value , [ $4, $_ ] );
 }
}

@value = sort{ $a->[0]<=>$b->[0] } @value;
print $_->[1] foreach( @value );


…あんま変わらんか
0134デフォルトの名無しさんNGNG
>>127
http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlfaq4.html#How_do_I_sort_an_array_by_anyth
http://perldoc.com/perl5.8.4/pod/func/sort.html
http://perlmonks.thepen.com/128722.html
0135どNGNG
Perl6ってもうすぐ出るんですか?
>>1を見る限りでは、もうすぐという感じなのですが。
0136デフォルトの名無しさんNGNG
ここで質問に答えてる人ってすごいスキルあるよね
すれ違いだけど
どんな本読んでるか教えて
おれのは、CGI&PERLポケットリファレンス、perl&CGI入門ゼミナール 
0137デフォルトの名無しさんNGNG
>>136
とりあえずその本捨てろ、O'Reillyの本を読め

後、スキルあるんじゃないぞ、これ位は普通
ていうか最近質問のレベル低すぎる
0138デフォルトの名無しさんNGNG
少なくとも>>137を見る限り、一部回答者のレベルの低下ぶりにも
目を覆いたくなるほどのものがある。
0139デフォルトの名無しさんNGNG
スコープを抜けるときは必ずこれを実行する、みたいな、
ファイナライザみたいなのはできるでしょうか?
たとえば、ネットワーククライアントで、
処理中に途中で例外が発生して return しようすると、
そこで勝手に自動的に close() してくれる、みたいな感じのができるといいのですが。
0140デフォルトの名無しさんNGNG
use Error qw(:try)
とか使えば?
0141デフォルトの名無しさんNGNG
>>137
O'Reilly って洋書ジャン
翻訳で挫折しそう 俺の場合は汎用機やってたか
そっちの言語は分かるが、perlの省略した形やデータ属性がないことに違和感を感じるね
0142デフォルトの名無しさんNGNG
オライリーでぐぐれ
0143デフォルトの名無しさんNGNG
75でつ
CPAN
の読み方を知りたいっす.....


0144デフォルトの名無しさんNGNG
>>143
スィーピャヌ
0145デフォルトの名無しさんNGNG
>>139
オブジェクトにはデストラクタを指定できる。
例えば、IO::Fileなどは自動的にcloseしてくれるし、
CPANで配布されているオブジェクト指向モジュールはその辺適当に始末してくれる事がおおい。
自分でやるにせよ、生のハンドルは使わず、オブジェクトで包んで使うのが無難だな。

>>143
しーぱん

0146デフォルトの名無しさんNGNG
これからPerlかPHPを勉強しようと思っている学生です。
なんだかPerlよりPHPのほうが強力、という記事をよく見ます。
(CGIに限ってのことかもしれないですが)
ここに現れる皆さんはPerlの熟練者の方達ばかりだと思いますが、
そのような方達がPerlを現在も使っているのはどんな理由からですか?
学生の僕には、

・Unix系のOSには最初からPerlが入っているから
・PerlのCGIで作られたホームページが多いから

といったような、「使っている人が多いから」くらいしか思い浮かびません。
熟練者の方から見て、PHPと比べたPerlの利点・欠点を教えていただければうれしいです。
0147デフォルトの名無しさんNGNG
>>146
レベルどうこう以前にこういう質問の方が嫌なんだが。すぐ荒れるし。

PerlとPHPでは出自がちがう。
sed awkといったフィルタ言語の流れで生まれたのがPerl。
そのテキスト処理能力があまりに強力なので、CGIに多用された。
PHPはWebサーバー上での使用を念頭に入れて開発された。
そういう場での使用にかなり特化されたつくりをしている。

CGIでPerl使う気にはもうなれんという人がいても別に不思議じゃないが
ターミナル上での書き捨てスクリプトつくるのに俺はPHP使う気にゃなれんし
そういう事例で言語自体の出来を云々するのはオロカ。
オロカな比較は実に多いので気にする必要なし。
てか、言語同士比較してるよりなんでもいいから使ってみ。
0148デフォルトの名無しさんNGNG
あとPerl、PHPの両刀使いも多いよ。
それぞれ得意、不得意があるからケースバイケースで使い分ける。
荒れるのはPHPしか出来ない奴がPHP至上主義で刃向かってくることが
原因である事が多々ある。
0149デフォルトの名無しさんNGNG
>>141

http://www.oreilly.co.jp/books/perl/

初めてのperl 正・続 と クックブックがお勧めかな。

続のオブジェクト指向の記述はわけわかだけど
(リファレンスの使い方の記述は分かりやすいんだけどね)、
クックブックのは比較的分かりやすい。
(ほかで、オブジェクト指向の入門的知識を仕入れてないとダメだけど。
 オブジェクト指向が分からんと、もうモジュールもまともに使えないし)

高いけど、オライリーの本をやらないと、結局、ダメだと思うよ。
0150146NGNG
ありがとうございます。
知らなかったとはいえ、荒れる要素を含む質問をしてしまい、申し訳ありません。
これから活用したいと思うスレが荒れるのはイヤなので回答はもう結構です。
回答してくださったお二方、どうもありがとうございました。
0151デフォルトの名無しさんNGNG
webでデータベースとしてシステムを構築することだけ考えても、
本当は、mod_perlとDBIを備えるperlの方がより強力なんじゃないの?
(宣伝文句と違い、PHPはmod_perlより早いわけじゃないし、
 DBIなら裏のデータベースが変わっても、らくらく対応だし。
 ボラクルでもどんとこい!)

それ以外の用途では、基本的にperlじゃないとやれないし。
0152デフォルトの名無しさんNGNG
PHPはマーケティングが上手い
企業対個人って時点で当たり前なんだけど。
0153デフォルトの名無しさんNGNG
>>146
打ち切った後の回答で悪いが

どちらかではなくて両方覚えるのがイイよ
(同時じゃなくていい、好きな方を先にやって残りを後から)
そして、自分で考えて使い分けるのがいい
0154デフォルトの名無しさんNGNG
これまた打ち切った後の回答で悪いが、>>146は
PerlとPHPのどっちを先に勉強したほうがいいのか、ということじゃないか?
それこそどっちが活躍の機会が多いか、とかのような感じで。
ワシ的にはPerl。
なぜなら、やはり今ではPerlでCGIを使っているシステムが多いから。
別にPerlの使用用途はCGIだけじゃないが。
0155デフォルトの名無しさんNGNG
>>140, >>145
レスありがとうございます。
>>145 さんのは DESTROY ってやつですね。
これがまさに探していたものでした。これでうまくいきました。
ありがとうございました。
0156デフォルトの名無しさんNGNG
Webで使うから って理由をベースに考えを進めるよりは
手軽な言語 → Web でも使える
って流れで考えた方が良いと思うが
0157デフォルトの名無しさんNGNG
cygwin上にてperlの運用と勉強をしようとしています
使おうとしているソフトの中の一機能として、Win32::GUIが必要だとあるのですが、
そのパッケージなどを探してみると、ActivePerl用のPPMパッケージ等しか見つかりません

perlが何たるかもわかっていないところに問題があるとも思いますが、
導入方法に関して取っ掛かりをつけていただけないでしょうか
0158デフォルトの名無しさんNGNG
>>157
http://search.cpan.org/~lrocher/Win32-GUI-1.0/

モジュールなら、とりあえずCPANで探す癖を付けるのが良いぞ
CPANモジュールを使ったインストール方法も覚えておくべし
0159デフォルトの名無しさんNGNG
ありがとうございます
CPANというものを使ってやってみようと思います
0160デフォルトの名無しさんNGNG
>>149
オーレイってシリーズもんでよく書店にあるやつだねー
高くて見てなかったので、見て見ます サンクスコ
0161デフォルトの名無しさんNGNG
オライリーと読め!!!
0162デフォルトの名無しさんNGNG
flock関数で、LOCK_SHを指定する意味って何なんでしょうか?
なんで、ファイルよむためだけにロックする必要があるんでしょうか?



>>161
私もオーレイってよんでます。
むしろ、日本語読みすると、オーレイのが正しいしぃ。
0163デフォルトの名無しさんNGNG
>>130
エンスーっぽい
0164デフォルトの名無しさんNGNG
perlのstat関数で、ファイルのタイムスタンプを取得すると、

$hoge = stat($time)[9]

print $hoge

で、23424545のような、意味不明な数字の文字列がでてくるんですが、
これを、年月日時分秒のようにわかりやすい形にするにはどうしたらいいんしょ?

0165デフォルトの名無しさんNGNG
>>162
読むだけ同士ならいくつ同時に読んでもなんともないが、
書き換えをする奴が混ざると書き換え途中の変な状態を
読むかもしれない。なので読むだけの奴はLOCK_SHを、
書き換えする奴はLOCK_EXをそれぞれ使うのが普通。
0166デフォルトの名無しさんNGNG
>>161
オーライ !
0167デフォルトの名無しさんNGNG
>>162
O'Reilly自身がオライリーって表記してるんだから...
0168デフォルトの名無しさんNGNG
るby>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>ぺrl
0169デフォルトの名無しさんNGNG
>>164
POSIX::ctime
0170デフォルトの名無しさんNGNG
>>164
そのコード通るか?

localtime でググれ
0171デフォルトの名無しさんNGNG
>>165
オーライ!
0172デフォルトの名無しさんNGNG
>>169
>>170
ありがとうございます。
ぐぐてみます。
0173デフォルトの名無しさんNGNG
こうしなきゃ
$hoge = (stat($time))[9]
0174デフォルトの名無しさんNGNG
どうでもいいがファイルを表す変数に
$timeという名前をつけるのはいかがな
ものかと。

0175デフォルトの名無しさんNGNG
プロセスを標準エラー込み込みでオープンする場合
open PIPE, "command 2>&1 |";
とか書いたりしますが、標準入力と標準エラーを別々のハンドルで分けて
開くのってどうやったらよいのでしょうか?
0176デフォルトの名無しさんNGNG
ipc::open3
0177デフォルトの名無しさんNGNG
>>176
ありがとうございます。
open3でググってみました。waitpidという言葉がところどころ見えるのですが
これは自分でwaitしなくてはいけないと(すればよい)と考えればよいですよね。
0178デフォルトの名無しさんNGNG
>>158
Cpanでインストしようとしたら

GETはできたのですがmakeの時点で
Writing Makefile for Win32::GUI
Makefile:339: *** ハャホ・オュケ讀遉、、ニ、、、゙、ケ。」テ貊゚。」
/usr/bin/make -- NOT OK
というエラーが出てしまいます

化けてて読めない…orz

# --- MakeMaker xs_c section:

.xs.cpp:
$(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) $(XSUBPP) $(XSPROTOARG) $(XSUBPPARGS) $*.xs >xstmp.c && $(MV) xstmp.c $*.cpp
0179デフォルトの名無しさんNGNG
if($resec[3] eq 0){
print"$resec[3]";
}

という文を実行すると、$resec[3]の内容が表示されてしまいます。
@resecの4番目の要素は、pq370という文字列です。
これはなぜなんでしょうか。
0180デフォルトの名無しさんNGNG
>>179
もっと詳しく。うちでは表示されない。
0181デフォルトの名無しさんNGNG
>>178
> Writing Makefile for Win32::GUI
> Makefile:339: *** ハャホ・オュケ讀遉、、ニ、、、゙、ケ。」テ貊゚。」
> /usr/bin/make -- NOT OK
> というエラーが出てしまいます
>

化けの部分は、

Makefile:339: *** 分離記号を欠いています。中止。

だわ。
0182デフォルトの名無しさんNGNG
if($resec[3] eq 0){
なにしてんの?

if($resec[3] eq '0'){
if($resec[3] eq ''){
if($resec[3] == 0){

どれ?
0183デフォルトの名無しさんNGNG
>>179
eqで整数と比べるなよ。
0184デフォルトの名無しさんNGNG
>>181
ありがとうございます
0185179NGNG
eqと==はどのように違うのでしょうか。
文字を==で比較した場合や、数字をeqで比較した場合はどのようなことが内部で行われているのでしょうか。

今回の場合は、@resec内には0と文字列の両方が含まれています。
0186デフォルトの名無しさんNGNG
質問があります。
DBI でカラム名(フィールド名)をリストを抜き出す関数ってありませんか?
$sth->fetchrow_array で抜き出す配列と同じ順番で出したいのですが..
0187186NGNG
> DBI でカラム名(フィールド名)をリストを抜き出す関数ってありませんか?

失礼しました。
perldoc 隅々まで眼を読んだらありました。
スレ汚し申し訳ありません。
0188デフォルトの名無しさんNGNG
>>185
ドキュメントや書籍を読もうという気は微塵もないのですか?
0189デフォルトの名無しさんNGNG
>>187
謝るぐらいならどうやればできたかも書けよ
0190デフォルトの名無しさんNGNG
>>181
Makefile.PLやMakefileなどを見て該当部分の空白をタブに置換したりもしてみているのですが、
何度やっても同じエラーでとまってしまいます

また、そのエラーが出ないときは
Couldn't rename Win32-GUI-0.0.558 to /home/UserName/.cpan/build/Win32-GUI-0.0.558:
Permission denied at /usr/lib/perl5/5.8.5/CPAN.pm line 3948
と出て、その下にエラーが続きます

perl Makefile.PL によってMakefileが作られると考えていたのですが、ほかにどこか修正し忘れのような点はありますか?
0191179NGNG
じつはおまいらはあんましよくわかってないということがわかりました。もういいです。
0192デフォルトの名無しさんNGNG
>>191
あいにく養護学校に勤務した経験がないもんでね(w
0193デフォルトの名無しさんNGNG
>>190
makeのバージョン(ていうか、実装系)を疑った方がいいかもね
Win系のモジュールの中には、特定のコンパイラに依存しているのとかあるし
0194デフォルトの名無しさんNGNG
>>191
オーレイ一冊買うのすらケチってるとあとでロクなことないですよ
0195デフォルトの名無しさんNGNG
アーライ!!
0196デフォルトの名無しさんNGNG
オーレイ
0197デフォルトの名無しさんNGNG
perlを始めようと思ってます。
DLしたいのですが、どれをどうDLするかとか何処にも書いてないので
全然わかりません
言葉の意味もまともに分かりません

教えて欲しいのですが、板違いならどこの板できけばいいですか?
0198デフォルトの名無しさんNGNG
http://www.harukaze.net/~mishima/perl/
0199デフォルトの名無しさんNGNG
>>197よ
もろ>>1のリンク先にあるぞ。
英語読めないとはいえOSの名前ぐらいわかるだろ。
0200デフォルトの名無しさんNGNG
>>193
さらにいろいろやってみているのですが、
Cpan 上で make Win32::GUIとやるとエラーが出るので普通にBash上で
Perl Makefile.PLとやると、エラーも無くMakefileができました
その後Cpanで install Win32::GUI 等とすると、同じディレクトリ内にtmpというディレクトリが作られ、
そちらに全内容を移動して作業した後に、
Removing previously used /home/UserName/.cpan/build/Win32-GUI-0.0.558
Can't remove directory /home/UserName/.cpan/build/Win32-GUI-0.0.558: Device or resource busy at /usr/lib/perl5/5.8.5/CPAN.pm line 3947
Couldn't rename Win32-GUI-0.0.558 to /home/UserName/.cpan/build/Win32-GUI-0.0.558:
Permission denied at /usr/lib/perl5/5.8.5/CPAN.pm line 3948
となります

自分で消したファイルに文句言われても対処のし様が…
あきらめた方がいいのかとも思うのですが。
0201187NGNG
>>189
す、すまねーorz

  @{$sth->{NAME}}

ここに入ってた
0202デフォルトの名無しさんNGNG
いっぱいありすぎてどれかわからないです、すみません
あとUNIXとか、コマンドプロンプトとかもよくわかりません

教えて君ですっごい申し訳ないです
0203デフォルトの名無しさんNGNG
連書きすみません
UNIXのコマンドラインと、プロンプトの二つがごっちゃになってました
0204デフォルトの名無しさんNGNG
>>203
>>192
0205デフォルトの名無しさんNGNG
とりあえずスレ違いというのだけは確かです。。。
0206デフォルトの名無しさんNGNG
encodingの使い方がよく分かりません。
use encoding "shiftjis" ってやると、shiftjisでコーディングできるようになったとこまではよかったんですが、

opendir ( DIR, $dir );
my @files = readdir( DIR );
@target = grep {/漢字ファイル名/} @files;

ってやっても、望んだファイルが引っかかってくれません。

use open IO => ":encoding(utf8)";
use open ":std";
って入れても一緒でした。
use open IO => ":encoding(shiftjis)";
とすると
"\x{0088}" does not map to shiftjis at ...
みたいなエラーが山ほど出てきて駄目でした。
ちゃんとUNICODEで入ってきてるっぽいです…

やっぱり読み込むたびに手動でUNICODEに変換しなきゃ駄目なんでしょうか?
0207デフォルトの名無しさんNGNG
LWPについての質問なのですが、
GETリクエストでリダイレクトが返ってきた時、LocationヘッダのURLを取得したいのですが、可能でしょうか。

$cookie_jar = HTTP::Cookies->new(file => "$ENV{'HOME'}/.temp_cookies.txt", autosave => 1, ignore_discard => 1);
$ua = LWP::UserAgent->new;
$ua->cookie_jar($cookie_jar);
$url = "http:.//hoge.example.com/redirect.jsp";
$request = HTTP::Request->new(GET => $url);

このようなコードを書いたのですが、複数回リダイレクトするため、途中のURLがわからなくなってしまいます。
HTTP::Liteでヘッダ取得して頑張るという手段も考えたのですが、Cookieも使いたいのでできればLWPでやりたいです。
よろしくお願いします。
0208デフォルトの名無しさんNGNG
>>207
LWP::UserAgentでrequests_redirectableを空にしとけばいいんでねーの?
試してはいないが。
0209デフォルトの名無しさんNGNG
>>206
readdir は UTF-8 でなくて生でデータがはいってくるはず。そのままでは
SJIS 文字列にマッチしない(1バイトめと2バイトめがなきわかれになって
いることが length をとってみればわかる)ので、Encode::decode とかを
つかって変換してやればオッケー。

use encoding って一見便利なようにみえて動きがわかりづらいのがいやん。
0210デフォルトの名無しさんNGNG
PerlのCGIの実行を、拡張子を.cgi以外で実行するにはどうしたらいいのでしょうか。
ヤフーなんかは、拡張子が無いようにも思われます。
どなたかご伝授下さい。
0211デフォルトの名無しさんNGNG
>>210
スレ違い、使ってるWebサーバのスレに行け
0212デフォルトの名無しさんNGNG
Perlのsort関数でローカル配列って使えないのでしょうか?
下記のサンプルソースで Before と After の内容が変わってしまいます・・・。
どなたかご存知な方、ご教授お願いします。

#!/usr/bin/perl

&aaa(0);
exit;

sub aaa {
local ($m) = @_;
local @ary,arys;

push @ary, $m;
@arys = sort(@ary);

if($m == 0){
print "Before:$arys[0]\n";
&aaa(1);
print "After:$arys[0]\n";
}

print "$arys[0]\n";
}
0213デフォルトの名無しさんNGNG
イミフメ
0214デフォルトの名無しさんNGNG
local (@ary,@arys);
0215デフォルトの名無しさんNGNG
use strict 'subs'
で裸のワードを禁止にするべし。
0216207NGNG
>>208
できました。
$ua = LWP::UserAgent->new;
@{ $ua->{'requests_redirectable'} } = ();
とし、後は$res->is_redirectでリダイレクトを調べ、$res->header('Location');で全部取得できました。

どうもありがとうございました。
0217デフォルトの名無しさんNGNG
いまどき新しく書くなら常にuse strictでいいと思うけどな。
0218デフォルトの名無しさんNGNG
>>214
thx!!!
0219デフォルトの名無しさんNGNG
>>209
 readdirってopenと違って :encoding() で指定できないからだろうけどね。>use encodingで対応してない

0220デフォルトの名無しさんNGNG
今更なんだが、>>133のソースを理解するにはどの単元を読めばいい?
[変数, 変数] っていう形が全然何を表しているのかわからん・・。
自分のレベル的にはまだオライリ−の『初めてのPerl』読んでる程度。
この本に載ってなかったらどの本のどこらへんを読めばいいのか教えてくれると激しく嬉しい・・・・。
0221デフォルトの名無しさんNGNG
>>220
>>3
http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlref.html
0222デフォルトの名無しさんNGNG
Cygwin で Perl 使っています。
Tkをインスコしようとしたらコンパイルエラーで落ちます。
TK の作者 (Ing-Simmons師) は
http://groups-beta.google.com/group/comp.lang.perl.tk/browse_thread/thread/
454e0eaa6edebb97/ff475a9a5197ccc4?q=perl%2Ftk+cygwin+%22initializer+elem
ent+is+not+constant%22&_done=%2Fgroups%3Fhl%3Dja%26q%3Dperl%2Ftk+cygwi
n+%22initializer+element+is+not+constant%22%26&_doneTitle=Back+to+Search&
&d#ff475a9a5197ccc4
としてサジを投げています。
私は神になりたいです。根性でTkを脳みそコネコネコンパイルします。
0223デフォルトの名無しさんNGNG
>>222
ActivePerlを入れてる私は、神ですか?
0224206NGNG
>>209,216
いまさらですがencode,decode使うといけました。ありが�d

perlって、読み込んだ文字列がdecode前か後か知ってる癖に、自動で変換とかしてくれないんですね…
これじゃencoding意味ないよ!ヽ(`Д´)ノ
0225デフォルトの名無しさんNGNG
自動を嫌うのがPerlerです
0226デフォルトの名無しさんNGNG
>>225
その根拠は?
$_には自動で値が入るし、数値と文字列の相互変換も自動。
そもそも面倒な作業―特にテキスト処理―を自動化するのにこそ、
向いている言語だと思うが違うか?
いや、CGI作るために使ってる香具師には関係無いか
0227デフォルトの名無しさんNGNG
テキスト処理しか例に出せないのもアレだな
0228デフォルトの名無しさんNGNG
特定の単語をそれを含むタグとともに削除したいのですが・・

==「使用上」という単語を含む<TD>〜</TD>までの文字列を削除したい==
  
<TD>・・</TD>
<TD>〜使用上〜</TD>
<TD></TD>
============================================================
・下記のパターンマッチを考えては見ましたが、
 文章内に T やD があるとマッチしてくれません。
<TD>[^(<TD>)]*使用上[^(</TD>)]*</TD>

<TD>〜特定の単語 との間に <TD> という文字列が存在しない、
という設定は可能でしょうか?
0229デフォルトの名無しさんNGNG
s{<TD>.*?</TD>}{}isg;
0230デフォルトの名無しさんNGNG
s{(<TD>.*?</TD>)}
{
index($1,'使用中')==-1?$1:''
}isge;

いまいちか・・・・
0231デフォルトの名無しさんNGNG
>>228 >>229 >>230
ちゃんとした本読めよ。
ただのお遊びならかまわんが、仕事がらみじゃ即座にクビだぞ。
0232230NGNG
>>231
プロフェッショナルな解答みせてくれよ
美しく、効率のいい解答を
0233デフォルトの名無しさんNGNG
>>224
いやだって、decode前のencodingが分かんないから。
分かってればuse openとかで変えられるわけで。
(もっともuse openはグローバルじゃないのが困りモノだけど)

んで、ファイル名に関してはencodingを指定できる場所がない、と。
filenameとかのプラグマを作ってreaddirを上書きすればいいんじゃね?
0234デフォルトの名無しさんNGNG
>>228
それは文字セット [ ] の使い方間違えてるだけだ

$reg = qr{ <TD> ((?!</TD>).)*? 使用上 .*? </TD> }isx;
$string =~ s/$reg//g;

正規表現、絞込みと再帰が使えたらなあ…
0235デフォルトの名無しさんNGNG
>>234
Perl6の正規表現はすごいらしいよ
0236デフォルトの名無しさんNGNG
ひとつの正規表現ですまそうとせず

s{<TD>.*?</TD>}{index($1,'使用上')? '': $1}g

あたりでどうだろうか

0237デフォルトの名無しさんNGNG
ごめん、わかると思うけどeがぬけてら

s{<TD>.*?</TD>}{index($1,'使用上')? '': $1}ge

0238デフォルトの名無しさんNGNG
<<229<<230<<234<<236
ありがとうございました。
<<231 
参考に使用している本を教えてくださいな。
<<235
更に正規表現が難しくなるのか・・
0239デフォルトの名無しさんNGNG
>>238
レスアンカーくらいまともに打てないのかね?
0240230NGNG
>>237
それじゃ、だめなんだって。
で、俺はプロのコードを待ってるんだけどね。念のだめ234もチェックしてみたけど違った。
0241T女の竹田NGNG
>>228
s{(<TD>(.(?!<TD>))*?使用上.*?</TD>)}{}sgi
これでどうかな?
0242デフォルトの名無しさんNGNG
今まで出てきたコードはどれも2バイトコードに
1バイトずれてマッチする問題の対策が入ってないな。

use utf8前提ならいいがそうでないなら厳密には
まずそう。3文字もあるとそうめったに偶然マッチ
することはないけどね(笑) たとえばEUCで1バイト
ずれると「藩兢」が含まれるがこんな文字列は今
はじめてみたので実用上どの程度まずいかは疑問。
「使用上」の部分が固定文字列じゃなくてどっか
からもらうならちゃんとしなくちゃだけどね。
0243デフォルトの名無しさんNGNG
>>237
カッコが抜けている
indexの見つからなかったときの戻り値は$[-1

s{(<TD>.*?</TD>)}{index($1,'使用上')>=0? '': $1}ge

0244デフォルトの名無しさんNGNG
>>243
ひょっとして$&を知らないのか?
0245デフォルトの名無しさんNGNG
>>244
$&使うといらないとこでもマッチ結果を保存するようになるから
あきらかにそこしか正規表現がないような使い捨てスクリプトじゃ
ない限りなるべく使わない。

0246デフォルトの名無しさんNGNG
うわ、 $`, $&, $' 使う奴ってホントにいるんだね。
ただのお遊びならかまわんが、仕事がらみじゃ即座にクビだぞ。
0247デフォルトの名無しさんNGNG
>>242
漏れはてっきり、タグ中の"使用中"も拾っちゃうとか、再帰的なタグが処理できないとか
そういう部分のこと言ってるんだとおもってたよ

プロののくせに、その今更な子供みたいな文句はなんだorz
…大丈夫だよ。ぼくちゃんが心配しなくても、みんな最初にどうにかしてるから
0248デフォルトの名無しさんNGNG
再帰的なタグをとかなんとかいうともはや正規表現お手軽
コースじゃつらいんじゃないかね。HTMLのパースしてくれる
モジュール使ったほうがいいと思われ。
0249デフォルトの名無しさんNGNG
文字列から、カタカナ+漢字を抜き出そうとして

@conbi = ( $line =~ /^${euc_char}*?($KATAKANAp{2,}$KANJI{2,})/og );

で、うまくいったのですが、後ろの文字をに制限しようとして、

@conbi = ( $line =~ /^${euc_char}*?($KATAKANAp{2,}$KANJI{2,})$back{1}/og );
ではうまくいかず、

@conbi = ( $line =~ /^${euc_char}*?($KATAKANAp{2,}$KANJI{2,})($back){1}/og );
($back = 'が|の|を|に|へ|と|より|から|で';)

としたら カタカナ+漢字 と $backのひらがな1文字が入ってしまいました。
[$back]{1}にしたら$backの内容に関係なくマッチしてしまいました。
1行で表現することは無理でしょうか?

#$euc_charのぶぶんは「perlメモ」でeuc1文字にマッチする正規表現です。
 $KATAKANApや$KANJIも「Perlメモ」の全角カタカナ、漢字にマッチするものです
0250デフォルトの名無しさんNGNG
$back ='(?: 〜 )';
としたらうまくいきましたorz
スマソ...
0251デフォルトの名無しさんNGNG
漢字とかよくわからんけど
先読み (?= ... ) 使えばいいんじゃないか?

/ なんかマッチさせたい文字列 (?= 後ろの文字 ) /x
0252250NGNG
>>251
うおおお
すみません
ありがとうございますた・゚・(ノД`)・゚・
0253デフォルトの名無しさんNGNG
perlのデバッガにreadline使ったヒストリ機能欲しいな〜
0254デフォルトの名無しさんNGNG
Tk使って、getOpenFileやchooseDirectoryのウィンドウだけ出したいんですが、
MainWindowが余分に出ちゃいます。

MainWindowを出さずにすませるか、見えなくする方法ってないでしょうか?
0255_gunzipNGNG
>>254
MainWindowを作って隠す、という方法が手っ取り早いかな。

#!/usr/bin/env perl

use Tk;

my $mw = new MainWindow();
$mw->withdraw();
my $target = $mw->getOpenFile();

#以降不要なら$mw->destroy();
0256デフォルトの名無しさんNGNG
ある処理をして、その結果をクッキー出力してからHTML出力しなければなりません。
仕方がないので、HTML出力するものを文字列として$mojiに保存して、
クッキー出力後に、
print"$moji";
をしています。
結果としては正しい物が出力されるのですが、普通はこのようなやり方をするのでしょうか?
また、この方法だとprintf出力ができません。
何かいい方法は無いでしょうか。
0257デフォルトの名無しさんNGNG
>>256
まず>>1をゆっくり"声に出して"読め
0258253NGNG
Term::ReadKey,Term::ReadLine
の二つのパッケージを入れて

$PERLDB_OPTS="ReadLine=t" perl -d -e foo.pl
これでヒストリ機能が使えるようになりました。一応報告まで。
0259デフォルトの名無しさんNGNG
>>253
readline 先にインスコしてから Perl インスコすれば最初から使えるんじゃなかったっけ?
他のツールでもハマることが多いので、
漏れは OS インスコ後真っ先に入れるもののリストに readline を入れてる。
0260デフォルトの名無しさんNGNG
use strinct;
use warnings;
foreach my $bar (@list) {
 next if (-M $bar < 0); #★
 print "$bar\n";
}
と書くと、Use of uninitialized value in numeric lt (<) at ★の行
とワーニングが出まくるんですが、これは何が原因でしょう?
@listにはあるディレクトリのファイルリストが入っています。
$barが初期化されてないって意味だと思うのですが、printできてるので
ファイルリストは取得できています。Perlのバージョンは5.8.5です。
よろしくお願いします。
0261254NGNG
>>255
>MainWindowを作って隠す、という方法が手っ取り早いかな。
>my $target = $mw->getOpenFile();

>#以降不要なら$mw->destroy();

これだと、
my $target = $mw->getOpenFile();
の時点で、getOpenFileが終了するまで実行止まっちゃっちゃうので、
getOpenFileダイアログ出てる間はMainWindowも出てしまいます…

できれば、最初からgetOpenFileダイアログだけを出すようにしたいです。

0262254NGNG
>>255
とか思ってたら$mw->withdraw();が抜けてました。
これ入れたらいけました。有難うございます。

早とちりしてスミマセンorz
0263デフォルトの名無しさんNGNG
>getOpenFileが終了するまで実行止まっちゃっちゃうので、
止まらなきゃ困るだろ。
>getOpenFileダイアログ出てる間はMainWindowも出てしまいます…
でねーよ
0264263NGNG
ぐふっ
0265デフォルトの名無しさんNGNG
>>260
その-Mってのはなんの目的で入ってるの?
0266デフォルトの名無しさんNGNG
>>260
たぶんカレントディレクトリがファイルリストつくったところとちがうので-Mがundef返してるんだろ。
ディレクトリ補ってフルパスにするか適切にchdirすれ
0267デフォルトの名無しさんNGNG
>>265
こう書くと更新日時がプロセス起動より新しいファイルを弾けるんじゃないですか?

>>266
やってみます
0268デフォルトの名無しさんNGNG
>>223
私はあえてcygwinで動かしたいのです。
0269デフォルトの名無しさんNGNG
変態だな
さすがPerllスレ
0270デフォルトの名無しさんNGNG
Programming Perl 4thはいつでますか?5.10と一緒に発売ですか?
0271デフォルトの名無しさんNGNG
たまに、関数で

hoge_func($) {
hogehoge;
}

とか、

piyo_func($;$) {
piyopiyo;
}

関数名のあとの、($)とか($;$)ってどういう意味があるのですか?
0272デフォルトの名無しさんNGNG
http://www.google.co.jp/search?hl=ja&q=Perl+%E3%83%97%E3%83%AD%E3%83%88%E3%82%BF%E3%82%A4%E3%83%97&lr=
0273デフォルトの名無しさんNGNG
>>272
いきなり Google の URL 示さなくても "Perl のプロトタイプだYO!" って言えばいいのに。
とりあえず>>271はラクダ本を買えってこった。
0274デフォルトの名無しさんNGNG
3巻組になったりしてね。
0275デフォルトの名無しさんNGNG
>>221 で紹介されてたとこ、閉鎖されてる?

ついこないだまでは繋がったのに、、、。
0276デフォルトの名無しさんNGNG
>>275
普通に見えるが?
0277デフォルトの名無しさんNGNG
テキスト編集をするためにPerlを少しかじったのですが、面白くなってもっと知りたいと思いました。
今まではネットでPerlを紹介しているページで勉強していたのですが、本気で勉強しようと思ったら、
オライリーの本を買って勉強したほうがいいのでしょうか?
今ちょうど手元に『初めてのPerl』があるのですが、最初のスカラーデータから読み直したほうがいいですか?
オライリーのPerl本は色々あるんですね。

初めてのPerl (続)
Perlクックブック
プログラミングPerl

色々ありますが、どのような順番で勉強していけばキチンと身につけられますか?
それともオライリー以外のほかの書籍で『これは読んどけ』って言うのがあったら教えてください。
0278デフォルトの名無しさんNGNG
やりたいことがあったらその都度
プログラミングPerlで勉強していくのが一番いいと思うよ。
0279デフォルトの名無しさんNGNG
>>277
初めてのPerlは頭から熟読するべし
その次に読むとしたら 続・初めての かな
クックブックは、まだ要らないと思う
プログラミングPerlは、金が余ってるなら買ってもいいけど
お布施みたいなもんだから、金が無いなら買わなくていい

オライリー以外なら、EffectivePerlあたりがコストパフォーマンスが良くてオススメ
初めてのPerl読み終わったら買うといい。
0280デフォルトの名無しさんNGNG
電子メールのFrom:ヘッダから、メールアドレスと表示名を取り出したいんですが、
スマートな正規表現があったら教えていただけませんでしょうか。
想定するFrom:ヘッダとしては
(1) aiueo <[email protected]>
(2) [email protected]
(3) [email protected] (aiueo)
くらいでよいと思うのですが。("aiueo"が表示名のつもりです)

とりあえず(1)からアドレスと取り出す方法として
if ($from =~ /<(.+@.+)>/)
{
print "$1\n";
}
というのを作ったんですが、他の形式にも対応させようとして、いろいろやったんですけど
うまくいきませんでした。(初心者で申し訳ありません)
0281デフォルトの名無しさんNGNG
Perl/Tk を Cygwin で動かす問題について、いくつかやってみた結果を曝します。
まずはふつうにパッケージを解凍して、
$perl Makefile.PL
$make
すると、pTkサブディレクトリで氏ぬから、pTk/Makefile の DEFINE = に -DWINUSERAPI="" を追加して
pTk サブディレクトリについて make を続行する。
つぎに、
pTk/mTk/xlib/X11/Xlib.h の 1206 行を
#include <pTk/tkIntXlibDecls_f.h> に変更してから Xlib サブディレクトリを make する。
Event/tclPlatEvent.c の1行目の下に #include <sys/time.h> を挿入する。
Event/tclPlatNotfy.c の33行目の下に #include <pTk/mTk/unix/tkUnixPort.h> を挿入する。
pTk/mTk/unix/tkUnixPort.hを
l.42 #include <pTk/compat/limits.h>
l.62 #include <pTk/Lang.h>
l.89 #include <pTk/compat/unistd.h>
に変更する。
そのうえで Event/ サブディレクトリを make する。
JPEG/ サブディレクトリに移る。
makeするとJPEG.cのコンパイルで氏ぬので
make JPEG.i で JPEG.iを生成してから
typedef struct HWND__{int i;}*void *;
を
typedef struct HWND__{int i;}*HWND;
になおす。変更したJPEG.iを手でコンパイルしたらmakeを続行する。
PNG/ サブディレクトリも同様の手順でmakeする。
こまったのは Canvas, Entry, ListBox, Menubutton, Scale, Text の各ディレクトリのmakeである。
こいつらをmakeしようとするとlinkの段階で氏ぬ。
ぉιぇτ、工□い人
0282デフォルトの名無しさんNGNG
>>280
きちんとやるなら素直に Mail::Header つかうのが吉。
0283デフォルトの名無しさんNGNG
Mail::Header、自分のPCに入っていたんで、perldocでマニュアル見てみたんですけど、
あまりよく分かりませんでした。
getメソッドが使えるのかな。
Fromヘッダの内容は、変数に入れてあるんですけど、
new Mail::Headerには、標準入力か、ファイルディスクリプタ?しか
渡せないんですかね。(ファイルからの入力しかできない?)
すこし試してみます。。
0284デフォルトの名無しさんNGNG
>>277
>>279

意外と、『クックブック』は早めに手に入れておいた方がいいと思うな。

というのも、『初めて』『続・初めて』と進んできて、
一番問題になるのは、リファレンスとオブジェクトの理解だと思うんだわ。

特に、『続・初めて』だけだと、オブジェクト指向のあたりは、
理解は難しいと思う。

自分の場合、
『続・初めて』で分からないとき、同じ項目を『クックブック』で引いてみると、
ああ、なるほどと分かることが多かった。

基礎部分は、『初めて』『続・初めて』『クックブック』だけでいいと思う。

あとは、なにをするかによって、専門分野のを選ばないと。
CGI なのか DBI なのか、それ以外のなにかなのか…
0285デフォルトの名無しさんNGNG
>>283
ごめん、おもいっきり誤読してた。
Email::Address がそれっぽい。
0286デフォルトの名無しさんNGNG
プログラミングPerlとEffective Perl持ってない奴は偽者
0287デフォルトの名無しさんNGNG
>>285さん
できました!ありがとうございます。
<code>
use Mail::Address;
my @addrs = Mail::Address->parse($from);
foreach my $addr (@addrs)
{
print $addr->address,"\n";
print $addr->comment,"\n";
print $addr->name,"\n";
}
</code>
0288デフォルトの名無しさんNGNG
偽者だからなんやねん
0289277NGNG
質問に答えてくださった皆さん、どうもありがとうございます。
とりあえず、

�@初めてのPerl
  ↓
�A続・初めてのPerl (⇔プログラミングPerl⇔クックブック ⇔ EffectivePerl)
  ↓
�BプログラミングPerl ⇔ クックブック ⇔ EffectivePerl

というような順番で読んでいけばいいのでしょうか。
ここまでがDBIとか専門分野に進んでいく『一般教養』と考えていいのですか?
大学の授業に例えるならこんな感じかな、と思ったのですが・・・。
0290デフォルトの名無しさんNGNG
あのさ、
プログラミング言語なんてのは使ってなんぼのもんなので
覚えるためのもんじゃないんで、
どこまで覚えりゃいいなんてものはないし
覚えると誉めてくれる人なんていないわけ。

いいたかないが、かまって君なら板違い。
仮眠前に覗くんじゃなかったわ。
0291デフォルトの名無しさんNGNG
DA----YO----NE--------------!!!!!!!
0292デフォルトの名無しさんNGNG
>>290
もまえもその程度の事でストレス溜めてどうするよ
どうせネタなんだからスルーしる
0293デフォルトの名無しさんNGNG
本なんか無くてもネット上に転がっている情報だけで
十分すぎると思うんだが…
0294デフォルトの名無しさんNGNG
>テキスト編集をするためにPerlを少しかじったのですが、面白くなってもっと知りたいと思いました。
>今まではネットでPerlを紹介しているページで勉強していたのですが、本気で勉強しようと思ったら、
>オライリーの本を買って勉強したほうがいいのでしょうか?
>今ちょうど手元に『初めてのPerl』があるのですが、最初のスカラーデータから読み直したほうがいいですか?

みんな親切だね
0295デフォルトの名無しさんNGNG
とりあえず「初めてのPerl」読め、次の話はそれからだ。

>>293-294
中途半端で間違った知識付けて、下らない質問されるよりは
真っ当な道教えておいた方がいいだろ
0296デフォルトの名無しさんNGNG
真っ当な道って・・・
0297デフォルトの名無しさんNGNG
私が思うに、

初めてのPerl 続・初めてのPerl クックブック

くらいまでが、一般教養。
(ここまでやって、ようやく構造化とか、リファレンスとか、
 オブジェクトの触りくらいまでは、分かるようになる)

DBIやらなにやらの専門分野はそのあと。

プログラミングperl なんかも、ここらあたりになると
持っているべきと思う。
(ここまで来ないと、理解できる本じゃない)

perlのいいところは、すべて知らなくても、
それなりに使えるというとこ。

ただ、きちんと学べば、もっと楽しく使えるよ。
0298デフォルトの名無しさんNGNG
あぁ、全部 >>277 の自演に見えてきた
0299デフォルトの名無しさんNGNG
>>297
そこら辺りまで行くと、ラクダ本じゃなく perldocで十分じゃないか?
0300デフォルトの名無しさんNGNG
>>298
本の宣伝してるんだろうよ。
0301デフォルトの名無しさんNGNG
>>300
こいつ、バカ?
オライリーがこんなとこで宣伝するかよ!
0302デフォルトの名無しさんNGNG
ティムが降臨するスレ
0303名無しさん@ゴーゴーゴーゴー!NGNG
kent読んでおかしい所判るようになりゃいいんでねの?
0304デフォルトの名無しさんNGNG
>>303
kentのサイトは、ちらとしか見たことないが…。

いや、だからね、perlのいいところは、そこそこしか知らんでも、
とりあえずなんとかなるというとこ。

リファレンス使えない奴はダメだ、とかいい始めると、
それはいかにも perl らしくない。

だけど、そういうことを知ってると、それはそれで、
とってもいいこといっぱいあるよ、ということ。

どこまで必要かは、自分で考えりゃいい。
0305デフォルトの名無しさんNGNG
オブジェクトのパッケージ名が標準モジュールのパッケージ名と
かぶらないようにするには、どういう規則で名前を付ければいいでしょうか?
0306デフォルトの名無しさんNGNG
ぐぐってたらperlccっていうのがあるって書いてあって使ってみようと思ったんですが
色々見て回りましたがうまくいきません。
詳しく書いてあるサイトなど、何か情報はありませんか?
0307デフォルトの名無しさんNGNG
gcc使ったことがあるなら普通に分りそうなもんだけど。
0308デフォルトの名無しさんNGNG
電子メールのDate:ヘッダから、年月日、時分秒を取り出す
スマートな正規表現か
便利なモジュール等ありましたら
教えていただけませんでしょうか。

想定しているヘッダの書式は以下のような感じです。

Date: Sun, 02 Nov 2003 06:07:00
Date: Sun, 02 Nov 2003 06:07:00 GMT
Date: Sun, 02 Nov 2003 06:07:00 +0900
Date: Sun, 02 Nov 2003 07:07:00 +0900 (JST)

RFCの規定では、
曜日と秒は省略可、日にちは1桁でも可
だそうです。
秒が省略されたときは、無条件で0でいいと思っています。
0309デフォルトの名無しさんNGNG
Mail::Header
0310デフォルトの名無しさんNGNG
>>308
http://search.cpan.org/
ここをブックマークしとけ。
0311デフォルトの名無しさんNGNG
>>305
CPAN等で公開しないんなら、アンダースコア(_)で始めればいいんじゃね?
0312デフォルトの名無しさんNGNG
>>308
>>309
Mail::Headerだと丸ごと文字列として取り出すだけなんじゃ...
中身を解釈したければ、Mail::Fieldじゃねーの?

use Mail::Field;

$date_string = 'Date: Sun, 02 Nov 2003 07:07:00 +0900 (JST)';

$date_field = Mail::Field->new('date', $date_string);

$t = $date_field->time; # unix time

みたいな感じで。unix timeになったらあとはlocaltimeなり
strftimeなり自由に使えるはず。中身ちらっとみたらdate
文字列の解釈はDate::Parse呼んでるだけだったけどな。


0313305NGNG
>>311
なるほど。それは盲点でした。
ありがとうございます。
0314デフォルトの名無しさんNGNG
>>312さん
ありがとうございます。マジ助かります。
0315デフォルトの名無しさんNGNG
ハッシュってなんでいろんな表記方法があるんですか?

$hash->{'abc'}

$hash{'abc'}

$hash{"abc"}

↑の違いは何かあるんですかねぇ・・・
統一してほしいんですが・・・
0316デフォルトの名無しさんNGNG
haxa?
0317デフォルトの名無しさんNGNG
違いはあるよ
0318デフォルトの名無しさんNGNG
>>317
どういうふうに違うんですか?
0319デフォルトの名無しさんNGNG
>>315
$hash->{...}と$hash{...}が同じだと思ってる段階でアウト。
perlの基本を勉強して出直して来い。

%hash = (a=>1);
$hash = {a=>2};

print "(1) $hash{'a'}\n";
print "(2) $hash->{'a'}\n";
0320デフォルトの名無しさんNGNG
>>318
少なくとも、
$hash->{'abc'}
$hash{'abc'}
では、意味がぜんぜん違う。
前のは、リファレンスをデリファレンスする、
あるいは、メソッドの呼び出し ということになる。
0321デフォルトの名無しさんNGNG
>>319
>>320
違うんだったんですね、同じものかとおもいました。
0322デフォルトの名無しさんNGNG
それにしても腐った文法だな
0323デフォルトの名無しさんNGNG
>>322
人格くさった奴は、rubyスレに帰れや。
松本に、いい性格をオブジェクト指向で生み出してもらうように
してもらえ。
それとも、perlでアタマをハッシュしてやろうか?
0324デフォルトの名無しさんNGNG
>>322
うんとか、すんとか、なんか抜かせよ、ヴォケ。
んじゃ、ruby と クソ をbless してやるな。
メソッド、ケツ拭け!
0325デフォルトの名無しさんNGNG
${hash}{abc}
0326デフォルトの名無しさんNGNG
>>325
だから、そういうときは、 -> 使えって。
そして矢印を、デリファレンス とでも頭の中で読めばいい。
(メソッドの場合もある)

何々 => ○○ は、
何々 の値 ○○ とでも読めばいい。

[ ] が、やや唐突に出てきたら、
無名配列のリファレンスとでも、頭の中で読めばいいんだし、
{ } が、やや唐突に出てきたら、
無名ハッシュのリファレンスとでも、頭の中で読めばいいんだけだ。

ランダル・シュワルツの本とかを読んでも、
向うでもみんなそうしてるように書いてあるぞ。

記号に、意味を表す読みを与えれば、なにも難しくない。
0327デフォルトの名無しさんNGNG
$hash{'abc'}
$hash{"abc"}
この二つを並べている事に関しては
文字列の基本をやり直せと言って置こうか
0328デフォルトの名無しさんNGNG
$hash{'$abc'}
$hash{"$abc"}
だと結果が異なるし
0329デフォルトの名無しさんNGNG
どちらにせよ滅多に使わないので
0330デフォルトの名無しさんNGNG
だいたいでいいなら単純に
print "$1\n" if ($from =~ /パターン1/);
print "$2\n" if ($from =~ /パターン2/);
print "$3\n" if ($from =~ /パターン3/);
でいいんじゃない?
カンペキを求めるなら(不可能らしいけど)次を参照
ttp://www.din.or.jp/~ohzaki/perl.htm#Mail
0331330NGNG
間違えてすごい古いのに回答した..(笑)
恥ずかしいので見なかったことにしてくれよ。
0332デフォルトの名無しさんNGNG
何番へのレスだったのか一瞬考えてしまったじゃないか
0333デフォルトの名無しさんNGNG
ある変数を読み出し専用にしたいのですがtie使わないと無理でしょうか?
my $hoge = 1;
nochange $hoge;
$hoge = 2 → エラー
みたいな感じです。
0334デフォルトの名無しさんNGNG
>>333
Scalar::Readonly

ttp://search.cpan.org/~gozer/Scalar-Readonly-0.01/lib/Scalar/Readonly.pm

説明によるとXSでSvREADONLYフラグなるものをいじるらしいです。

perlだけで書こうとするとtieでSTOREをなんかするぐらいしか
オレも思いつかんな。
0335デフォルトの名無しさんNGNG
*foo = \('string');
とかでいけないっけ?
0336デフォルトの名無しさんNGNG
>>335
globつかうからmyで宣言した変数には使えないと思われ。
0337333NGNG
皆さんありがとうございます。
結局Readonlyという物を利用する事にしました。
Scalar::Readonlyと比較すると
+ pure perl
+ array,hashにも使える
+ 変数に格納したリファレンスの変更も監視出来る
- パフォーマンスが劣る
- readonlyのon、offが出来ない
のような感じです。
中身見てみるとtieしてstoreをごにょごにょしてるだけですた。
0338デフォルトの名無しさんNGNG
非公式な機能ではあるが、5.8.0からはSvREADONLYフラグをいじる関数が追加されているよ。

Internals::SvREADONLY($var, 1); # $varをREADONLYにする。
0339神の愛の証言者 ◆IHSXPiND6Q NGNG
Perl/Tk を Cygwin で動かす問題の続き。

$ perl Makefile.PL
でやるのはあきらめた。

$ perl Makefile.PL x
だとうまく逝きそう。

make の前に
$ ln -s ./pTk/tkUnixDefault.h ./pTk/tkWinDefault.h
$ ln -s ./pTk/tkWinDefault.h tkWinDefault.h
する。
(これをやらないと、一部のcファイルが存在しない tkWinDefault.h を読もうとして氏ぬ)
$ make
最後の最後で tk.dll のリンクが失敗するので
-L/usr/X11/lib -lX11
のオプションを付けて手動でtk.dllをリンクするとうまく逝く。

後は万事よし。
このあたり、Makefile.PLとかで解決できないですか?
0340デフォルトの名無しさんNGNG
名前がキモ杉
0341デフォルトの名無しさんNGNG
結城浩?
0342デフォルトの名無しさんNGNG
☆☆今からペットを虐めます 3匹目☆☆
http://hobby.2ch.net/test/read.cgi/dog/1066313320/854
0343デフォルトの名無しさんNGNG
$hash->{"abc"} = 10
と
$hash{"abc"} = 10

とする場合の、
それぞれのメリットと
デリメットについて教えていただけないでしょうか?
0344デフォルトの名無しさんNGNG
何も無い
何も無い
何も無い
0345デフォルトの名無しさんNGNG
>>343
代入すること自体に両者のメリット、デメリットの差はまずないけど
($hash->{}はデリファレンスのコストがほーーんのちょっとかかるといえばかかるが)
沢山中身を詰めたハッシュをサブルーチンに渡す/返すときなんかはスピードに差が出ます。
ハッシュじゃなくても、普通のスカラーに1MBのテキストファイル入れて
参照渡しにするかコピー渡しにするか試してみると、かなり差が出るよ。
0346デフォルトの名無しさんNGNG
普通、リファレンスは、

配列やハッシュやサブルーチンを入れるもんだと
思うよ。それで、配列の配列や、配列のハッシュ、
ハッシュのハッシュ、ハッシュのサブルーチン
とか作るんだよ。

メリットはいっぱいあって、簡単に書けないほど。

一例をあげれば、トリガーとなるキーワードを
ハッシュのキーとし、値の方にサブルーチンのリファレンスを
入れておけば、ケースによって振る舞いを変えられる。

Aというケースなら、これこれになになにするが、
Bというケースなら、しかじかになになにする。
しかし、Cというケースなら、こうでなくちゃならないし、
でも、Dというケースなら、なにもしちゃいけないし、
というようなとき。

AはサブルーチンAAを、BにはサブルーチンBBを、
CにはサブルーチンCCを…。

いちいちメリットを書いていったら、きりがない。
0347デフォルトの名無しさんNGNG
だっせー
0348デフォルトの名無しさんNGNG
$a{08}="aaa";
Illegal octal digit at - line 1, at end of line

$a{09}="aaa";
Illegal octal digit at - line 1, at end of line

$a{07}="aaa";
普通に通る

$a{10}="aaa";
普通に通る


どうも08と09に限ってエラーが出るんですけど、なんででしょうか?
0349デフォルトの名無しさんNGNG
>>348
釣りか?
0350デフォルトの名無しさんNGNG
>>349
もしかして根本的に間違えてる?
0351デフォルトの名無しさんNGNG
このていどの英語もよめないのか。
0352デフォルトの名無しさんNGNG
>>348
>Illegal octal digit at - line 1, at end of line
英語が読めませんか?
0353デフォルトの名無しさんNGNG
$a{0xg}="aaa";
これはなんでエラーになるんでしょうかね?
perlにおいて0から始まるリテラルは8進数とみなされます。
ラクダ本のリテラルの項目をよく読んでみてください。
0354デフォルトの名無しさんNGNG
すまん、まさかハッシュ名が8進数として認識されてるなんて思わなかった。
0355デフォルトの名無しさんNGNG
>>353
すいません、今調べて判りました。
みなさんホントにごめんなさい。
0356デフォルトの名無しさんNGNG
>>355
あんたに限った話じゃないが、中学生英語程度のメッセージなのに何で読もうとしないんだい?
0357デフォルトの名無しさんNGNG
ていうかperldiag(1)で調べろよ。日本語訳もあるんだしさ。
0358デフォルトの名無しさんNGNG
>>356
英語ってだけで拒否反応おこしてんだろう。
0359デフォルトの名無しさんNGNG
>>358
んなこと言ったら、コンピュータ言語自体に拒否反応でちゃうと思うんだが。

つーか、一般的にこういう人はかなりの割合でいるんだろうか?
それとも、特異な人だけが、掲示板やMLでこの手の質問するんで目立つんだろうか?
前者だとしたら、メッセージを日本語にするいいかげんなパッチでも作ったら
需要あんのかな?とか
0360デフォルトの名無しさんNGNG
>>359
出力メッセージのエンコーディングやらロケールやらで、
混乱する要素がひとつ増えるだけの悪寒。
0361デフォルトの名無しさんNGNG
CGIから正規表現を受け取ってマッチに与えたいのですが、
セキュリティ上何に気をつけたらいいですか?
とりあえず、taintモードで、use re 'eval'は宣言してません。
0362デフォルトの名無しさんNGNG
ありゃ、スレ違いっすか・・スマソ
0363デフォルトの名無しさんNGNG
>Illegal octal digit at - line 1, at end of line
少なくとも中学では習わん
0364デフォルトの名無しさんNGNG
こんなところにもゆとり教育の弊害が!
0365デフォルトの名無しさんNGNG
>>363
文法は中学レベルだろ。
中学で辞書の引き方を習わなかった、とかなら仕方ないが。
0366デフォルトの名無しさんNGNG
エラーメッセージなんて見当違いのことのが多いし
あてにならん情報読むために四苦八苦するなんて面倒だろう。

このメッセージの場合、行末がどうとか書いてあるっぽくてでも行末はちゃんとしてるから
その地点で読むのやめる。

百歩譲って読んでみたとして、octalがわからないし、8進数も知らないから
Illegal digit at - line1, at end of line
となって、違法数字atがline1,行末だといわれても何のことやらわからんのですよ
0367デフォルトの名無しさんNGNG
>>366
こじつけもいいとこ(´д`;)何で前から読まないんだ
0368デフォルトの名無しさんNGNG
まあ八進数知らなきゃわけわからんだろうけど。
エラーメッセージ当てにならないってことはないし、
人に聞くくらいならあるだけの情報は吟味しとかないと。

何度もミスってればそのうちメッセージしっかり読まなくても
その字づらだけでどういうバグか程度は分かるようになるから。
むくれずガンガレ。
0369デフォルトの名無しさんNGNG
質問です。
出力先を画面とファイルと同時に出力させることは出来ますか?
例:
$logfile = './log/log.txt';
$log='レポート結果';
open(LOG,'>> ' . $logfile);
print LOG $log; #ファイルに出力
close(LOG);
print $log; #画面に出力

みたいに二回同じ物をprintせずに一度で済む方法はありますでしょうか?
0370デフォルトの名無しさんNGNG
tee 使え
0371デフォルトの名無しさんNGNG
>>369
IO::Teeかな
ttp://search.cpan.org/~kenshan/IO-Tee-0.64/Tee.pm
0372デフォルトの名無しさんNGNG
BASIC全盛期のガキの頃は、俺も、エラーメッセージってのは意味で理解しなくて、経験で覚えたな…。

|run
|Illegal Function Call in line 40
|OK
|■
|list 40
:
0373デフォルトの名無しさんNGNG
ttp://www.att.or.jp/perl/man/perldiag.1.html より:

Illegal octal digit
(F) 8 進数で 8 か 9 を使いました。

これでもわからん奴はどうしましょうね(笑)

0374デフォルトの名無しさんNGNG
8進数ネタはもういいよ。8進数も理解できない奴は池沼、
それを喜んで叩いてるやつも池沼。くだらんからスルーしろ。
0375デフォルトの名無しさんNGNG
厨房の英語レベルの俺が翻訳します
>Illegal octal digit at - line 1, at end of line
Illegal llegal(合法な)の否定形 非合法な
octal 八角形の
digit 数字
at -line1 1行目で
at end of line 行の最後で

総合的に訳すrと
1行目の最後に不正な八進数があります

か?
0376369NGNG
>>370-371
ありがとうございました。
0377神の愛の証言者 ◆IHSXPiND6Q NGNG
そこでまた古い話をぶり返すんだよな。
0 は 8 進 数  な ん で す か?
0378デフォルトの名無しさんNGNG
>>377
Perlでは0が頭にあれば8進数として認識するんだが?
だからこの問題が起きてる。
ついてきてない奴はだまっとけ
0379デフォルトの名無しさんNGNG
OSを入れて最初にインストールする10のアプリは何?
http://pc5.2ch.net/test/read.cgi/unix/1083993713/58

58 :神の愛の証言者 ◆IHSXPiND6Q [sage] :04/07/07 12:52
less
sshd
vim
最新のカーネル
ncftp
0380デフォルトの名無しさんNGNG
Perl-Tkはどうしたの?結城浩くん。
0381デフォルトの名無しさんNGNG
>>380
いくらなんでも結城浩に失礼だからやめれ
0382デフォルトの名無しさんNGNG
自分のマシンのApacheではちゃんと動くCGIプログラムが
ISWEBのサーバー500エラーを返します
Perlのパスや設定はきちんと合わせたんですが何故でしょうか?
0383デフォルトの名無しさんNGNG
CGIはWebProg板で聞けって事がわかってないから。
0384デフォルトの名無しさんNGNG
ナイス
0385デフォルトの名無しさんNGNG
サブルーチンの返り値として配列とハッシュを返すようにしたいのですが、どのようにすればいいですか?
0386デフォルトの名無しさんNGNG

func(\@array_real, \%hash_real);


sub func{ my ($array,$hash) = @_; $array->[foo] = ... ; $hash->{bar} = ... ; }

とかしてリファレンス使ったら?



0387デフォルトの名無しさんNGNG
そりゃ返り値じゃなくて引数じゃないっすか?
0388デフォルトの名無しさんNGNG
アホすぎ
0389デフォルトの名無しさんNGNG
sub foo {
return \%hash, \@array;
}

じゃ駄目なの?
0390385NGNG
>>386, >>389
うまくいきました。ありがとうございました。
0391デフォルトの名無しさんNGNG
rand関数は、数字しかランダムにできないようエスが、
5つの英文字をランダムに表示することは、できないのでしょうか。
0392デフォルトの名無しさんNGNG
配列でも使うよろし。
0393デフォルトの名無しさんNGNG
質問します
あるファイルの入出力で、レコードフォーマットがよくかわるので
そのたびに、プログラム修正が大変です。他の言語ならば、入出力はマクロ化などをしますが
perlの場合は、全てのレコードを読んで独自の判断をする場合がほとんどなので、マクロ化
がしにくいです。例えば下記のようなロジックが数十箇所にあるとすると、splitで分ける文が
レコードフォーマットが変わるたびに全てへんこうになって大変です。
このようなばあい、どのようにして共通化するのでしょうか?、


foreach $num (0 .. $#STOCK) {
$line = $line2 = $STOCK[$num];
&jcode'convert(\$line,'euc');
($DATE,$ID,$BID,$NAME,$EMAIL,$PREF,$SEX,$AGE,$PASS,$COM,$LNGCOM,$BLD,$JOB,$HEIT,$STR,$ACC_MODE_TMP,$PLZX,$BSID) = split(/<>/,$line);
0394デフォルトの名無しさんNGNG
PERLで書いてあるHTML2LATEXっていう
コードがあるのだけど
これWindows上でもまともに動きますか?

あと図面や文献環境などややこしいのは全部
スキップしてくれても良いので、簡単な
コードありませんか?
0395デフォルトの名無しさんNGNG
>>393
行の書式がちがっても各要素の書式さえ同じなら正規表現ですんなり行くが、そういうわけでもないのか?
0396デフォルトの名無しさんNGNG
>>395

そのとおりです、書式さえあえば動きます
しかし、共通化できれば一箇所の修正でいいのですが、
数十箇所も毎回修正するので大変なんです
0397デフォルトの名無しさんNGNG
いやいや、<>に挟まれた各要素がどのように記述されているか。
たとえば$DATEの部分が
20041218とか12月18日とかが混じってるようならダメだけど、
そうでないなら、($DATE,$ID ...が($ID,$DATE ...みたいな順になっていても
各要素を正規表現で取り出せるんじゃないか?という話。
ちがうならもっと偉い人の降臨待て。
0398デフォルトの名無しさんNGNG
>>393
いや、Perlでも入出力をモジュールにすればいいだろ?
なんで他言語で出来てPerlで出来ないと思うんだろ。

サンプルをみる限り、Perlをまともに知らないだけか……。
foreachで$#とか使ってるし、
いまさらjcode.pl使ってるみたいだし。
0399デフォルトの名無しさんNGNG
>>391

# $randWord =randWord($length[,@cara]);
sub randWord($;@){
my$l =abs(int(shift));
return unless$l;
my@c =( @_ ? @_ : 'a'..'z','A'..'Z',0..9 );
join('', map{ $c[int(rand($#c)+0.5)] }1..$l );
}

print randWord(5), "\n";
0400デフォルトの名無しさんNGNG
>>397

要素が増えたりするので修正がかかるんですー
正規表現で取り出すって意味が、厨房でわかりますえん すまそ

>>398

モジュール化は簡単にできるけど、
どのレコードを読み込むか?(キーの要素が毎回変わる 条件も複数)
このレコードを読み込んだらループを抜ける

上記のように、DBのようにキーが固定されているわけでもなく、
検索条件も a=b && c ne d 等と毎回変わるので 共通モジュール化は
できないと思ってます
0401デフォルトの名無しさんNGNG
じゃあなんで他言語でできるの?
同じことすればいいでしょ。
0402デフォルトの名無しさんNGNG
スカラー変数に展開しないでハッシュ変数に入れればいいんじゃねーの?
そしたらレコードフォーマットが変わってもその後の処理に問題ないっしょ。
0403デフォルトの名無しさんNGNG
中途半端にJAVAはかじりましたが、て感じか。
<>で区切ってあるだけまだましなんだが。
0404デフォルトの名無しさんNGNG
>>402
thx子 やってみます
0405デフォルトの名無しさんNGNG
>>391
my @char = ('a'..'z');
print $char[ rand @char ];

>>393
my @field = qw(DATE ID BID NAME EMAIL);
for my $line (@STOCK) {
  my %field;
  @field{@field} = split /<>/, $line;
  ...
0406393NGNG
>>405

@field{@field} なんてできるんだ!
special thanks ko!
0407デフォルトの名無しさんNGNG
encodingが使いにくすぎる。
readdirも、関数への引数も、コマンドラインの引数すらも、標準入力扱いじゃないから自動変換してくれない

open(IN,"ファイル")じゃ動かなくて、open(IN,encoding("shiftjis","ファイル名"))。
print shift; もだめ。あほか。

jcode.plで正規表現使うときだけ変換して騙し騙し動いてたのが、
encodingにしてからコード中encode,decodeだらけになっちまった
どうすりゃいいんだ
0408デフォルトの名無しさんNGNG
未だに encoding なんか使ってるのお前だけだよ(ガハハ
0409デフォルトの名無しさんNGNG
use encoding "shiftjis";
じゃだめなのか?
0410デフォルトの名無しさんNGNG
>>407
まったくその通りだよな。
5.8 で use encoding の1行を入れればJperl と同様に動く、
なんてウソッパチもいいところだ。
オレ、いまだに昔のJperl が手放せないよ。
0411デフォルトの名無しさんNGNG
>>410
時代に取り残されてますね。
可哀相に・・・
0412デフォルトの名無しさんNGNG
しょぼいな
0413デフォルトの名無しさんNGNG
>>408-411
おまいら、信じてないだろ…つかencoding使ったこと自体ないだろ?
宣伝文句聞きかじった知識だけでバカにしやがって畜生くそ(略

実験.pl
use encoding "shiftjis";
print shift;
open(IN,"実験.pl") or die;

これだけだ
>実験.pl あいうえお
encoding付けたのと外したので、試してみろよ
0414デフォルトの名無しさんNGNG
日本語のファイル名なんて使うなよ……

とか思わなくもないケド、
openのラッパ書けばいいじゃん。>encodeだらけ
なんで書かないの?

0415デフォルトの名無しさんNGNG
>>413
encoding付けたのと外したので、試してみろよ

これで試してみるとさ、
use encoding "shiftjis";
の時は、確かに

Died at 実験.pl line 3.
"\x{0082}" does not map to shiftjis.
"\x{00a0}" does not map to shiftjis.
"\x{0082}" does not map to shiftjis.
"\x{0082}" does not map to shiftjis.
"\x{00a4}" does not map to shiftjis.
"\x{0082}" does not map to shiftjis.
"\x{00a6}" does not map to shiftjis.
"\x{0082}" does not map to shiftjis.
\x{0082}\x{00a0}\x{0082}¢\x{0082}\x{00a4}\x{0082}\x{00a6}\x{0082}¨

となるけど、

use encoding "shiftjis";
の一行を取り去ってやってみると、正常に動作するよ。
これじゃ、ダメなの?
0416デフォルトの名無しさんNGNG
>>415
話が理解できてないなら首突っ込まなければいいのに・・・
0417デフォルトの名無しさんNGNG
>>416
いやいや、その通りなんだが、
やっぱり話がまったく見えない、のも気持ち悪いだろ。

で、いったい何が問題なの?
413 においてさ、要は、引数の あいうえお がプリント文で、
出ればいいんじゃないの?

うちでは、use encoding "shiftjis"; の一行を取り除いたら、
あいうえお 出ましたという話で…。

そういう話じゃないの? 誰か分かるように説明してん。
0418デフォルトの名無しさんNGNG
$a=1
require './config.cgi';

としてて、config.cgi の中で$a を参照するのですが、参照できないみたいです
どうやって値を引き継げばよいでしょうか?
0419デフォルトの名無しさんNGNG
$'a
0420410NGNG
>>413
ほー。そうかい、そうかい。キミのパソコンではUTF-8 で「実験.pl」
という名前のファイルを作れるわけだな。それじゃ、そのUTF-8 の
「実験.pl」の中身を出力してごらんよ。当然、これでできるはずだよな。

use encoding "shiftjis";
print shift;
open(IN,"実験.pl") or die;
while(<IN>){
print;
}
close(IN);
0421デフォルトの名無しさんNGNG
うーん。
とりあえず小飼弾の赤いPerl本でも読んだほうがいいと思うよ。
0422デフォルトの名無しさんNGNG
>>420
あのー、413へのコメントとなってるけど、
もしかして僕へなの? (それとも、自意識過剰???)

僕へだったら、うちのはシフトjisだよ。サクラエディタで確認した。

やってみたけど、
ウチでは、実験.plの中に use encoding "shiftjis";
があると、3行目でこける。
それがないやつは、なにも出力されない。

勘違いしないでほしいけど、僕は別にケンカを売ってるわけじゃないよ。
よく分からないままに言わせてもらえば、君が考えてるより、
perlはもっと早い段階でutfに変換してると思う。
0423422NGNG
ああ、ごめん、422は415、417でもあります。
0424デフォルトの名無しさんNGNG
encoding 周りのインターフェイスが直感的でなく
既にバッドノウハウの湧き処になっている感はあるがな…。
まぁとりあえずコレでもじっくり読め。
http://www.kt.rim.or.jp/~kbk/perl-5.8/
0425413NGNG
>>420
だから動かんっていってるだろ。試してみろっていったのに試さずにしかも間違ってる反論すな

ひょっとして、use open ":encoding(..)"とか,use open ":std"しとけ!!っていいたいのか?
そしたら413のコードも何もかもうまくいくとおもってるのか。あさはかな。
0426デフォルトの名無しさんNGNG
jencodingを使って後ろ向きに解決。
0427デフォルトの名無しさんNGNG
かわいそうに
0428デフォルトの名無しさんNGNG
今時Jperlて。
0429422,NGNG
で、結局、
use encoding "shiftjis";
結論としてどうなるわけ?
誰か、まとめてよ。
僕が思うに、
一部の人が言う use encoding "shiftjis";
の問題は、確かに確認できるけど、
perl5.8がutf-8で内部的に統一して扱っているなら、
実際問題、なにも問題ないと思うんだけど。
perlは、読み込んだ時点もすでにすべてutf-8に変換してる。
それじゃまずいケースって、具体的にどんなとき?
0430デフォルトの名無しさんNGNG
もういいだろがキモイって。
>perl5.8がutf-8で内部的に統一して扱っているなら、
>実際問題、なにも問題ないと思うんだけど。
そう思ってりゃいいよ。
0431デフォルトの名無しさんNGNG
encodingもtclみたいに使いやすくなればいいのに
0432422NGNG
>>430
また、投げやりなんだなぁ。
実際には、perl5.8がutf-8で内部的に統一して扱っていないって、
いうこと???
しかし、簡単に試す限り、utf-8で内部的に統一して扱っていると思えるけどなぁ。
それに、もしutf-8で内部的に統一して扱っていること自体が問題というなら、
ことはperlのみならず、たとえばjavaやら他言語も含めた大問題となる。
あー、わけわか。まあ、どうでもいいという結論で。
0433デフォルトの名無しさんNGNG
>>432
perlは文字列をutf-8と み な す だけで、変換もなんにもしてくれません
そんでencodingとか色々オプションをくっつけて、
いろんな文字コードをutf-8っぽい内部形式に、正しく変換して読み込むように設定してるわけだが。
それが使いにくいって話。穴が山ほどあって、変換前の文字列が入ってくる機会が多いから困ってる。
0434デフォルトの名無しさんNGNG
結局utf8使わないのがいちばん楽なような気がする(笑)

0435デフォルトの名無しさんNGNG
すいません
imagemagickの使い方
日本語で説明してるページとかありませんか
0436名無しさん@ゴーゴーゴーゴー!NGNG
>>433
穴があるというがutf8でスクリプト組めばええ話でねーのか?
eucでスクリプト組むのと同じ感覚で使ってるし、苦労したことないな。
0437デフォルトの名無しさんNGNG
>>436
池沼なエディタつかってるんだよ、たぶん。
0438435NGNG
ありますた。
0439デフォルトの名無しさんNGNG
>>438
一言礼ぐらい言えよ。
0440デフォルトの名無しさんNGNG
だれにですか
0441デフォルトの名無しさんNGNG
↓
0442デフォルトの名無しさんNGNG
俺
0443デフォルトの名無しさんNGNG
>>442
笑いをありがとう
0444デフォルトの名無しさんNGNG
ラクダ本に書かれている内容は、perldocに全て載っているんでしょうか?
ラクダ本は読みすぎてぼろくなってきたので、そろそろ捨てようかなと思ってます。
0445デフォルトの名無しさんNGNG
>>443
一言礼ぐらい言えよ。
0446デフォルトの名無しさんNGNG
>>445
「ありがとう」って言ってんじゃん
0447& ◆QWv3R1XL8M NGNG
Perlの静的解析ツール知りませんか?
0448デフォルトの名無しさんNGNG
>>432
>ことはperlのみならず、たとえばjavaやら他言語も含めた大問題となる。
そのとおりだが。特にjavaやってる人は誰でも文字コードに振り回された経験があるだろう。
0449448NGNG
あ、俺が言ってるのはUnicodeと他の文字コードのマッピングの話ね。
0450デフォルトの名無しさんNGNG
>>447
Perlを厳密に静的解析することはできない。
動的に解析しないと "a << b"という一文さえ、左シフト演算子なのかヒアドキュメントなのかわからないからだ。
0451デフォルトの名無しさんNGNG
>>450
それじゃコンパイルできないじゃん
0452デフォルトの名無しさんNGNG
なんで型付けするのを作者は嫌がってるんだろう?
0453デフォルトの名無しさんNGNG
>>452
なんで型づけせにゃならんのだよ。
そんなもんは、本来機械の側がやるべきことを、
人間にやらせてるだけだろ。
俺の友達は、Cの型を覚えるだけで
一生を終えてしまったぞ。
0454デフォルトの名無しさんNGNG
unit testさえしっかりやってりゃ型なんかいらんかも、という気はする。
0455デフォルトの名無しさんNGNG
よく知らないけど、
アセンブラとかマシン語には型はあるの?
0456デフォルトの名無しさんNGNG
>>455
MASMでは型と言えるかは知らんが、レジスタとかで区別があるものもある。
0457455NGNG
>>456
ほう。とすると別にハードウェア的にはlongとかunsigned charとかを
理解しているわけではなくて、コンパイラが勝手に作ったルールみたいな
ものなわけですか?
0458デフォルトの名無しさんNGNG
なんで型付けされないのをコーダーは嫌がってるんだろう?
0459デフォルトの名無しさんNGNG
>>457
それより君は、型がないと何か困ることでもあるの???
0460457NGNG
>>459
ないよ。私も型いらない派です。
(455 = 457 != 452)
0461460NGNG
それより、ハッシュの要素を自動生成された場合に
アラートかなんか出すオプションが欲しいなと思うことはときどきあるね。
まあ、クラス化すれば勝手に変なもん突っ込むことはないんだろうけれど。
0462デフォルトの名無しさんNGNG
型づけじゃないけど、perlで型づけに近いものと言えば、
-w の警告モードと、use strict っていうことになるのかな。
(みんな、せめて -w は使おう!)
それで十分っていうか、Cの型はやりすぎなんじゃないの?
Pythonなんかでも、インデント変えただけでプログラムが
動かなくなるとか聞くが、それもちょっとなぁ。
0463デフォルトの名無しさんNGNG
なんですかこの変な流れは・・・
0464デフォルトの名無しさんNGNG
読み出すときだけ別の型に変換してくれりゃいい。何でも書き込める必要なんてあるか?
間違えて変なもの入れちゃうほうがずっといや

結局ユーザは型を意識してプログラミングしなきゃいけないのに、
コードのどこにも型が書いてないからかえって管理しにくい
0465デフォルトの名無しさんNGNG
Perlが可読性を損なうくらいまで省略に拘るのは
-eオプションでさくっと処理を多用するおいらみたいなユーザーを
未だ見捨てる気がないからだべさ。
前もあったが、言語仕様を用途を抜きで語るのは不毛。
PHPがタグだらけで不格好だと騒ぐようなもんだ。
オブジェクト指向マンセーならRubyでも使ってれ。
0466デフォルトの名無しさんNGNG
use strictは使ってるけど-w使うといっぱい警告でちまう。
超A型君は更にTaintモードも併用してるんだろうか。
0467デフォルトの名無しさんNGNG
>>466
Taintモードはstrictやwarningsとは全く意味が違う。
Taintモードが有益なのは「環境変数や引数などに信頼できないデータが含まれている可能性があるとき」だよ。

因みに老婆心ながらwarningsモードも慣れれば非常に有益。
個人的には、コーディングスタイルを変えてでも警告ゼロを目指すね。
どうしても譲れない時はno warningsを使うし。
0468デフォルトの名無しさんNGNG
モジュールが使用できるかどうかを内部でテストし、そのモジュールが使用できればそのモジュールで実行。
そのモジュールが使用できない場合は別のモジュールをテストし……というプログラムを作りたいのですが、
それは可能でしょうか?
できるならばどのような方法がありますでしょうか?

やりたい事は、Encode.pm > NKF.pm > Jcode.pm の優先順位で使用できるモジュールで日本語変換をしたいのです。
0469デフォルトの名無しさんNGNG
「使用できるかどうか」っていうのが微妙な表現になってるような
気がするけど、 「Encode.pmがあるかどうか」でいいなら、
@INCの中身を順に調べていけばいいんじゃない。
ファイルがあっても使えないっていうケースがあるのかどうかしらんけど。
0470デフォルトの名無しさんNGNG
evalで調べてるが、もっといい方法あったら俺も知りたい。
0471468NGNG
>>469
あぁ、ごめんなさい。
あるかどうかで充分です。
なるほど、そういう方法がありますね。

>>470
どのようにevalを使用しておりますか?
いろいろ試行錯誤しているのですが、上手くいかないです orz
0472468NGNG
あぁ、すみません何とか形になりました。
eval 'use Encode';した後に$@に何か入っていれば次にeval 'use NKF';とやって、
$@が空であれば、そのモジュールで処理すれば良いのですね。
とりあえずこれでやってみます。
ありがとうございました。
0473デフォルトの名無しさんNGNG
use Attributeの
my $date : INTEGER(1..31) の範囲制限できるところとかは便利そうだと思う。
使ったことないけど。
0474デフォルトの名無しさんNGNG
(use Encode) or (use NKF) or (use Jcode);
0475デフォルトの名無しさんNGNG
あちゃー、それでよかったんすね。馬鹿だ折れ
ごっつあんです。
0476デフォルトの名無しさんNGNG
"use" not allowed in expression at - line 1, at end of line
syntax error at - line 1, near "(use Encode"
"use" not allowed in expression at - line 1, at end of line
"use" not allowed in expression at - line 1, at end of line
Execution of - aborted due to compilation errors.
0477デフォルトの名無しさんNGNG
useはBEGIN内にあるのと同じ扱いなので、、
eval { use ... } もうまくいかないんだよね。
文字列引数で eval 'use ...'にしないと。
ただしこの場合、実行順序がuseを裸で書いた
場合と異なるので、importされる関数や定数を
呼ぶときにカッコの省略ができなくなったり
結構不便です。(コンパイル時に間に合わなく
なるから)

たとえば

use Fcntl qw(:flock);
print LOCK_EX;

と

eval 'use Fcntl qw(:flock);';
print LOCK_EX;

は結果が違います。LOCK_EX()と書いてやればいいといえばいい
のですが、定数にカッコつけるのはみっともない。

BEGIN {
eval { require Fcntl; };
if ($@) { エラー処理 } else { import Fcntl qw(:flock); }
}

とかするのがいいかも?
0478デフォルトの名無しさんNGNG
考えすぎだな。eval 'use ...'をBEGINのなかでやりゃいいか。

BEGIN {
eval 'use Encode;';
if ($@) {
eval 'use NKF;';
if ($@) {
eval 'use Jcode;';
if ($@) { die }
}
}
}
0479デフォルトの名無しさんNGNG
自分自身のファイル名を取得するにはどうしたらいいですか?
あと、文字列の中から特定の文字数だけ取得するのは
どうすればいいですか?(substringみたいな関数)
0480デフォルトの名無しさんNGNG
>>479
> 自分自身のファイル名を取得するにはどうしたらいいですか?
http://perldoc.com/perl5.8.4/pod/perlvar.html#$PROGRAM_NAME

> 文字列の中から特定の文字数だけ取得
http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlfaq4.html#How_can_I_access_change_the_firs
0481デフォルトの名無しさんNGNG
>>479
> 自分自身のファイル名を…
>>480の通りなのだが、$0だとパスまで引いてしまう。
パスを除いた形で取得したいのであれば`basename $0`を使うと幸せになれるかも知れない。
勿論、basenameが使えればの話だが。

0482デフォルトの名無しさんNGNG
>>480-481
ありがとうございます。
0483デフォルトの名無しさんNGNG
basenameが使えなければ
(File::Spec->splitpath($0))[2]
とか
0484デフォルトの名無しさんNGNG
utf8フラグがついてないASCIIの範囲外の文字列が、
utf8フラグが付いている文字と連結するときに、
勝手にLatin1と解釈されてutf8な文字列にされちゃうわけですが、
これをLatin1じゃなくする方法ってないんでしょーかね。

utf8フラグがついてない0x80-0xffな文字列を見つけたときの処理方法を
ユーザーが指定できればちょっとウマーな気がするんだけど。
0485デフォルトの名無しさんNGNG
File::Basename使えよ
0486483NGNG
>>485
・・・素で存在に気づかなかった。
自分でももっと簡潔にならないかなーなんて思いながら書いてたorz
漏れの目は節穴です。ありがとう
use File::Basename;
print basename($0);
簡潔ー
0487デフォルトの名無しさんNGNG
ある文字列の中から、適合する文字列をDBから抽出したいです。
分かりやすく書きますと

検索文字列:XXXAAAXBBBXXXXCCCXX

これを検索させて、適合する文字列である
AAA
BBB
CCC

を抽出したいのですが、こんな事って出来ますか?
文字列は、文節がどこで区切られるか分かりませんので、全体を一文として検索を行いたいのです。
0488デフォルトの名無しさんNGNG
>>487
「適合する」がよくわからんのだけど、
辞書みたいなものがあって、ある文字列の中でその辞書に含まれる単語を抽出したい、
ということ?
0489デフォルトの名無しさんNGNG
>>487
あったかどうかのチェックなのか?
検索文字列:XXXAAAXBBBXXXXCCCXAAAX
の時に
AAA
BBB
CCC
AAA
でいいのか?

全体を一文としていいのなら
@LINES = ($tmp =~ /(AAA|BBB|CCC)/g);
とか
0490デフォルトの名無しさんNGNG
検索する文字が配列@DICに入っているのなら、
@LINES = map{ $tmp =~ /$_/g } @DIC;
っていう書き方もあるぽ。
0491デフォルトの名無しさんNGNG
フォームを作って100バイトでデータを入力して送信しても
$ENV{'CONTENT_LENGTH'}が100バイト以上になるんですけどどうしてですか?
この入力したフォームのデータの正確なバイト数を調べるにはどうしたらいいんですか?
0492487NGNG
>>488-490
返事が遅くなりました、すみません。
レスありがとうございました。
>>488氏の仰るとおり、つまりは辞書のようなものです。

DBには1000件ほどあります。
これを>>490のように配列@DICに流し込んで、検索文字列$LINESを置換するというのは
あまり効率的ではないかなと思い、質問させていただいています。
0493デフォルトの名無しさんNGNG
>>491
フォームってCGI?
CGIに関しては板違い
フォームで送って送られるのではデータだけじゃない。

>>492
$LINESを置換しているわけではなく、検索にHITした物が@LINESに格納されるわけだが。
そもそも配列@DICに流し込んで…じゃなく、
前提条件として「検索する文字が配列@DICに入っているのなら」としたわけだ。
で、>>489がスルーされているのだが、複数HITする物があった場合はどうするのだ?
HITした数だけ結果として必要なのか、それともHITするものが一つでもあるかどうかだけのチェックでいいのか?

049454NGNG
一挙に配列に読み込むのは効率がよいのだが、悪いと
言ってるとこみるとメモリを気にしてるのか?
1000行で各行何バイトくらい?
仮に100バイトだとすると、たった10万バイト。
それを読み込めないメモリなら増設汁。
もちろん一行ずつ読み込んで処理する、もある。
0495デフォルトの名無しさんNGNG
偶然にも今日逆引きなんとかというのでbasenameというのを知ったんだけど
それまでは
($path, $script) = $0 =~ /^(.*(?:\/|\\))?(.*)$/;
ってやってました。
上の方法とbasename使うのとで一長一短とかありますか?
0496デフォルトの名無しさんNGNG
読みやすさ
0497デフォルトの名無しさんNGNG
MacやVMSとかにも対応してるとか
拡張子も除去できるとか(指定した場合)
0498デフォルトの名無しさんNGNG
ファイルから1バイトずつデータを読み込んで
0x13でEXORをとって書き出すプログラムを書きたいのですが
Perlではどうしたらいいのでしょうか?
↓こんな感じでうまくいかない
for($i = 0; $i < 10; $i++){
     sysread(DATA, $data, 1);
     push @string, $data;
}
for($i = 0; $i < 10; $i++){
     $ch = $string[$i] ^ 0x13;
     print $ch;
}
__DATA__
abcdefghijklmn
0499デフォルトの名無しさんNGNG
配列に入れるんならunpack("A*",$_)とかしたほうがよくね?
0500デフォルトの名無しさんNGNG
>>498
print map chr(ord ^ 0x13), unpack 'A' x length, $_ while read DATA, $_, 1024;
0501498NGNG
>>499,>>500さん ありがとうございます。
Perlに不慣れなもので助かりました。
map, chr/ord, pack/unpackを勉強できました。
0502デフォルトの名無しさんNGNG
use encoding "shift-jis";
@filenames = glob ("./あ*.*");
print "@filenames";

ファイル名が日本語のものを、globで拾いたいんですが、上のスクリプト
だと拾ってくれません(@filenamesが空になります)。
use encodingを削ると拾ってくれるんですが、use encodingは別の用で
いるもので。
お知恵をお貸し頂きたく。
0503デフォルトの名無しさんNGNG
>>502
>>407-
0504デフォルトの名無しさんNGNG
perlのunicodeまわりってつくづく半端だな...
0505デフォルトの名無しさんNGNG
CPANからEncordをインストールしていたら以下のエラーが出て止まります。
OSはVine3です。

PERL_DL_NONLAZY=1 /usr/bin/perl "-MExtUtils::Command::MM" "-e" "test_harness(0, 'blib/lib', 'blib/arch')" t/*.t
t/Aliases........ok
t/jperl..........Unrecognized character \xCD at t/jperl.t line 89.
# Looks like your test died before it could output anything.
t/jperl..........dubious
Test returned status 22 (wstat 5632, 0x1600)
ちなみに以下はjperl.tの89行目付近です。

{
use encoding "euc-jp", Filter=>1;
ok(1, "Filter on");
use utf8;
no strict 'vars'; # fools
# doesn't work w/ "my" as of this writing.
# because of buggy strict.pm and utf8.pm
our $人 = 2; #89行目


エラーを解消する方法を伝授してください。
0506デフォルトの名無しさんNGNG
Encordってなんですか
0507デフォルトの名無しさんNGNG
>>504
それもそうだが、
欧米人にこの現状を理解してもらおうと思ったら、
なぜにeucとsift-Jisがあって、しかも
どうしてとっととutfに移れないのかを説明せねばならず、
説明してる間に、
結局、問題の多くがむしろこちら側にこそあるのだと、
気づかされるオチになるのではないかと、小一時間…。
少なくとも、sift-Jisは余計であったよなぁ。
0508デフォルトの名無しさんNGNG
オレは変換表さえ統一されたら移ってもいいと思っている。
永遠にその日は来ないだろうが。

0509デフォルトの名無しさんNGNG
>>505
解決方法は判らないが、エラーの出ている\xCDは半角カナのヘ
その89行目を見ると人っていう字があるが、それはEUCかな?
EUCの人という字は\xBF\xCDなので、その人という字が原因かと思われ。
0510デフォルトの名無しさんNGNG
でも直前で

use encoding "euc-jp", Filter=>1;

してるんだから、EUCからUnicodeに変換されてるはず
だよな。それがうまくいってないのはなんでだ?

0511505NGNG
>>506
Encodeでした。ごめんなさい。orz

>>509
指摘されたとおりだと思いましたので、何でも良いかな?と思いjperl.tに3回記述されていた「人」を「年」と書き直したところすんなりとインストールできました。何か不具合があるかもしれませんが、そのときに考えようと思います。
ありがとうございました。
0512デフォルトの名無しさんNGNG
とりあえず
http://www.debian.or.jp/~kubota/mojibake/
を外人には読んでもらえ。
0513デフォルトの名無しさんNGNG
>>507
Perl の開発体制を良く知らないのですが、Encode の外人の開発者さんたちは、
そういう問題を理解しようとも思わないひとたちばかりなのでしょうか?
0514デフォルトの名無しさんNGNG
つーか、私が思うに、なんとか頑張って、こっちが
utf-8 に移行するのが先だと思うんだよな。
問題は、もしろ日本側の方にこそあると思う。
ユニコードに移行する道筋できてるのか?
ていうか、出来てないよね???
perlコードはutf-8に変換しておく、というルールはダメなのか?
ちなみに、うちのサクラエディタは、ユニコードはバッチリだが、
ファイル名がshift-jisじゃないと、開けないらしい。ハァー。
0515デフォルトの名無しさんNGNG
% perl -we 'use strict; my $s = "foo"; print "$1\n" if ($s =~ /foo(o)?/);'
Use of uninitialized value in concatenation (.) or string at -e line 1.

この warning ってあまり有用なものではないように思うのですが、
これを抑制するのに良い方法が何かあれば教えて下さい。
0516デフォルトの名無しさんNGNG
>>515
no warnings qw(void);
0517デフォルトの名無しさんNGNG
>>515
perl -we 'use strict; my $s = "foo"; my$x = undef;print "$1\n" if ($s =~ /foo(o)?/ and $x = $1);'
0518デフォルトの名無しさんNGNG
>>515
$1に対応するカッコが使われなかったのに文字列の中で参照しようと
してるのを警告してくれてるんだから十分意味があるだろ。

516の言うようにno warning使ってもいいが、わざわざ-wつけるほど
慎重にプログラミングする主義なら、書き方を工夫して出ないように
するのが本筋だと思われ。一番簡単な書き換えは多分(o)?を(o?)に
することだろうが、お前の意図としてそれでいいかどうかはオレには
わからん。


0519デフォルトの名無しさんNGNG
>>518
なるほど、そうですね。
例えば >>517 さんのように $1 をキチンと検査してから使うべきですね。
0520デフォルトの名無しさんNGNG
>>514
うん、Unicodeに合わせて日本語変えなきゃね。
0521デフォルトの名無しさんNGNG
Perlで構造体のリストを扱いたい場合ってどうするのですか?

C++でいうところの、

struct Hage{
int a;
int b;
}

std::vector<Hage>

みたいなかんじのことをやりたいのですが・・・
0522デフォルトの名無しさんNGNG
my $hage_obj = { a => 1, b => 2 };
push (@hage_list, $hage_obj);
0523デフォルトの名無しさんNGNG
>>522
さんくす。
0524デフォルトの名無しさんNGNG
>>513
encoding作ってるのは日本人だよ。
つーか、あんたらどういう実装なら文句言わんのか、
一度整理してみなよ。
0525デフォルトの名無しさんNGNG
>>524
つまり、日本語の文字コードの変換なしにすべて正常に動作すること。
それには、日本語がすべてデフォルトでutfに乗っている必要がある
ということ。
だから、そのためには、すべてのosが次期バージョンから
eucとs-Jisのサポートを即刻やめ、
utf以外は文字化けするようにしてもらいたいと、
どこかの力のある団体が期限を限って勧告する。以上。
つーか、書いてて自分で笑ったが…。
しかし、でないと100年経っても変わりそうもない。
0526デフォルトの名無しさんNGNG
Perlを「パール」と読むのは分かるんですが、真珠の「パール」と同じアクセントでいいんでしょうか?
真珠の「パール」だと「パ」にアクセントがある感じですが、「Perl」の場合はアクセントをおかずに
平板に読む人もいるような気がします…。(身の回りの若干名ですが)どっちが正しい or 多数派
なのでしょう?
0527デフォルトの名無しさんNGNG
>>526
平板に読むのは職業病
0528デフォルトの名無しさんNGNG
専門家アクセントってやつだね。
0529デフォルトの名無しさんNGNG
>>525
その力のある団体というのが存在しないのが問題だよね。
M$がつぶれでもしない限りもう統一は無理だと思うし(笑)。

変換表が複数ある問題あたりさえ解決すれば日本語だけ
ならunicodeにのせてもそう困らなくはなっていると
思う。変換表問題についても、従来全角英字と半角英字
が混在しても検索で適当に同一視する機能なんかが整備
されてなんとかなってたように、たとえば「〜」のU+FF5E
とU+301Cが適当に同一視されるような環境が整備されて
そのうちなんとかなるのかな。Jcodeのような定番モジュール
の登場を期待したい。


0530デフォルトの名無しさんNGNG
バールと同じアクセントってこと?
専門家はRubyやcurlも?まさかCも?
0531デフォルトの名無しさんNGNG
通じればいいとか思いません?
0532526NGNG
平板なアクセントというのは、まさに 「バール」と同じアクセントです!
専門家向けには「バール」で、一般の人向けには真珠の方でしょうかね?

通じれば最低限の目的は果たせるんですけど、日本人なので(?)、
みんなはどう発音しているのか気になって・・・。
0533デフォルトの名無しさんNGNG
よろしければ、皆様のお力添えを期待します。

↓スレの129です。
Perlでリクに答えるスクリプトを作るスレ
http://pc5.2ch.net/test/read.cgi/tech/1086143976/l50

マルチまがいで、すいません。
0534513NGNG
>>524
クレジット見る限り、全部が全部 Kogai さんが書いてるわけじゃないですよね?
>>507 で「欧米人にこの現状を理解してもらおうと思ったら」とあったので、
Kogai さん以外はそんなに理解の無いひとたちばかりなのかと思いました。

Encode 自体の実装については、
現在のように Perl 外の制約条件がこれだけ酷い状況下においては、
まあまあの線を行ってるんじゃないかと思ってはいます。
文句が言いたいのは Perl じゃなくて別にあるわけですが、スレ違いなのでやめます。
0535デフォルトの名無しさんNGNG
>>533
そのスクリプト計算結果間違ってない・・・?
とりあえず書いたやつのテストで結果つき合わせてみてるんだけど、
5,3,5,1とか与えた場合明らかにおかしいような・・・
atan2の引数のx,y間違えてないかな

それと、時計回り、反時計回りというのがよくわからない。
紙の上で考えた限りでは、半径の正負をひっくり返した場合と
等価に見えるんだけどそれであってる?
0536デフォルトの名無しさんNGNG
もうひとつ、「時計回り」を定義するには上下が必要なわけだけれど、
y軸は上下どっちをプラスにしたいのかな
数学的なグラフなら上がプラスだし、
画面座標的なものなら下がプラスにもなる。
0537デフォルトの名無しさんNGNG
>>532
原語の話だと、Pearlと同じ発音だとラリー・ウォールがどっかに書いてたんだが、
見つけられない...

日本語だと規定はないんだろうけど、おれは真珠のパールと同じく、「パ」に
アクセント付けてるね。「バール」と同じなんて気持ち悪い。

RubyもCurlも頭にアクセント付けてるなあ。
0538533NGNG
>>535
まずは、レスと試して下さった事に感謝します。ありがと。
欲を云いますと、あちらのスレでレスして頂けたらさらに嬉しかったです。
マルチ決定>私。ぐすん。もちろん、一言書き加えなかった私が悪いです。
あちらには、謝っておきました。

> そのスクリプト計算結果間違ってない・・・?
あまり自信はありませんが、一応実用化してますので極端に
間違ってはいないと思います。ポイントは最初の点からみた
距離で、絶対座標ではないとこです。

> それと、時計回り、反時計回りというのがよくわからない。
x軸は右を、y軸は上をプラスと考えています。数学的なグラフです。

> 紙の上で考えた限りでは、半径の正負をひっくり返した場合と
> 等価に見えるんだけどそれであってる?
はい。
ある二点を結ぶ円弧は半円で無い限り、4種類存在します。
例えば、x軸上に2点をおき半円でない円弧で結ぶ時、
中心がx軸上の上に来るものと、下に来るものです。
またそれぞれに半円以下の円弧と半円を越える円弧があります。
4種の円弧を決定するため、半径の正負と廻り方を使ってますが、
このスクリプトで決定される中心点は2点(または存在しない)のうちの
どちらかだけです。サブルーチンして受け取る引数としては冗長ですが
他との関連上、そう致しました。
0539デフォルトの名無しさんNGNG
>>537
「バール」と真珠の「パール」は同じアクセント。
0540535NGNG
>>538
すみません、配慮が欠けておりました。

はじめの5,3,5,1は机上で下向きの座標系とつき合わせてた・・・
これはあってましたね。
が、5,-6,5,-1の場合、x0.101230, y4.998975の値が正しいような。
x4.899, y-1.001となって、これは遠方の値では・・・

仕様に関しては了解です。
0541533NGNG
>>540
> すみません、配慮が欠けておりました。
とんでも、私こそ。

> 5,-6,5,-1の場合、x0.101230, y4.998975の値が正しいような。
> x4.899, y-1.001となって、これは遠方の値では・・・
おっしゃる通りです。orz
x0.101, y-4.999(yは負)が、得たいデータでした。
洗練化どころか、バグバグじゃないですか…私。
0542デフォルトの名無しさんNGNG
>>539
そっちは日本語での発音の話だよ? バールのほうは平坦に発音しないか?
0543デフォルトの名無しさんNGNG
もう発音の話はいいよ....
0544535NGNG
>>541
計算ロジックから作り直したので別のバグが出てるかもですが

sub quest_arc_center($$$$) {
my($iX,$iY,$r,$ccw) =@_;

my $yrev = ($r * $ccw > 0) ? 1 : -1;
$r = abs($r);
die '半径0' unless( $r+0 );

my $length = sqrt($iX**2 + $iY**2);
die '半径が小さい' if( $r * 2 < $length );

my $rad = atan2($iX, $yrev * $iY) - acos2($r, $length / 2);
return map {sprintf("%.3f", $_)} ($r * sin($rad), $yrev * $r * cos($rad));
}

sub acos2($$) {
my ($c, $b) = @_;
atan2(sqrt($c**2 - $b**2), $b)
}

実質処理は27行->5行になりました。
0545533NGNG
>>544
うわぁぁぁぁい、ヽ(⌒▽⌒)/
ありがとう! 神さま、いえサンタさん。

なんて、かっちょ良いコード!
ちゃんと 座標=sinθ,cosθになってる。
中心点の選択、角度計算、角度→座標の実質たったの3行ですよね?
acos2がさらって出てくるところとか、ホレちゃいそうですよ。
じつは、私もはじめはそのように挑戦したのですが、さんざん悩んで
角度の向きが判らなくなって、あえなく自爆。情けないですorz

もう一度、ほんとぉぉぉっっっに、ありがとうございました。
0546デフォルトの名無しさんNGNG
なんか中学生か高校生ぐらいの数学の問題で
perlかどうかはどうでもいい気がするのだが
三角関数使わない別解。

(0,0)と(iX,iY)の間の距離lはsqrt(iX^2+iY^2)

(0,0)と(iX,iY)を結ぶ直線と円の中心との
距離hはsqrt(r^2 - (l/2)^2)

(0,0)と(iX,iY)を結ぶ直線の法線方向の単位
ベクトル(時計周り向き)は(-iY/l, iX/l)

円の中心は(0,0)と(iX,iY)を結ぶ直線の中点
から、(反時計,短)(時計,長)のときは上の
単位ベクトルの方向に、(反時計,長),(時計,短)
のときは逆方向にそれぞれ距離hだけずらした
ところにある。

s=(ccw*r>0)?1:-1とすると求める円の中心の
座標は

x = iX/2 + s*h*(-iY)/l
y = iY/2 + s*h*iX/l

あとはperlに落とすだけ。
0547デフォルトの名無しさんNGNG
sub quest_arc_center($$$$) {
my($iX, $iY, $r, $ccw) = @_;

my $l = sqrt($iX*$iX + $iY*$iY);
my $h = sqrt($r*$r - $l*$l/4.0);

my $s = ($ccw*$r > 0.0)? 1.0: -1.0;

return ($iX/2.0 - $s*$h*$iY/$l, $iY/2.0 + $s*$h*$iX/$l);
}
0548535NGNG
>>545
計算用紙二枚が丸だらけになりますた。

>>546-547
うゎ、そっちの方法も考えたのにどうして思いつかなかったんだろう・・・
無理だと思い込んで、図形的な変換を行って計算しちゃった
その変換のほうが処理速度も速いだろうし・・・
0549533NGNG
うわぁ!サンタさんが、いっぱいだぁ。

>>546,547
ありがとうです。
三角関数を使用しないで中心点を求める所は、私の晒したバグコードと
同じですが、547さんのコードはバッチリ整理されていて比べものになり
ませんね。私の判定式なんて三角関数まで使って、しかもトチ狂ってるし。
詰めて書いてるのに、数値に小数点とゼロを付けて可読性をあげてらっしゃる
ので、とても見やすいです。出来る人は、センスが違うのですねぇ。
$iX*$iXを$iX**2としないのも、なにかこだわりを感じます。(もしかして
処理速度が、向上するのでしょうか?)
ご指導、ありがとうございました。m(_ _)m

>>535
長い時間、お付き合い頂い大変感謝です(TдT) アリガトウ
貴重なお時間を浪費させてしまい、申し訳ありませんでした。m(_ _)m


0550デフォルトの名無しさんNGNG
>>549
なんだか、昔のN88 Basic かなんかみたいな話題だよね。
いいね、こういうの。
perlよ、N88 Basic を目指せ!ってね。
なんというか、実用一点張りというのではなくて、
もっとゲームとかにも気軽に使うという動きがあっても
いいと思うんだけどね。
0551デフォルトの名無しさんNGNG
>>549
そういうお前は顔文字の入力に貴重な時間を浪費してると思わんのか。
まあいい。
0552デフォルトの名無しさんNGNG
おまいさんもわざわざそれだけ言うために…
0553デフォルトの名無しさんNGNG
で、数学出来ない子にクリスマス暇なヤツが付き合う時間は終わったか?

じゃあ、Perlの話題に戻るぞ
でも発音の話題は勘弁な
0554デフォルトの名無しさんNGNG
すみません質問です。
ファイルを上書きでopenするときは、
open FH, ">> test.txt";
とするとできるのですが、
ファイルの後ろにシステム日付時刻を付けたいときは
(test-yyyymmddhhmm.txt)
どのようにすればよいのですか?
どなたかヒントだけでも教えていただけないでしょうか?
0555デフォルトの名無しさんNGNG
POSIX::strftime

つーか上書きになってないよそれ。
0556デフォルトの名無しさんNGNG
my $now = strftime "%Y%m%d%T", localtime;
open FH, ">> test$now.txt" ;
ではうまくファイルができないのですが、
どういうふうに書けばいいのですか?
0557デフォルトの名無しさんNGNG
>>556
or die $^E でもつけれ。
0558デフォルトの名無しさんNGNG
>>556
できた!!
0559デフォルトの名無しさんNGNG
>>558
できた!じゃないだろ?まず、555さん(仮面ライダー?確変?)に
礼を云って、指摘された追記を上書きに直して、顛末を書きsageだ。ボケッ。
0560デフォルトの名無しさんNGNG
$test = sub { $a = shift; printf("test $a\n"); };
こんな感じのsubのレファレンスの変数$testを
引数付きで実行するにはどうすればいいですか。
0561560NGNG
自己解決しました。
&$test("OK");
でOKでした。
0562デフォルトの名無しさんNGNG
内部でファイルをOPEN,READ,CLOSEしてるモジュールがあるとき、
そのモジュールを使っているスクリプトを
 perl -CDS hoge.pl
のように実行しても、-CDSがモジュール内部のI/Oに適用されず
読み込んだ文字列のutf8フラグが立ちません(ASCII文字以外でも)。
モジュールを書き換えないでその中のI/Oを:utf8にするには
どうしたらよいのでしょうか?
Perlは5.8.4で試しています。
0563デフォルトの名無しさんNGNG
>>560
->()
じゃないのかえ?
定型以外、頭に入っとりませんが、なにか???
0564563NGNG
ダメじゃ、ぼけとる。
つーか、てめえ、560、
とっとと配列かハッシュに入れてから、
デリファレンスの仕方、聞けー、
というより、逝ってきます >わし
0565デフォルトの名無しさんNGNG
あるファイルにテキストで書かれたデータがあるとします
そこから ある文字列を検索してヒットした位置から
ある特定の文字("等)までを 複数行にわたって出力するCGIを作りたいのですが
どうやればいいのでしょうか?
0566デフォルトの名無しさんNGNG
CGIかよ
0567デフォルトの名無しさんNGNG
(´-`).。oO(ヒットしたらprintするだけじゃないのか)
0568565NGNG
誰か書いて
0569デフォルトの名無しさんNGNG
>>568
>>1
0570560NGNG
>>563
$test->("OK");
でもいけました。ありがとうございました。
0571デフォルトの名無しさんNGNG
Perlでテキストファイルの文字列を検索するときは普通どうするんですか?
0572デフォルトの名無しさんNGNG
>>571
それはさすがに質問しすぎ。
0573571NGNG
>>572
すいません
私は
open(IN, "file.txt");
@xx = <IN>;
foreach $yy (@xx) {
 if($yy =~ /hoge/){
  print $yy;
  }
}
close(IN);

とやっているのですが これはかなり負荷が高くなってしまうと思い
皆さんはどうしてるのかと思い質問させていただきました
すいませんがよろしくお願いします
0574デフォルトの名無しさんNGNG
>>573
かまわんよそれで。鯖屋やってるわけじゃないんだろ。
0575デフォルトの名無しさんNGNG
「負荷」って何のことかね
0576571NGNG
>>574
ありがとうございます
できれば 皆さんはどうやってるのか教えていただきたいのですが・・

>>575
マシンパワーを食うということです
すいません
0577デフォルトの名無しさんNGNG
>>576
「マシンパワー」って何の事かね
0578デフォルトの名無しさんNGNG
>>576
状況次第。いいかげんうざいよ。
0579デフォルトの名無しさんNGNG
文字列検索の例なんて調べりゃ出てくるだろうに。
0580デフォルトの名無しさんNGNG
>>572
ただそれだけの処理ならこう
open(IN, "file.txt");
while (<IN>) {
 print $_ if /hoge/;
}
close(IN);

まあ自分が書くなら、ファイル開くにはIO::File使うけど
0581580NGNG
レスアンカ間違えた・・・欝だ
0582デフォルトの名無しさんNGNG
どうせファイルを全部一気に読み込むのなら、スカラーに入れて
一回だけスキャンすればいいじゃん。
0583デフォルトの名無しさんNGNG
>>582
バカでかいテキストファイルだったら嫌じゃね?
0584デフォルトの名無しさんNGNG
>>583
結局状況次第になっちゃうよねえ。

- テキストのサイズ
- 1行あたりの長さ
- 行をまたぐのか否か
- 実行する状況/環境
- マッチ位置を全部見つけるのか否か

などなどで。
0585デフォルトの名無しさんNGNG
>>576
いずれにせよ、スキャンしないで何かを探すのは無理じゃないの?
あらかじめインデックスみたいの作っとくにせよ何にせよ。
0586デフォルトの名無しさんNGNG
jperlの正規表現で、2バイト文字にマッチするメタ文字ってないですかね?
\sとか\dみたいなやつ。
2バイト文字が5文字以上連続しているところを探したいんですけど。
jperlってスレ違いですかね?
0587デフォルトの名無しさんNGNG
>>586
スレ違いじゃないけど過去ログ嫁
過去ログ読んだら空気も嫁
そういう事で頼む
0588デフォルトの名無しさんNGNG
Perlでコンパイラを作ろうかと思っているのですが、
BNFファイルを元に字句解析や構文解析をするモジュールって
ありますでしょうか?
0589デフォルトの名無しさんNGNG
Parse::YappとかParse::RecDescentとかどーよ。
0590デフォルトの名無しさんNGNG
Infoseek鯖なんですけど

require './cgi-lib.pl';

がエラーになってしまいます。(これ以外は問題ない。)
どうすればよいでしょうか?
0591デフォルトの名無しさんNGNG
エラー書けよ
0592デフォルトの名無しさんNGNG
CGIプログラムエラーのため表示することが出来ません。(500 Internal Server Error)
0593デフォルトの名無しさんNGNG
だめだこりゃ
0594デフォルトの名無しさんNGNG
> (これ以外は問題ない。)
これ書く奴って大概他がおかしい。
0595デフォルトの名無しさんNGNG
タスケテー
0596デフォルトの名無しさんNGNG
>>594
でも require './cgi-lib.pl'; をコメントアウトするだけで
CGIプログラムエラーのため表示することが出来ません。(500 Internal Server Error)
はでなくなります。
0597デフォルトの名無しさんNGNG
>>596
>>1読めねーの?
板違いだからどっか行ってね。
0598デフォルトの名無しさんNGNG
foo, bar の次は baz, qux ですか?
hoge, fuga の次は puyo ですか?
0599デフォルトの名無しさんNGNG
>>598
puyoは聞いたことない。
個人的にはgikoとmonaを使っている。
0600デフォルトの名無しさんNGNG
>>599
俺漏れも
0601デフォルトの名無しさんNGNG
個人的には hige と hage をつかっている
0602デフォルトの名無しさんNGNG
puyo は聞いたことない。ふつー piyo では?
0603デフォルトの名無しさんNGNG
foo bar hoge fuga piyo の検索結果 約 29 件中 1 - 10 件目 (0.40 秒)
foo bar hoge fuga puyo の検索結果 約 4 件中 1 - 2 件目 (0.35 秒)

ここPerlスレだよな?
全く関係ないわけじゃねぇけどさ
0604デフォルトの名無しさんNGNG
foo bar の次の baz は一般的じゃないのか?
0605デフォルトの名無しさんNGNG
>>604
ここPerlスレだよな?
全く関係ないわけじゃねぇけどさ
0606デフォルトの名無しさんNGNG
書き込み失礼。
perlでジョイパッドの振動を検知したいんですが、可能ですか?
可能であればヒントください。
0607デフォルトの名無しさんNGNG
bot厨は来ないで下さい
0608デフォルトの名無しさんNGNG
たのもー。
MP3::Infoモジュールで、MP3ファイルのタグ操作をしようとしています。
my $tag = get_mp3tag($file);
でタグ情報を得た後、それぞれの要素の文字コードを変換したいのですが、
$tag->{TITLE}
みたいなハッシュのリファレンスの場合、eachは使えないのですね。
こういう場合どんな風に書けばよいのでしょうか。初心者スマソ
0609デフォルトの名無しさんNGNG

while(my($key,$value) = each(%{\tag})){
#処理#
}
0610デフォルトの名無しさんNGNG
ミスった。

while(my($key,$value) = each(%{$tag})){
#処理#
$tag->{$key} = $value;
}
0611デフォルトの名無しさんNGNG
やや、即答ありがとうございます。できました。
オブジェクトとかクラスとか絡んで来ると、
Perlって全く違った言語みたいになりますね。
やっぱプログラミングPerl買った方がいいか.....。
どうもありがとうです。
0612デフォルトの名無しさんNGNG
root以外の人間が、モジュールをインストールしたいのですが、
どうすればいいでしょうか
0613デフォルトの名無しさんNGNG
>>612
漏れの場合は、自分の権限の及ぶディレクトリにモジュールを設置しといて、
そのディレクトリを環境変数 PERLLIB に設定する。
0614デフォルトの名無しさんNGNG
perl -MCPAN -e shell
のような感じではできないのでしょうか?>>612
依存関係があると、インストールが凄く手間がかかると思うのですが
0615デフォルトの名無しさんNGNG
>614

ttp://homepage3.nifty.com/hippo2000/perltips/CPAN.htm#FAQ
5) rootではありません。どうすれば個人的なディレクトリにインストールすることができますか?

あと、make_arg や makepl_arg なんかに --prefix を設定するのが良いと思う。
(たしかCPANの初回起動の設定時に、非rootはそうしろというメッセージがあった)
0616デフォルトの名無しさんNGNG
配列の100番目から最後までをバッサリと削除するような命令ってありますか?
spliceを使えば良いのでしょうか?
すみません、誰か「こうしたらよい」と言うのがあれば教えてください。
0617デフォルトの名無しさんNGNG
>616
man perlfunc
0618デフォルトの名無しさんNGNG
>>616
splice @array, 99;

>>617
せめてperlfunc -f spliceと言ってやれよ
0619デフォルトの名無しさんNGNG
$#a = 99;
0620デフォルトの名無しさんNGNG
ありがとうございました。>>617-619
0621デフォルトの名無しさんNGNG
質問です。よろしくお願いいたします。
open みたく、第1引数に BARE WORD を書いたらその実体が作られる、みたいな
サブルーチンはどうやって書くのでしょう?
具体的には、下のプログラムで foo::my_open(*X) として呼んでいるところを、
いきなり foo::my_open(X) と呼んでも無問題にしたい。

#!/usr/local/bin/perl -W
use strict;
package foo;
sub my_open(\*) {
my $ref_fh = shift;
open FH, ">hello.txt" or die;
*{$ref_fh} = *FH;
}

package bar;
foo::my_open(*X);
print X "Hello World!\n";
close X;

目的は、open の wrapper を作りたいのですが、引数仕様もオリジナルの open に似せたい、ということです。
0622デフォルトの名無しさんNGNG
>>621
use strict;

package Foo;
sub my_open {
  my($file, $mode, $symbol) = reverse @_;
  my $fh;
  {
    no strict;
    $fh = *{"${[ caller ]}[0]::$symbol"};
  }
  open $fh, $mode, $file or warn($!), return;
  1;
}

package main;

Foo->my_open(BAR => '>', 'bar.txt') or die;
print BAR 'blah, blah, blah...';
close BAR;
0623デフォルトの名無しさんNGNG
>>622 感動した!
質問者(>>621)ですお答えいただきありがとうございます。
やはり use strict 下でユーザー作成なサブルーチンの引数に Bareword 書くのはちょっち無理がありっぽそうですね〜(汗
'=>' を ',' に変えて
<PRE>Foo->my_open(BAR, '>', 'bar.txt')</PRE>
とすると駄目。(use strict をはずすと OK。)
'=>' を使うと何も言われないのは、$hash{'key'} と $hash{key} を等価とするルールが効いてるんでしょうか。
ややこしいよ! > Perl。

それはともかく、caller を使って呼び出し元のパッケージ名を得て、シンボルの完全修飾するところはとても勉強になりました。
ありがとうございます。
0624デフォルトの名無しさんNGNG
>>623
perlsub(1)に似た例があるけど、Symbolモジュールの
qualify_to_refを使うといいそうです。

use strict;

package Foo;
use Symbol 'qualify_to_ref';
sub my_open(*) {
my $fh = qualify_to_ref(shift, caller);

open $fh, "> hello.txt" or die;
}

package Bar;
Foo::my_open(X);
print X "hello World!\n";
close X;
0625デフォルトの名無しさんNGNG
ご回答ありがとうございます。これで解決いたしました。
>>623 で寝ぼけたこと書きましたが、これは >>622 に対する感動のあまり、perlsub に書かれてる
 A "*" allows the subroutine to accept a bareword, ...(ry
という事実を失念してたせいです _| ̄|○|||
Symbol モジュールについては初耳ですた。ソース読んで見ます。
ドキュメントももっと真面目に読んでみます _n。

しかし、>>622 でも片鱗が垣間見れましたが、シンボルをデータとして扱えるあたり、
まるで Lisp さんのようだ。
0626デフォルトの名無しさんNGNG
if文の条件式での質問なんですが
$aは1以上5以下とする場合は

if (1 <= $a <= 5) {
}

で認識されますでしょうか?
確認できる環境にありませんのでご教授ください
0627デフォルトの名無しさんNGNG
だめです
0628デフォルトの名無しさんNGNG
しかし確認できない環境でそんなこと気にしてどうするんだろうか...
0629デフォルトの名無しさんNGNG
MS-DOSとかw
0630デフォルトの名無しさんNGNG
>>629
perldoc perldos
0631デフォルトの名無しさんNGNG
CPU i386 16.78MHz
0632デフォルトの名無しさんNGNG
質問です。タブ区切りのテキストファイル、例えば
abc(tab)xyz
def(tab)123
こんなのが1万行以上続くファイルがあって、
Search('abc')でxyzが返ってくるようなサブルーチンを作ろうとした場合
m/$pattern\t([^\n]*)/
ではあまりに効率が悪いと思うんですが、もっと良い方法ってあるんでしょうか?
0633デフォルトの名無しさんNGNG
>>632
abc(tab)123
abc(tab)456
みたいに重複したらどーすんの?
0634デフォルトの名無しさんNGNG
>>632
DB_Fileとか使った方が楽だよ
0635632NGNG
>>633 このファイルには重複が無いたぐいのデータですので、重複の検討は不要なんです。
>>634 サンクスコです。DB使うと速いんだろうなーとは思っていたんですが、DBについて全く無知
なものでなんとなく遠慮してました。ちょっと勉強してみます。

質問自体は純粋な興味も含んでますのでテキスト形式で速い方法があれば、教えて頂きたいです。
0636デフォルトの名無しさんNGNG
ハッシュだつーことで
foreach(@data){
  $_ =~ /([^\t]+)\t(.+)/;
  $list{$1} = $2;
}
print $list{'abc'};
とか。

只、ループのコストはしらね。
0637デフォルトの名無しさんNGNG
>>635
- hashに読み込んで使う
- suffix arrayを使う
- テキストをソートして二分探索法を使う
0638デフォルトの名無しさんNGNG
>>635
私もDBを使う機会があって勉強したのですが、案外簡単に作れますよ。
一週間でマスターするPerlで、DBの作成方法は載ってたかと。
データベース作成の部分だけ抜き出して使えば、その日のうちに出来ます。
0639デフォルトの名無しさんNGNG
>>635
> >>634 サンクスコです。DB使うと速いんだろうなーとは思っていたんですが、DBについて全く無知
> なものでなんとなく遠慮してました。ちょっと勉強してみます。

DB_File類のDBは、エントリの追加、書き換え、取得などをそつなくこなす
ためにチューニングされているので、必ずしも速いとは限らない。

0640デフォルトの名無しさんNGNG
>>639
とはいえ、ベタテキストの線形探索より遅いってことはねえべ。
0641デフォルトの名無しさんNGNG
>>640
> とはいえ、ベタテキストの線形探索より遅いってことはねえべ。

それは分からん。1万2万程度だったら、まだ線形の方がましかも。

0642632NGNG
皆さん、ご丁寧なレスありがとうございます。
確かに対象データによって速度は色々ですよね。あいまいな質問で申し訳ありませんでした。
元はだいたい1万語程度の和英対訳のデータで、線形検索でも実際即座にレスポンスがありました。
データ数が増えれば、線形検索 < 二分探索法 < ハッシュ≒DBと言ったところでしょうか。
ちょっと勉強してベンチとってみたいと思います。大変参考になりました。
0643デフォルトの名無しさんNGNG
変数の中身を空にするにはどうすれば良いですか?
0644デフォルトの名無しさんNGNG
>643
undef 変数;
0645643NGNG
>>644
ありがとうございます!
0646デフォルトの名無しさんNGNG
>>641
おめぇ自前でバイナリサーチ書いたことねえべ
適当なことゆってると笑われるぞ
0647デフォルトの名無しさんNGNG
>>646
ほっといてやれ。彼には一生理解できまい。
0648デフォルトの名無しさんNGNG
>>646
> おめぇ自前でバイナリサーチ書いたことねえべ
> 適当なことゆってると笑われるぞ

DB_Fileには、わたしが書いたコードも入ってる。
0649デフォルトの名無しさんNGNG
アイタタタ、妄想癖まで入ってるのかよ。こりゃ重傷だな。
0650デフォルトの名無しさんNGNG
>>649
Socket.pmにはわたしが書いたコードが入ってる。
結構日本人も手を入れてるんだよ。
そんなに珍しい話じゃないよ。
0651デフォルトの名無しさんNGNG
やっぱPerlに関する日本語情報源はここが最強だな
0652デフォルトの名無しさんNGNG
ネタスレ
0653デフォルトの名無しさんNGNG
ここにはすごい人たちがいるんですね!!
頼もしいなあ。
0654デフォルトの名無しさんNGNG
>>650
そうじゃなくて、手を入れたからってその中身が全て理解できてんの?
という意味で言ったの。

Jcode.pm にはわたしが書いたコードも入ってるが、中身はさっぱりわかってないしな。
0655デフォルトの名無しさんNGNG
>>641, >>646
素朴な疑問なんですが、n 個のデータの並びがランダムなら、
探索に擁する平均の時間計算量は

 線形探索:O(n) = n / 2

 バイナリサーチ:
  ソーティングに O(n) = n * log(n)
  サーチ単体に  O(n) = log(n)

なのであって、n がどうあろうとも平均的には線形探索が速くありませんでしょうか??
(データの並びがランダムなら、むしろ線形探索より速度有利なのはハッシュぐらいなのでは?)
0656デフォルトの名無しさんNGNG
↑いかんぼけたこと書いた。
ソーティングは最初に一回やればいいんですね・・・_| ̄|○|||
0657デフォルトの名無しさんNGNG
ソーティングに O(n) = n * log(n)
すでにソートされてる所に新しく要素を追加するならそんなにかからないよ。log(n)でいい。
0658デフォルトの名無しさんNGNG
>>655
スクリプト言語の場合、変数へのアクセスやユーザ定義の
サブルーチン類の実行が非常に遅いので、オーダーの件が
影響し始める前に、コードの単純さやビルトインのルーチ
ンのみで済むかどうかがものをいうことが多々あるな。

最近のマシンでの閾値がどれくらいなのかは知らんが。
0659デフォルトの名無しさんNGNG
>> 657
ぼけたこと書いた身なので指摘するのは心苦しいのですが、それは挿入位置をバイナリサーチで見つける手間ですよね。
んで、バイナリサーチがその手間で適用できるということは、データはリンクリストでなくて、配列状に格納されてなきゃならないわけで、
挿入の際、後続要素をずらす手間が別途かかりますがな。(平均で O(n) = n/2)

>> 655 (漏れだよ_| ̄|○|||
最後の () 内は大嘘。前提に誤解がある。

・・・perl から離れてスマソ
0660デフォルトの名無しさんNGNG
このあたりはきちんと窮極を目指そうとすると、
トライとかB木とかパトリシア木とかダブル配列とか
出てきて底なしだから、どこかで妥協するのが現実的な
ソリューションだろう。だいたいそのうちスクリプト言語で
書いている自分に空しさを感じはじめるし。

0661デフォルトの名無しさんNGNG
ややこしい話になってるけど、
ま、とにかく、辞書をソートして良いのなら、
look.plやSearch::Dictを参考にバイナリサーチを書けばそこそこの
スピードのものが簡単に出来るんじゃないか?

DB_Fileは、使用中にデータが変更されるのでなければ
大げさすぎだろ。


0662デフォルトの名無しさんNGNG
>>661
DB_Fileを使ってハッシュに入れてしまえばプログラミングが
楽だってことでしょう。

わたしなら空間効率の良いCDB_Fileを勧めるけどね。

0663デフォルトの名無しさんNGNG
ややこしい話になってるけど
>>632 に書いてあるパタンマッチの方法でも、そんなに遅くないんじゃないの?
0664デフォルトの名無しさんNGNG
つか、各エントリ毎に中身を分割して
あらかじめファイルに保存しておき、
単に検索時に該当するファイルを開いて読むのが
サーチ時間もデータのロード時間も一番短いんでね〜の?

0665デフォルトの名無しさんNGNG
>>664
やけになっちゃダメです!!

ディレクトリ検索はコストゼロじゃないし(線形探索では?)、
1エントリごとに最小ディスクブロック(8KB?)占有するし
でかなり高コストだと思う。
0666デフォルトの名無しさんNGNG
>>663 確かに最速かも。
正規表現のコンパイルおよびマッチングエンジンは
ネイティブコードで書かれてるわけで、スクリプトで書いた探索ルーチンなど問題外な動作速度のはず。(未検証)
特に >>632 程度のパターンならコンパイル時間など一瞬で無視し得るだろうし、
マッチング中にバックトラックが発生する危険もない。

>>664 それ正論ですね!
いや私も >>657 書いて初めて認識しましたが、一たびランダムな順序になってしまった(<これ重要)
n 個のデータの探索は、どんなアルゴリズム使っても結局トータルで O(n) = n になっちゃう。
データの追加の時点で、将来の検索を見越して、ファイルに分けるなりB木にするなりの準備をして、
いかにランダムせずに済ますかが O(n) = n の壁を破る肝かと。

>>665 というわけで、>>664 は別にやけになってないと思うにゅ。
まあ、たしかに n が比較的小さければ、>>665 や >>658 の方が言うような
細かなコストの積み重ねが時間決めちゃうんだろうけど。
0667デフォルトの名無しさんNGNG
>>666
> >>663 確かに最速かも。
> 正規表現のコンパイルおよびマッチングエンジンは
> ネイティブコードで書かれてるわけで、スクリプトで書いた探索ルーチンなど問題外な動作速度のはず。(未検証)
> 特に >>632 程度のパターンならコンパイル時間など一瞬で無視し得るだろうし、
> マッチング中にバックトラックが発生する危険もない。

純粋なマッチングに関して言うと、regexpは相対的に遅いので、
メタ文字を使わないことが可能なマッチングなら、indexでsubstrの
ほうが良い。
0668デフォルトの名無しさんNGNG
>>666
> いや私も >>657 書いて初めて認識しましたが、一たびランダムな順序になってしまった(<これ重要)
> n 個のデータの探索は、どんなアルゴリズム使っても結局トータルで O(n) = n になっちゃう。
> データの追加の時点で、将来の検索を見越して、ファイルに分けるなりB木にするなりの準備をして、
> いかにランダムせずに済ますかが O(n) = n の壁を破る肝かと。

いや、ランダム順のファイルに対し、suffix arrayとか、
バイナリサーチを仕掛ける方法はある。

> >>665 というわけで、>>664 は別にやけになってないと思うにゅ。
> まあ、たしかに n が比較的小さければ、>>665 や >>658 の方が言うような
> 細かなコストの積み重ねが時間決めちゃうんだろうけど。

わかった。やってみんしゃい、やてみんしゃい。
0669デフォルトの名無しさんNGNG
理屈に走りすぎたスマソ_| ̄|○|||
「細かなコスト」という悪い表現つかっちゃったけど、そういうものを軽視はしていないつもり。
>>666 は、n が 10 兆と 100兆 とかの雲の上のケースで、しかも検索初回でのみ成立する空論だということで一つ 人´Д`;)
(2 回目以降ならデータはソート済みのため、たしかに O(n) = n より早くできる。)
0670デフォルトの名無しさんNGNG
>>664
(少なくとも UNIX では) >>665 の言うとおり open(2) はディレクトリを線形探索するので、
ひとつのディレクトリに数万ファイルとかあるとそれなりに重くなる。

ので、ファイルはディレクトリ細かく分けて配置するのが良い。
たとえば ./a/b/c/abc.dat みたいな感じにディレクトリ切るのがおすすめ。
0671デフォルトの名無しさんNGNG
なんでもいいけど、
検索することに走りすぎで、元のファイルの作成・管理を
考えたら、ファイルを分けるとか、ディレクトリを切るとか、
やってられないと思う。
だいたいにおいて、一つの値がいくつかの属性を持ってて、
別の属性で調べろとか言われたら破滅でしょ。
(名前、年齢、住所と並んでて、名前じゃなくて年齢でと言われた場合)
DB_Fileなら、MLDBMと組み合わせれば、それもバッチリらしいよ。
しかし、ここまできて、DBIに誰も触れないのは不思議。
MySQLとかPostgreSQLとかまでいかなくても、
CSV(つまり、カンマ区切りテキストですが)でも、
DVD::CSVを使えば利用できるようなんだけど…。
0672デフォルトの名無しさんNGNG
>>671 DVD::CSV
あうっ、DBD::CSV
0673デフォルトの名無しさんNGNG
>>670
> ので、ファイルはディレクトリ細かく分けて配置するのが良い。
> たとえば ./a/b/c/abc.dat みたいな感じにディレクトリ切るのがおすすめ。

ディレクトリ構造は、ディレクトリごとに異なるシリンダグループに
配置されたりするから、これはディスクアクセスの量を増大させるし、
ディスク上の局所性も悪い。

また、最小ファイルサイズの問題もある。これがまたディスクアクセスの
量を増大させる。もちろん、各ファイルの後方のフラグメントは、他の大
きなサイズのファイルから利用可能だけど、数が多すぎです。

squidやccacheとは粒度が違うでしょ、粒度が。

っていうか、もはやどういう制限があって何がしたいのかと言う話が
めちゃくちゃになってるし。


0674デフォルトの名無しさんNGNG
D・V・D!! D・V・D!!
0675デフォルトの名無しさんNGNG
手を入れたことがある。
排泄器に。
0676デフォルトの名無しさんNGNG
>>671
> 検索することに走りすぎで、元のファイルの作成・管理を
> 考えたら、ファイルを分けるとか、ディレクトリを切るとか、
> やってられないと思う。

そういうツールを書けばよいだけ。

> だいたいにおいて、一つの値がいくつかの属性を持ってて、
> 別の属性で調べろとか言われたら破滅でしょ。

それはまた別の話。

> (名前、年齢、住所と並んでて、名前じゃなくて年齢でと言われた場合)
> DB_Fileなら、MLDBMと組み合わせれば、それもバッチリらしいよ。

MLDBMはそういうことは出来ないと思うが。
だいたい、プレフィックスなどつければ、
ふつうにDB_Fileでもできるし。

> しかし、ここまできて、DBIに誰も触れないのは不思議。

だから、そこまで大げさな話じゃないってことさね。
0677デフォルトの名無しさんNGNG
SQLite、いや、やっぱなんでもないです。
0678デフォルトの名無しさんNGNG
あ、最近ひそひそ話で良く出てきますね、SQLite。
0679デフォルトの名無しさんNGNG
>>676
>MLDBMはそういうことは出来ないと思うが。

MLDBMの具体的使用例は、CGIプログラミング第2版(オライリー)
で見た。P280

これを見ると、ハッシュでキーと値というだけでなく、
ネストされたデータ構造を持てる。

マリーさんの電話番号の、1番目のじゃなく2番目のやつ
を特定して取り出せるというの。
ハッシュの値に、配列のリファレンスが
入ってるということだよね。

MLDBMはそういう機能をもってるらしい。
MLDBMを使わないとなると、SQLまで行かないと出来ないんじゃない?
0680デフォルトの名無しさんNGNG
>>679
> >MLDBMはそういうことは出来ないと思うが。
>
> MLDBMの具体的使用例は、CGIプログラミング第2版(オライリー)
> で見た。P280

MLDBMは最初のリリースから使ってる。

> これを見ると、ハッシュでキーと値というだけでなく、
> ネストされたデータ構造を持てる。

そうだ。

> マリーさんの電話番号の、1番目のじゃなく2番目のやつ
> を特定して取り出せるというの。
> ハッシュの値に、配列のリファレンスが
> 入ってるということだよね。

だからできない。まず、「マリーさん」を検索してデータ構造を取得し、
―ここでマーシャリングされていたデータ構造が展開される(激重)―
その中の2番目を取得するというステップを踏む必要がある。

> (名前、年齢、住所と並んでて、名前じゃなくて年齢でと言われた場合)
> DB_Fileなら、MLDBMと組み合わせれば、それもバッチリらしいよ。
の例なら、まず、すべての名前の一覧を取得して、それで検索し、
ひとつひとつ展開して、合致する年齢を探し出す必要がある。

そこまでやるのなら、すっぴんDB_Fileにプレフィックスをつけたエントリを
直接展開した方が速い。


0681デフォルトの名無しさんNGNG
というか誰かベンチマークとってみたらどうだろう?
>>632の方法と、index-substrと、sort-binsearchのみっつくらいで。
キーの重複はないって条件付きだからそこは悩まなくてもよさ下。
0682デフォルトの名無しさんNGNG
ヒロシです…

O(n) がAAに見えて仕方ありません…


ヒロシです… ヒロシです… ヒロシです…
0683デフォルトの名無しさんNGNG
・・・やっぱこのスレ、すったもんだしてる時が一番盛り上がるのね。
質問者がよってこなくなるぞ、と。

仮眠前にこのスレ見るのはもうやめよう・・・。
けど>>681の結果は知りたいな。
0684デフォルトの名無しさんNGNG
キーと内容ファイル内のオフセットの組書いたインデックスファイルと
内容ファイルを分ければいいじゃない。
0685デフォルトの名無しさんNGNG
常にハッシュをStorableでfreeze,thowするのは駄目ですかね?
0686デフォルトの名無しさんNGNG
>>684
つきつめていくとBerkeley DBの再発明になりそうな予感。
0687デフォルトの名無しさんNGNG
>>685
それは、MLDBMの再発明になると思われ。
0688デフォルトの名無しさんNGNG
>>681
昔1万レコードくらいのテキストファイルを>>632の方法と
BerkeleyDBで比較したら10倍くらい>>632の方法が速かったよ
0689デフォルトの名無しさんNGNG
BerkeleyDBの場合は1万レコードのテキストファイルの内容を
予めDBに入れておいてです。
0690デフォルトの名無しさんNGNG
スピードだけの問題じゃないと思うんだよなぁ。
たとえば、DBIを考えてみれば、
DBD::CSVでカンマ区切りテキストを扱えたり、
サーバを必要としない DBD::SQlite が使えるよ。
汎用性とか、使いまわしの容易さとか、他と違うと思う。
たとえばの話、DBIx::Dumper モジュールを使うと、
EXCELファイルにも即、出来るらしいよ。(クックブック第2版P705)
0691デフォルトの名無しさんNGNG
>>690
こんなシンプルな問題で汎用性を考えたら、
地獄に落ちるのは目に見えている。
0692681NGNG
おいおまいら。ベンチマークとってみましたよ。

下準備↓
== makedata.pl
use strict;
for my $i (1..20000) {
  print "@{[$i*2]}\t", crypt($i, reverse $i), "\n";
}
== console
%perl makedata.pl > data.txt

(長いので続く)
0693681NGNG
== bentch.pl
use strict; use Benchmark;

my ($filedata, @filedata, %filedata);
open IN, "data.txt"; @filedata = <IN>; close IN;
for (@filedata) { # データ読み込み
  $filedata .= $_;
  m|([^\t]*)\t([^\n]*)|;
  $filedata{$1} = $2;
  chomp;
}
timethese (10, { # ベンチ
  bin => q{ for my $i (0..40000) { &bin($i); } },
  match => q{ for my $i (0..40000) { &match($i); } },
  hash => q{ for my $i (0..40000) { &hash($i); } },
} );
sub bin {
  my $key = shift;
  my ($l, $r) = (0, scalar(@filedata));
  while ($l <= $r) {
    my $i = int(($l + $r)/2);
    my ($fkey, $fdata) = split(/\t/, $filedata[$i]);
    return $fdata if ($key == $fkey);
    if ($key < $fkey) { $r = $i-1; }
    else { $l = $i+1; }
  }
  return "";
}
sub match { return ($filedata =~ m|$_[0]\t([^\n]*)|o)[0]; }
sub hash { return $filedata{$_[0]}; }
0694681NGNG
== Console
%perl bentch.pl
Benchmark: timing 10 iterations of bin, hash, match...
bin: 26 wallclock secs (25.77 usr + 0.00 sys = 25.77 CPU) @ 0.39/s (n=10)
hash: 0 wallclock secs ( 0.36 usr + 0.00 sys = 0.36 CPU) @ 27.86/s (n=10)
(warning: too few iterations for a reliable count)
match: 155 wallclock secs (154.81 usr + 0.00 sys = 154.81 CPU) @ 0.06/s (n=10)
0695681NGNG
さすがに線形探索は不利っぽ。オーダーのレベルで違うんでたかが20000件とはいえ差がある模様。

binsearchは結構いい加減なプログラムですまん。splitのコストがどれくらいだろうなぁ。
ただデータがソートされていない場合は別途ソートの必要有りなことに注意。
キーの重複もダメね。今回はキー重複は無視していいみたいだけど。

hashはとりあえずはやい。ただこのベンチマーク結果はハッシュ構築のコストは計ってない。
あと、空間コストが一番多くかかってるのはこれじゃないかな(予想)。
Perlのハッシュ実装がどうなってるかは知らんですが。
あとやっぱしキーの重複はダメね。
0696デフォルトの名無しさんNGNG
>>692
> おいおまいら。ベンチマークとってみましたよ。

とってないじゃん。
0697デフォルトの名無しさんNGNG
>>695
問題が違うんじゃない?

線形を甘く見るなというのは、ぼくも先輩から言われたことがある。
スクリプト言語だとデータ構造の構築にも時間がかかるから、
データの数が少ない時には、さっさと線形サーチでやってしまった方
がいいという話だと思うけど、でもそれって、一度の起動で検索一度の
ケースだよね? みんなその前提で書いているようだけど、そういう条件なの?
0698デフォルトの名無しさんNGNG
だからSQLite使えよ。
0699デフォルトの名無しさんNGNG
話が逸れて曲がって広がってるな。
0700デフォルトの名無しさんNGNG
>>699
逸れてないって。
要するに、大は小を兼ねるでさ、DBIのたとえばSQLiteでもいいさ、
使っておけば、後から予想もしない何事かを要求されても、
平然としてられるでしょ。
0701デフォルトの名無しさんNGNG
で、SQLiteの使い方の簡単な紹介は、
クックブック第2版p725にある。
誰か、もっと詳しい紹介があったら、教えて。
日本語は、utf-8でokでいいよね?
0702デフォルトの名無しさんNGNG
>>700
必要になったら必要になった時にそれを使った
システムを書けばいいだけじゃん。
0703デフォルトの名無しさんNGNG
>>700
要するに、過ぎたるは及ばざるがごとしでさ、(ry
0704デフォルトの名無しさんNGNG
私もベンチしますた!私の恥ずかしい binsearch、見てくださ(ry

>>692 乙ですが、ちょっちバグが有るにゅ。
 $filedata =~ m|$_[0]\t([^\n]*)|o)[0];
だと、例えば $_[0] == "10" で、"10010\tHogerapukya\n" とかにもマッチしちゃうにゅ。
ここはあらかじめ $filedata = "\n$filedata" とした上で、
m|\n$_[0]\t([^\n]*)| によってマッチすべきかと。

あと data.txt 上のキーが2万種類なのに、探索が4万種類について行われてたので直しました。
それと、バグではないけど、数値順でなくて、辞書順の binsearch のほうが >>632 は嬉しいと思う。

けど乙ですだ。全てのキーで 10 回づつ検索するんだから、これで、
各要素に満遍なく、頻繁にアクセスする条件でのベンチになってますよね、ね?>>696, >>697 (オロオロ(´д`;)
0705デフォルトの名無しさんNGNG
さて、index-substr つけましたよ indexsubstr。ダサいけど。

$filedata = "\n$filedata";# 追加!
timethese (10, { # ベンチ
  bin => q{ for my $i (0..0000) { &bin($i); } },
  match => q{ for my $i (0..20000) { &match($i); } },
  hash => q{ for my $i (0..20000) { &hash($i); } },
  index_substr => q{ for my $i (0..20000) { &index_substr($i); } },
} );
(...中略...)
sub index_substr($) {
  my $str = "\n$_[0]\t";
  my $p1 = index($filedata, $str) + length($str);
  my $p2 = index($filedata, "\n", $p1);
  return substr($filedata, $p1, $p2 - $p1);# キーが無かった場合は知ら(ry
}

結果:
Benchmark: timing 10 iterations of bin, hash, index_substr, match...
bin: 28 wallclock secs (27.23 usr + 0.00 sys = 27.23 CPU) @ 0.37/s (n=10)
hash: 0 wallclock secs ( 0.39 usr + 0.00 sys = 0.39 CPU) @ 25.64/s (n=10)
(warning: too few iterations for a reliable count)
index_substr: 289 wallclock secs (286.86 usr + 0.00 sys = 286.86 CPU) @ 0.03/s (n=10)
match: 247 wallclock secs (240.19 usr + 0.02 sys = 240.20 CPU) @ 0.04/s (n=10)
(match は未修正。)
0706デフォルトの名無しさんNGNG
>>705
いや、だからそういう問題じゃないと思うんだけど。
0707デフォルトの名無しさんNGNG
>>704
DB_Fileを使った時と、単純に線形探査したときの比較の話じゃなかったの?

で、ワンショットコマンドでというのも条件?
0708デフォルトの名無しさんNGNG
>>702
個人ならそれでいいけど、これが会社とかでの話になると
新規に作るには時間もかかるし、当然人件費がかかる。
ならば今ある物に手を加えて……と、スパゲッティプログラムへの道を歩むことになる。

実際は新規に作った方が短時間になるケースが多いんだけどね。
未だに誤った選択をしてしまう会社は多いよ。
0709デフォルトの名無しさんNGNG
あのう初歩的な質問なんですが、
サブルーチン foo の中でサブルーチン bar を呼び出したとき、
bar が失敗したらウォーニングを表示して即座に undef を返したいんですが、

 $x = bar() or warn "$!\n", return;

と書くだけで本当に大丈夫なんでしょうか? (この構文において、返される undef は一体誰が作ってるんでしょう?)
0710デフォルトの名無しさんNGNG
>>701
SQLite
http://perldoc.jp/docs/modules/DBD-SQLite-0.19/SQLite.pod
RDBMSを動かすためには、単にこのモジュールをインストールすることだけが必要です。
他には何もありません。
0711デフォルトの名無しさんNGNG
>>709
よく分からんけど、
http://perldoc.jp/docs/perl/5.6.1/perlvar.pod
に下のように書いてある、 $SIG{__WARN__} が使えない?

警告メッセージを表示しようとするときに $SIG{__WARN__} で
示されたルーチンが呼び出されます。
警告メッセージは最初の引数として渡されます。
__WARN__ フックがあると、通常の STDERR への警告の出力は行われません。
これを使って、警告メッセージを変数にいれたり、
あるいは以下のようにして警告を致命的エラーに変えたり出来ます:

local $SIG{__WARN__} = sub { die $_[0] };
0712デフォルトの名無しさんNGNG
print while(<>); を実行して、標準入力にリダイレクトして
読み込んだテキストファイルをそのまま標準出力すると、
行末がcr cr nlになってしまいます。入力ファイルの行末はcr nlです。
どう解決すればよいのでしょうか?

環境はcygwinのPerlです。よろしくお願いします。
0713709NGNG
すいません、かなり舌足らずでした。
やりたいのはウォーニングを出して undef を返したい、というだけでして、しかも実現はできてるんです(汗
気にしてるのは、その書き方でして、
 $x = bar() or warn "hoge\n", return undef;
と、戻り値を明示すれば、確実に上記の動作が行われるのはわかるんですが、最後の undef を取って、
 $x = bar() or warn "hoge\n", return;
のように書く例が見られるし、その真似でいままで書いてきたけど本当に大丈夫なんかいな、
書き直した方がいいのかしら、と気になり始めた、ということなんです(汗)

今まで、warn がいつも undef を返す仕様なのに違いない。それが右端の return にいたる実行パスの last value だから返されるんだ、
と根拠なく思い込んでましたが、よく考えたら間にカンマ演算子が挟まってるし、実際実験したら
 $x = bar() or 1, return;
でも undef が返されたので、すかーり自信喪失してしまい・・・というわけです。
しょうもない質問ですいません(滝汗
0714デフォルトの名無しさんNGNG
舌足らず?
0715デフォルトの名無しさんNGNG
>>713
複雑に考えずにperlfunc(1)のreturnの説明を読めば

EXPR が指定されなかった場合は、リストコンテキストでは空リストを、
スカラコンテキストでは未定義値を返します。そして(もちろん)void
コンテキストでは何も返しません。

と思いっきり書いてあるわけだが。
0716デフォルトの名無しさんNGNG
>>712
入れるとき chomp して、
出すとき \n じゃダメなの?
そういう問題じゃなくて???
0717デフォルトの名無しさんNGNG
近所のコンビニに行くのに自転車で言ったほうが気軽で速いしコストもかからないとしても。
隣町や隣の県に行くときは交通手段を変えないと遅くてやっていられない。

だったら初めからコンビニに行くのもスケーラビリティの高い自動車でいく癖をつけとけば単純明快だよ。
0718712NGNG
>>716
はい、実際そのようにしています。
ただ、そのままchompをしただけだと行末が

cr ln → cr

となり、さらにこれに\nをつけて出力すると

cr → cr cr ln

となってしまいます。
そこで、chompの前に $/ = "\r\n" を入れれば期待通りの動作になるのですが、
そうすると>>712のコードが以下のように若干汚くなることが気になって質問したのです。

$/ = "\r\n";
while (<>){ chomp; print $_,"\n"; }
0719デフォルトの名無しさんNGNG
>>717
> だったら初めからコンビニに行くのもスケーラビリティの高い自動車でいく癖をつけとけば単純明快だよ。

そんな「だったら」は無いだろ(w
0720デフォルトの名無しさんNGNG
>>712
binmodeぶちかますのじゃだめなの?
0721デフォルトの名無しさんNGNG
>>718
lnってlfでは?
CR = \r
LF = \n

>cr → cr cr ln
CR にLF足すのにCR+CR+LFになるっておかしくないか?
cygwinのせいなのか?

他環境でも動作させるように考えるなら、s/\r|\n//; でもしてCRもLFも削った方が良いような気がする。
0722721NGNG
× s/\r|\n//;
○ s/\r|\n//g;
0723デフォルトの名無しさんNGNG
>>721
> CR にLF足すのにCR+CR+LFになるっておかしくないか?
べつにおかしくはないよん。"\n" は、perl 内部では LF("\x0A") だが、
テキストモードのファイルハンドル使って出力するとき CR LF ("\x0D\x0A") に変換される。
実際、>>720 の言うように、binmode STDOUT; print while(<>); だと
リダイレクト結果の行末は "\x0A" のみになる。(Win 環境と CygWin 環境で確認。)

ついでに言うと、入力時のときも、テキストモードであれば "\x0D\x0A" --> "\x0A" 変換が行われる。
(したがって、Win 環境でも、上に書いた『"\n" は、perl 内部では LF("\x0A")』という約束が矛盾無く保たれる。)

さらに余談だけど、このような変換は、(Win 環境での perl に限らず) テキストモードとバイナリモードを区別する環境での
かなり一般的な約束らしい。

(注: 安全性をとってs/\r|\n//g; すること自体には異論はない。)
0724デフォルトの名無しさんNGNG
>>722
環境にもよると思うけど s/\n\z/; s/\r\z/; の方が速い鴨。
0725723NGNG
いやごめん。
WindowsXP + Cygwin 1.4.11-1 + perl v5.8.5
で試したところ、print while(<>); だけでもリダイレクト結果に "\x0A" しか付かなかった _| ̄|○|||
>>712 において、行末に "\x0D\x0A" が付くのは Win 環境の perl (v5.6.1) だけだった。
役に立たなくてすまね >>712
0726723NGNG
>>712 ごめん、暇人なんでちょっと食い下がらせて。
Cygwin 環境自体は UNIX に似せてあるわけだから、テキストデータの改行コードといえば、LF ("\x0A")一文字を指す。
したがって、Cygwin 環境で動くアプリは、>>723 に書いた変換を本来行ってはいけない。
つまり、次の動作が正しい。
(1) 入力データの行末が CR LF なら
(2) それを perl で呼んだ結果の行末も CR LF でなければならず、
(3) それを出力したものの行末も CR LF でなければならない。
(誰も CR を減らしも増やしもしない)

>>716 読むと、(2) は成立してるようだが、(3) が成立していないようだ(出力時に LF --> CR LF 変換が起きている)。
したがって、>>720 が言うように、binmode STDOUT; でその変換を確実に殺してやれば解決はするんだが、
何で変換がおきるのかが謎。
実際、hello.txt の中身が "hello!\x0D\x0A" だとして、
 perl -e "print while(<>);" < hello.txt > hello2.txt
を実行すると、hello2.txt の中身は "hello!\x0D\x0A" であって、>>712 のようなことは起きない。
0727デフォルトの名無しさんNGNG
Cygwinってインスコする時に改行コードをDosかUnixのどっちにするか聞いてくるけど
その選択によってCRLFの扱いが変わったりすることは無いの?
0728デフォルトの名無しさんNGNG
Xという障害が起きたらAという行動
また同じXという障害が起きたらBという行動
このように交互に繰り返してループさせるにはどうすればいいんでしょうか。
全くの初心者なんですが、苦悩しすぎてハゲそうです。
お助けを・。
0729デフォルトの名無しさんNGNG
syslog の行頭の `Jan 8 18:31:55' こういう日付をエポッチに変換したいので
すがどうするのがよいでしょうか?
0730デフォルトの名無しさんNGNG
>>729
use HTTP::Date;
my $a = str2time('Jan 8 18:31:55');
print "$a\n";
0731デフォルトの名無しさんNGNG
>>727
ある。
$ mount
の結果貼れば解決するかも。
0732デフォルトの名無しさんNGNG
>>729
X が起きたのが遇数回か奇数回なのかを状態変数に持たせる。
(下のリストでは $state がそれにあたる。)
同じ入力で、動作を次々変えたいときの常套手段。

my $state = 0;
for (;;) {
 #...

 if (X 発生) {
  if ($state == 0) {
   A;
   $state = 1;
  } elsif ($state == 1) {
   B;
   $state = 0;
  }
 }
 # ...
}
0733デフォルトの名無しさんNGNG
>>730
THX
0734728NGNG
>>732
助かりましたー!!
ありがとうございます。
0735723NGNG
>>731 貼った。(<って漏れが貼ってどうする・・・_| ̄|○|||
$ mount
D:\cygwin\bin on /usr/bin type system (binmode)
D:\cygwin\lib on /usr/lib type system (binmode)
D:\cygwin on / type system (binmode)
c: on /cygdrive/c type user (binmode,noumount)
d: on /cygdrive/d type user (binmode,noumount)
m: on /cygdrive/m type user (binmode,noumount)
q: on /cygdrive/q type user (binmode,noumount)

確かに、漏れの環境は(Unix でインストールしたのか) binmode になっているので、
>>725 や >>726 において >>712 のような摩訶不思議な現象とは無縁だったらしい。
0736727NGNG
>>735 ワロタ

>>731 ちなみにUnixでインスコした俺の結果は
% mount
C:\cygwin\usr\X11R6\lib\X11\fonts on /usr/X11R6/lib/X11/fonts type system (binmode)
C:\cygwin\bin on /usr/bin type system (binmode)
C:\cygwin\lib on /usr/lib type system (binmode)
C:\cygwin on / type system (binmode)
c: on /cygdrive/c type user (binmode,noumount)
d: on /cygdrive/d type user (binmode,noumount)
0737712NGNG
>>723
丁寧な分析ありがとうございました。

ほか、私の質問にレスをしてくれた方々、ありがとうございました。
原因はやはりテキストモードにあったようです。

% mount
C:\cygwin\bin on /usr/bin type user (textmode)
C:\cygwin\lib on /usr/lib type user (textmode)
C:\cygwin on / type user (textmode)
c: on /cygdrive/c type user (textmode,noumount)
d: on /cygdrive/d type user (textmode,noumount)

恥ずかしながら、今までテキストモードとバイナリモードの違いを
意識したことがなかったので、まさかこんなところに原因があるとは
思いもしませんでした。
mountしなおして、バイナリモードに変更したところ、前記の問題は
無事解決いたしました。
ありがとうございました。
0738デフォルトの名無しさんNGNG
>CGIとPerlの区別がつ

枝葉末節の違いをのぞけば、本質的には同じだよね?
0739デフォルトの名無しさんNGNG
>>738
IT用語辞典とかで調べたらすぐに判るだろうに
わざわざ恥晒しに来るなんて物好き。
0740709NGNG
>>715 ありがとうございました。無事解決しました!
やはり、足りないのは舌じゃなくて脳でした! >>714
つまり、脳が、return ・・・ハズカチー 三(ノノ)
0741デフォルトの名無しさんNGNG
>>738
exeファイルとプログラム言語は 本質的には同じだよね?
ぐらいの間違い。
0742デフォルトの名無しさんNGNG
>>741
見方によっては間違いでは無い。上のも同じ。
0743Rubyist!NGNG
ばかばっか
0744デフォルトの名無しさんNGNG
>>742
> 見方によっては間違いでは無い。上のも同じ。

見方によって変わるファクターは「本質的」ではない。
0745デフォルトの名無しさんNGNG
見方によって変わらないものなどあるのかね?
1つ例を挙げてくれよ
0746デフォルトの名無しさんNGNG
Perl の話をすれ。
0747デフォルトの名無しさんNGNG
王様の耳はロバのミ(ry
えと、皆さん知ってて黙ってるんだとは思いますが、言いたくてしょうがないので言わしてください。

>>695 において、binsearch とハッシュについて、「キーの重複はダメ」と書かれてますが、それは謙遜のしすぎです。
低コストな回避策があります。

binsearch については 『区間 [$l, $r) の外には明らかに目的のキーがない』という約束の下で、
[$l, $r) を縮小していくようにループを回してやり、縮小し切ったところで
$l と $r を返す関数仕様にすれば、キーが重複してても無問題(区間 [$l, $r) のデータが全てそのキーに該当する)。
しかもキーが無かった場合も $l == $r によって判別できる。

ハッシュについては、ハッシュ構築時に、$hash{$key} = $value; とするのでなく、
 push @{$hash{$key}}, $value;
としてやれば、foreach (@{$hash{$key}}) { ... } によって、同一キーを持つ全ての要素にアクセスできる。

ついでに、ハッシュを静的に構築したいなら、配列への参照を返す演算子 '[]' を使って、
 my %hash = {
  key1 => [ value1, value2, value3, ... ],
  ...
 }
とすれば可。
0748デフォルトの名無しさんNGNG
>>747
> >>695 において、binsearch とハッシュについて、「キーの重複はダメ」と書かれてますが、それは謙遜のしすぎです。

わざわざキーの重複まで網羅していないだけのちょこっと書いた
ベンチマーク目的のコードに謙遜など持ち出すのはまちがい。
0749デフォルトの名無しさんNGNG
変なのがいるな
0750デフォルトの名無しさんNGNG
スルーしろよ
0751デフォルトの名無しさんNGNG
お前をなw>>750
0752デフォルトの名無しさんNGNG
@INDATA=(2.2,2.3,2.4,2.5,2.6)
$x=2.1;
$xint=0.01;

foreach $data (@INDATA){
while($x<$data){
print "$x\t";
unless($y[$n]){$y[$n]=0;}
print "$y[$n]\n";
$x+=$xint;
$n++;
}
$y[$n] += 1;
}
0753752NGNG
自分では、これを実行すると
2.1 0
2.2 1
2.3 1
2.4 1
2.5 1
2.6 1
と出ると考えているのですが、実際に実行すると
2.1 0
2.2 1
2.3 0
2.4 1
2.5 1
2.6 1
2.7 0
となってしまいます。
自分では間違いが見つけられません……どうか間違いをご指摘下さい。
0754デフォルトの名無しさんNGNG
>>752, >>753
コピペ時点でソース間違ってね?
少なくとも、@INDATA=(2.2,2.3,2.4,2.5,2.6) の後ろの ';' が抜けてて Syntax error だし、
それを直したとしても、$xint = 0.01 のままだと print "$x\t" が 50 回実行されてしまうわけだが。
0755デフォルトの名無しさんNGNG
>>752
こんなときの -d !
つーか、まず何をしたいのか、日本語で一回書け!
それが分からんと、わけわかーっ!!!
0756754NGNG
いや、だいたいの推測だが、>>752 がおかしいと思ってることがわかった。
たぶん、>>752 は、外側の foreach () ループ 1 回につき、内側の while () ループが
10 回回ることを期待してるんだろう。(増分 $xint == 0.01 で、@data の各要素が 0.1 刻みのため。)

しかし残念ながら、0.01 は 2 のべきで表せないので、IEEE の浮動小数点形式使ってる以上、加算するたびに誤差が累積していく。
実際には内側の while () が 11 回(もしくは途中で LSB 切捨てでなく、四捨五入があれば 9 回)回ることがあり、その直後
$y[$n] が undefind なため、unless 文で $y[$n] = 0 になるんだなこれが。
すると、$x が 0.1 の倍数のとき、>>752 の期待に反して 0 が表示されちゃう。

解決策: 0.01 加算をスケーリングして整数の加算に直せ。いじょ。
0757754NGNG
これでどうよ? >>752

@INDATA = (2.2, 2.3, 2.4, 2.5, 2.6);
$x=21;  # 21 == 2.1 * 100 (100 がスケールファクタ)
$xint=1; # 1 == 0.01 * 100 (同上)

foreach $data (@INDATA) {
 while (($x / 100.0) < $data) { # スケールファクタで割る (反対に、$data * 100 でも良い)
  print $x / 100.0, "\t";   # (同上)
  unless ($y[$n]) { $y[$n] = 0; }
  print "$y[$n]\n";
  $x += $xint;  # スケーリングの結果、ここは整数の加算 --> 誤差累積無し
  $n++;
 }
 $y[$n] += 1;
}
0758752NGNG
すいませんでした。行数の関係で色々いじったので……
#! /usr/bin/perl
@INDATA=<STDIN>;
if($ARGV[0] eq graph){
@INDATA=sort(@INDATA);
unless($ARGV[2]){
$xint = 10;
}else{
$xint = $ARGV[2];
}
$n=0;
$x=$INDATA[0]-$xint;
chomp($x);
chomp(@INDATA);

foreach $data (@INDATA){
while($x<$data){
print "$x\t";
unless($y[$n]){$y[$n]=0;}
print "$y[$n] n=$n data=$data\n";
$x+=$xint;
$n++;
0759752NGNG
}
$y[$n] += 1;
if($data==$INDATA[-1] and $data <= $x){
foreach $ytmp (@y){$lastsum+=$ytmp;}
$last = $ARGV[1]-$lastsum;
print "$x\t$y[$n]last\n";
}
}
}elsif($ARGV[0] eq stdev){
#略
}else{
#略
}
オリジナルはこんな感じです。すいません大分違いました。
標準入力で
2.4
2.2
2.5
2.3
2.6
といった感じのファイルを読み込ませて使うつもりです。
プログラム自体の趣旨は、計測結果などを読み込ませてその値の分布を知ろうかと……
計算結果をもとにgnuplotでplotすることで正規分布に近い感じが出せたらと思います。
0760752NGNG
あ、また半角空白でインデントしてしまった……
見にくくてすみません。
0761752NGNG
19行目はprint "$y[$n]";でした。
あと27行目もlastはいらなくてprint "$x\t$y[$n]\n"; です。

読ませたデータを元に
0 0
10 1
20 5
30 8
40 6
50 3
60 0
みたいな結果を出します。
第2引数でx軸の間隔を調整してるつもりです。(デフォが10です)
0762752NGNG
>>755
すいませんでした。
情報の小出しはしないようにと思ってるのに結局やっちゃってますね自分。

>>754
ありがとうございます。ちょっとやってみます。
0763デフォルトの名無しさんNGNG
>>747
>ハッシュについては、ハッシュ構築時に、$hash{$key} = $value; とするのでなく、
 push @{$hash{$key}}, $value;
としてやれば、foreach (@{$hash{$key}}) { ... } によって、同一キーを持つ全ての要素にアクセスできる。

オオボケかますようだけど、それはハッシュなの?
ちょっとだけ、配列かもっていう気がする。
ああいや、気がするだけで、きっと大きな勘違い…
(大日本 perl 初心者連名代表幹事)
0764デフォルトの名無しさんNGNG
ハッシュに配列のリファレンスを入れてるだけだね。
自分もちょっと違和感を感じる。
0765デフォルトの名無しさんNGNG
>>763
>>747 が意図してるのは「配列への参照のハッシュ」だろう。
つまり、push @{$hash{$key}}, $value; というのを分解して書くと、
 push @noname_array, $value;
 $hash{$key} = \@noname_array; # ここがハッシュですよ奥さん

まあ、これとは別に >>774 に対して一つ指摘さしてもらうとすれば、
my %hash = { ... }; と、 my %hash = ( ... ); はびみょーに意味が違うってことだ。
前者は無名ハッシュができて、それへの参照を '{}' が返し、その参照への実体が
%hash にコピーされるので、結果は後者と同じだが、実行効率が悪い。
0766765NGNG
すまん、'{}' と '()' の違いは効率の違いであって
意味の違いかどうかは微妙だな・・・
あと >>774 は >>747、な。
0767763NGNG
みなさん、ご教示、ども。
うーん、ていうことは、
push @{$hash{$key}}, $value;
というのは、まー、つまり、
push @hash_values, $value;
ということで、valuesの配列がハッシュの値に入ってる、ということか。
無名配列コンストラクタ [ ] の方は、頭に入りやすいんですけどね、
こっちは頭に入りにくいな。
(つーか、頭の容量の関係で、無名配列コンストラクタだけでいいです)
達人の道は遠い…
0768765NGNG
ああ、さらにすまん(死
my %hash = { ... }; で実体がコピーされる、というのは間違い。() と {} は明白に意味が違う。
あと、push @{$hash{$key}} = $value; の分解は、
 my $ref_noname_array = (exists $hash{$key}) ? $hash{$key} : [];
 push @{$ref_noname_array}, $value;
と書く方が適切だった。
・・・Perl は奥が深いっすついていけないっす(汗
0769765NGNG
ああ、さらにすまん(死
my %hash = { ... }; で実体がコピーされる、というのは間違い。() と {} は明白に意味が違う。
あと、push @{$hash{$key}} = $value; の分解は、
 my $ref_noname_array = (exists $hash{$key}) ? $hash{$key} : [];
 push @{$ref_noname_array}, $value;
が適切だった。>>765 の書き方だと、push のたびに配列自体が増えちゃうように取れる(汗
・・・Perl は奥が深いっすついていけないっす(滝汗
0770765NGNG
ああ、さらにすまん(死
my %hash = { ... }; で実体がコピーされる、というのは間違い。() と {} は明白に意味が違う。
あと、push @{$hash{$key}} = $value; の分解は、
 my $ref_noname_array = (exists $hash{$key}) ? $hash{$key} : [];
 push @{$ref_noname_array}, $value;
が適切だった。>>765 の書き方だと、push のたびに配列自体が増えちゃうように取れる(汗
・・・Perl は奥が深いっすついていけないっす(滝汗
0771765NGNG
ああ、さらにすまん(死
my %hash = { ... }; で実体がコピーされる、というのは間違い。() と {} は明白に意味が違う。
あと、push @{$hash{$key}} = $value; の分解は、
 my $ref_noname_array = (exists $hash{$key}) ? $hash{$key} : [];
 push @{$ref_noname_array}, $value;
が適切だった。>>765 の書き方だと、push のたびに配列自体が増えちゃうように取れる(汗
・・・Perl は奥が深いっすついていけないっす(滝汗
0772デフォルトの名無しさんNGNG
WindowsXP + ActivePerl5.8.6です。

@pattern = ({"aaa" => 0}, {"bbb" => 1}, {"ccc" => 2}, {"ddd" => 3}, {"eee" => 4});

foreach (0..1) {
foreach (@pattern) {
($key, $value) = each(%{$_});
print($key . "\n");
}
}

以上のようなコードを実行すると

aaa
bbb
ccc
ddd
eee
空行
空行
空行
空行
空行

このような出力結果になるのですが、
なんで2回目のループの出力がすべて空行に
なってしまうのでしょうか?
0773デフォルトの名無しさんNGNG
>>772
お前のプログラムがそのようになっているから。

eachはハッシュ全部読み終わったら次には空リスト
を返すが、%{$_}は全て要素が1つのハッシュだから
2回目のeachでは空リストが返る。



0774デフォルトの名無しさんNGNG
>>773
ありがとうございました。
こんなことでずっと悩んでいました。
もっと精進します。
0775デフォルトの名無しさんNGNG
>>772
>>773 の人が言い尽くしてるんで蛇足かもしれないが、次のように一行追加すると意図どおりなんでないかな?

@pattern = ({"aaa" => 0}, {"bbb" => 1}, {"ccc" => 2}, {"ddd" => 3}, {"eee" => 4});

foreach (0..1) {
foreach (@pattern) {
values %{$_}; # これで、%{$_} が指すハッシュの each の反復履歴がリセットされる。
($key, $value) = each(%{$_});
print($key . "\n");
}
}

暗黙のうちに働いてくれる反復子は便利なのだが、リセット手段を知らないと思わぬバグを呼びかねない。
あと、ハッシュにキーを追加すると each の反復履歴がリセットされるというのはデマらしい。(今しがた実験した。)
0776デフォルトの名無しさんNGNG
>>775
valuesでリセットできるのですね。
勉強になります。

while (($key, $value) = each(%{$_})) {
print($key . "\n");
}

今回はハッシュのキーが複数になる可能性があるので
こんな感じで解決しました。
0777デフォルトの名無しさんNGNG
>>775
>あと、ハッシュにキーを追加すると
>each の反復履歴がリセットされるというのはデマらしい。(今しがた実験した。)

プログラミングperl第3版 p835 によれば、
反復子をリセットするには、ハッシュの要素をすべて読み込むか、
あるいは、keys %hash か values %hash を評価すればよい。
とあるよ。
要素の追加・削除に関しては、順番が保証されないとあるだけで、
反復子のリセット云々は記述がない。
0778デフォルトの名無しさんNGNG
>>777 おめ。
要素の追加・削除に関しては、プログラミングperl第3版 p835 のもうちょっと下を読めば
『each 関数などによって繰り返しを行っている最中に、ハッシュに対して要素を追加したり削除したりした場合、その動作は保障されない』
とあるので、順番が保障されない以前に、each 反復子をあてにしてる状況では、要素の追加・削除はやっちゃいけないっぽい。

>>775 (関連して >>776)
each 反復子のリセットのためだけに values %hash や keys %hash を呼ぶのは時間効率・空間効率の点でどうか、と思わないでもない。
いや、each の実装次第だとは思うので断定はしないけど。(作成されたリストが内部的に保持され、有効活用されるのかも知れないし。)
一つのループ内でハッシュの全要素にアクセスするんなら、each なぞ使わずに
 foreach (keys %hash) { ($key, $value) = ($_, $hash{$key}); ... }
とかでどう?
0779778NGNG
失礼、コード間違えた。正しくは
 foreach (keys %hash) { ($key, $value) = ($_, $hash{$_}); ... }
です。
0780デフォルトの名無しさんNGNG
>>778
>一つのループ内でハッシュの全要素にアクセスするんなら、each なぞ使わずに

たださ、ハッシュの全要素にアクセスするのに、
while (($key, $value) = each(%hash)) {
処理;
}
を使うのは、もはや定型パターンだから。
クックブック第2版p194にも載っている。
なにも深いこと考えず、ぽんと当てはめればいいという利点があるよね。
(何事にもオライリーの権威に頼る会会長)
0781デフォルトの名無しさんNGNG
>>778
keys,valuesをvoidコンテキストで呼べばeachのリセットだけ
やってくれるのでオススメ。perlfunc(1)のkeysのとこにも
明記されている。

As a side effect, calling keys() resets the HASH's internal
iterator, see "each". (In particular, calling keys() in void
context resets the iterator with no other overhead.)

0782778NGNG
>>780 サンクスコ。実は効率の点からも、foreach (keys %hash) より each の方が優れていることが確認できますた _| ̄|○
foreach (keys %hash) ってコスト高いみたいね。
要素 40 万個の %hash で、
a: foreach (keys %hash) とした場合; b: each 使った場合; c: keys %hash でリセット後 each 使った場合
の 3 パターンをベンチしたら、所要時間が、a > b ≒ c ですた。
void コンテキストでの keys %hash は早いみたい。(void コンテキストでなくすと、c の速度は 3 秒増した。)

プログラム:
use Benchmark; use strict;
my %hash; for (my $i = 0; $i < 400000; ++$i) { $hash{"ke${i}y"} = $i; }
print "Start!\n";
timethese 10, { a => \&a, b => \&b, c=>\&c };
my @z; sub foo($) { push @z, $_[0]; }
sub a { @z = (); my ($key, $val); foreach (keys %hash) { ($key, $val) = ($_, $hash{$_}); foo($key); foo($val); } }
sub b { @z = (); my ($key, $val); while (($key, $val) = each(%hash)) { foo($key); foo($val); } }
sub c { @z = (); keys %hash; my ($key, $val); while (($key, $val) = each(%hash)) { foo($key); foo($val); } }

結果:
Benchmark: timing 10 iterations of a, b, c...
     a: 18 wallclock secs (17.66 usr + 0.09 sys = 17.75 CPU) @ 0.56/s (n=10)
     b: 13 wallclock secs (13.09 usr + 0.00 sys = 13.09 CPU) @ 0.76/s (n=10)
     c: 14 wallclock secs (13.84 usr + 0.00 sys = 13.84 CPU) @ 0.72/s (n=10)
0783デフォルトの名無しさんNGNG
>>781
プログラミングperl第3版p872にも似た記述があった。

反復子をリセットしたい場合には、keysを無効コンテキストで
呼べば、これ(ハッシュ全体のスキャン)を回避できる。
0784778NGNG
>>781, >>782 なるほろ。
リセット手段があくまで keys や values の副作用扱いで、しかも void コンテキストがからむというのがマニアック。
ここらへんの話は FAQ になりそうですな・・・
にしても、私のような不注意者が、each で反復中にキー追加したらどうすんだ!ヽ(`Д´)ノ
Perl6 に期待(えー
0785デフォルトの名無しさんNGNG
>>782

(1) a だけさらに簡略化可能な余分な処理が入って
いることになぜ気づかないのか。
(2) 巨大配列生成に要する時間が要素数に対し不連
続要素があるかもしれないし、おそらくあるだ
ろうということになぜ気づかないのか。

0786デフォルトの名無しさんNGNG
>>782
サブルーチンaはもっとシンプルにできるでしょう。

それから、foreach keys 対 each 問題は、eachの反復呼び出しのoverheadと
keysが生成する配列のコストのコンペだったはず。
エントリ数がもっと少ない場合は、また違うんじゃないか?
0787778NGNG
あああああ、>>782 において、所要時間 a > c という結論は撤回します。人´Д`;)スマネ
>>785, >>786 の指摘通り、比較条件の設定がずさんでした_| ̄|○

a のループ内を { $val = $hash{$_}; foo($_); foo($val); } にして、
かつページングやスワッピングがない(もしくは無視し得る)ことをシステム時間が微小であることで確認し、
かつハッシュ要素数 40 x 反復 100000 回のケースも準備して
a, b, c の順序を変えつつ複数回計測実施してみますたら別な結論に(汗


[N=10, ハッシュ要素数 400000]
項番. a_usr  a_sys  b_usr  b_sys  c_usr  c_sys
   (a->b->c 順、3 回捨て)
04.  14.88 0.05 12.89 0.00 19.12 0.00
05.  15.11 0.00 13.02 0.00 17.16 0.00
06.  14.95 0.00 12.84 0.00 16.66 0.03
   (c->b->a 順、3 回捨て)
10.  14.80 0.00 12.91 0.00 16.80 0.02
11.  14.88 0.00 13.05 0.00 17.02 0.03
12.  14.67 0.00 12.80 0.00 16.72 0.08

結果: 所要時間 c > a > b と結論。
a_usr = 14.88±0.05 秒
b_usr = 12.92±0.04 秒
c_usr = 17.25±0.35 秒
a_sys, b_sys, c_sys とも無視し得る。(最大 0.08 秒)
0788778NGNG
[N=100000, ハッシュ要素数 40]
項番. a_usr  a_sys  b_usr  b_sys  c_usr  c_sys
(a->b->c 順、3 回捨て)
16.  11.720.00 10.83 0.00 13.08 0.00
17.  11.80 0.00 11.08 0.00 13.61 0.00
18.  11.80 0.00 10.80 0.00 13.19 0.00
(c->b->a 順、3 回捨て)
22.  11.99 0.00 11.16 0.00 13.64 0.00
23.  12.00 0.00 11.52 0.00 13.67 0.00
24.  11.69 0.00 11.33 0.00 13.70 0.00

結果: 所要時間 c > a > b と結論。
a_usr = 11.83±0.05 秒
b_usr = 11.12±0.10 秒
c_usr = 13.48±0.10 秒
a_sys, b_sys, c_sys とも無視し得る。(最大時間 計測上 0.00 秒)

してみると、void コンテキストで key %hash; が速い説に疑問符がつくね・・・?
検定必要?
0789デフォルトの名無しさんNGNG
暗黒のバッドノウハウが渦巻いているスレはここですか?
0790778NGNG
やっちまった・・・_| ̄|○||| >>787 再度撤回。
>>787, >>788 の c は、ループ前にリストコンテキストで key %hash をやったケースでした。(いわば d。)
まとめると、結果は次の通りでした。やっぱ c の方法(void コンテキストで keys %hash 後、each(%hash))がおすすめ。
Rubyst にもあげようか。いいノウハウだから。>>789

[N=10, ハッシュ 400000 要素]
a_usr = 14.88±0.05 秒
b_usr = 12.92±0.04 秒
c_usr = 12.97±0.08 秒
d_usr = 17.25±0.35 秒

[N=100000, ハッシュ 40 要素]
a_usr = 11.83±0.05 秒
b_usr = 11.12±0.10 秒
c_usr = 11.56±0.03 秒
d_usr = 13.48±0.10 秒
0791RubystNGNG
>>790
遠慮させていただきます。
0792デフォルトの名無しさんNGNG
>>778 は気が済んだのかな?
レス >>787 と >>788 って、>>782 とくらべて a が中途半端に最適化されただけで、特に目新しい情報がないよね。
まあ個人的に >>782 のソース基に追試してみて、a > c なことはよほどのことでもひっくり返りそうにないことがわかったからもういいよ。
0793デフォルトの名無しさんNGNG
流れを遮って申し訳ありません。
perl勉強中の若輩者ですが、諸先輩方のお知恵を拝借したく書き込みます。
ただいま、perl解説本と睨めっこしながら、プログラムを解読してる最中
なのですが、膨大なコードを理解できる部分から逆チャート化し、構造と
内容を判読しています。環境はメモ帳でコード開き、ノートにテンプレートで
流れを書き込み「ああ、なるほど!」と図解で理解を深める低脳児であります。
 そこで質問なのですが、
1.諸先輩方の開発環境はどんな構成なのでしょうか?
2.エディタなど活用されていらっしゃると思いますが、エディタ名などをご教授
いただけませんか?
3.長大なコードの全体像を掴むためにどのような工夫をなされておりますか?

諸先輩方は一目でコードを読破されておるとは思いますが
なにぶん、初学者な為、何事も一歩一歩 亀の如く理解してる次第であります。
0794デフォルトの名無しさんNGNG
>>793
>1.諸先輩方の開発環境はどんな構成なのでしょうか?
WindowsXP、ActivePerl

>2.エディタなど活用されていらっしゃると思いますが、エディタ名などをご教授
いただけませんか?
MIFES Ver6

>3.長大なコードの全体像を掴むためにどのような工夫をなされておりますか?
技術評論社の「すぐわかるPerl」でPerlの基礎を学び、
同じく技術評論社の「CGI&Perlポケットリファレンス」を片手に
ソースを解読してました。
0795デフォルトの名無しさんNGNG
>>793
1. MacOSX 10.3.7
2. Jedit4
3. コメント文を探す
0796デフォルトの名無しさんNGNG
>>793
1. FreeBSD
2. vi
3. 初学者の段階で長大なコードの全体像なんて掴めるわけがない
0797デフォルトの名無しさんNGNG
>>793
1.FreeBSD
2.vi(elvis),EmEditor
3.最初に大まかな処理の流れを読んでから適当にコメント入れていく
0798デフォルトの名無しさんNGNG
>>790
面白いな。うちのマシンでは、要素数が2000以下だとaがもっとも早くなる。

結論: あまりこだわるとパラノイアになってしまう。

×いいノウハウ
○無意味なノウハウ
0799デフォルトの名無しさんNGNG
>>793
1.FreeBSDでEmacs
2.Emacs
3.パッケージ名、サブルーチン名を検索しまくり。

> 諸先輩方は一目でコードを読破されておるとは思いますが
> なにぶん、初学者な為、何事も一歩一歩 亀の如く理解してる次第であります。

わたしは「Perlって何?」から自在になんでも書けるようになるのに
1週間くらいかかった。
大学の研究室のボスは、4時間でそこまで行った。

自分で書かないといかんと思うが。
デマンド/アルゴリズムからその記述法を導き出す方向を学ばないと。
0800デフォルトの名無しさんNGNG
>>793
1. WindowsXP + ActivePerl (+ Mingw or Cigwin)

2. VisualStudio.NET 2003 (つい習慣で。あとバイナリエディタ使いたさで。)
AzEdit V1.010228

3. まずは先頭から拾い読み後、>>795〜>>797 の併用。付け加えるとすれば、
 (1) シンボルのネーミングにも注目する。変数一つとっても、名前から意味が想像できると解読が早い。
 (2) 可能なら、モジュールを使った簡単なサンプルプログラムを書いて感じをつかむ。
(3) そのコードを好きになる。我を捨てる。
   読んでる間は家族も愛人も自分のコーディングスタイルも忘れて夢中になる。

なお 3. については >>796 の言ってることが私の認識に一番近い気がする。
工夫は人それぞれの適性であって、まずスタイルありきではない。
0801デフォルトの名無しさんNGNG
sjisのテキストを読み込んで検索に使おうと思い、
2バイト文字のメタ文字を無効化する為に、

$str =~ s/([\x81-\x9f\xe0-\xfc])(.)/&sjis2reg($1,$2)/eg;

sub sjis2reg {
 local($j1,$j2) = @_;
 $j2 = "\\$j2" if $j2 =~ /[\[\\\]\{\|\}]/;
 $j1.$j2;
}

このような処理をさせようと思ったのですが、
動かしてみると
Unrecognized character \x81
というエラーになります。
バージョンは
This is perl, v5.6.1 built for MSWin32-x86-multi-thread
です。

何が悪いのでしょうか?
0802デフォルトの名無しさんNGNG
あ、判った
切り貼りしたソースそのものに、全角スペースが入ってました
ではでは
0803800NGNG
↑うわ感じ悪〜。ウソ 800 みたいじゃんかヽ(`Д´)ノ-3
それはそうとして、プログラム読むのも書くのも半分科学じゃなくて訓練の世界だと思うのよね。
Perl だからこう、というノウハウなんてあるのか?
0804デフォルトの名無しさんNGNG
>>803
> Perl だからこう、というノウハウなんてあるのか?

Perlはたんとバッドノウハウがあるだろ。
$a と $b には警戒せよとか、
無理な拡張を繰り返して奇形化した言語だからね。
0805デフォルトの名無しさんNGNG
>>804 ・・・そうだった。>>803 書いた瞬間痴呆に陥ってたよ。
Perl は(知ってれば)簡単に書けるのだが読みにくい。
初心者が読む言語としては、獅子がわが子を谷底に突き落とす勢いがある鴨。
0806デフォルトの名無しさんNGNG
>.805
つーか、
一般の解説本には、誤った解説がごまんと載っていて、
オライリー本と照合すると、驚かされることが多い。
どうして、あんなに誤りが多いのか…
たぶん、perlの文法、ハナモゲラ説の原因は、
そんなところにもあると思われ。
ほんの一例を挙げれば、
正規表現の /sオプション (改行文字をマッチに含めるようにする)や
/mオプション (^ や $ のマッチの位置を変える)の説明さえ
間違っていたり(複数行マッチをする、とか)、
それどころか、 =~ さえ間違っていたりする
(マッチ対象を$_から変える。しかし、真偽を返す機能となっていたり)。
どうなっているのやら。
0807806NGNG
>/sオプション (改行文字をマッチに含めるようにする)や

/sオプション (普段は改行文字にマッチしない . を、
改行文字をマッチに含めるようにする)や
0808デフォルトの名無しさんNGNG
>>806
> たぶん、perlの文法、ハナモゲラ説の原因は、
> そんなところにもあると思われ。

Perlの解説書が一つもなかったころから、
みんなPerlのめちゃくちゃさを愛してただよ。

集まると「めちゃくちゃだよな〜」
寄ると「でたらめだよな〜」
と言いあって笑ってたのさ。
0809デフォルトの名無しさんNGNG
1. Linux, cygwin on windows XP
2. emacs, meadow
3. 経験をつむ
エディタは、emacs以外は糞
0810デフォルトの名無しさんNGNG
 皆様の多数のご意見に感謝の意を述べさせて頂きます。
諸先輩の知恵を拝見し先鞭たる愚かさに気がつく次第お恥ずかしい限りであります。

parl習得の目的は先のコードを解読し、力量及ぶなら自ずからコードを足したい所存。
目的まで早道として、先人のコードをお手本にするつもりでありました。反省
皆様の意見を心にし徒手空拳なれど、先人の遺産を頼らずに、稚拙ながら自作のコードを
練り上げます。その折、苦渋の末、解決策が見つからずお知恵を拝借しに参りますので
そのときは宜しくお願い致します。

1.先の質問に付随する疑問なのですが、プログラムの解読のイメージは
フローチャート化された発想が脳内に浮かぶのでしょうか?
それとも、日常会話の如く、判断材料として意識に吸収されるのでしょうか?
低脳なる私はコード→図的脳内イメージ変換しかできぬ愚直者なもですから...

0811デフォルトの名無しさんNGNG
>>810
> 目的まで早道として、先人のコードをお手本にするつもりでありました。反省

いや、ある程度読むことも必要だけど、ほどほどにして、自分で書くことも
やらないと。

「やりたいこと」 → 「具体的なコード」

という方向の学習もしないとと。

> 1.先の質問に付随する疑問なのですが、プログラムの解読のイメージは
> フローチャート化された発想が脳内に浮かぶのでしょうか?

フローチャートなんて忘れろ。
0812デフォルトの名無しさんNGNG
>>810
読みにくいから普通の日本語で書けよ。
感謝の気持ちとともにあらたまった言い方をしたいのなら、
単語は平易でもいいから謙譲語と尊敬語で通すように。
0813デフォルトの名無しさんNGNG
>>793
1.Linux(slackware)側で編集する場合はvi
 最近はローカル(windows)で作成/編集してLinux側に転送
2.Linuxはvi
 Windows側ではWz-Editor4.0Fを使用
3.バックアップファイルにコメント書き入れ+手元でメモ書き
0814デフォルトの名無しさんNGNG
>>810
まずは正しく perl と綴れる様になれ
0815806NGNG
>>810
まず、perl自体は仕様の通り正確に動くし、
言語のバグなどはまずないといえるけど、
言語の仕様自体を知るということが、オライリー本以外では
非常に難しいということ。
文法の誤った解説は、(一般解説本の)極めて広範囲に渡っているし、
それが故と思うが、文法ハナモゲラ説さえ言われている。
ハナモゲラは大間違いで、仕様は正確に実現されているけど、
一般解説本を指南書とすれば、ハナモゲラと思うのは無理もない。
それと、処理の結果とかがどんなときに $_ に入るかなどを
知らないと、コードから直接もとのアルゴリズムを知ることは
無理。(なんでも $_ に入るわけじゃなく、仕様として正確に決まっている)
結論として、信頼できる基本的テキストとクックブックなどを
組み合わせるしかないと思う。
0816デフォルトの名無しさんNGNG
処理系のソースも読んだことないのに、本を書くなんて
Lispじゃ考えられないのにねえ
0817デフォルトの名無しさんNGNG
ソースなんぞ読まなくて良いからせめて仕様は把握してから執筆してくれ。
あとPerl4時代の遺物が邪魔。use strictは徹底しろ。
0818デフォルトの名無しさんNGNG
オライリー本を読んで書けばいいんだよ!
0819デフォルトの名無しさんNGNG
みんな、もっと添付ドキュメント読めや。
とても力が入ったドキュメントがいっぱいだぞ。
0820デフォルトの名無しさんNGNG
添付ドキュメントってどこ?
0821デフォルトの名無しさんNGNG
orz...
0822デフォルトの名無しさんNGNG
>>819
だって、英語わからんし。
とはいえ、公開されてる和訳は役に立つことは立つ。
http://www.att.or.jp/perl/man/
とか。
ただ、これだけで理解できるかと言われれば、うーむ…
0823デフォルトの名無しさんNGNG
和訳はたまに古いバージョンのをもとにしてることがあるから
原文も見たほうがいいよ。まるっきりウソを書いてるという
経験はないけど、新しい奴だとより説明が明確になってたり、
書いてないことが追加されてたりとかはよくある。
0824デフォルトの名無しさんNGNG
添付ドキュメントだけで理解しろっていうのは、
辞書だけで語学を勉強するようなものな気がする。
普通は辞書を横に置きながら教科書をメインに読んで勉強するよね。
0825デフォルトの名無しさんNGNG
>>824
べつにそれだけで勉強しろとは言っとらん。
オライリーオライリーとそればっかなので
添付ドキュメントに注意を促しただけ。

それに、チュートリアルもいろいろ入ってるよ。
0826デフォルトの名無しさんNGNG
>>824
それはその通りだがおまいはたぶんもっと辞書をみたほうがいい。
多くの辞書で初学者向けの手引きにページを割いてる。
0827デフォルトの名無しさんNGNG
>>825
と書いてから改めて見てみると、
チュートリアル、初心者向けイントロダクション、
クイックスタート、例示集などいろいろあるな。
faqはもちろん外せないし。
0828デフォルトの名無しさんNGNG
もしも仕様が知りたいと言うことなら、perldocを読むべきだろうけど、
何より、CPANなどで手に入るモジュールを読むことがとても
勉強につながる(と思う)。
で、CPANのモジュールを読むきっかけとしては、Perlで何か動く
プログラムを作ることが大切かなぁ、、と。

>> 793
1. Linux か Windows
2. vi か メモ帳
3. 必要なところをすばやく見つけるのは技術。
  自分でそれなりに長いコードを書いたりすれば身に付くのでは。
0829デフォルトの名無しさんNGNG
リチャード・ストールマンが perl を学ぼうとして、
付属のドキュメントだけでやって挫折して、
誰かがオライリーの本ならいいよ、というのを聞いて、
なぜあれがオープンソースじゃないだと悪態をついている
のを何かで読んだよ。

なぜストールマンは挫折したのか?
1 頭が悪かった。 2 付属ドキュメントが悪かった。

正解 性格が悪かった…
0830デフォルトの名無しさんNGNG
「オライリー」とやらは糞。添付ドキュメントだけで十分。でFA?
0831デフォルトの名無しさんNGNG
3で割り切れる数値の表示の仕方を教えてください
0832デフォルトの名無しさんNGNG
>>831
100までの3で割り切れる数とかなら、こんなとこかな。
@result = grep !($_ % 3) ,(1..100);
print "@result\n";
0833デフォルトの名無しさんNGNG
>>831
> 3で割り切れる数値の表示の仕方を教えてください

my $i = 0;
while (1) {
print $i++ * 3 . "\n";
}
# 終わらない。

え、ちがう?
0834デフォルトの名無しさんNGNG
プラグマって何ですか?
0835デフォルトの名無しさんNGNG
perl.com: Beginners Intro to Perl - Part 6
http://www.perl.com/pub/a/2001/01/begperl6.html

> Pragmas are instructions to the Perl interpreter to do something special when it runs your program.
0836 NGNG
Windowsにてテキストファイルとバイナリファイルを判別する方法ってありますか?
0837834NGNG
>>835
レス、サンクス。

>something special
これを詳しく。できれば日本語で。さらに例を挙げて。
0838835NGNG
>>837 日本語だ、ほれ。深海に潜っているときに必要らしいぞ。

使用のように厳しいコマンドは pragmaと呼ばれます。
Pragmasはあなたのプログラムを動かすとき特別な何かをする
Perlインタプリタへの指示です。
使用厳しい、悪いソフトウェアを書くのをより困難にする2つのことをします:
それで、あなたはすべての変数(「厳しいvars」)を宣言します、そして、
あなたが潜水艦(「厳しい潜水艦」)を使用しているときPerlがあなたの
意志を間違うのをより困難にします。

プログラムで1か2つのタイプの厳しさを使用するだけでありたいなら、
あなたが 使用厳しいpragmaに彼らを記載することができますか、またはあなたは、
あなたが、より早く可能にした厳しさのいずれかすべてをオフにするのに特別な
ノー厳しいpragmaを使用することができます。
0839834NGNG
>>838
なんか、悪かったよ。すまん。そしてサンクス。
use strict;みたいな挙動って事で思い込んでおくよ。
0840デフォルトの名無しさんNGNG
>>836
> Windowsにてテキストファイルとバイナリファイルを判別する方法ってありますか?

それは主として「テキストファイル」をどう定義するかによるな。

とりあえずfile typeをチェックするモジュールにはFile::MMagicがあったりする。
0841836NGNG
>>840
さんくすこ
ここで言うバイナリファイルはACSII文字以外のコード(文字?)が入っているファイルを指します

しかし、使い方というか返り値がよくわからん・・・
0842デフォルトの名無しさんNGNG
>841
日本語はどうする
0843デフォルトの名無しさんNGNG
>>833
ワロタ



……疲れてんのかな俺
0844デフォルトの名無しさんNGNG
>>836
微妙に気になったんだが、Windows上のPerlにて だよな?
0845デフォルトの名無しさんNGNG
use strict submarine...;
0846デフォルトの名無しさんNGNG
use yellow submarine;
0847デフォルトの名無しさんNGNG
...厳しい潜水艦;
0848デフォルトの名無しさんNGNG
>>841
そういうシンプルなので良いのなら、昔から、ある程度先まで読んで、
最上位ビットが立っているバイトがあったらバイナリと看做すとか
いうアドホックかつ確率的な方法が用いられていたが……
0849デフォルトの名無しさんNGNG
windowsなら拡張子で判別しろや!
0850デフォルトの名無しさんNGNG
ラクダ本初版だっけ、には最初の 1000byte くらい読んで
20% の非 ASCII があったらバイナリと判定する、なんて記述を見たような...
0851デフォルトの名無しさんNGNG
-B filename
で出来るよ 精度悪いけど
0852デフォルトの名無しさんNGNG
オレオレ Larry・・・いえ、何でもありま栓。

処理系のソースを読んでから本を書くなんて
Perlじゃ考えられないねえ

というのは冗談だが、内容が内容なだけに Perl 処理系のレキシカルアナライザ( 相 当 部分)を読む者は摂食障害を起こすらしいYO。(by O'LEILLY 本 第3版)

ところで、出遅れた話題で恐縮なんですが、Eclipse (epic) の名前が出てこないけどあれは糞なんどうなん?
もっとも漏れは(改行問題には目をつぶるとして)SJIS でコメントや自分用 pod を書ければいいのであって別に Visual Studio + コマンドプロンプトのままでもいいんだけど。
0853デフォルトの名無しさんNGNG
>>850
プログラミングperl第3版p115によれば、
ファイルテスト演算子の -B や -T は、ファイルの最初の約1ブロック分の
データを調べて、コントロールコードや最上位ビットが立っている文字
(UTF-8に見えないもの)を捜し、そのような文字が3分の1よりも
多ければバイナリ、そうでなければ、テキストファイルと判定するということだ。
あと、最初のブロックの中に、ASCIIのNULL文字(\0)が含まれている
ものは、バイナリファイルと判定する。
ほかにも判定基準があるようだが、このへんでいいだろ。
0854デフォルトの名無しさんNGNG
>>852
Eclipseってよく知らんけどさ、
RADツールとかIDEとかは懲りて、止めにしたという人も多いと思うよ。
結局、開発元が開発やめたら、そのコードはどうにも
ならなくなるんだよな。
EclipseのライバルだったとおぼしきvisualCafeとか、
この世から消えてなくなったよねぇ。
Beansとかだって、最近はどうなんだい?
天下のSunがやってるにしては、名前も聞かない。
Eclipseはいつまで持つんだろう?
マイクロソフトだったら大丈夫というもの、それだって、
怪しいもんだ。VisualBasicやってた人たちも .NETになって、
ずいぶん肩身がせまくなって困ってるみたいだし。
IDEとかRADで一番困るのは、言語は同じはずなのに、
ほかのツールで作られたものと組み合わせられない。
エディタだけで書けるのが、一番だよ。
0855デフォルトの名無しさんNGNG
一般のエディタでVSのIntellisenceが使えたらいいなぁ
0856デフォルトの名無しさんNGNG
>>854 さんくスこ。つまり、Eclipse は今が旬であると理解し田(<電波受信
しかし、『RADツールとかIDEとかは懲りて、止めにしたという人も多い』から
『開発元が開発やめ』るんだとしたら再帰的で巣わ(笑)
IDE 相乗的にだめぽ。
0857853NGNG
>>840 のいうFile::MMagicは、これだよね。
http://perldoc.jp/docs/modules/File-MMagic-1.21/MMagic.pod
ファイルテスト演算子とは、機能的にどうなんだろうかね。
使ってみれば分かるんだが、もう眠いし…。
0858853NGNG
http://www.cmagazine.jp/q/old.html#index17
より引用。
Q. バイナリファイルの判定
たとえば、ASCIIコードと改行などわずかなコントロールコードだけで構成される
ファイルの場合、プレーン・テキストだと類推できます。

また、ほとんどのバイナリファイルには特徴的なコードが埋め込まれているので、
そこからどんなタイプのファイルなのかを知ることができます。たとえば、
「%PDF-1.3」で始まる文字列が書き込まれていれば、Acrobatで読むことのできる
PDFファイルであることがわかりますし、先頭に「#!/bin/sh」とあれば
シェルスクリプトです。

バイナリの実行ファイルなども同様で、OSなど実行環境に特有のコードパターンが
書き込まれています。このパターンを「マジック」あるいは「マジックナンバー」と
呼びます。UNIXの file (1) コマンドは、「ファイルシステム>マジック>言語」の
順でチェックを行い、ファイルの種類を判別しています。

マジックにはたくさんの種類がありますので、ぜんぶ自分で調べてプログラムを
つくっていては骨が折れますから、file(1)でも参照しているマジックナンバーの
リスト(/usr/share/magicなど)を利用するとよいかもしれません。
0859853NGNG
(引用続き)
●簡単な方法はない。文字コードを調べていく
その前に「何がテキストで、何がバイナリか」という問題があります。
ASCIIテキストファイルだけなら話は簡単なのですが(それぞれのバイトが表示可能か
どうかisprint()関数で調べていけばよい)、日本語など、一文字に複数バイトを使う
言語のテキストファイルだと難しくなってきます。とくに日本語は文字コード
(表現方式)が複数あるため、違う文字コードを想定すると読むことができません。
また「ちょっとだけデータが壊れているテキストファイルをどう扱うか」という問題
もあります。

結論を言うと、簡単な方法はないと思います。あらかじめ文字コードを想定し
(JIS、シフトJIS、EUC、Unicodeなど)、その方式に合致しているかいちいち判別しな
ければならないようです。文字コードの構造、判別方法は煩雑すぎるのでここでは
説明できません。参考資料などを見てください。

もう寝る。それじゃ。
0860デフォルトの名無しさんNGNG
エディタしか使えない漏れには
相対的にIDE使ってるやつらが眩しく見えるのだが…
0861デフォルトの名無しさんNGNG
Perl 板 isprint。(本当か?
my @visible_chrs = split(//,
   "\t\n\r"
  . ' ,!"#$%&\'()*+,-./'
  . '0123456789:;<=>?'
  . '@ABCDEFGHIJKLMNO'
  . 'PQRSTUVWXYZ[\\]^_'
  . 'abcdefghijklmno'
  . 'pqrstuvwxyz{|}~'
);
my %isprint = ();
foreach (@visible_chrs) {
  $isprint{$_} = 1;
}
で、$isprint('x') とかして使う予定は未定。
0862デフォルトの名無しさんNGNG
>>860
> エディタしか使えない漏れには
> 相対的にIDE使ってるやつらが眩しく見えるのだが…

そういう時は、IDEを使ってみるといいです!!

わたしゃ、IDEは、自転車の補助輪のようなもんという認識だが。
0863デフォルトの名無しさんNGNG
補助輪の再発明
0864853NGNG
>>861
違〜う!
そりゃ、CマガジンのQアンドAのページからの引用だって。
アルゴリズムの部分が参考になると思って、
引っ張ってきただけだってば。
>>857 のFile::MMagicの解説
http://perldoc.jp/docs/modules/File-MMagic-1.21/MMagic.pod
だけど、そこにマジックナンバーってあるでしょ。
>>858 の引用でそれがなんのことか分かったじゃん。

頼む、寝かしてくれ…
0865デフォルトの名無しさんNGNG
>>864 いやすまん。それはわかっていた。
ただ読んでるうちに、Perl に標準で <ctype> 系関数が付いないと知ったときの困惑と怒りを思い出したまでだ。
0866デフォルトの名無しさんNGNG
>>860
Eclipseは perl でも利用できるんだから、
ぜひ人柱として挑戦して、レポートしてほしかったりしますが。
0867デフォルトの名無しさんNGNG
IDE は地球を救うが
Perl は救わない。
なぜなら、全 Pealer が手にしたオライリー本が地上の山や川や木を(ry
0868デフォルトの名無しさんNGNG
メモ帳派少ないな
0869デフォルトの名無しさんNGNG
最低限の機能しかないからな
0870デフォルトの名無しさんNGNG
ぶっちゃけメモ帳つかうくらいなら ed つかう。
0871デフォルトの名無しさんNGNG
windows98 で cygwin の perl 5.8.6 を起動すると、
PERL.EXE ファイルは
欠陥エクスポート NTDLL.DLL:atoi にリンクされています。
と出て、使えないんですけど、どうすれば使えるようになるでしょうか。
0872デフォルトの名無しさんNGNG
Visual Perlって使うと幸せになれますか?
いつもWindows機上で作成して、Linux機上で動作するperlスクリプトを書いているんですが。
0873デフォルトの名無しさんNGNG
>>872
最初っからLinux機上でスクリプト書けば良いじゃん?
0874デフォルトの名無しさんNGNG
>>873
様々な制約から作業環境はwindowsという点は変更できないのです。
0875デフォルトの名無しさんNGNG
>>874
IDEを使うことによって、
なにが出来るようになることを期待してるか、を
はっきりさせないと。
どういうことを期待してるのかなぁ。
単にOSの壁を乗り越えるということならば、
perlはそんなもの必要としてないし。
それと、IDEはコードの製作方法を押し付けてくるからね。
まず、作ろうとするコードがデザインパターンのなにに
あたるかとか、そういうところから始まって、
フィールドは何? メソッドは何? とかね。
それで、RAD機能を売り物にするツールなら、
裏でコードを自動生成してくれるけど、
良し悪しいろいろだから…。ありがたがるか、うんざりするか。
Cプラプラとか、Javaならなけりゃやってられないだろうけど、
perlでIDEはどうだろうかねぇ。
0876デフォルトの名無しさんNGNG
亀レスだけど...
>>484
デフォルトでは Latin 1 だけど、use encoding で文字コードを
指定すると、そのコードになるようだ。
perluniintro の Legacy Encodings を読んでて気づいた。
0877872=874NGNG
>>875
OSの壁に関してはおっしゃる通り期待しておりません。
何を期待しているか?と問われると、現状特に不満がないので何も期待していません。
ならいいじゃん?って言われるとごもっともなのですが、
私の想像外で、実際に使って思いがけなく「こんな所が楽になる」というお話が聞ければ…
と、思い質問した次第です。

と、ここまで書いて「一度使ってみれば?」と、自分にレスしたくなりました orz

0878デフォルトの名無しさんNGNG
pack関数の意味がよく分からないので
解説をお願いできませんでしょうか?
バイナリデータというのもよく分かりません。
0879デフォルトの名無しさんNGNG
>>865
普通、正規表現の [:print:] とか使わない?
0880デフォルトの名無しさんNGNG
>>878
どの辺が解らない?
ttp://www.rfs.jp/sitebuilder/perl/05/func/pack.html
ttp://flex.ee.uec.ac.jp/texi/perl/perl_34.html
ttp://mikeneko.creator.club.ne.jp/~lab/perl/numerical_transform/
ttp://www5a.biglobe.ne.jp/~fnao/cgi_nao/pack.htm
まずはこの辺読んでみて何が解らない?
0881デフォルトの名無しさんNGNG
>>880
そのページどうやってみつけた?
0882デフォルトの名無しさんNGNG
Google 検索: pack関数
http://www.google.com/search?hl=ja&lr=lang_ja&ie=sjis&q=pack%8A%D6%90%94
0883880NGNG
>>881
>>882にperlと付けてググっただけ。
0884878NGNG
>>880
ありがとうございます。読ませていただきました。

読んでいて使い方は少しずつ分かってきたのですが、
「バイナリ構造体にパックする」というのが
何のことなのかさっぱり分かりませんでした。
0885デフォルトの名無しさんNGNG
>>884
基本的には、なにかとデータをやり取りするときに、
データの型とサイズを保証するために使うんだと思うよ。
たとえば、データベース(DBMとかRDB)とやり取りするとき、
データがある型にはまってないと、えらいことになるわけ。
1レコードに入っているのが55バイトで、それは、
最初の何バイトが文字型で、それから何バイトが数値型で、とか。
それが狂うと、めちゃくちゃになっちゃう。
だから、データを登録するとき、packを使って、
サイズとか型を保証するの。
データを出すときも、(packを使って登録したんだから)、
unpackすれば、正しく取り出せるという寸法だよ。
0886デフォルトの名無しさんNGNG
バイナリ構造体 = pack(型指定文字列,パックするリスト値)

パックするリスト値の型を、型指定通りに解釈するとバイナリ構造体になりますよ
って程度に覚えれば十分。
0887デフォルトの名無しさんNGNG
配列データをバイトサイズにパックして、もとに戻す例:

my @bin = (0x48, 0x65, 0x6C, 0x6F, 0x21, 0x0A); # 6 要素の配列。メモリ上のイメージは複雑で、perl 処理系にしか解釈できない。

my $str = pack('C*', @bin); # @bin の各要素を、バイトサイズに「パックする」
print $str; # すると、"\x48\x65\x6C\x6F\x21\x0A" という文字列になる。(つまり "Hello!\n")
       # これは C で書かれた関数やシステムコールにも(1バイト文字の列として)解釈できる。

my @bin2 = unpack('C*', $str); # unpack でもとに戻せる。(@bin2 は、@bin と同じになる)

もちろん 'C*' 以外を使って、バイトサイズ以外のパックもできる。
0888デフォルトの名無しさんNGNG
特に関数でもないのに
{
 数行
}
{
 数行
}
という書き方をすることのメリットを、
0889デフォルトの名無しさんNGNG
変数のスコープを、
0890デフォルトの名無しさんNGNG
>>888
裸のブロック( naked block)のことかね。
それは、そこだけ有効なローカル変数が使えるということ
なんじゃない?
それと、裸のブロックは制御構造も提供する。
たとえば、lastで抜けることが出来る。
0891デフォルトの名無しさんNGNG
あくまで一例だが、例えば、次のような使い方とか。
my @a = (0, 1, 2, 3, 4);
{
 local $" = ', ';
 print "@a\n"; # これは、"0, 1, 2, 3, 4,\n" として表示される(ちょーわかりやすい)。
}
print "@a\n"; # これは、"0 1 2 3 4\n" として表示される。(後を濁さない)

同様のテクは $[ なんかでも使うね。漏れは。
0892デフォルトの名無しさんNGNG
>>876
え、そうなん!?
確かめなくちゃ。
0893デフォルトの名無しさんNGNG
pack,unpackは確かに俺も昔は意味分からんかった
バイナリ構造体にパックすると言われてもバイナリ構造体が何かも分からんし、パックするとは何をすることかも分からんかった
まぁパックした(とおぼしき)データをファイルに書き出して、バイナリエディタで覗いたりして何とか理解できたなぁ
>>884
やってみそ
とりあえず型指定子のHが理解できれば他も似たようなもんだ
0894デフォルトの名無しさんNGNG
>>892
#! /usr/bin/perl

use strict;
use Devel::Peek;
use encoding 'Shift_JIS';

my $s0 = pack('C0C*', 0x90, 0x7E);
my $s1 = pack('U0C*', 0xE6, 0x88, 0xBF);
Dump($s0);
Dump($s1);

my $s = $s0 . $s1;

Dump($s);

とすると、$s0 は Shift_JIS として扱われて UTF-8 に変換され、元から
UTF-8 の $s1 と くっついて $s になるのが確認できる。
0895デフォルトの名無しさんNGNG
ていうか、perl でバイナリエディタ作るとき使うのは unpack だったりする罠。
use utf8;
my @file = <>;
foreach (@file) {
 my $hex_line = unpack('H*', $_);
 print "$hex_line\n";
}
0896895NGNG
言い忘れた。>>893 おめ(ヲイ
0897884NGNG
皆さんどうもありがとうございます。

pack関数でつまづいたのがURLエンコードのところだったので、
>>880の3つめのリンク先の、

(1)
$char = "%83%7E%83P%83l%83R";
$char =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("H2", $1)/eg;

(2)
$char = "%83%7E%83P%83l%83R";
$char =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack("C", hex($1) )/eg;

この(1)と(2)について詳しく教えていただきたいです。
どちらも変換後の$charは「ミケネコ」になるようですが、どういう処理なのか
よく分かりません。変換前の$charには「l」とか「R」とかが含まれているのに、
それらはどこで変換されているんでしょうか?
>>887の「バイトサイズにパックする」というのもイマイチよく分かりません…。
とりあえず、型指定文字(?)の「H」と「C」について知りたいです。
よろしくお願いいたします。
0898デフォルトの名無しさんNGNG
>変換前の$charには「l」とか「R」とかが含まれているのに、それらはどこで変換されているんでしょうか?
これはサイトが間違ってると思われ
0899デフォルトの名無しさんNGNG
>>897
分解して考えませう。まず (1) の pack("H2", $1) の理解のため、ためしに pack("H2", "2A") を実行してみれ。
つまり次のコードだ。
print pack("H2", "2A"), "\n";
すると画面には "*" が表示されるね。すなわち上の pack は、'*' という文字のキャラクタコード 0x2a を返したことになる。

この例で、pack の第 2 引数に与えた "2A" というバイト列を、
「上位ニブル-下位ニブルの順に並んだ16 進 2 桁とみなせ」という意味なのが型指定子 "H2"。
pack はそうやって解釈してできた数値を返す。
(正確には本来、数値のリストを返すんだが、この例では型指定子 "H2" が 0x00〜0xff までの数値 1 個しか作り出せないので、'*' 一文字だけが出力された。)

なお "H2" にはこのように 2 文字分の解釈しかしないので、たとえば
print pack("H2", "2Al"), "\n";
だと、末尾の 'l' は単に無視される。サイトがまちがってるにしても、結果は'ミケネコ'。

あとは自力でがんばれ。超がんばれ。
0900899NGNG
>>897 スマン、嘘書いといて超がんばれもないな・・・
> 正確には本来、数値のリストを返すんだが、
この部分間違い。pack が返すのはスカラーですじゃ(unpack と混同した)。
「数値のリスト」は「バイト列」に読み替えてちょ。
0901デフォルトの名無しさんNGNG
> >>887の「バイトサイズにパックする」
これは感覚的にわかるけど、正しい言い方はどうなん?
この伝でいくと、1234 という十進数の unpacked BCD 結果である 0x1234 を指して、
「ニブルサイズに pack した十進数」と言えてしまうわけだが。
0902デフォルトの名無しさんNGNG
>>897
なにをどうしたいのか、よく分かんないけど、
packはともかく、もしurlエンコードをしたいというなら、
それ用のモジュールを使うことで解決かと。
車輪の再発明をしても仕方ないし。
HとかCとかいったってさ、単に16進文字列と
char型(1バイト長符合なし整数)というだけなんじゃ?
H2なら、それが2バイトとちゃうん?
C言語の型に直してるというだけだよね???
(C言語、よく分かってない奴だから、怪しさ100%!)
0903デフォルトの名無しさんNGNG
>>855
> 一般のエディタでVSのIntellisenceが使えたらいいなぁ

Emacsの上に高度開発環境を実現するパッケージで、Intellisenseも入れているのが
あるな。
0904デフォルトの名無しさんNGNG
>>904
エディタの普通の入力補完じゃダメなの?
たとえば、サクラエディタでは、
設定メニューのタイプ別設定から、支援タプを選ぶと、
入力補完用のファイルを選べるんだが、ここで、
サクラエディタのファルダの中からperlのキーワードの
ファイルを選んで設定しておくと、
最初の1文字か2文字で該当するperlのコマンドの一覧が
出てくるよ(コントロールキーとスペースキーを押すとね)。
w を推すと、while とか 頭に w の付くコマンドが出てくる。
(warn wait wantarray とか、数えたら全部で6個だった)
普通のエディタのこういう機能で十分じゃないの?
それ以上の機能のことを言ってるの???
0905デフォルトの名無しさんNGNG
>>904
だれにたいして言っているの?
0906デフォルトの名無しさんNGNG
>>903
> > 一般のエディタでVSのIntellisenceが使えたらいいなぁ
>
> Emacsの上に高度開発環境を実現するパッケージで、Intellisenseも入れているのが
> あるな。

と思ったら、Perlはサポートしてないな(まだ?)

CEDET - Collection of Emacs Development Emvironment Tools
http://cedet.sourceforge.net/semantic.shtml

のことだが。

他にもあるかな?


0907デフォルトの名無しさんNGNG
>>904
> エディタの普通の入力補完じゃダメなの?

しらん。

> 最初の1文字か2文字で該当するperlのコマンドの一覧が
> 出てくるよ(コントロールキーとスペースキーを押すとね)。
> w を推すと、while とか 頭に w の付くコマンドが出てくる。

Emacsのperl-modeはもっと毛むくじゃらなこともできる。
みんな最初は「すげ〜、すげ〜」と驚嘆するが、やがて
オフにする。
0908デフォルトの名無しさんNGNG
>>907
> Emacsのperl-modeはもっと毛むくじゃらなこともできる。
> みんな最初は「すげ〜、すげ〜」と驚嘆するが、

どうやるの、おせーて。
0909デフォルトの名無しさんNGNG
>>907
> > エディタの普通の入力補完じゃダメなの?
>
> しらん。

( ゚д゚).....baka?
0910デフォルトの名無しさんNGNG

質問だぜ
wantarrayみたいなコトをやりたいんだけど、
関数の呼び出し元が「ハッシュ」で求めてるか「配列変数」で求めてるかを
関数側で認知したいんだけどどうしたらいいんだい?ベイビー


0911897NGNG
お世話になっています。

>>899を元にして自分で色々やってみたところ、pack("H2", "2A")では「*」が表示されましたが、
>>897の「ミケネコ」に関しては、どうしても自力では理解できそうにないです。

とりあえず、(1)と(2)を実行すると確かに"%83%7E%83P%83l%83R"は「ミケネコ」になるので
サイトは間違っていないようなのですが、文字コードの変換ができるやつで調べてみたところ、
16進コードは次のようになっていました。

ミ→837E ケ→8350 ネ→836C コ→8352

"%83%7E%83P%83l%83R"を見ると、「P」や「l」や「R」が入っていて意味不明だったのですが、
これの16進コードがちょうど次のようになっていました。
(だから何?というのはちょっと分からないんですけど…)

P→50 l→6C R→52

それで、pack("H4", "837E")は「ミ」になるのは何となく分かりました。
この第2引数のところを「83P」、「83l」、「83R」にしても、それぞれ「ケ」「ネ」「コ」には
なりませんでしたが、「8350」、「836C」、「8352」にすれば「ケ」「ネ」「コ」になりました。

そしてpack("H2", "83P")も「ケ」にはなりませんが、
$test = "83P";
$test =~ s/([0-9a-fA-F][0-9a-fA-F])/pack("H2", $1)/eg;
とすると何故か$testが「ケ」になりました。

これはどういうことなんでしょうか? ますます分からなくなってきました。
どなたかご教授お願いいたします…。
(※16進数についてはほとんどよく分からないので何か間違っているかもしれません)
0912デフォルトの名無しさんNGNG
>>911
いいセンいってますなあ。置換演算子 s///eg の働きを考えればゴールに到達すると思うよ。たとえば
$test = "%83P";
$test =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("H2", $1)/eg;
において、
1. s///eg の働きにより、$1 として pack に渡るのは "83" だけ。(<重要)
2. その "83" が pack により "\x83" というデータ(0x83 という数値の1バイト表現)に置換される。
3. 従って、$test の内容は、"\x83P" となる。
4. 'P' のキャラクタコードは 0x50 だから、"\x83P" eq "\x83\x50"。すなわち 'ケ' となる。

>>899 が 『'l' は無視される』とか言ってたけど、これは半分しか正しくない。
(1) の例全体でみると、s///eg の働きにより、実際に 'l' が pack に渡ることはない。(上の例の 'P' のごとく。)
仮に pack に渡されたとすると、無視されるんだが、実際には渡されないのでそのまま残る。
んで、最終的に 'l' は文字コードの一部なんであって、無視されるわけではない。

>>910
$ref_hogera が何かへの参照であるとして、ref $ref_hogera としてくんな。
配列なら 'ARRAY', ハッシュなら 'HASH' と返る。
(配列でもハッシュでもないなら、それ以外の文字列が返る。)

>>901 しょうもないツッコミ。unpacked と packed が逆。
1234 --> 0x12, 0x34 というバイト列(すなわち "\x12\x34") で表現するのが packed BCD。
1234 --> 0x01, 0x02, 0x03, 0x04 というバイト列(すなわち "\x01\x02\x03\x04" で表現するのが unpacked BCD。
0913910NGNG
>>912
勘弁して下さい。
普通に関数からの代入で戻り値を取りたいです。
0914デフォルトの名無しさんNGNG
>>913
CPANのWant.pm
コンパイルが必要だが。
0915デフォルトの名無しさんNGNG
>>914 今しがた pod install Want.pm で最新版をインストールしたんだが、ドキュメントの SYNOPSYS に間違いがあるっぽい。
サブルーチン foo の中の want('LIST') を want('ARRAY') に変えて、その次の行の (1, 2, 3) を [1, 2, 3] に変えると動いた。
my %hash = %{foo()};
print "$hash{bar}\n";# 23 と表示される。
my @array = @{foo()};
print $array[2];# 3 と表示される。
0916デフォルトの名無しさんNGNG
Win2000SP4、Perl5.8.4 なんですが、
最近 Time::Local の timelocal がエラーを出すようになり、
どうもその原因が localtime の引数に負の値を入れると undef になることのようなのです。
(undef の変数で計算しようとするため Use of uninitialized value in ... と言われる。)
print(localtime(-1)); をテストすると、linux や solaris では
595981070400 が表示されるようですが、Windows では何も表示されません。
しかし最近までは Time::Local でエラーは出ていなかったので、
この現象はなかったと思うのですが、他にW2Kで同様のエラーが出る方はいますでしょうか?
最近の変化といえばWindows Updateが幾つかあったことくらいですが、
それがlocaltimeに影響を及ぼすということがあるんでしょうか…?
0917デフォルトの名無しさんNGNG
>>871
perl を 5.8.6-2 に入れ替えたら、windows98でも使えるようになりました。
0918デフォルトの名無しさんNGNG
>>915 は、手前の脳の間違いを直したほうが良い。
0919デフォルトの名無しさんNGNG
>>911
横からだけど、ちょいと思ったことを。
H2 とは、そもそもなんだろう?
そもそも、1バイトは、0〜255の間の256段階が取れるよね。
0(10進)は00(16進)で、255(10進)はff(16進)となる。

で、このHは曲者だと思うんだ。
ここで、ff(16進)があるよね。
どうも、(packにおける大文字の)Hは前の方(上位)のfで、
    (packにおける小文字の)hは後ろの方(下位)のfらしい。
(というのも、プログラミングperl第3版の記載によるんだが)

ミ→83 7E ケ→83 50 ネ→83 6C コ→83 52 を見てほしい。

いずれも16進数が4桁、(16進数が2桁で1バイトだから)、
ミも ケも ネも コも、それぞれ2バイト文字ということになる。

そこで H2 だ。
H2とは、この最初の16進数二つのこと。(ミケネコのいずれにも共通の83)
つまり、H2の2とは、2バイトの2じゃなくて、その半分の1バイトなんだ。

だまされるところだった。

後ろの16進数2つを扱うには、
小文字の h2 を使う。

そういうことだと思うんだが、違うんだろうか?
(プログラミングperlの訳が、このあたり曖昧。
 おそらく原文にははっきりそう書いてあるんだろうと思う)

このあたりはC言語の型を流用してるんだと思うから、
Cの分かる人は、すぐ分かるんだと思うな。
0920デフォルトの名無しさんNGNG
>>919
上位下位というよりもオーダーだろ
Hは上位下位の順、hは下位上位の順
だからH2とすれば上位4bit、下位4bitの順で16進値が出てくる、と
pack("H*", "837E8350836C8352")
こういうことが出来るし
0921デフォルトの名無しさんNGNG
>>920
>だからH2とすれば上位4bit、下位4bitの順で16進値が出てくる、と
これじゃunpackだorz
16進値を上位4bit、下位4bitの順で割り当てる、と読み替えてください・・・
0922910NGNG
そうですか。
今回は諦めることにしたぜ。
0923919NGNG
ああ、違う違う、なにをやっているのか。
日本語は2バイトなんで、頭がこんがらがるから、英数字のみを
考える。アスキーコードというやつだな。

たとえば、A のコードは41(16進数)。
http://hp.vector.co.jp/authors/VA016117/c/memory2.html

というわけで、英数字は全部1バイトだから、
00(16進数)〜ff(16進数)で表される。(ちなみにこれは、10進数の0〜255のことだよね)

ところがここで、16進数の二桁をばらして考えるんだな。

16進数一桁は、0.5バイトであり、4ビットでもある。1ビットは on off の2値だから、
2の4乗で16ということだ。実は、ニブルとも呼ばれるらしい。
さて、ここで出てくるのが、pack の H と h 。

A のコードである41 を 41 の順でpackするのが H。
A のコードである41 を 14 と逆順でpackするのが h。

これは、
$temp = pack("H2",83); # 大文字のH2
$result = unpack("h2",$temp); # 小文字のh2
print $result;
とすると、83 と入れたのが 38 と出てくるので、確認できる。

H h にしろ、2単位で(H2 あるいは h2)で1バイトだから、
2単位ではじめて英数字1文字を扱えるというわけだ。
日本語だったら、2バイトだから、H4 あるいは h4で
はじめて1文字扱えるということになるね。

ややこしいね。失礼、一人相撲だね。
あら、レスくれてた方がいた。つき合わせて、ごめん。
0924デフォルトの名無しさんNGNG
        ヽ|/
      / ̄ ̄ ̄`ヽ、
     /         ヽ
    /  /  \   │
    | (彡) ( ミ)|||  |
  \ | // ̄⌒ ̄ヽヽ  |
 ハァー |  | .l~ ̄~ヽ |   |
  / | ヽ  ̄~ ̄ ノ   |
    |    ̄ ̄∪    |
0925デフォルトの名無しさんNGNG
どなたか頼みます。
0926デフォルトの名無しさんNGNG
>プログラミングperlの訳が、このあたり曖昧。
ラクダ本「バイナリと16進数のパックでは、countは、生成されるバイト数ではなく、ビットやニブルの個数を表す。」

(゚д゚)
0927デフォルトの名無しさんNGNG
それじゃただの(゚д゚)ウマーだ
0928デフォルトの名無しさんNGNG
レスが長くて読みたくないが、「とにかく*つける」と
覚えとけばあんたらの処理には問題ないんじゃないのか?
0929911NGNG
ありがとうございます。
あともう少しで分かってきそうです。

>>912の1は分かります。2、3もほとんど分かりました。

でも4のところが分かりません。
"\x83P"と"\x83\x50"をprintで見てみたところ、どちらも「ケ」になりましたが
前者("\x83P")が何故そうなるのかがよく分かりませんでした。

これは最初のpack関数の話からそれているかもしれませんが、
よろしければ解説をお願いいたします。
0930デフォルトの名無しさんNGNG
>>929
http://e-words.jp/p/r-ascii.html
Pの16進のところ見ろ
0931デフォルトの名無しさんNGNG
>>925
何を?
0932929NGNG
>>930
Pの16進コードが0x50なのは分かるのですが、
print "\x83P";
では、pack関数みたいなものも使っていないのに、
どういう処理で「P」→「\x50」と変換されるのかが分かりません。
print "P";
だと普通に「P」だけが表示されるのに。
print文は、前の文字が16進数だと後の文字も16進数に変換する…とかでしょうか?
0933デフォルトの名無しさんNGNG
>>932
まずマルチバイト文字がどういうものかわかってないようだね
この場合、文字コードはShift JISなわけだけれど、その構造が、
1バイト目が81〜9F、E0〜FCなら次のもう一バイトとあわせてひとつの文字になる。
で、「ケ」という文字は83 50なわけだけれど、ここから83をとってやると50が残る。
50は単体出てくるとPという文字になる。
逆に、Pの前に83を取り付けてやると、ケになる

それとPと\x50が等価というのもわかっているか怪しい文面だな・・・
Perlは文字列リテラル中に\xHHがあると、それを1バイトの文字に展開する。
だから"P"と"\x50"は同じもの
0934デフォルトの名無しさんNGNG
いつもはDTM板にいるけど、間違って違う板クリックしたら、
何を言ってるのかさっぱりわからん。かっこいいなおめーら
0935デフォルトの名無しさんNGNG
漏れも、多分 >>910 がやろうと思ってることをやりたくてちょっと試してみたんですが、
いかんせん >910, >912, >913, >914, >915, >918, >922 のやりとりは断片的すぎて漏れの理解でいいかわからないので確認させてください。

1. >910 がやりたいのは
   @array = foo(); と、
   %hash = foo(); を foo の中で区別すること。
  いわば「配列コンテキスト」と「ハッシュコンテキスト」の区別。

2. >912 が言ったのは、
  foo(\@array) とか foo(\%hash) とかしてリファレンスを渡してやれば foo の中で区別できるじゃん、ということ。

3. >914、>915、>918 を総合すると、
  (ppm install Want.pm として) Want.pm をインスコすれば、@{foo()}、%{foo()} の区別ならできる。
  いわば 「配列へのリファレンスのコンテキスト」と「ハッシュへのリファレンスのコンテキスト」の区別は可。
  ただし、SYNOPSIS は間違ってはいない。(>915 が期待動作を誤解してるだけ。)
  もっと凝った区別もできるのだが、1.はできない。

4. 結局 1. ができなさそうなので、質問者が >922 で投了を宣言した。

でいいんかな?(@◇@;)
「まちガッチョル」とか、「1.はこうすれば実現できる」とか、「〜という理由で、1.は不可能」とか言う人、います?
0936デフォルトの名無しさんNGNG
>>935
>3.
は実際に Want.pm を試して確認したんだろうな?
0937935NGNG
>>936
確認した。疑う気持ちはわかるんだが(漏れも信じられんので)、@{foo()} と %{foo()} が区別できるのよ。
基本的に >>915 が言った通りだなんだが、完全なサンプルを示すと
use Want;
sub foo() {
  if (want('ARRAY')) {
    return [1, 2, 3];
  } elsif (want('HASH')) {
    return { foo => 17, bar => 23};
  }
}
my %hash = %{foo()};
print "$hash{bar}\n"; # 23 と表示される。
my @array = @{foo()};
print $array[2];    # 3 と表示される。

Want.pm をインスコすると、Want.dll というモジュールが付いて来るんだがこの中で怪しいことをしてるらしい。
Want.dll は、多分コンパイル済み中間コード?かな?(まさかネイティブコードでないよね・・・)
0938デフォルトの名無しさんNGNG
>>936 >>937
これだよね?
誰か、解析、よろしく。
http://search.cpan.org/src/ROBIN/Want-0.08/Want.pm
0939デフォルトの名無しさんNGNG
>>937
>Want.dll は、多分コンパイル済み中間コード?かな?(まさかネイティブコードでないよね・・・)
そのまさかでそ。Want.cなんてものついてるし
0940デフォルトの名無しさんNGNG
>>935
http://perldoc.com/perl5.8.4/pod/perl.html#Internals-and-C-Language-Interface
0941デフォルトの名無しさんNGNG
ひとり言…。
やれやれ、呼ばれているサブルーチンから、
呼び出し先の型を見分けるのか。
perl の中には内部的な型がいろいろあるわけだけどさ、
それは基本的に、ref関数で返されるよね。

SCALAR
ARRAY
HASH
CODE
GLOB
REF
LVALUE
IO::Handle

ところが、perlにおけるすべての値は、SV(スカラー値のこと)から
派生したクラスのメンバーとして扱われる。
すべての値は、実はC言語の SV*ポインタ ということらしい。
うーむ、ややこしい。
ただ、ref で見分ければ十分じゃないのかなぁ。
0942935NGNG
>>940
ほーこれが噂の perl エクステンションですか・・・
ここらへんの話は私は不勉強なので、私個人はぼちぼちやるつもり。
他の質問とかレスとかある方は「話の腰を折るんじゃ・・・」とか気にせずドゾー。

今のところ、次のことがわかっちる。
1. v5.6.1 built for MSWin32-x86-multi-thread (Win32 環境の ActivePerl)では、ppm install Want.pm でインスコがオールOK。

で、次のことを実施した。
1. ttp://search.cpan.org/CPAN/authors/id/R/RO/ROBIN/Want-0.08.tar.gz をダウソして解凍。
2. v5.8.5 built for cygwin-thread-multi-64int (Cygwin) で perl Makefile.pl 実行。
3. Makefile ができたので、make。
4. Want.c ができた。

Want.c 解読完了予定はマターク未定。今日はもう寝る。

>>941
> ref で見分ければ十分じゃないのかなぁ。
それだと >>912 が言った方法(つまり >>935 の 2.)になるので、>>910 の要求仕様を満たさないっぽい。
>910 は >913 においてカナーリご不満だったご様子だ。
0943941NGNG
>>941 の補足。
おっと、まだまだ実は内部的な型があるんだね。
IV (内部的整数型)と NV (内部的な浮動小数点数型)とか。
SV (内部のスカラー型)がすべての型の親クラスらしいが、
AV(内部の配列型) CV(内部のサブルーチン型)
GV(内部のグロブ型) HV (内部のハッシュ型)
IV (上で書いた通り)NV (上で書いた通り)
PV (内部的ポインタ値)RV (リファレンス型)
これらはみんな、C言語でtypedefされた型らしい。
ふーん。型がないように見えるperlも
本当はこれだけ型があるわけか…
0944941NGNG
あらあら、プログラミングperl第3版p626〜627
にはもっと詳しく書いてあった。
そこには、I32 とか I16 とか、
UV U32 U16 とかもある。
いずれの型も p@erlgutsドキュメントに記載されている
Cの関数によって操作することができると書いてあるよ。
そして、
perl を拡張するには、C関数との結合部を作るために、
これらの型について知らねばならないとあるな。
Cとの結合のためには、XS と XSUB かい。
ああ、その前にC言語…。ふー。
0945デフォルトの名無しさんNGNG
うざ
0946デフォルトの名無しさんNGNG
>>945
面白いのがお望みなら、
rubyスレにいけよ。
もう、大笑いできるぞ。
俺は、JavaでUMLとかは飽き飽きしたので、
オブジェクト指向はしばらくはいいけど。
しかし、Cはちょっとおもしろそうだな。
0947デフォルトの名無しさんNGNG
>>946
確かに ruby スレは大笑いできる傾向にある。
やはり、ruby には perl ほどのトラップがないから、ヒマをもてあますあまり
ネタに走ったり布教活動始めたりするからだろうね。
0948デフォルトの名無しさんNGNG
「今日知ったPerlの知識」
というスレでも作って、初心者が、みんな知ってることを
自慢気に開陳しても嘲笑されたりうるさがられたり
しないようにするという解決法を提案します。
0949デフォルトの名無しさんNGNG
>>948 読んだ >>941 はきっと >>942 のことだと思い、
>>942 はきっと >>941 のことだと思って改善せんねこりゃあ ┐(´д`)┌
0950デフォルトの名無しさんNGNG
92 :デフォルトの名無しさん :05/01/16 03:58:57
Effective Perlを買ってきたが、なんじゃこの訳?

ともかく文のリズムが悪くて読みづらいのはがまんするとして、どうにも
意味が取りづらい文が大杉(原書は読んでないが、たぶんオリジナルは
普通にわかりやすい文だと思う)。おそらく自分でも意味が分からずに
訳しているのだろう。どっかの大学の英文科に安い翻訳料でやらせたのモロばれw

まぁコンピュータ関連の翻訳の程度なんて元からひどいのがおおいが、
オライリの近藤嘉雪氏の訳がこなれているだけに、つい比較してしまう。

まず「序言」読んだ瞬間に、翻訳者の程度の低さがわかってしまう。
ここに出てくる「英語(English)」は、こういう文脈の場合「国語と訳せ」
というのは翻訳のごく初歩。完全に素人。ひさしぶりに糞翻訳読んで腹がたった
0951デフォルトの名無しさんNGNG
翻訳なんかに期待するから……と、大学院時代に翻訳バイトで
飯食ってた私は思ふ……

だってね〜
翻訳会社に行って6人くらいで黙々とUNIXの本の翻訳を校正してるわけよ(大声)!!
それで、他の人がUNIX用語の日本語訳の慣習を無視した訳語に修正しているから、
なんだと思ったら、私以外、「UNIXって何?」っていう連中だったのよ(絶叫)!!

0952932NGNG
>>933
マルチバイト文字は調べて大体分かってきたんですけど、
後半のところがよく分かりません。

>Perlは文字列リテラル中に\xHHがあると、それを1バイトの文字に展開する。

のところで、"\x50"→"P"となるのは分かるのですが、
何故"P"→"\x50"となるのでしょうか?

あとあまり関係ないかもしれませんが、
print "\x83P";
では「ケ」になりますが
print "\x83PPP";
では「ケPP」になりました。
0953デフォルトの名無しさんNGNG
>>952
Pと書いたファイルを、バイナリで見てみると 50 になっている。
一方向の問題ではなく、等しいのですよ。 P = \x50
そもそも、キャラクタなんていうものは人が理解するために割り当てている物。
普段使うテキストファイルだって、実際には内部では0と1の集まり。
Pと書いたファイルは、プログラムでは\x50と認識しているだけ。

後半の所は、P = \x50を理解した後に試すと解るが、
83 50 50 50 というバイナリのファイルをエディタで見る、若しくはケPPPというファイルをバイナリで見れ。
0954941NGNG
>>948 では、ベテランのお前が、これを説明せいや。
楽勝でわかるんだろ。え?!(まあ、俺でもなんとなく分かるけどな)
PERLGUTSより SV の操作
 SV は、1 つのコマンドで生成し、値をロードすることができます。
 ロードできる値の型には、整数 (IV)、倍精度 (NV)、文字列 (PV)、
 その他のスカラ (SV) があります。
 これらを行なう、4 つのルーティンは:
SV* newSViv(IV);
SV* newSVnv(double);
SV* newSVpv(char*, int);
SV* newSVsv(SV*);
 です。 「既に存在する」スカラの値を変更するために 5 つのル
 ーティンがあります:
void sv_setiv(SV*, IV);
void sv_setnv(SV*, double);
void sv_setpvn(SV*, char*, int)
void sv_setpv(SV*, char*);
void sv_setsv(SV*, SV*);
0955941NGNG
>>954 は、これが分からんと、
want.pmの謎を説く基礎になるんじゃないか、
ということだからな。
初心者なんで、優しく頼むぞ。ボケ
0956941NGNG
待ってんだけどな。

早くしろ。ボケ
0957デフォルトの名無しさんNGNG
>>952
まずテキストデータをバイナリデータとして見ることもできる。
\x83 \x50 というデータをそのまま扱ってもいいし、
SJISで頭から「ケ」と読んでもいいし、
前半だけ\x83のままで置いといて\x50が「たまたま」「P」に対応してるから置換えてもいい。

例えば2chでメル欄に「sage」と入れると上がらないだろ。
メル欄に「sage」(=\x73 \x61 \x67 \x65)があるかどうかを探してるわけだ。
そして「都age」をバイナリデータで表すと「\x93\x73 \x61 \x67 \x65」。
\x73\x61\x67\x65が入ってるので上がらない。
0958デフォルトの名無しさんNGNG
まだでるの?
0959デフォルトの名無しさんNGNG
ガッツだぜ〜
0960デフォルトの名無しさんNGNG
チラシの裏 という言葉を初めて使いたくなった
0961デフォルトの名無しさんNGNG
便所の落書き
0962デフォルトの名無しさんNGNG
質問です。
Perlを使っている人はあまりGUIを作りたいとは思わない(そういう用途には使わない)のでしょうか?
wxPythonというものの存在を知ってちょっと検索してみたのですが、
wxPerlというものもあるけど、あまり盛り上がってないというか、日本語でその話をしている所がほとんどなさそうです。
どうしてでしょうか。
0963デフォルトの名無しさんNGNG
Perl/Tkが有名だから。
0964デフォルトの名無しさんNGNG
なるへそ。同等以上の事ができるんですね?
厨な質問にお答えいただきありがとうございました。
0965デフォルトの名無しさんNGNG
>同等以上の事ができるんですね?
それは、知らん。
オライリーから本でてるし、情報得やすいことは確かだろうが。
0966デフォルトの名無しさんNGNG
>>966
Javaとの比較しか分からんけど、
イベントとかの扱いは、問題にならないほど簡単みたいだったよ。
(だった、というのは、ちょっと試しただけだからだけど。
 JavaはRADの支援がないと、とてもやってられないと思う)
ただ、日本語もいちおう扱えるみたいだけど、
まだまだ問題があるみたい。
0967デフォルトの名無しさんNGNG
質問です。

perlで、LWP::UserAgentモジュールを使って特許庁のHP
http://www2.ipdl.ncipi.go.jp/begin/be_search.cgi?STYLE=login&sTime=
から、特許の検索を自動化しようとして、次のコードを書いてみたんですが

use LWP::UserAgent;
use HTTP::Request::Common qw(POST);

my $url = 'http://www2.ipdl.ncipi.go.jp/begin/be_search.cgi';
$times = time();
$times = $times . '000';
my %formdata = (STYLE => 'search', S_WORD1 => '画像処理', R_TYPE1 => '02', BE_SEARCH => '検索実行', sTime => $times);
my $req = POST($url, [%formdata]);
$ua = LWP::UserAgent->new;
$ua->agent("Mozilla/8.0");
$res = $ua->request($req);
print $res->content;

本来なら50012件ぐらい、ヒットするはずが
「初心者向け検索」というタイトルの真っ白なエラーページに
飛ばされてしまいます。フォームデーターは完璧だと、思うのですが
もし解析できるかた、解決できる方いらっしゃったらhelp!
0968デフォルトの名無しさんNGNG
HTTPDの機能を持つライブラリとかありますか?
POPfileとか、あれどのように実現してるんでしょうか?自前で組んでるんですか?
0969デフォルトの名無しさんNGNG
>>967
use LWP::UserAgent;
my $ua = LWP::UserAgent->new(
 agent => "Mozilla/8.0",
);

my %formdata = (
 STYLE => 'search',
 S_WORD1 => '画像処理',
 R_TYPE1 => '02',
 BE_SEARCH => '検索実行',
 sTime => time * 1000
);
my $res = $ua->post( $url, \%formdata );
print $res->is_success ? $res->content : 'Error.' ;

http://search.cpan.org/~gaas/libwww-perl-5.803/lib/LWP/UserAgent.pm
の例文に習ってこんな感じでいーんじゃないの?
0970デフォルトの名無しさんNGNG
>>969
あらやだ、
my $url = 'http://www2.ipdl.ncipi.go.jp/begin/be_search.cgi';
が抜けてたorz

ちなみに漏れの名前で検索したら出てきたyo. orz
0971デフォルトの名無しさんNGNG
>>969
うーん...だめみたい。
他に誰か特許庁のHPから特許検索を自動化したことある人いないかな…?
0972デフォルトの名無しさんNGNG
>>969
use LWP::UserAgent;
my $ua = LWP::UserAgent->new(agent => "Mozilla/8.0");

my %formdata = (
STYLE => 'search',
S_WORD1 => '画像処理',
R_TYPE1 => '02',
BE_SEARCH => '検索実行',
sTime => time * 1000
);
my $url = 'http://www2.ipdl.ncipi.go.jp/begin/be_search.cgi';
my $res = $ua->post( $url, \%formdata );
print $res->is_success ? $res->content : 'Error.' ;

perlから、以上のコードを実行してみたんですが、普通にwebから
検索したときのように結果が返ってこないんです。うーん……
0973デフォルトの名無しさんNGNG
>>971
まずまともに検索できるブラウザでどういうやりとりを
してるか調べて、それをなるべく忠実に再現するのが
一番じゃないかな。

ありがちなのは

(1) refererをチェックしている
(2) agentをチェックしている
(3) クッキー食わないとだめ

あたりか。
0974971NGNG
>>973
refererの設定の仕方を調べてみます。

それでもダメなら
etherealを使って調べてみようと考えました。

もしだれか、「perlから検索通ったぞ!」って方、いたらば
こうやりなっせ、とレスください。
yahooとかgoogleとかだったらフォームをpostできるのに...
特許庁のバカーン 俺の技術の無さバカバカーン 。・゚・(ノД`)・゚・。
0975デフォルトの名無しさんNGNG
>>973
http://www2.ipdl.ncipi.go.jp/begin/be_search.cgi?STYLE=login&sTime=
ブラウザー(mozilla)からを開いて、食べたクッキーを全部消してreloadし、
検索実行したら、
「クッキーないよ!」というエラーメッセがでました!!
これが原因かも... 微妙にperlからpostしたときとエラーメッセージが異なりはしますが...
(「サーバーが混雑してます」のようなメッセージが出ます。)

レスありがとうございました。
0976デフォルトの名無しさんNGNG
>>968
http://search.cpan.org/~gaas/libwww-perl-5.803/lib/HTTP/Daemon.pm
http://sourceforge.net/project/showfiles.php?group_id=63137&package_id=59947
0977952NGNG
バイナリエディタで見てみると確かに 80 50 50 50 になっていました。
P = \x50 というのは理解できたつもりなのですが、
何故「\x83P」とすると「\x83」と合体して1つの文字になるのかが分かりませんでした。

それで父に聞いてみたんですが…(すみません(汗))
(Shift JISの)「83」というのが2バイト用のコードなので
その次の1バイトも足されて1文字になる、みたいなことを言ってました。
2バイト用のコードというものの具体的な範囲はちょっと分かりませんが、
その範囲内の値であれば同じような動作をするということみたいですね。

…父はPerlは知らないので、もしも何か間違っていればまたご指摘下さい。
この度は色々とありがとうございました。
0978デフォルトの名無しさんNGNG
>>971
次のリクエストで通ったよ。というわけで、UA や Referer チェックは今のところしてないらしい。(Set-Cookie 時は知らん。)
クッキーはずすとだめ。

POST /begin/be_search.cgi HTTP/1.1
Host: www2.ipdl.ncipi.go.jp
Content-Length: 74
Cookie: Name=BE11105876026 StartTime=...(省略)... LADDR=xxx.xxx.xx.xxx;

STYLE=search&S_WORD1=%89%B7%93x%92%B2%90%DF&R_TYPE1=02&sTime=1105877528381

(上のは最低限の例ということで。Connection: close ぐらいは入れたほうが良いかも。)
0979デフォルトの名無しさんNGNG
こんな時にはやっぱりWWW::Mechanize
0980デフォルトの名無しさんNGNG
>>977
> 何故「\x83P」とすると「\x83」と合体して1つの文字になるのかが分かりませんでした。
何故って、表示端末が「\x83\x50を受け取ったら」「"ケ"を表示する」って設定されてるから。考えすぎ。
0981デフォルトの名無しさんNGNG
>>976
 ありがとうございます!!libwwwってクライアントだけと思ってました。。。
0982デフォルトの名無しさんNGNG
>>975
my $ua = LWP::UserAgent->new(
agent => qq|mozilla/8.00|,
cookie_jar => { file => "./.cookies" }, # これを追加して・・・
);
my $res = $ua->get(sprint qq|http://www2.ipdl.ncipi.go.jp/begin/be_search.cgi?STYLE=login&sTime=%d|, time);
$ua->cookie_jar->save; # 久喜を保存するとよいかモナー
0983デフォルトの名無しさんNGNG
文字コード板に行ったほうがいいよな
0984デフォルトの名無しさん05/01/17 00:42:11
>>977
>2バイト用のコードというものの具体的な範囲はちょっと分かりませんが、
>>933
>1バイト目が81〜9F、E0〜FCなら次のもう一バイトとあわせてひとつの文字になる。
0985デフォルトの名無しさん05/01/17 00:59:44
もうそろそろ誰か次スレ立てれ
0986デフォルトの名無しさん05/01/17 01:13:35
文字コードの話題は次スレでも延々と続けるんですかね?
続けるなら書店で文字コードの本買ってひととおり読んできてからにして欲しいですよ。
0987デフォルトの名無しさん05/01/17 01:44:09
確かに他所でやって欲しいな
0988デフォルトの名無しさん05/01/17 04:59:41
会員約500人分のデータ(URLやサイトの紹介)をWeb上管理したいですが、
このぐらいの数を管理するのに良い方法ってありますか?
使っているサーバはPHPは使えません。

今まで修正・削除などを
「ファイル開く→全データ取り込む→該当データを検索→処理→処理結果を反映して保存」
この単純な方法でやってきたんですが、もっと良い管理方法がありますか?
0989デフォルトの名無しさん05/01/17 05:07:25
>>988
>>1嫁
099098805/01/17 10:10:30
嫌だ>>989
099198805/01/17 17:19:10
勝手に名乗るな偽者が。氏ね
0992デフォルトの名無しさん05/01/17 17:31:42
もうすぐ終わり
0993デフォルトの名無しさん05/01/17 17:34:00
>>991
死ね
0994デフォルトの名無しさん05/01/17 17:34:07
7
0995デフォルトの名無しさん05/01/17 17:35:11
六
0996デフォルトの名無しさん05/01/17 17:37:28
よん
0997デフォルトの名無しさん05/01/17 17:39:10
さん!
0998デフォルトの名無しさん05/01/17 17:40:20
にー!
0999デフォルトの名無しさん05/01/17 18:25:19
さん!
1000デフォルトの名無しさん05/01/17 18:26:05
これにておしまい
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。