[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 01/23 21:37 / Filesize : 239 KB / Number-of Response : 927
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

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



1 名前:デフォルトの名無しさん mailto:sage [2008/08/11(月) 19:10:40 ]
"The duct tape of the Internet" こと、Perlについての質問箱です。
"There's more than one way to do it" ということで、
Perlの奥深さについて皆で語り合い、追求してまいりましょう。

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

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

www.perl.org/get.html
● 2008/08/11 現在の最新版(安定版): 5.10.0
● 2008/08/11 現在の開発版: 5.9.5

▼ 前スレ
Perlについての質問箱 36箱目
pc11.2ch.net/test/read.cgi/tech/1215569470/

リンク集は>>2-3
Perl 日本語処理の基礎の基礎 >>4
過去スレは>>5-6 あたり

266 名前:デフォルトの名無しさん mailto:sage [2008/08/24(日) 02:14:28 ]
>>262よりは>>252のほうがいいと思うよ

267 名前:デフォルトの名無しさん mailto:sage [2008/08/24(日) 02:20:31 ]
>>262は嫌がらせ。


268 名前:デフォルトの名無しさん mailto:sage [2008/08/24(日) 03:10:52 ]
use feature qw( :5.10 );
use Time::HiRes 'sleep';
system q|cls|;
#----------------------------------
my @a;
@a=localtime;
sleep(.5);
say "\@a=@a[0..8]";
sleep(.5);
say "scalar(localtime)=",scalar(localtime);
sleep(.5);
say "localtime=",localtime;
sleep(.5);


localtimeという関数はホンマおもしろいなー
3通りもの出力があるんだから。

269 名前:デフォルトの名無しさん mailto:sage [2008/08/24(日) 03:49:57 ]
oracleにselect文を実行したときの取得レコード件数が知りたいんですが何か方法ありますか?
phpだとmysql_num_rows()とか便利なのあるんですけど、perlだとわかんないorz

270 名前:デフォルトの名無しさん mailto:sage [2008/08/24(日) 04:00:20 ]
エスパー期待してるんですか?

271 名前:デフォルトの名無しさん mailto:sage [2008/08/24(日) 04:06:30 ]
しゃぶりついてくるやつ期待してるんだろう。



272 名前:デフォルトの名無しさん mailto:sage [2008/08/24(日) 04:17:54 ]
いや、だから、
oracleにselect文を実行したときの取得レコード件数を
知るための関数でしょ?

273 名前:デフォルトの名無しさん mailto:sage [2008/08/24(日) 04:18:41 ]
ところで、ファイルに引数を食わせるときに、
スペース混じりの引数を食わせるには、
どうしたらいいですか?

274 名前:デフォルトの名無しさん mailto:sage [2008/08/24(日) 04:42:39 ]
www.aritia.org/hizumi/perl/perlwin.html

ここ読んでたら、なんか
日本語のファイル名も扱える
みたいじゃないですか。
どうやるの?



275 名前:デフォルトの名無しさん mailto:sage [2008/08/24(日) 04:48:27 ]
use feature qw( :5.10 );
system q|cls|;
#----------------------------------
"abcde" =~ m/b(.)d/ ;
say "$1";


↑これを実行すると、c、と出てきますが、
ここの$1は、ソースコードの、どこまで有効なの?

ずーっと後ろまで?

276 名前:262 mailto:sage [2008/08/24(日) 05:01:37 ]
>>265
遅いよー。
括弧を考えず、一桁でいいなら tr/// のが高速。
でも文字列単位の置換、文字数の異なる置換に対応できない。
速度的には、サブルーチンにせず >>266 の言うように全部インラインで書いたほうがマシ。

@circle_patterns = ();
foreach (@circles) {
push @circle_patterns, qr/$_/;
}
# (以下必要なセットで繰り返す)
# とあらかじめ準備しておいて、
# 置換ループに入ったら、

$i = 1;
foreach (@circle_patterns) {
$str =~ s/$_/($i)/;
$i++;
}
# (以下必要な...略)
# などとやればちょっとは速くなる気がする。

置換対象が行数の多いファイルなら、一気読みで $str にひとつにまとめて突っ込んでしまうのも手。
データの傾向やらで効果的な最適化は変わるだろうから、いろいろ試して比較してみてね。

277 名前:デフォルトの名無しさん mailto:sage [2008/08/24(日) 05:01:39 ]
>>262
w

278 名前:デフォルトの名無しさん mailto:sage [2008/08/24(日) 05:04:26 ]
Win32::Soundとかっていう書き方、あるじゃないですか。
これってPerlの世界でのみ、通用するものなの?

それとも、一度おぼえたら、他の言語にいっても通用するの?

279 名前:デフォルトの名無しさん mailto:sage [2008/08/24(日) 05:13:04 ]
$str=~ s/[@-I]/($&)/g;
$str=~ tr/@-H/1-9/;
$str=~ tr/T-\/1-9/;
$str=~ s/[I]]/10/g;


