Perlについての質問箱 ..
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 のように加算減算も複数扱えると尚良いです。
自作しようかと思ったら結構フクザツで・・・。
189:デフォルトの名無しさん
07/01/06 03:32:00
URLリンク(search.cpan.org)
こんなんあったよ。
あとはsplitしたり調整したりするラッピングするだけで実装できるんじゃない?
そんなマニアックなものあるかよ!と思ったらあったw
恐るべしCPAN
190:デフォルトの名無しさん
07/01/06 03:37:50
置換 + evalで出来るよと言おうとしたけどCPANに真面目なのがあったか。
CPANスゲー
191:188
07/01/06 04:23:08
おおー、CPANにあるんですね!
最近 Perl と離れてたんですが、やっぱり便利だ!
ありがとうございました。
192:デフォルトの名無しさん
07/01/06 21:10:42
正規表現で()を後方参照としてではなく、ただの括弧としてマッチさせたい場合どう書けばいいんでしょうか
193:デフォルトの名無しさん
07/01/06 21:13:44
(?:re)
194:デフォルトの名無しさん
07/01/06 21:14:04
(?:pattern)
つperlre
195:デフォルトの名無しさん
07/01/06 21:34:41
おおぅ、それグループ化のみだと思ってました
ありがとうございます
196:デフォルトの名無しさん
07/01/06 21:39:55
\( ではないのか
197:デフォルトの名無しさん
07/01/06 21:48:35
括弧としてマッチさせるには \( が正しいみたいです
お騒がせしてすみません
>>196 ありがとうございます
198:デフォルトの名無しさん
07/01/06 22:19:53
すいません、ちょっと質問ですが、
Perl モジュールをCPANに登録して公開するときって、
GPLライセンスでいいんですか?
Wikipedia項目リンク
それとも、この Artistic License ですか?
199:デフォルトの名無しさん
07/01/06 22:26:32
Module::License::Reportなんてのがあるくらいだし
Apache Licenseとかも混じってるし
URLリンク(www.google.co.jp)
なんでもいいんじゃない?
200:デフォルトの名無しさん
07/01/06 23:42:21
>>198
GNUプロジェクトによれば、首尾一貫性と均一性のためにperlと同じライセンス
(GPLとArtistic Licenseのデュアルライセンス)を適用することを推奨されている。
<blockquote cite="URLリンク(www.gnu.org)
Perl のライセンス
このライセンスでは、Artistic ライセンス とGNU GPLのどちらかを選択できるとしています。
言い換えれば、あなたはこれらの2ライセンスのどちらかから選べるということです。
フリーソフトウェアのライセンスに要求される条件は満たしますが、本物のコピーレフトとは言えないかも知れません。
選択肢の一つとして GNU GPLがありますので、GNU GPLとは矛盾しません。
Perl 4 や Perl 5 用のパッケージを書く場合には、Perl プログラミングの世界における首尾一貫性と均一性を促進するために、
このライセンスを適用されることをお勧めします。Perl 以外の分野では、単に GNU GPL を使う方が好ましいので、
このライセンスを使わないよう強くお勧めします。
</blockquote>
が、好きなライセンスにすりゃ良いんじゃない?
ついでにperlmodstyleには
<blockquote>
Licensing
Make sure that your module has a license, and that the full text of it is included in the distribution
(unless it's a common one and the terms of the license don't require you to include it).
If you don't know what license to use, dual licensing under the GPL and Artistic licenses
(the same as Perl itself) is a good idea. See perlgpl and perlartistic.
</blockquote>
とある
201:デフォルトの名無しさん
07/01/07 02:04:43
修正BSDとかMITとかもあるけど。やっぱりGPL/Artisticのデュアルライセンスにしとくのがいいかな。
202:デフォルトの名無しさん
07/01/07 05:25:31
[1-9.]のみで構成される文字列を表示したいのですが
if ( $text =~ "[1-9.]" ) {
print "$text \n";
}
だとうまくいきません。
どのように修正すればいいですか?
203:デフォルトの名無しさん
07/01/07 05:25:42
(?: って変数に入れないようにするやつでしょ?
204:デフォルトの名無しさん
07/01/07 05:28:07
print "$&\n" if $text =~/[1-9.]/;
205:デフォルトの名無しさん
07/01/07 05:32:00
文字列だった。すまん
一つだけなら
/[1-9.]+/
すべてなら
print(join(',', /[1-9.]+/g));
206:デフォルトの名無しさん
07/01/07 06:01:09
#!c:\usr/bin/perl ←だとアクセスできますが、
#!usr/bin/perl ←だとアクセ500のエラーがでます。
3時間探しましたが答えが見つかりませんでした。
よろしくお願いします。
os:win2000
webserver:apache 2.059
active perl
207:デフォルトの名無しさん
07/01/07 06:04:39
>>206
#!/usr/bin/perl
208:デフォルトの名無しさん
07/01/07 06:05:19
スラッシュ一個たんなくね?
×#!usr/bin/perl
○#!/usr/bin/perl
209:デフォルトの名無しさん
07/01/07 06:09:07
>>207-208
いろいろやっていくうちに"/"が消えてました。
やっとゴールにたどり着きました。ありがとうございました。
210:デフォルトの名無しさん
07/01/07 06:25:02
>>205
説明不足ですみません。
$text = "12:24" なら $textの表示そのものをしない
$text = "3.142" なら表示する
というような不要な文字が1つでもあれば
無視するといった感じのものが作りたかったのです。
よろしくお願いします。
211:デフォルトの名無しさん
07/01/07 06:30:58
$text =~/^[1-9.]+$/ and print "$&\n";
212:デフォルトの名無しさん
07/01/07 06:32:14
printのとこ、$textじゃなくてわざわざ$&で出力する意味あるの?
213:デフォルトの名無しさん
07/01/07 06:35:49
短縮。
214:デフォルトの名無しさん
07/01/07 06:40:16
>>211
無事作成できました。ありがとうございました。
215:デフォルトの名無しさん
07/01/07 07:26:19
2chのdatファイルを、差分で取得したいのですが、どのようにしたらよいのでしょうか?
216:デフォルトの名無しさん
07/01/07 08:09:31
If-Modified-Since と Range をつけて叩いて 206|304|416 のどれかをもらうようにする
217:デフォルトの名無しさん
07/01/07 14:11:53
package の中で、
sub func(\[$@]) {
my $class = shift;
my $arg = shift;
}
として、$arg に配列もしくはスカラのリファレンスを受け取りたいのですが、
$arg にはスカラしか入ってくれません。
どう書くのが正解でしょうか?
218:デフォルトの名無しさん
07/01/07 15:06:23
>>202
\. じゃなくてええの?
219:デフォルトの名無しさん
07/01/07 15:44:04
>>218
自分でちょっと試せばいいだろ
print "Matchn" if 'ABC' =~ /[.]/;
220:デフォルトの名無しさん
07/01/07 17:38:56
>>218
文字クラスの中だから
221:デフォルトの名無しさん
07/01/07 20:45:01
>>217
prototypeに頼らないのが正解。
そのprototype、第一引数について書かれてないけど。
222:デフォルトの名無しさん
07/01/07 22:45:16
ppmをつかってモジュールを持ってくるときに、zipで圧縮されてると展開方法を知らんとエラーが出てしまうのですが、
どうすればこのエラーが出なくなるんでしょう。
223:デフォルトの名無しさん
07/01/07 23:28:08
Archive::Zip入ってる?
224:デフォルトの名無しさん
07/01/08 00:48:56
>>223
入ってます。
225:デフォルトの名無しさん
07/01/08 01:27:07
手元だとzipアーカイブでもインストールできるなぁ。どこのリポジトリの何で発現してる?
226:デフォルトの名無しさん
07/01/08 01:49:50
>>225
ためしに再インストールしようとしたArchive::Zipで出てます。。。
何処のレポジトリかはどうやってわかるんでしょうか。
227:デフォルトの名無しさん
07/01/08 08:59:59
csvの一行目を検索して、二行目をprintするだけなんですが
「ー」を含む言葉だと検索結果で出力されません
「。」「・(半角)」「・(全角)」とか色々やったんですが、どうやら「ー」だけのようです
解決方法をよろしくお願いします
open(IN,"$file");
while(1) {
$line = <IN>;
@data = split(/,/ ,$line);
if ( $line eq "" ) { last;}
if ( $data[0] =~ /$in{'test'}/ ) {
print "$data[1]\n";
}
}
close(IN);
228:デフォルトの名無しさん
07/01/08 11:44:40
>>227
CSVファイルを扱うならば、Text::CSV をお使いください。
(Text::CSV_XS かもしれない、手元にソースがない)
229:デフォルトの名無しさん
07/01/08 12:25:03
>>228
返信ありがとうございます
Text::CSVモジュールを使わないと対処できないということでしょうか?
フリーのwebスペースを利用したいので、モジュールはインストール出来ないです
Text::CSV自体は優れものみたいですね
230:デフォルトの名無しさん
07/01/08 12:27:20
>226
えっと、ppmシェルで、
search Archive-Zip
って入力して。
Searching in Active Repositories
1. Archive-Zip [1.18] Archive-Zip
こんな感じに出てくると思う。仮に1番なら
desc 1
って入力したときなんて表示されてる?
231:デフォルトの名無しさん
07/01/08 13:21:02
>>227
つShift_JISの罠
/\Q$in{'test'}\E/
Text::CSVはマルチバイト文字通ったっけ?
Text::CSV_XSでbinaryオプションを与えない駄目だったような記憶が
232:デフォルトの名無しさん
07/01/08 14:02:13
Text::CSVは0x09(Tab)と0x20(Space)から0x7e(Tilde)の範囲しか使えないね。
Text::CSV_XSでbinaryオプションつけないとダメだ。
233:デフォルトの名無しさん
07/01/08 14:07:57
>>231
返信ありがとうございます。おかげで解決することができました
ただ、「\Q」が「\Eまでのメタ文字をリテラルとして判断する」のは別ったのですが
「/$in{'test'}/」←これのどこにメタ文字があるのかが分らないです
解決はしたけど理解出来てない…
234:デフォルトの名無しさん
07/01/08 14:25:47
>>233
「ー」はShiftJISで0x81 0x5Bと表される。この2バイト目が'[' = 0x5B
他にもソ('\')とか+('{')とか色々。
文字コードの割り当て参考資料
URLリンク(www-cms.phys.s.u-tokyo.ac.jp)
ASCIIコード表
URLリンク(adlib.rsch.tuis.ac.jp)
235:デフォルトの名無しさん
07/01/08 14:31:01
>>233
「$in{'test'}」自体がメタ文字を含むってことじゃなくて、
実行時に変数$in{'test'}にメタ文字を含むShiftJIS文字が入る可能性があるってこと。
236:デフォルトの名無しさん
07/01/08 14:51:17
>>234-235
かなり見当違いな考えをしてたみたいですね
「ー」以外にも注意しなければいけない文字が結構ありますね
ご丁寧にありがとうございました
237:デフォルトの名無しさん
07/01/08 16:52:09
>>230
1: Archive-Zip
Provide an interface to ZIP archive files.
Version: 1.18
Author: Ned Konz <perl@bike-nomad.com>
Provide: Archive::Zip version 1.18
Require: File-Which
Require: PathTools
Repo: trouchelle
CPAN: URLリンク(search.cpan.org)
Installed: 1.18 (perl)
2: Archive-Zip
Provide an interface to ZIP archive files.
Version: 1.18
Author: Adam Kennedy (cpan@ali.as)
Provide: Archive::Zip version 1.18
Provide: Archive::Zip::BufferedFileHandle
Provide: Archive::Zip::MemberRead
Provide: Archive::Zip::MockFileHandle
Require: File-Which
Repo: ActiveState Package Repository
CPAN: URLリンク(search.cpan.org)
Installed: 1.18 (perl)
3: Archive-Zip
Provide an interface to ZIP archive files.
Version: 1.18
Author: Ned Konz (perl@bike-nomad.com)
Require: Compress-Zlib
Repo: bribes
CPAN: URLリンク(search.cpan.org)
Installed: 1.18 (perl)
こんな感じです。
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
5369日前に更新/220 KB
担当:undef