Perlについての質問箱 29箱目
at TECH
1:デフォルトの名無しさん
06/12/21 22:35:39
"The duct tape of the Internet" こと、Perlについての質問箱です。
"There's more than one way to do it" ということで、Perlの奥深さについて皆で語り合い、追求してまいりましょう。
CGIについての質問は板違いです。WEBプログラミング板でどうぞ。
CGIとPerlの区別がつかない人もWEBプログラミング板に行ってください。
(WEBプログラミング板 URLリンク(pc8.2ch.net) )
CGIの質問は答えがPerlと全然関係ない話に帰着する場合が多かったりするのでWEBプログラミング板に行って聞いたほうが得ですよ。
このスレでは(CGI以外の)純粋にPerlのみに関係する質問を取り扱っていこうと思います。
スレ違いの質問にはスルーか、速やかな誘導をお願いします。
URLリンク(www.perl.org)
● 2006/12/21現在の最新版: 5.8.8
● 2006/12/21現在の開発版: 5.9.3
前スレ
Perlについての質問箱 28箱目
スレリンク(tech板)
リンク集は>>2-3
過去スレは>>4
2:デフォルトの名無しさん
06/12/21 22:36:10
[プログラミング自体の経験が無い奴はまずココを読め]
Perlプログラミング講座: URLリンク(www.site-cooler.com)
[本]
リャマ: URLリンク(www.oreilly.co.jp)
駱駝: URLリンク(www.oreilly.co.jp)
Effective Perl: URLリンク(www.ascii.co.jp)
クックブック: URLリンク(www.oreilly.co.jp)
[オンラインマニュアル] (追加)
最新のドキュメント: URLリンク(search.cpan.org)
perl5.8.xのドキュメント(一部): URLリンク(www.kt.rim.or.jp)
perl5.005_03 のドキュメント: URLリンク(www.kt.rim.or.jp)
日本語ドキュメント検索: URLリンク(www.cpan.jp)
perldoc.jp: URLリンク(www.perldoc.jp)
Perldoc.com: URLリンク(www.perldoc.com)
3:デフォルトの名無しさん
06/12/21 22:36:40
[モジュール]
CPAN.com: URLリンク(search.cpan.org)
河馬屋二千年堂: URLリンク(homepage3.nifty.com)
[テクニック]
Perlメモ: URLリンク(www.din.or.jp)
Perlのページ: URLリンク(homepage1.nifty.com)
Perlの小技: URLリンク(homepage3.nifty.com)
[Perl5.8Unicodeメモ]
URLリンク(www.pure.ne.jp)
URLリンク(www.namazu.org)
URLリンク(www.lr.pi.titech.ac.jp)
4:デフォルトの名無しさん
06/12/21 22:37:13
[過去スレ]
1 URLリンク(pc.2ch.net)
2 URLリンク(pc3.2ch.net)
3 URLリンク(pc2.2ch.net)
4 URLリンク(pc2.2ch.net)
5 URLリンク(pc5.2ch.net)
6 URLリンク(pc5.2ch.net)
7 スレリンク(tech板)
8 スレリンク(tech板)
9 スレリンク(tech板)
10 スレリンク(tech板)
11 スレリンク(tech板)
12 スレリンク(tech板)
13 スレリンク(tech板)
14 スレリンク(tech板)
15 スレリンク(tech板)
16 スレリンク(tech板)
17 スレリンク(tech板)
18 スレリンク(tech板)
19 スレリンク(tech板)
20 スレリンク(tech板)
21 スレリンク(tech板)
22 スレリンク(tech板)
23 スレリンク(tech板)
24 スレリンク(tech板)
25 スレリンク(tech板)
26 スレリンク(tech板)
27 スレリンク(tech板)
28 スレリンク(tech板)
5:デフォルトの名無しさん
06/12/21 22:38:30
>>1 乙でし
6: ◆TWARamEjuA
06/12/21 22:56:34 BE:4574276-BRZ(6677)
(´-`).。oO(「埋め」やっているやつは石器時代の人間か?)
7:デフォルトの名無しさん
06/12/21 23:05:10
>>6
現代人なら何するの?
8:デフォルトの名無しさん
06/12/21 23:13:39
ごめんね、おかあさんじょーくでquineかきこんだから、ごめんね
前スレ>>985
一応答えておきましょう。2変数の値の交換。
($x, $y) = ($y, $x)
で$xに$yの値を代入して、$yに元の$xの値を代入
if ($x < $y) { ($x, $y) = ($y, $x) }
で、$xのほうが小さかったら$yと入れ替える。つまり$xのほうが大きくなるようにすると言う意味。
9:デフォルトの名無しさん
06/12/21 23:29:13
>>7
1000まで無駄なく使う、ってわざわざ言わなきゃわからないのか?
10:デフォルトの名無しさん
06/12/21 23:38:48
スレ隔てると中途半端になりそうな気もするがね。
11:デフォルトの名無しさん
06/12/21 23:42:00
C/C++も、Javaも、Rubyも、Pythonも宿題スレがあるんだな。
だから空気の読めない初心者が混ざるのか。
12:デフォルトの名無しさん
06/12/22 00:03:24
ちゃんと問題そのものを載せてくれるとまだ良いんだけどな
13:デフォルトの名無しさん
06/12/22 01:30:06
>>11
質問箱なんだから初心者が来るのは構わないんだけど結局>>12の言うとおりじゃない?
14:デフォルトの名無しさん
06/12/22 01:58:54
問題そのものを載せないのもそうだが
コードが動かないときに自分の思いこみでコードの一部分だけ切り出して貼ったり
途中までやったけど分かりませんって書いて コードは一行もなかったり
15:GOLFer名無しさん
06/12/22 02:27:18
@t=($x=1,$y=2,$z=3);
$w=($l=@t)**2;
{$j = 0;while(1){$i=0;while(1){@t[$i,$i+1]=
([$t[$i]=>$t[$i+1]]->[$t[$i]<=$t[$i+1]]=>[$t[$i+1]=>$t[$i]]->[$t[$i]<=$t[$i+1]]);
last if$i++==$l;}last if$j++==$w;}}
print "@t";
16:デフォルトの名無しさん
06/12/22 07:52:52
>>1 乙
my @in = qw( 4 2 6 ) ;
my @new ;
for( 0..$#in ){
my $min = $in[0] ;
my $ind = 0 ;
for (0 .. $#in ){
if ( $min > $in[$_] ){
$min = $in[$_] ;
$ind = $_ ;
}
}
push @new, $min ;
splice @in, $ind, 1 ;
}
print @new , "\n" ;
17:デフォルトの名無しさん
06/12/22 12:42:52
>>14
なんかエラーがでます。
そのエラーを貼れよ!!
18:デフォルトの名無しさん
06/12/22 22:16:57
○○ if △△ の形の条件分岐とかって使ってる? 俺は使ってないんだが。
19:デフォルトの名無しさん
06/12/22 22:20:55
next ifとreturn ifは使う
20:デフォルトの名無しさん
06/12/23 00:05:34
elseを伴わない場合で処理が1行ならほぼ間違いなく使う。
21:デフォルトの名無しさん
06/12/23 00:12:52
すいません、ちょっと質問です。
jcode.pm で、文字コードを自動判定させると
なんか時々変な判断しませんか。
#別に半角カタカナは使ってはいません。
例:
$szName = Jcode->new("ほげほげ")->euc;
・・・・・たっぷりと文字列処理
print Jcode->new($szName)->sjis;
# あれ? なんか化けてる。
$szName = Jcode->new("ほげほげ".'sjis')->euc;
・・・・・たっぷりと文字列処理
print Jcode->new($szName,'euc')->sjis;
# うん、これならOK. でも引数が多いのは嫌ですね。
22:デフォルトの名無しさん
06/12/23 00:19:52
そもそも、バイト列の並びから文字コードを確実に判定する方法なんてないですよ。
23:デフォルトの名無しさん
06/12/23 01:01:47
だよね
可能なら自動判定は避けるべき
漢字一文字だと一部の漢字は自動判定できないし
cgiの場合なら入力時の漢字コードは決まっていると思うので、元の漢字コードを指定しましょう
24:18
06/12/23 01:44:44
結構みんなバラバラなのね。うちの周りだと使ってる人がほぼゼロだった。
純粋なPGがいないからかもしれないが。
25:デフォルトの名無しさん
06/12/23 01:51:22
関係ないですが
$sql = "select from T_hogehoge where (判定='A')";
てのを書いてて、「あ、右端に顔文字・・・・」と思ってしまいますた。
・・・・余談でつ。
26:デフォルトの名無しさん
06/12/23 02:09:12
>>18
あまり複雑な条件では使わない
my $fh = new IO::File ">hoge";
return undef unless defined $fh;
とか
$str .= "hoge¥n";
$str .= "moge¥n" if $flag;
return $str;
とか
27:デフォルトの名無しさん
06/12/23 03:25:00
>>26
後者は同意だけど、前者は
my $fh = new IO::File ">hoge"
or return;
と書くおいら
perlstyleに言及があるとおり、場面に合わせて読みやすいであろう方を選択だよね。
28:デフォルトの名無しさん
06/12/23 08:33:59
ソースのインデント増やしたくないから積極的に
利用する(ある意味 next とかの積極利用なんだけど )
29:デフォルトの名無しさん
06/12/23 08:54:26
PBPに
while ( <> ){
next if !/^(\S+)\s+(\S+)$/ ;
#ここで$1, $2 の処理をする
}
みたく書いてあったときはある意味衝撃だったw
ええ知らなかっただけですともorz...
30:デフォルトの名無しさん
06/12/23 10:12:42
\ を一々 \ に変えてる奴って頭おかしいの?
31:デフォルトの名無しさん
06/12/23 10:21:08
>>30
Safari厨だと思われ。
32:デフォルトの名無しさん
06/12/23 12:21:42
Vistaになればみんなそうなるのかな?
33:デフォルトの名無しさん
06/12/23 13:43:42
>>32
ならない。
34:デフォルトの名無しさん
06/12/23 16:33:52
useしたモジュールで発生する"Use of uninitialized value"エラーを出力させたくないのですが、
どのようにしたらよろしいでしょうか?
モジュールには手を加えたくないのですが。。
35:デフォルトの名無しさん
06/12/23 16:59:53
perl -w を使わずに use warnings すればいいんじゃね?
36:34
06/12/23 17:21:35
>>35
質問文が分かりにくくてすみません;
#program start
use hogehoge 'hoge';
print hoge('unko');
#program end
例えば、上記のプログラムを実行して標準出力に出力される、
"Use of uninitialized value in %s at hogehoge.pm line 30."
というエラーの出力を止めたいのです。。
37:デフォルトの名無しさん
06/12/23 17:52:44
>>36
つまり何か。hogehogeモジュールがその中でwarningsプラグマを有効にしているにも拘らず、
正常な処理の範囲内でundefinedな値のチェックを怠っていて、しかも、
他の人が作ったモジュールだから触るわけには行かない。とそういう状況なわけか。
38:34
06/12/23 18:01:53
>>37
Yes!まさにその通りです!
39:デフォルトの名無しさん
06/12/23 19:03:35
レキシカルな特殊変数に干渉する方法がわからん…
一応、思いついたDirty Hack二通り
1.
BEGIN { local *warnings::import;
require hogehoge; import hogehoge 'hoge'; }
2.
{ use IO::Null;
tie local *STDERR, 'IO::Null';
print hoge('unko'); }
40:デフォルトの名無しさん
06/12/23 19:37:17
いったんhogehogeにパッケージ切り替えてno warnings 'uninitialized';したら?
use hogehoge qw/hoge/;
package hogehoge;
no warnings qw/uninitialized/;
package main;
print hoge('unko');
試してないからわからん。
41:デフォルトの名無しさん
06/12/23 20:11:47
表示されなければいいのなら$SIG{__WARN__}を定義して横取りする手もある。
The routine indicated by $SIG{__WARN__} is called when a warn-
ing message is about to be printed. The warning message is
passed as the first argument. The presence of a __WARN__ hook
causes the ordinary printing of warnings to STDERR to be sup-
pressed.
42:34
06/12/23 23:26:18
>>39-41
ありがとうございます _ _
>>39さんの1の方法を使わせていただきました。
>>40
no useは地の文での解釈となってしまうようでした。
43:デフォルトの名無しさん
06/12/24 12:18:30
perl で PDFからテキストコンバータしたいんだけど、そんなモジュールってある?
44:デフォルトの名無しさん
06/12/24 12:34:08
URLリンク(search.cpan.org)
たくさんあるんじゃね?
45:デフォルトの名無しさん
06/12/24 12:36:07
CPANでそうやってけんさくするのか。
ありがとう。
46:デフォルトの名無しさん
06/12/24 15:04:19
WindowsのActivePerl-5.8.8.819-MSWin32-x86-267479.msiでインストールしたパッケージに
Jcode.pmと新しいEncode.pmとEUCJPMSをインストールしようとしましたが、
Jcode.pm以外はインストールできませんでした。
Encode.pmの場合は
NMAKE : fatal error U1077: 'C:\MSVSEE\VC\bin\cl.EXE' : リターン コード '0x80'
Stop.
NMAKE : fatal error U1077: 'C:\MSVSEE\VC\bin\nmake.exe' : リターン コード '0x2'
Stop.
EUCJPMSの場合は
NMAKE : fatal error U1077: 'C:\MSVSEE\VC\bin\cl.EXE' : リターン コード '0x80'
Stop.
このようになり、Makefileからmakeできませんでした。
ほかにインストールする方法はないものでしょうか。
47:デフォルトの名無しさん
06/12/24 17:36:55
「4の倍数」や「4で割り切れる」という条件は、どのように表したらよいのでしょうか?
48:デフォルトの名無しさん
06/12/24 17:51:58
>>47
if ($num % 4 == 0)
49:デフォルトの名無しさん
06/12/24 18:18:20
>>46
ppm install
50:46
06/12/24 19:14:23
すいません自己解決しました。
vcのincludeやlibへのパスがうまく通っていなかったようです。
設定しなおしたらmakeできました。
>>49
ppmでやろうと思ったらそんなもんねーよとppmに怒られてしまいました。
51:47
06/12/24 20:06:57
2で割り切れても50で割り切れない
上記のようなものはどう表示すればよいのでしょうか?
52:デフォルトの名無しさん
06/12/24 20:14:04
これはひどい
53:47
06/12/24 20:25:26
事故解決しました
54:デフォルトの名無しさん
06/12/24 20:27:39
>>51
if(2で割り切れる? = はい){
if(50で割り切れる? = いいえ){
print "2で割り切れるけど、50で割り切れないよ。";
}
}
55:デフォルトの名無しさん
06/12/24 20:35:28
>>50
解決して何より。
だけどppmはリポジトリを追加するともっと強力になるよん。
Encodeの最新版はTheoryx5リポジトリにある。
Encode-EUCJPMSは検索したらパッケージを作ってる人がいました。
URLリンク(asakura.g.hatena.ne.jp)
56:デフォルトの名無しさん
06/12/24 21:02:59
>>50
ppm では
search hoge* してからにすべし
Foo::bar というモジュール名は
経験上、ppm では install Foo-Bar の名称で指定することが多し。
<ちらしの裏>
追記すると、最新の ActivePerl (Win32) では
ppm だと GUIウインドウが開く。
ppm-shell だと、従来通りのコマンドライン版が起動する。
</ちらしの裏>
57:デフォルトの名無しさん
06/12/24 23:13:43
perlって何を造るための言語なんだ?
結局はWeb関連だったらツマランわ
58:デフォルトの名無しさん
06/12/24 23:17:02
聖夜釣ですか
59:デフォルトの名無しさん
06/12/24 23:35:41
Spreadsheet::WriteExcelでは既存のファイルを開けないことが判明orz
VBAコードを仕込んでおきたかったんだけど、なんかうまい方法はないでしょうか。
Linuxサーバ上でやりたいため、WIn32::OLEという解は使えません…。
60:デフォルトの名無しさん
06/12/25 13:28:50
>>57
Perl is a programming language for getting your job done.
61:デフォルトの名無しさん
06/12/25 18:56:23
すみません。どなたか教えてくださいませ。
コード値を文字にしたいのですが、日本語はどのようにしたらよろしいのでしょうか?
chrは2バイト文字はだめってのはわかったんですが。
ちなみにシフトJISのコードを変換したいです。
例 0x82A0 → あ
62:デフォルトの名無しさん
06/12/25 19:17:21
$str = pack("H*","82A0");
63:61
06/12/25 19:22:37
>62
ありがとうございます!
packの奥は深いっすね〜
もっと勉強します!
64:デフォルトの名無しさん
06/12/25 21:15:28
>>60
ワロタ
65:デフォルトの名無しさん
06/12/26 01:22:43
今日からオライリーのPerlの本で勉強始めます。
来月から仕事で使いそうなんで・・・
66:デフォルトの名無しさん
06/12/26 01:33:16
ここは俺の日記帳だからお前は日記を書くな
67:デフォルトの名無しさん
06/12/26 01:39:30
chomp
68:デフォルトの名無しさん
06/12/26 03:21:37
質問
文字化けする理由を教えてください。
スクリプト
-------------------
$str="あー";
print $str;
print "\n";
$tmp="−";
$str =~ s/$tmp//g;
print $str;
--------------------
実行結果
--------------------
あー
あ[
--------------------
69:68
06/12/26 03:24:04
追記
環境Windowsで.plファイルのエンコードはShift-JISです。
実行結果はコマンドプロンプトでの実行結果です。
70:デフォルトの名無しさん
06/12/26 03:58:22
− = 81 7c
| = 7c
より、$str =~ s/$tmp//g;は
$str =~ s/(文字コード81)|//g;とPerlに解釈されています。
つまり、$str内の文字コード81か、空文字にマッチングしそれが削除されます。
あー = 82 a0 81 5b内の81を削除すると82 a0 5bとなり
これをShift_JISで表示すると[ = 5bよりあ[となります。
71:68
06/12/26 04:50:18
>>70
丁寧な解説ありがとうございました。
$tmp="−";
$str =~ s/$tmp//g;
を
$str =~ s/\x81\x7c//g;
とすることによって解決できました。
72:デフォルトの名無しさん
06/12/26 10:26:52
そうくるかw
73:デフォルトの名無しさん
06/12/26 11:46:16
Perl4時代の息吹を感じました。
74:デフォルトの名無しさん
06/12/26 16:00:24
すみません、CPANにあるHTML::TableExtractについての質問です。
URLリンク(search.cpan.org)
↑のREGULAR METHODSにあるdepths()メソッドの文字を変数に代入したいんです。。
然るべき手順を踏んで、
print $te->depths();
するときちんとdepths()メソッドの文字が表示されるのですが、
my $test = $te->depths();
print $test;
すると"Use of uninitialized value in print"というエラーが出てしまいます。。
全く訳が分からず打ち間違えを確認したりして同じ事を何回も繰り返したりしたのですが、
訳が分からないです。。どなたがご助言お願いいたします _ _
75:デフォルトの名無しさん
06/12/26 16:03:36
>>66
r;ァ'N;:::::::::::::,ィ/ >::::::::::ヽ
. 〃 ヽル1'´ ∠:::::::::::::::::i
i′ ___, - ,. = -一  ̄l:::::::::::::::l
. ! , -==、´r' l::::::/,ニ.ヽ
l _,, -‐''二ゝ l::::l f゙ヽ |、
レー-- 、ヽヾニ-ァ,ニ;=、_ !:::l ) } ト
ヾ¨'7"ry、` ー゙='ニ,,,` }::ヽ(ノ 2ちゃんはみんなの日記帳だから
:ーゝヽ、 !´ " ̄ 'l,;;;;,,,.、 ,i:::::::ミ
::::::::::::::::ヽ.-‐ ト、 r'_{ __)`ニゝ、 ,,iリ::::::::ミ
::::::::::::::::::::Vi/l:::V'´;ッ`ニ´ー-ッ-,、:::::`"::::::::::::::;゙ , な!
:::::::::::::::::::::::::N. ゙、::::ヾ,.`二ニ´∠,,.i::::::::::::::::::::///
:::::::::::::::::::::::::::::l ヽ;:::::::::::::::::::::::::::::::::::::::::::/ /
::::::::::::::::::::::::::::::! :|.\;::::::::::::::::::::::::::::::/ /
76:74
06/12/26 16:04:22
ごめんなさい。配列型で返ってきてました。。
77:デフォルトの名無しさん
06/12/26 16:26:50
>>73
use utf8を使えば文字を直接置換できるかな?
78:デフォルトの名無しさん
06/12/26 16:43:49
>>68
スレリンク(php板:498-512番)
79:デフォルトの名無しさん
06/12/27 02:04:44
パール無図杉
80:デフォルトの名無しさん
06/12/27 23:00:18
すみません、質問があります。
WindowsのActive Perl v5.5.8です。
UTF16の日本語ファイルを開いて処理させようとすると
処理結果のテキストが文字化けしてしまいます。
Shift JISとUTF8形式だと問題なく処理できるのですが…。
UTF16でうまく処理できる方法はないでしょうか?
81:デフォルトの名無しさん
06/12/28 01:01:06
>>80
シフトJISのファイルを扱うとき、
binmode STDOUT, ":encoding(cp932)";
binmode STDERR, ":encoding(cp932)";
binmode STDIN, ":encoding(cp932)";
use open IO => ":encoding(cp932)";
とか書かなかった?
cp932 を例えば、UTF-16LE に変えれば済むことと思われるが。
82:デフォルトの名無しさん
06/12/28 01:12:53
>>80
前スレがまだ残っているので、前スレ 694 からの流れを参照。
対策としては、前スレ 703 のリンク先にある方法が無難だと思う。
83:デフォルトの名無しさん
06/12/28 01:24:39
>>81さん
シフトJISのときは何も指定せずにいけました。
>>82さん
ありがとうございます。
明日頑張ってみます。
84:デフォルトの名無しさん
06/12/28 11:31:19
Activeperl でタイムアウトを指定してホスト名を逆引き(gethostbyaddr)
するプログラムを書いています。タイムアウトした場合にはIPアドレスを
返そうと思います。そこで以下のようなサブルーチンを書いたのですが、
タイムアウトしません。古いActiveperlではalarmがないとの情報があった
のですが、sleep行で確認した所、5.8.8では問題ないようです。
お知恵を拝借頂ければ幸いです。
sub resolv_host {
my ($ip)=@_; my $timeout=2; my $host;
$SIG{ALRM} = sub { die 'TIMED OUT' };
eval {
alarm($timeout);
# ホスト名を逆引きする。
#sleep 5;
$host = gethostbyaddr(pack("C4", split(/\./, $ip)), 2);
alarm(0);
};
alarm(0);
if ( $@ =~ /TIMED OUT/ ){ $host = $ip;}
return ($host);
}
※実行環境は以下の通りです。
Windows XP SP2
Activeperl 5.8.8
85: ◆TWARamEjuA
06/12/28 13:23:20 BE:2178454-BRZ(6677)
Net::DNS を利用するのはいかがかしら?
86:デフォルトの名無しさん
06/12/28 17:31:04
他所様のサーバの混雑具合を調べるプログラムを書こうとしています。
use IO::Socket;
my $sock = IO::Socket::INET->new(
PeerAddr => $ip,
PeerPort => $port,
Proto => 'tcp',
Timeout => $TIMEOUT,
);
if ($sock) {
#接続成功
} else {
#タイムアウト
}
今現在のコードがこんな感じでして、繋がる繋がらないは分かるのですが、
接続に要する時間を調べたいもののその方法がわかりません。
SOCKETを触るのが今回初めてでして、
そもそもにおいて根本的な過ちを犯してる場合はそちらも併せて、
何かよい方法がありましたら、ご教授いただけると幸いです。
87:デフォルトの名無しさん
06/12/28 17:43:14
普通に前後で現在時間を求めて引き算すればいいのでは?
88:デフォルトの名無しさん
06/12/28 17:58:48
>>85
ありがとうございました。
sub resolv_host {
use Net::DNS;
my ($ip)=@_; my $timeout=2; my $host;
my $res = Net::DNS::Resolver->new(
tcp_timeout => $timeout, udp_timeout => $timeout
);
my $query = $res->query("$ip");
if ($query) {
foreach my $rr ($query->answer) {
next if $rr->type ne "PTR";
$host=$rr->ptrdname;
}
}
else { $host=$ip; }
return ($host);
}
89:名無しさん@Linuxザウルス
06/12/28 18:54:03
任意の文字列からhttpで始まる単語(区切りはスペース)を切り取るにはどうしたらいいでしょうか
$str = aaaa bbbb ccc URLリンク(ddd.vv.vv)<)
という文字列から「URLリンク(ddd.vv.vv)<)」を切り出す方法です
90:デフォルトの名無しさん
06/12/28 18:59:42
@a = grep /^http/, split / /, $str;
91:デフォルトの名無しさん
06/12/28 19:05:18
@a = $str =~ /(?:^| )(http.*?)(?: |$)/g;
92:デフォルトの名無しさん
06/12/28 19:53:46
>>55
>>56
遅くなりましたが、ありがとうございました。
レポジトリを追加したらだいぶ便利になりました。
パッケージをダウンロードしてきてそのまま追加することもできるようになりました。
93:名無しさん@Linuxザウルス
06/12/28 20:04:48
>>90,91
サンクス
94:デフォルトの名無しさん
06/12/28 20:45:12
「後ろにtringが続かないs」を「z」に置換する方法は次の2つ以外にありますか?
s/s$/z/;
s/s([^t])/z$1/g;
s/st([^r])/zt$1/g;
s/str([^i])/ztr$1/g;
...
s/string/(あり得なさそうな文字列)/g;
s/s/z/g;
s/(あり得なさそうな文字列)/string/g;
95:デフォルトの名無しさん
06/12/28 20:48:34
>>94
先読み否定。色々仲間があるので詳細はperlre参照。
s/s(?!tring)/z/g;
96:デフォルトの名無しさん
06/12/28 21:14:01
任意の精度の数値演算したいんですけど、
どうすればいいでしょうか?
97:デフォルトの名無しさん
06/12/28 21:16:21
あ、Math::BigFloat モジュールってのがありました
すいません m(__)m
98:デフォルトの名無しさん
06/12/28 21:17:16
>>95
ありがとうございました。
99:デフォルトの名無しさん
06/12/29 05:18:57
FTPプロトコルでリモートにファイル転送するスクリプトを作ってるのですが
ローカルとリモートで同名だけどリモートの方がファイルサイズ小さい場合
差分のみ転送にしたいのですがレジュームはどうやればできますでしょうか?
perldoc Net::FTP
でresumeをキーに検索したのですが見当たりませんでした。
よろしくお願いします。
100:99
06/12/29 08:20:07
自己レス
FTP resume perlをキーにググッたら下記の情報見つけた
URLリンク(www.garayed.com)
perldoc Net::FTPでWHEREを見ろって書いてあったので見たら
ダウンロードはgetメソッドの第3引数でオフセット値が指定できるみたいだけど
アップロードはrestartってメソッドでオフセット値をセットしてから
putメソッドで転送すればいいのかな。
しかしputメソッドは第3引数でオフセット値を指定できないんだ???
101:デフォルトの名無しさん
06/12/29 08:59:14
どこまできちんと届いているかは、クライアントしか知らないから、
レジュームって普通クライアントから要求するようになってると思うよ。
102:デフォルトの名無しさん
06/12/29 09:29:59
>>100
Net::FTPだったらputじゃなくてappendにしないと上書きされちゃうよ
>>101
99は具体的なやり方聞いてるのにそんな回答しても意味ネェだろw
103:デフォルトの名無しさん
06/12/29 12:03:50
Perllこついての質問箱?
104:デフォルトの名無しさん
06/12/29 12:08:27
Jcode::CP932
Encode::EUCJPMS
をインストールした後
use Jcode::CP932とするとエラーになってしまいます。
エラー内容
Jcode::CP932 is not an object at (eval 2) line 234
Jcode::AUTOLOAD('Jcode::CP932', 'sjis', 'cp932', 'euc', 'cp51932', 'jis', 'cp50221', 'iso_2022_jp', 'cp50220', ...) called at c:/usr/local/site/lib/Jcode/CP932.pm line 39
main::BEGIN() called at c:/usr/local/site/lib/Jcode/CP932.pm line 0
eval {...} called at c:/usr/local/site/lib/Jcode/CP932.pm line 0
Jcode.pmのAUTOLOADでconfessしてるっぽいんですが、何故動かないのでしょうか?
ちなみにWinXP、ActivePerl 5.8.7.813です
105:SONY
06/12/29 15:18:48
>>104
仕様です
106:デフォルトの名無しさん
06/12/29 16:12:31
GK涙目wwwwwwwwwwwww
107:デフォルトの名無しさん
06/12/29 17:03:26
-----------------
これURLリンク(www.example.com) とURLリンク(www2.example.com) これ
-----------------
この上の文を下の文に変換する"スマートな"方法としてはどのようなやり方がありますでしょうか?
-----------------
これ<a href="URLリンク(www.example.com) と<a href="URLリンク(www2.example.com) これ
-----------------
仕様としましては
(1)http://またはhttps://またはhttp://またはhttps://で始まる場所をURL先頭とする
(2)半角空白または全角空白の登場、または文の末尾でURLの最後判定をする
(3)一行に複数のhttp://〜やhttp://〜があっても全てにAタグを付ける
(4)Aタグをつけること以外の文章の加工をしない
です。
100stepくらい使えば書けないことはないと思うのですが、
スマートな方法は全く思いつきませんorz
108:デフォルトの名無しさん
06/12/29 17:17:46
なあ、次スレからテンプレートにこれを追加しない?
実は、オレもJperl から Active Perl に移行するとき、
これが解るまでかなり時間がかかった覚えがあるんだけど。
---------------------------------------------------------
# 【Perl 日本語処理の基礎の基礎】
# このレスは、Windows の ActivePerl で日本語処理を行う場合のテンプレートです。
# このレスの内容をそのまま(シフトJIS形式の)ソースファイルに保存して下さい。
# 入出力ともシフトJIS形式のファイルまたはDOS窓を想定しています。
# 文字コードの条件が異なる場合には編集が必要です。
# 編集の仕方はご自分で勉強するか、このスレで質問して下さい。
# まず、以下の行を先頭に入れて下さい。
use encoding "cp932";
use open IO => ":encoding(cp932)";
binmode STDIN => ":encoding(cp932)";
binmode STDOUT => ":encoding(cp932)";
binmode STDERR => ":encoding(cp932)";
# 次に、あなたが実行したい処理の内容を入れて下さい。
print "やあ!\n";
sleep(1);
109:デフォルトの名無しさん
06/12/29 17:24:21
use encodingは弊害がでかすぎるかと…。
110:デフォルトの名無しさん
06/12/29 17:26:35
>>107
要するにhttp urlの正規表現が解ればいいわけね。
URLリンク(www.din.or.jp)
111:デフォルトの名無しさん
06/12/29 17:31:39
>>110
>要するにhttp urlの正規表現が解ればいいわけね。
違うッスorz
(1)(2)だけなら $line =~ /(h?)(ttps?:\/\/[^ |^ ]+)/ で。。。
112:デフォルトの名無しさん
06/12/29 17:34:07
>107
use strict;
use warnings;
while (<DATA>) {
s{(h?ttps?://([^\s ]+))}{<a href="URLリンク($2">$1<)
print $_;
}
__DATA__
これURLリンク(www.example.com) とURLリンク(www2.example.com) これ
URLのパターンマッチはこれだと甘いけど。
>108
use encodingはきちんと理解して使わないとバグの元にしかならないから反対。
113:デフォルトの名無しさん
06/12/29 17:35:35
s{(h?(ttps?://[^\s ]+))}{<a href="h$2">$1</a>}g;
ごめん、間違えた。
114:デフォルトの名無しさん
06/12/29 17:37:13
全角空白って文字クラスにそのまま放り込んで大丈夫なんかいな
115:108
06/12/29 17:43:36
>>109 >>112
確かにね。
これから始める人なら、ソースはUTF-8に統一して
もらったほうがいいかもね。これでいいかな?
---------------------------------------------------------
# 【Perl 日本語処理の基礎の基礎】
# このレスは、Windows の ActivePerl で日本語処理を行う場合のテンプレートです。
# このレスの内容をそのまま、UTF8 形式のソースファイルに保存して下さい。
# 入出力ともシフトJIS形式のファイルまたはDOS窓を想定しています。
# 文字コードの条件が異なる場合には編集が必要です。
# 編集の仕方はご自分で勉強するか、このスレで質問して下さい。
# まず、以下の行を先頭に入れて下さい。
use utf8;
use open IO => ":encoding(cp932)";
binmode STDIN => ":encoding(cp932)";
binmode STDOUT => ":encoding(cp932)";
binmode STDERR => ":encoding(cp932)";
# 次に、あなたが実行したい処理の内容を入れて下さい。
print "やあ!\n";
sleep(1);
116:109
06/12/29 18:24:42
>>108=115
乙!
WindowsのActivePerl初心者による
似たようなQ&Aの再生産を回避するために
テンプレートを設置しようというのはとてもすばらしいッス!
でも、
・テキストモードとバイナリモード
・ASCIIとマルチバイトコード
・日本でのマルチバイトコードは複数の種類が存在すること
・UTF-8以外でのマルチバイトコードの扱い
を理解してないと結局はすぐにつまづくと思う。
でも、これを丁寧に説明してるとテンプレートで紙面が足りないから
結局「http://〜を読んで」、「binmode, Encodeでググると吉」
ってなっちゃうんだよね。。。
次ぎスレに115のテンプレを追加して様子を見るのがいいのかな。
117:デフォルトの名無しさん
06/12/29 18:40:57
両方うぜーよwebprogでやれ
118:109
06/12/29 21:07:36
>>117 うぜぇのは同意だけど、ウェブはかんけぇねだろバーカw
119:デフォルトの名無しさん
06/12/29 21:10:13
レベル的に物凄く関係ありまふ
120:デフォルトの名無しさん
06/12/29 21:15:52
くだすれPerlだな
121:デフォルトの名無しさん
06/12/29 21:24:28
117のスルー力たんないからスレが荒れたな。
スルー力身につくまでおまえがROMるかwebprog行ってろ
122:デフォルトの名無しさん
06/12/29 22:30:03
>>104
Jcode.pmにパッチあててなくね?
123:デフォルトの名無しさん
06/12/29 22:46:19
するーかって何だよ
スルメイカかよ
124:デフォルトの名無しさん
06/12/29 23:08:30
>>123
どうも「スルーする力(ちから)」という意味みたいだな。
それより、>>117にぴったりのスレがあるぞ。こっちで活躍したらどうだ
【Perl上級者コーナーPart01】
スレリンク(php板)l50
125:デフォルトの名無しさん
06/12/29 23:24:05
ゾーキャスラー力を思い出す流れだが、まぁ通じないだろう。
126:107
06/12/30 00:21:53
>>112,113
できました!ありがとうございましたm(_ _)m
127:デフォルトの名無しさん
06/12/30 09:48:58
URLリンク(www.google.co.jp)
スルーカ の検索結果 約 173,000 件中 1 - 10 件目 (0.03 秒)
128:デフォルトの名無しさん
06/12/30 09:53:09
Срука
129:デフォルトの名無しさん
07/01/01 03:05:23
kent-web の sunbbs.cgi を改造しまくって使っています。
記事番号が奇数番号のときと偶数番号のときとで、
交互に違う情報を入れたいと思っているのですが、
perl で偶数と奇数を判別するのってどうやればいいんでしょうか?
130:デフォルトの名無しさん
07/01/01 03:07:15
%2
131:デフォルトの名無しさん
07/01/01 03:14:40
?
132:デフォルトの名無しさん
07/01/01 03:22:34
>>129
2で割った余りが0なら偶数、1なら奇数と判定すればOK
133:デフォルトの名無しさん
07/01/01 07:26:19
1 と and とって1ビット目が 0 か 1 かで判断してもおk
134:デフォルトの名無しさん
07/01/01 15:02:29
>>132-133
例文でお願いしますです。orz
135:デフォルトの名無しさん
07/01/01 15:12:55
>>134
この程度のこともわからないのに
>kent-web の sunbbs.cgi を改造しまくって使っています。
なのか
136:デフォルトの名無しさん
07/01/01 15:22:34
>>134
%2
137:デフォルトの名無しさん
07/01/01 18:38:54
巨大な数字ってどういうビット構造なんかな?
$a = 234;
if ( $a & 1) { print "奇数" }
else { print "偶数" }
138:デフォルトの名無しさん
07/01/02 00:43:33
詳解 正規表現
をかったんだよお年玉で
139:デフォルトの名無しさん
07/01/03 10:43:45
WINDOWSの鯖でファイルが書き込み可能かどうかを判断するにはどうしたらいいんですか?
WINDOWS鯖の場合だと
if (-w $write_file_path) { print "書き込み可能\n"; }というプログラムがが使えないんです
140:デフォルトの名無しさん
07/01/03 11:06:17
>>139 == スレリンク(php板:635番)
マルチなので放置しましょう
141:デフォルトの名無しさん
07/01/03 11:20:32
>>109
>use encodingは弊害がでかすぎるかと…。
kwsk.
今まで、Jcode->new($hogehoge)->sjis; でちまちま変換していた者としては
use encoding という技は新味ですyo.
142:デフォルトの名無しさん
07/01/03 14:25:47
うるう年かどうかを判別するプログラムが課題で出ているのですが
$y=1900;
if($y %4==0){
print "$y is a leap year.\n";
}elsif(($y %4==0) && ($y %100==0)){
print "$y is a common year.\n";
}elsif(($y %100==0) && ($y %400==0)){
print "$y is a leap year.\n";
}else{
print "$y is a common year.\n";
}
これで1900を$yに入れても、うるう年になってしまいます。
1900をcommon year.にするには、どうすればよいのでしょうか?
143:デフォルトの名無しさん
07/01/03 14:35:27
>>142
そういうのは400,100,4の順番に判定するんだよ
144:デフォルトの名無しさん
07/01/03 14:45:24
なんてほのぼのする質問だろう
145:デフォルトの名無しさん
07/01/03 14:52:27
正直に課題って言ったのも好感w
146:デフォルトの名無しさん
07/01/03 15:09:31
>>142
最初の条件 $y %4==0 が、「4で割り切れたら」だから、4で割り切れる数字は、
全てここで引っかかっちゃうよ。
147:デフォルトの名無しさん
07/01/03 17:45:10
(´・ω・)ヤサシス
148:デフォルトの名無しさん
07/01/03 20:54:19
なんでうるう年は4年に一回なのに400と100も判定にいれるの?
149:デフォルトの名無しさん
07/01/03 20:55:00
>>148
それは冗談で言っているんだよな。
150:デフォルトの名無しさん
07/01/03 21:13:58
愉快なスレだな
151:デフォルトの名無しさん
07/01/03 21:22:42
use DateTime;
my $y = 1900;
if (DateTime->new(year => $y)->is_leap_year) {
print "$y is a leap year.\n";
} else {
print "$y is a common year.\n";
}
こうですか? よくわかりません><
152:デフォルトの名無しさん
07/01/03 21:25:31
アッー!
153:デフォルトの名無しさん
07/01/03 21:27:16
>>151
反則です
154:デフォルトの名無しさん
07/01/03 21:31:37
しかし >>142 にはモジュールを使ってはいけないなんて一言も(ry
まあ冗談だろうけど、実際に閏年の判定を書くとしたら >>151 なんだよなぁ・・・。
155:デフォルトの名無しさん
07/01/03 21:41:17
>>149
まあ、今後 90年以上は >>148 が正しいわけだが。
156:デフォルトの名無しさん
07/01/03 21:41:24
でもデフォルトで入ってたっけ?
157:デフォルトの名無しさん
07/01/03 21:50:31
最新のactiveperlには入ってた。
158:デフォルトの名無しさん
07/01/03 22:00:08
>>142の心温まる条件式を眺めてると、質問者に>>151を見て欲しくない気持ちになってきた。
159:デフォルトの名無しさん
07/01/03 22:20:40
4000年で割り切れる年も入れないとね。
160:デフォルトの名無しさん
07/01/03 22:34:26
>>159
どんだけ先の話やねん
161:デフォルトの名無しさん
07/01/03 22:51:30
つ 「このように広く普及するのであれば、もっとちゃんとした設計を施すべきだった」
162:デフォルトの名無しさん
07/01/03 22:59:36
そんなに長いこと使われないだろうと思って作ったソフトが2000年問題とかの原因になったんだよな
1993年使われ続けることも考慮しとくべきだな
163:デフォルトの名無しさん
07/01/03 23:02:58
sub is_leap_year {
$j = shift() + 660;
unless ($j % 4) {
unless (($j - 660) % 100) {
return 0 unless ((($j - 660) / 100) % 4);
}
return 1;
}
return 0;
}
どぞ。
164:デフォルトの名無しさん
07/01/03 23:04:31
だが、心配のしすぎではないか。
165:デフォルトの名無しさん
07/01/03 23:08:42
もうまもなく4000年になろうとしているのに4000で割り切れる年を閏年にすべきか否かは未だ意見の分かれるところだね。
地球の自転が遅くなるからとか言うが。小賢しい。
166:デフォルトの名無しさん
07/01/03 23:10:06
そういってy2kが問題になってたんじゃないか。
だいたい時間を1970/01/01 00:00からの32bit整数であらわすのも心配だな。やっぱり64bitはほしいところだ。
167:デフォルトの名無しさん
07/01/03 23:20:41
符号付 64ビット整数で紀元からのピコ秒数で数えることにすると紀元の前後300年弱しか表せない。
168:デフォルトの名無しさん
07/01/03 23:26:13
perl -e "print scalar(localtime(0xffffffff/2));"
だと「Tue Jan 19 12:14:07 2038」って出るが
perl -e "print scalar(localtime(0xffffffff/2+1));"
だと何も表示されないな
perlは普通にでかい値扱えるから
localtime関数も符号付32bitの上限超えても平気かと思ってたがだめなのか
169:デフォルトの名無しさん
07/01/04 00:32:15
じゃあ紀元から符号付で128bitあれば足りるかな。
170: ◆TWARamEjuA
07/01/04 00:35:18 BE:5336677-BRZ(6700)
コンパイル時に指定してあげれば、、、@64bits
171:デフォルトの名無しさん
07/01/04 09:43:47
ピコ秒って光が30cmしか飛べないんだぜ。
原子時計の精度が1ピコ秒なんだぜ。
どうやって計るんだぜ?
172:デフォルトの名無しさん
07/01/04 13:46:03
>>168
表示はされたけど1901年だったわさ
173:デフォルトの名無しさん
07/01/04 19:54:07
>>171
10E-16sオーダの時間の計測に成功したっていうニュースなら見た気がするが。
174:デフォルトの名無しさん
07/01/04 20:23:27
不確定性原理からいくと、最小の時間単位は何だっけ?
175:デフォルトの名無しさん
07/01/04 20:34:09
プランク時間か?
176:デフォルトの名無しさん
07/01/04 23:41:55
当方perl初心者です。
全角スペースを半角スペースに置き換えたく、
~s/\xA1\xA1/\x20/g
としています。スペースの置き換え動作自体はするんですが、「ァー」や「ぁ!」などの文字列が文字化けするようになりました。
文字コードはEUCです。
コードを調べてみると「ぁ!」は
A4 A1 A1 AA となっており、全角スペースと誤認してしまうようでした。
どのように解決したら良いのでしょうか、教えてください。
177:デフォルトの名無しさん
07/01/04 23:49:59
require 5.8.1;
use encoding 'euc-jp';
178:デフォルトの名無しさん
07/01/04 23:50:19
URLリンク(www.din.or.jp)
179:176
07/01/05 00:12:36
解決しました。ありがとうございます。
180:デフォルトの名無しさん
07/01/05 13:30:32
さんざんキシュツかもしれませんが、見つからなかったので質問。
Windows XP ActivePerl の環境で、system コマンドで呼び出したプログラムをバック グラウンド で動かしたい。どうすればよい? 例えば、スクリプトはこんな感じ。
---
my $IE = "c:\\Program Files\\Internet Explorer\\IEXPLORE.EXE";
system ($IE, "URLリンク(www.hotmail.com"));
---
例えば、上記を test.pl としてセーブし、これを DOS 窓から呼びだすと、こんな感じでとまり、別プロセスとして実行してない。
---
C:\Documents and Settings\takasaks>perl e:/work/0my/scripts/test.pl
_
---
別プロセスで動かしたい、どうれすればよいのでしょうか?
181:デフォルトの名無しさん
07/01/05 13:41:21
system(1, ...);
ActivePerl限定だった希ガス
182:デフォルトの名無しさん
07/01/05 13:45:21
日本語が得意なフランス人みたいな日本語だな。
183:180
07/01/05 14:54:17
すげー。うまくいった。ありがとう。m(_ _)m
>>182
確かに今読み直すと変だね。
184:デフォルトの名無しさん
07/01/05 21:25:20
以前、(スクリプトが)短い掲示板がどっかに貼ってあったのですが検索しても見つかりません。
突然もう1度見たいのですが、どなたか知っている方居ませんか?
1行に出来るんだから行数関係ないっていわれそうですが6行くらいで、掲示板として機能していたPerlのプログラムでした。
2chのどこで見たんだったかなぁ、、
185:デフォルトの名無しさん
07/01/05 21:26:55
七行プログラミング part5
スレリンク(tech板)
186:デフォルトの名無しさん
07/01/05 21:32:38
七行プログラミング
スレリンク(php板)
187:デフォルトの名無しさん
07/01/05 22:38:22
>>185-186
それっぽいです。
ありがとうございました。
188:デフォルトの名無しさん
07/01/06 02:56:25
ダイス用のモジュールってありませんか?
$s に 3d20+10 のような文字が入ってたら、20面ダイスを3回振って結果に10を足す、ような。
$s に複数入っててもちゃんと計算してくれるのが良いです。更に言うと 1d6+5-4 のように加算減算も複数扱えると尚良いです。
自作しようかと思ったら結構フクザツで・・・。
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
5368日前に更新/220 KB
担当:undef