280 名前:デフォルトの名無しさん mailto:sage [2008/08/24(日) 05:15:05 ]
$str=~ s/[@-I]/($&)/g;
$str=~ tr/@-HT-\/1-91-9/;
$str=~ s/[I]]/10/g;


281 名前:デフォルトの名無しさん mailto:sage [2008/08/24(日) 05:16:29 ]
>>276は嫌がらせの激遅コード


282 名前:262 mailto:sage [2008/08/24(日) 05:18:44 ]
>>279
GJ
せっかくだからさらにちょっとだけ性能改善。
# 最近の perl では $& のオーバーヘッドってどうなってんだろね?

$str=~ s/([@-I])/($1)/g;

283 名前:デフォルトの名無しさん mailto:sage [2008/08/24(日) 05:33:01 ]
sでも文字クラスって使えるんだ?

284 名前:デフォルトの名無しさん mailto:sage [2008/08/24(日) 05:54:56 ]
>>269
$sth -> rows;
のことか?



285 名前:デフォルトの名無しさん mailto:sage [2008/08/24(日) 08:47:06 ]
うちのバイト募集に>>262みたいのが来たら、即座に却下だな。

つーか、ゴミでスレを埋め尽くすのはいいかげんやめておくれ。

286 名前:デフォルトの名無しさん mailto:sage [2008/08/24(日) 11:02:53 ]
初心者です。

配列かなんかに保持しておいて、ループさせるという考え自体は悪くない……ですよね?
よほど速度がクリティカルになる状況じゃなきゃ、そこまで酷いとも思えないし。

287 名前:デフォルトの名無しさん mailto:sage [2008/08/24(日) 12:10:50 ]
私初心者だけどクリティカルな状況でなければさほど酷くもなかろう
と言われましても。

288 名前:デフォルトの名無しさん mailto:sage [2008/08/24(日) 12:13:55 ]
こんなのはいかが

my @circles = qw/@ A B C D E F G H I J K L M N O P Q R S/;
my @romanU = qw/T U V W X Y Z [ \ ]/;
my @romanL = qw/@ A B C D E F G H I/;
my %hash = ();
%hash = (%hash, map { $circles[$_-1] => "($_)" } 1..20);
%hash = (%hash, map { $romanU[$_-1] => $_, $romanL[$_-1] => $_ } 1..10);

sub to_arabic_number {
    my $str = shift;
    $str =~ s/([@-ST-]@-I])/$hash{$1}/ge;
    $str;
}

289 名前:デフォルトの名無しさん mailto:sage [2008/08/24(日) 12:22:13 ]
>>288
[参考になる+11]

290 名前:デフォルトの名無しさん mailto:sage [2008/08/24(日) 12:54:50 ]
>>288
やるならとことん逝こうぜ。個人的には%hashを全書き換えしてるのが気になる。

