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

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

■ このスレッドは過去ログ倉庫に格納されています
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そこでしか使ってないからいらないだろ。
■ このスレッドは過去ログ倉庫に格納されています