my @nums = (
[qw(@ A B C D E F G H I J K L M N O P Q R S)],
[qw(T U V W X Y Z [ \ ])],
[qw(@ A B C D E F G H I)]
);
my %hash = map {
my $num = $_;
map {$num->[$_ - 1] => "($_)"} 1..(scalar(@$num))
} @nums;
my $re = join("", map {$_->[0].'-'.$_->[$#$_]} @nums);

sub to_arbic_number {
local $_ = shift;
s/([$re])/$hash{$1}/geo;
return $_;
}


291 名前:デフォルトの名無しさん [2008/08/24(日) 13:01:27 ]
-------------
>>276
>>288
ありがとうございます。参考になります。
eって遅くなるのかと思って試してませんでした。
文字数によってはeを利用したほうが速くなりそうですね。
単純に-で繋げて表現出来ない文字列も多いので、eが有用というのは私的には!!でした。
色々試してみます。ありがとうございます。

-------------
>>280
>>282
ありがとうございます。そういう方法もあるのですね。一つ一つ書いていくより
かなり速くなりました。
I-Sの場合が無いのでまだ速度を比べられないのですが、この場合はどのよう
にしたらよいのでしょうか?

trではやはり2文字になるのでダメで、一つ一つ書いていく方法しか思い浮かば
ないのですが、方法はないのでしょうか?


292 名前:デフォルトの名無しさん mailto:sage [2008/08/24(日) 13:04:26 ]
■■学校を作ろう!■■
VIP発でサイトを作ろうと思うんだ。(詳しくはWikiを見てくれ)
パートスレになるんでパー速(GEP)に移動している。
今スタッフを募集しているから、来てくれないか?

■Wiki
www36.atwiki.jp/vipvipschool/
■募集スタッフ
プログラム担当(特にErlang、Perl)
デザイナー(サイト上のアイコン、ロゴなど)
WEBデザイナー(サイトデザイン案に沿って、htmlやCSSを書ける)
他にも宣伝担当なども募集している。
■スレ
ex14.vip2ch.com/test/read.cgi/news4gep/1219068297/

293 名前:デフォルトの名無しさん mailto:sage [2008/08/24(日) 13:07:34 ]
見てもらったらわかるが、IRC・スレともに過疎って今にも潰れそうだから行かないほうがいいぞ

294 名前:デフォルトの名無しさん mailto:sage [2008/08/24(日) 14:16:48 ]
>287
具体的に何が悪いかを指摘せずに、ソースだけ書かれても
後から見た人は困るって意味さ



295 名前:デフォルトの名無しさん mailto:sage [2008/08/24(日) 15:46:25 ]
$str=~ s/([@-H])/($1)/g;
$str=~ s/([I-R])/(1$1)/g;
$str=~ tr/T-\@-HI-R/1-91-90-9/;
$str=~ s/]/10/g;
$str=~ s/S/20/g;


296 名前:デフォルトの名無しさん mailto:sage [2008/08/24(日) 15:54:45 ]
>>286
君はプログラミングは諦めて他の道へ進んだ方がいい

297 名前:デフォルトの名無しさん mailto:sage [2008/08/24(日) 16:06:28 ]
>296
質問スレで質問しちゃだめなん?

298 名前:デフォルトの名無しさん mailto:sage [2008/08/24(日) 16:13:24 ]
>>296
っていうか、来ないでくださいって感じ。

299 名前:デフォルトの名無しさん [2008/08/24(日) 16:19:48 ]
>>295
そういう方法がありましたか。まったく思いつかなかったです。
試してみます。有り難う御座います。

>>286
考え自体は全然悪くないと思います。
スピードよりも見やすさのほうが通常は大事だと私は思います。
どうやって見やすくかつ速く出来るかで悩みます。

でもどっちを優先するかは時と場合によります。

300 名前:デフォルトの名無しさん mailto:sage [2008/08/24(日) 18:55:13 ]
モジュールWWW::Mechanizeを使って、クッキーの送信と受信をしたいんだけどどうすればいいの?

301 名前:デフォルトの名無しさん mailto:sage [2008/08/24(日) 20:24:11 ]
質問です。Perlでファイルのアップロードをしようとして
フォームから値を送るサンプルを弄くってるのですが
my $local = $q->param('upfile');
my $fname = basename($local,"");
my $path = '.file';
my $newfile = "$path/$fname";

こういう感じでbasenameを使って、ウィンドウズ環境から上げると
パスが
.file/C:\Documents and Settings\Admin\デスクトップ\hoge.txt
となってしまい、ちゃんとアップできません。
他のサンプルとかでもこうやってるようなのですが

みなさんはどうやってるのですか。

302 名前:デフォルトの名無しさん mailto:sage [2008/08/24(日) 20:30:13 ]
すみません
my $path = '.file';

my $path = './file';
です

303 名前:デフォルトの名無しさん mailto:sage [2008/08/24(日) 23:33:29 ]
>>301
$local =~ tr|\\|/|g;
# or
$fname =~ s/(?:\\|\/)([^\\\/:*?"<>|]+?$)/$1/;
# 思いつきで書いた。どっちもその場しのぎ。当然テストなんかしてない。

304 名前:デフォルトの名無しさん mailto:sage [2008/08/25(月) 00:40:39 ]
>>303
まあ tr に g オプションはないよな



305 名前:303 mailto:sage [2008/08/25(月) 01:06:49 ]


306 名前:デフォルトの名無しさん mailto:sage [2008/08/25(月) 01:40:11 ]
まぁ、trを正規表現と勘違いしてるやつ多いよな……。

307 名前:デフォルトの名無しさん mailto:sage [2008/08/25(月) 01:52:09 ]
yでおk

308 名前:デフォルトの名無しさん mailto:sage [2008/08/25(月) 06:35:23 ]
perlちょっと飽きたかも。
入門書読んでも、どの本も
同じことしか書いてないし。

だいたい,スカラー変数の説明から始まって、
配列、ハッシュ、ループ、プリント文、あとなんだ、
サブルーチン、正規表現、こんな感じ。

あとはコンテキストがどうたらこうたら。
演算子の優先順位がどうとか。

309 名前:デフォルトの名無しさん mailto:sage [2008/08/25(月) 06:39:17 ]
あとは、if文、それと、正規表現で取得した文字列の再利用の方法とか。
あと入出力。それと、変数のスコープとか。
ファイルからの入力、ファイルへの出力。
再帰、引数利用の引数渡し。

それ以上難しいのは、グロブ、レファレンス、パッケージ、
モジュール、二次元配列、二次元ハッシュとかかな。


基本は1ヶ月もやれば覚えてしまうね。目新しさがないというか、
飽きる。「ああまたこれか」みたいな。

310 名前:デフォルトの名無しさん mailto:sage [2008/08/25(月) 06:40:40 ]
あと、->があったとき、
レファレンスとして使われている可能性と、
オブジェクト指向での記述として使われている可能性と、
2つあるの?

311 名前:デフォルトの名無しさん mailto:sage [2008/08/25(月) 06:47:10 ]
今なんか、おもしろそうな機能を発見したぜ

$\

use English: $OUTPUT_RECORD_SEPARATOR / $ORS

[入出力関連] 出力時の行末文字

デフォルト値は NULL です。
$\ の使い方

$\ = "\n";
print "Hello Perl World !";

↑これを使うと、行末文字を変更できるのだ
ということは「にょ」とかもできるはず。さっそくやってみよう。

312 名前:デフォルトの名無しさん mailto:sage [2008/08/25(月) 06:49:15 ]
$\ = "にょ";
print "おはよう";

さっそくやってみたぞ
実験結果

おはようにょ

成功!みごと成功したようだ!

313 名前:デフォルトの名無しさん mailto:sage [2008/08/25(月) 07:32:03 ]
>>308,309
飽きる原因
・理解してるのに同じ事を繰り返してる
・理解出来ないのに同じ事を繰り返してる
どっちも馬鹿には違いないがw

つか、入門書を何冊も読んでる時点で相当の馬鹿

>>311,312
チラウラカスうぜぇ

314 名前:デフォルトの名無しさん mailto:sage [2008/08/25(月) 07:34:56 ]
>・理解出来ないのに同じ事を繰り返してる
 ↓
何度も同じことを繰り返してるのに理解出来ない

の方が良かったな
失敬



315 名前:デフォルトの名無しさん mailto:sage [2008/08/25(月) 08:19:00 ]
スペースキーを押したら、次のメッセージが出る、
っていうのは,Perlでは実装できない?

Cのときはできたんだけど。scanfだっけ?

316 名前:デフォルトの名無しさん mailto:sage [2008/08/25(月) 09:57:01 ]
なんか、
pc11.2ch.net/test/read.cgi/prog/1213800787/297
このレベルの話があって、漏れは一回読んで意味がすぐ理解
できたんだけど、
pc11.2ch.net/test/read.cgi/prog/1213800787/298
みたいに、理解できない人もいるみたいなんだけど、
これってコミュニケーション障害?

317 名前:デフォルトの名無しさん mailto:sage [2008/08/25(月) 10:45:32 ]
>>316
俺もわからん。あんたがエスパーなんだろう。
というか板違い甚しい。他所でやってくれ。

318 名前:デフォルトの名無しさん mailto:sage [2008/08/25(月) 11:02:52 ]
1〜4 を 0、5〜9 を 10、11〜14 を 10、15〜19 を 20 といった具合に、
四捨五入したいのですが、どのように記述すればいいのでしょうか。

If 文でこつこつ書いて、あまりの多さにめげてしまいました。

319 名前:デフォルトの名無しさん mailto:sage [2008/08/25(月) 11:45:56 ]
>>318
sub round10 {
int(($_[0] + 5) / 10) * 10;
}

320 名前:デフォルトの名無しさん mailto:sage [2008/08/25(月) 13:11:34 ]
これ5を代入すると0になるな

321 名前:デフォルトの名無しさん mailto:sage [2008/08/25(月) 13:31:10 ]
効率いいかしらないけど・・・
print round(10);
sub round {sprintf('%.1f',($_[0] / 100 ))*100}


322 名前:321 mailto:sage [2008/08/25(月) 13:34:06 ]
結構古いバージョンから問題なく動いてるコードなんだけど
そもそもsprintfって四捨五入するの保証してるのか不明デス



323 名前:318 mailto:sage [2008/08/25(月) 16:21:26 ]
ありがとうございます。50行ぐらいあったコードがなくなってすっきりしました。

324 名前:デフォルトの名無しさん mailto:sage [2008/08/25(月) 17:16:13 ]
うちの環境だと、>>319は正当が出て、
>>321は、print round 15 すると答えが10が返る。
# ま、原因は浮動小数点の処理にあるのは明白なんだけど。
>>321氏は「その環境では上手く行ってたとしても別環境では上手く
行かない事がある」程度には認識した方が良いかと。

>>323
何故に50行?ベタ実装してもそんなに行は食わないだろ?
sub round {
 my $t = chop ( my $i = shift ) ;
 my %h = map{ $_, $_ < 5 ? 0 : 10 } 0..9 ;
 ( $i || 0 ) * 10 + $h{$t} ;
}
printf "%d->%d\n", $_ ,round $_ for 0 .. 30 ;



325 名前:デフォルトの名無しさん mailto:sage [2008/08/25(月) 19:10:41 ]
読めねーw

326 名前:デフォルトの名無しさん mailto:sage [2008/08/25(月) 20:47:39 ]
>>299

$str=~ s/([@-S])/($1)/g;
$str=~ s/([@-S])/ord($1)-ord('@') + 1/eg;
$str=~ s/T-]/ord($1)-ord('T') + 1/eg;

>>318
$data=~ s/(\d*)(\d)/$1 * 10 + (($2 < 5) ? 0 : 10)/e;

327 名前:デフォルトの名無しさん mailto:sage [2008/08/25(月) 21:02:28 ]
>>326
$str=~ s/([@-S])/'(' . (ord($1)-ord('@') + 1) . ')'/eg;

でいい気がするんだが

328 名前:デフォルトの名無しさん mailto:sage [2008/08/25(月) 21:12:57 ]
>>318
sub round($) {
return $_[0] % 10 >= 5 ? int($_[0]/10+1)*10 : int($_[0]/10)*10;
}


329 名前:326 mailto:sage [2008/08/25(月) 21:17:50 ]
>>327
そだね

あと、ミス
× $str=~ s/T-]/ord($1)-ord('T') + 1/eg;
○$ str=~ s/[T-]]/ord($1)-ord('T') + 1/eg;

330 名前:326 mailto:sage [2008/08/25(月) 21:28:07 ]
さらに、ミス、スマソ
× $str=~ s/T-]/ord($1)-ord('T') + 1/eg;
○ $str=~ s/[T-]]/ord($1)-ord('T') + 1/eg;

331 名前:デフォルトの名無しさん mailto:sage [2008/08/25(月) 21:41:15 ]
全部クラス化した方が効率いいだろ。

@num{ord('@')..ord('S')} = 1..20;
@num{ord('T')..ord(']')} = 1..10;
$str =~ s/([@-ST-]])/$num{ord($1)}/eg;


332 名前:デフォルトの名無しさん mailto:sage [2008/08/25(月) 21:44:09 ]
あ、上のやつは()つけといてくれ。。。見逃した。
・・・=map{"($_)"}1..20

333 名前:デフォルトの名無しさん mailto:sage [2008/08/25(月) 21:48:50 ]
>>324
一応、自己(嫌悪)レス。
sub round{ my $t = chop ( my $i = shift ) ; ( $i || 0 ) * 10 + ( $t < 5 ? 0 : 10 ) ; }

334 名前:デフォルトの名無しさん mailto:sage [2008/08/25(月) 22:20:40 ]
質問です。

perlを勉強し始めて間も無い物です。
MacOSX 10.5でLWPを使った簡単なマクロツールを使っているのですが、

Terminalにログをだらだらと表示する画面では無く、
viや、CPANを実行した時の様な専用画面が表示されるようにしたいと考えています(exitを打ち込んだから、shellに戻る様なイメージ)。

ぐぐるにもどう言った言葉で表現すればいいのか分からないので、
困っています。ヒントだけでも良いので押しえてください。
よろしくお願いいたします。



335 名前:デフォルトの名無しさん mailto:sage [2008/08/25(月) 22:34:13 ]
>>334 Curses

336 名前:デフォルトの名無しさん mailto:sage [2008/08/25(月) 22:50:49 ]
>>335
ありがとうございます!!
当スレの過去ログ等も調べさせて頂き、
色々見てみたのですが、インストールは出来そうだけど、
perlとどう対話(?)させれば良いのかが分からないです…。

もし私のような初心者にも分かりやすいサイト等があったら
お教え頂けますでしょうか。

337 名前:デフォルトの名無しさん mailto:sage [2008/08/25(月) 22:52:30 ]
ググれよ

338 名前:デフォルトの名無しさん mailto:sage [2008/08/25(月) 23:07:33 ]
すみません、ぐぐってます…。
ググっても分からないぐらいのレベルなんです。

とりあえず、インストールは終わったんですがね。
検索ワードをCurses.pmに買えてやってみます。

339 名前:デフォルトの名無しさん [2008/08/25(月) 23:45:31 ]
>>326
あぁ。そういう方法もありますか。よくこんな方法思いつきますね。
見れば、なぁんだと思うけどなかなか思い浮かばないですね。

でもこれだと>>288 のやり方(をサブルーチンとか外して効率化したの)とスピード
は変わらないですね。
逆にord使う分だけ遅くならないのかなーと・・・。

でもアイデアは面白いと思いますので参考にしたいと思います。

有り難う御座います。


340 名前:デフォルトの名無しさん mailto:sage [2008/08/26(火) 00:06:30 ]
>>338です。
色々調べた結果難しそうなので、今回はチャレンジするのをやめました。
screen(?)を上手く使った方法を考えたいと思います。
お騒がせいたしました。

341 名前:デフォルトの名無しさん mailto:sage [2008/08/26(火) 00:49:26 ]
>>334
CPANを読めよ

342 名前:デフォルトの名無しさん mailto:sage [2008/08/26(火) 00:50:40 ]
mamono.2ch.net/test/read.cgi/newsplus/1219666275/1
これみたら2ちゃんは一日に2億アクセスあるみたいですが、2億行の
アクセスログも、Perlだったら、スイスイ取り扱いできますよね。

343 名前:デフォルトの名無しさん mailto:sage [2008/08/26(火) 01:00:12 ]
serif.hatelabo.jp/28142fc0b6794ceb77aaee46a4e561fd6f01b549/f11f68151964cc79558e14662706685dccfea1ba

344 名前:デフォルトの名無しさん mailto:sage [2008/08/26(火) 01:51:42 ]
use feature qw( :5.10 );
system q|cls|;
#----------------------------------

my $a,$b;
$a=10;
$b=3;
my $c;
say $c=$a/$b;
say $c*3;

このコードを実行したら、10になった。
一方、電卓で計算したら、9.99999999999、、、になった。
なんで?



345 名前:デフォルトの名無しさん mailto:sage [2008/08/26(火) 01:57:28 ]
電卓が安物だから。

ちゃんとしたやつなら10になる。

346 名前:デフォルトの名無しさん mailto:sage [2008/08/26(火) 04:18:11 ]
perl のコードを実行できる電卓があるんか?

347 名前:デフォルトの名無しさん mailto:sage [2008/08/26(火) 04:50:07 ]
バカは消えろ

348 名前:デフォルトの名無しさん mailto:sage [2008/08/26(火) 22:08:06 ]
rarファイル(パスワードつき)をperlから操作したいのですが
CPANでモジュールを探したところ、
Archive::Rarではオプションでパスワードを扱えなくて
Archive::Rar::Passthroughでないとダメみたいです。
ところが、このモジュールは使用OS(Windows)には入りません。
エラーが出ないことを前提に、直接rar叩いちゃった方が楽ですか?

349 名前:デフォルトの名無しさん mailto:sage [2008/08/26(火) 22:14:21 ]
>>348
楽ですか?っていうかほかにやり方ないんならそうするしかないじゃん
何が聞きたいの?

350 名前:デフォルトの名無しさん mailto:sage [2008/08/26(火) 23:39:38 ]
前に弄った時は、 Win32::API で unrar32.dll を読み込んで使ってた。

351 名前:デフォルトの名無しさん mailto:sage [2008/08/27(水) 01:40:15 ]
${変数名}

こんな書き方があることを30分前に知った。
お前ら、ちゃんと教えてくれなきゃだめだろ。

352 名前:デフォルトの名無しさん mailto:sage [2008/08/27(水) 01:55:11 ]
シンボリックリファレンスの仕様は非推奨です。

353 名前:デフォルトの名無しさん mailto:sage [2008/08/27(水) 02:10:06 ]
$a=あ;

print "$aい";

こんなとき、こっちの意図は

「あい」

という出力なのに、perlが勝手に
$aい

という変数だと誤解して、エラーになる、
こういうときに、
${a}
と書くと、エラーにならない。

今読んだ本にそう書いてあるんだけど。
これがシンボリックリファレンスなの?

354 名前:デフォルトの名無しさん mailto:sage [2008/08/27(水) 02:11:45 ]
Perlを学び終えたとき、次に学ぶ言語として
最適なのはどれ?

Ruby?
PHP?
Phtynon?
C?



355 名前:デフォルトの名無しさん mailto:sage [2008/08/27(水) 03:37:37 ]
DBMにURLとアクセス時間を100万件くらい記録したファイルがあって
これをアクセス時間でソートしたリスト(テキストファイル)を作りたいんですが、
あまりメモリに負担をかけずにやるにはどうやるのがいいですか?

DBMはこんな感じで使ってました。
use DB_File;

tie %u, 'DB_File', 'url', O_RDWR|O_CREAT, 0644, $DB_BTREE;

$u{$url} = $last_modified;

356 名前:デフォルトの名無しさん mailto:sage [2008/08/27(水) 03:43:28 ]
ActivePerl(Perl 5.10.0) でData::Aliasを動かせている人っていますか?

ppmリポジトリでも軒並みテストにFAILしているし、
自分の環境(VC++ Express 2008)でも一緒でした
配布物内のREADMEには動く節が書かれていますが……orz

Data::Alias以外の方法で同様なことを実現するには、
素直にサブルーチンを掘ってリファレンスで受け渡しするしかなさそうで、
ちょっと難儀しています

357 名前:デフォルトの名無しさん mailto:sage [2008/08/27(水) 11:49:49 ]
>>353
それはシンボリックリファレンスとは違う。
分からないことがあったら「ググる」という事を覚えようね。

あと、できるだけ、

  print $a, "い";

って書き方を習慣付けておいた方が
後々、他の言語にも移行しやすいよ。

358 名前:デフォルトの名無しさん mailto:sage [2008/08/27(水) 12:42:21 ]
前から疑問だったのですが、

print $a. "い";
print $a, "い";

では異なるんでしょうか。

359 名前:デフォルトの名無しさん mailto:sage [2008/08/27(水) 12:47:09 ]
>>358
明らさまに異なる。
print $h = $a. "い" ;
print @a = ( $a, "い" ) ;

360 名前:デフォルトの名無しさん mailto:sage [2008/08/27(水) 12:49:42 ]
% cat hoge.pl
use Benchmark;

open DEVNULL, ">", "/dev/null" or die $!;
$x = "hogehogehoge";

timethese(
undef,
{
dot => sub { print DEVNULL $x. "hoge" },
comma => sub { print DEVNULL $x, "hoge" },
}
);
% perl hoge.pl
Benchmark: running comma, dot for at least 3 CPU seconds...
comma: 3 wallclock secs ( 3.42 usr + -0.00 sys = 3.42 CPU) @ 2453425.44/s (n=8390715)
dot: 4 wallclock secs ( 3.19 usr + 0.02 sys = 3.21 CPU) @ 1753933.96/s (n=5630128)

361 名前:デフォルトの名無しさん mailto:sage [2008/08/27(水) 12:51:21 ]
結果は同じ。おそらく内部処理が違うだろうけど気にするほどでも無い。
文字列の足し算をするか、しないか。どっちが効率がいいか考えればわかるよね?

あと、print 文のときはソレでいいけど、代入文とかのとき
$b = $a. "い"; とは書けるけど
$b = $a, "い"; はダメ。

362 名前:デフォルトの名無しさん mailto:sage [2008/08/27(水) 12:59:10 ]
なんという低レベルスレ・・・・

363 名前:デフォルトの名無しさん mailto:sage [2008/08/27(水) 13:02:37 ]
英語ソフトを日本語化する作業をしています。大量の置換スクリプトを書いてます。

s/"qwertyuiop@[asdfghjkl;:]zxcvbnm"/"たていすかんなにらせちとしはきくまのりれけむつさそひこみもねるめろ"/;

こんな長い置換を、2行に折り曲げて書く方法って無いでしょうか?

s/"qwertyuiop@[asdfghjkl;:]zxcvbnm"/
"たていすかんなにらせちとしはきくまのりれけむつさそひこみもねるめろ"/;

って書くと改行が混じるんですよね。

364 名前:363 mailto:sage [2008/08/27(水) 13:04:22 ]
投稿ミス

置換パターンに @ とか [ ] とか出てくるのは忘れてください。
テケトーにキーボードを叩いただけですから。
本来はふつうの英文です。



365 名前:デフォルトの名無しさん mailto:sage [2008/08/27(水) 13:36:33 ]
>>363
やり方あるはずだよ。
なんかのオプションをつけるはず。
s/●/○/rとか。
そのrとかのオプションの名前は忘れたけど。
「正規表現中の改行を無視する」
ってオプションだと思う。
こないだ読んだ本に書いてあった。

366 名前:デフォルトの名無しさん mailto:sage [2008/08/27(水) 13:38:02 ]
>>363
っ[x]






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<239KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef