[表示 : 全て 最新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 あたり

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]

367 名前:デフォルトの名無しさん mailto:sage [2008/08/27(水) 13:39:55 ]
最近の
「マニュアルを見るのは賎民のやること」
という風潮には目を覆うものがあるな。

368 名前:デフォルトの名無しさん mailto:sage [2008/08/27(水) 13:42:52 ]
xかなあ。

> パターン中の空白文字(半角スペース、
>Tab文字、改行文字)と、「#」から行末まで
>の文字列を無視する。
> 「[]」内の文字は、無視されない。

369 名前:デフォルトの名無しさん mailto:sage [2008/08/27(水) 13:49:22 ]
>>361
それは結果がたまたま同じだっただけだ。
man perlvar の $, を100ぺん読み直せ



370 名前:デフォルトの名無しさん mailto:sage [2008/08/27(水) 13:51:31 ]
お尋ねします。
「○○もしくは△△を含む」は「○○|△△」でできますが、
「○○および△△を含む」はどうするのでしょうか?
つまりand検索です。
要素が二つとは限らず可変なのですが、どうするのが効率が良いのでしょうか?


371 名前:デフォルトの名無しさん mailto:sage [2008/08/27(水) 14:20:11 ]
>>370
っ[?=]

372 名前:デフォルトの名無しさん mailto:sage [2008/08/27(水) 14:29:36 ]
>>370
っ[ブール代数]

373 名前:デフォルトの名無しさん mailto:sage [2008/08/27(水) 16:00:48 ]
>>366
アリ!バッチリです。これで仕事がはかどります。

374 名前:デフォルトの名無しさん mailto:sage [2008/08/27(水) 17:06:01 ]
もう見てもいないだろうけど
my $hoge = q{hoge} ;
$hoge =~ s{hoge}
# これでも良くね?
{foo} ;
print $hoge . "\n" ;


375 名前:デフォルトの名無しさん mailto:sage [2008/08/27(水) 20:44:49 ]
他人が書いたソースコード読む場合なんだけど、
アロー演算子がでてきたときに、それが
オブジェクト指向のアロー演算子なのか、それとも、
デリファレンスのアロー演算子なのか、どこを見て
見分ければいいの?

376 名前:デフォルトの名無しさん mailto:sage [2008/08/27(水) 20:54:27 ]
オレ様が考えた、仕様を全部理解していなくてはならない度

レベル1 言語使用考案者(ラリー・ウオール)
レベル2 仕様書を紙に書く人
レベル3 インタプリターを書く人
レベル4 専用エディター作る人
レベル5 モジュール作る人
レベル6 教科書や参考書を書く人
レベル7 このスレで初心者に教える人
レベル8 このスレで質問する人

377 名前:356 mailto:sage [2008/08/28(木) 02:10:26 ]
とりあえずLexical::Aliasでお茶を濁すことにしました
Data::Aliasとの違いに気を付けようと思います

378 名前:デフォルトの名無しさん mailto:sage [2008/08/28(木) 09:59:37 ]
「はじめての人のためのかんたんPerl/CGI入門」
読んでるけど、よくわからんな。

379 名前:デフォルトの名無しさん mailto:sage [2008/08/28(木) 10:03:39 ]
ourってなに?
よく使うの?



380 名前:デフォルトの名無しさん mailto:sage [2008/08/28(木) 12:13:44 ]
>>375
ぐぐれしね

>>376
逆だしね

>>378-379
最後まで読めしね

381 名前:デフォルトの名無しさん mailto:sage [2008/08/28(木) 13:09:36 ]
しねしね団ですね。わかります。

382 名前:デフォルトの名無しさん mailto:sage [2008/08/28(木) 13:11:09 ]
「逆だし、ね」なのか
「逆だ、死ね」なのか

383 名前:355 mailto:sage [2008/08/28(木) 17:35:40 ]
回答がなかったので、結局、DBにつっこんだ。

今さらだが、もしハッシュでやるんならキーとvalue入れ替えてBTREEのハッシュ再構築して、
トラバースってことになるんだろうな。。。
DB_Fileはキー重複にも対応してたはずなので、やろうと思えばできそう。

384 名前:デフォルトの名無しさん mailto:sage [2008/08/28(木) 17:45:38 ]
>>383
とりあえず順番考えずにべたで出力したのをsortコマンドに食わせれば楽だったかもな。
ぜんぜんperlじゃないけどw

sortコマンドはメモリ足りなけりゃ中間結果をディスクに書いてマージソートとかやってくれる。

385 名前:デフォルトの名無しさん mailto:sage [2008/08/28(木) 18:55:18 ]
>>384
× マージソートとかやってくれる。
○ ソート済みファイルのマージとかやってくれる。



386 名前:デフォルトの名無しさん mailto:sage [2008/08/29(金) 04:15:14 ]
requireの相互呼び出しってできないんだな。

387 名前:デフォルトの名無しさん mailto:sage [2008/08/29(金) 04:20:47 ]
requireが実際に何をしているか知っていれば自ずと分かることだ

388 名前:デフォルトの名無しさん [2008/08/29(金) 11:13:17 ]
ttp://digit.que.ne.jp/work/wiki.cgi?Perl%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB%2FLWP#i6
↑のページの通りにLWPを使ってPOSTしているのですが、
どのようなデータをPOSTしているか確認する方法はないでしょうか?
%formdataの中を見るのではなく、requestした結果から見れたらいいのですが。


389 名前:デフォルトの名無しさん mailto:sage [2008/08/29(金) 11:17:50 ]
パケットキャプチャは一番確実。
暗号化されてたらバケラッタだけど



390 名前:388 mailto:sage [2008/08/29(金) 11:43:42 ]
>>389
ありがとうございます。
Etherealというソフトで確認してみたいと思います。

391 名前:デフォルトの名無しさん mailto:sage [2008/08/29(金) 18:10:06 ]
Template-tooklkitでdoにあたるincludeやprocessは見つかったのですが
evalのような関数は無いでしょうか。
[%
  tt2_str = '[% cnt = 10 + 5; cnt; %]';
  EVAL(tt2_str); # ←のような感じ
%]
期待する表示結果:15

392 名前:デフォルトの名無しさん mailto:sage [2008/08/29(金) 18:53:40 ]
ぐぐれ

393 名前:デフォルトの名無しさん mailto:sage [2008/08/29(金) 19:08:14 ]
最近はなんでもかんでも「ぐぐれ」って返すのがブームなの?

394 名前:デフォルトの名無しさん mailto:sage [2008/08/29(金) 19:10:19 ]
ぐぐれ

395 名前:デフォルトの名無しさん mailto:sage [2008/08/29(金) 19:28:54 ]
ぐぐっても解決しない質問キボウ

396 名前:デフォルトの名無しさん mailto:sage [2008/08/29(金) 20:00:13 ]
ファイル名 「a.pl」

ソースコード

print "a";
require a.pl;

↑これを実行するとどうなる?

397 名前:デフォルトの名無しさん mailto:sage [2008/08/29(金) 20:23:10 ]
試せ

398 名前:デフォルトの名無しさん mailto:sage [2008/08/29(金) 20:24:29 ]
↑が代わりに試せ

399 名前:デフォルトの名無しさん mailto:sage [2008/08/29(金) 21:44:59 ]
>これを実行するとどうなる?

自分で実行すればいいじゃないかよ。
もしかしてナイコン?



400 名前:デフォルトの名無しさん mailto:sage [2008/08/29(金) 22:21:28 ]
>>399は40代と見た。

401 名前:デフォルトの名無しさん mailto:sage [2008/08/29(金) 23:14:08 ]
いきなり考えなしに実行すると危険なことってあるよね。

コンソールレベルでも、
open FILE > C:/windows/comamnd.com とか。

コマンドコムが上書きされてしまう。

あと危険なのは、rmとか。
systemとか。

あと、レンタルサーバーで無限ループになったときって
どうすればいいの?

402 名前:デフォルトの名無しさん mailto:sage [2008/08/29(金) 23:40:30 ]
my a=1;

これでエラーが出るんで、
「おかしいなーおかしいなー」
って悩んでたら、よく考えたら、
$が抜けてた。

403 名前:デフォルトの名無しさん mailto:sage [2008/08/30(土) 00:00:37 ]
use utf8;
use open IO => ":encoding(cp932)";
binmode STDIN => ":encoding(cp932)";
binmode STDOUT => ":encoding(cp932)";
binmode STDERR => ":encoding(cp932)";
use Encode;
system q|cls|;
#----------------------------------
my $bar = 'fuga.txt';
if (-f $bar) {
print "ファイル".$bar."が存在します。\n";
}
else {
print"ファイル". $bar."が存在しません。\n";
}

↑このコードすごいよ。
ファイルが存在するかどうかを調べてくれて、
レポートまでしてくれるよ。

404 名前:デフォルトの名無しさん mailto:sage [2008/08/30(土) 00:10:35 ]
>>401
> いきなり考えなしに実行すると危険なことってあるよね。

ありますね。なので考えてやりゃいいんじゃないでしょうか。

> コマンドコムが上書きされてしまう。

とか、

> あと危険なのは、rmとか。
> systemとか。

とか、このへんがあなたにとって「危険」でありうる環境でなら、なんぼでもやってください。
ただしその程度の認識で公開のサーバを利用するのはできれば、できるかぎりやめてください。

405 名前:デフォルトの名無しさん mailto:sage [2008/08/30(土) 00:11:04 ]
グローバル変数って絶対使ったらだめなの?

myしか使っちゃだめなの?

外で変数使いたい場合もあるんだが。

406 名前:デフォルトの名無しさん mailto:sage [2008/08/30(土) 00:14:16 ]
>>405
自己レス

サブルーチンにして、
retrunつかったら解決した。

407 名前:デフォルトの名無しさん mailto:sage [2008/08/30(土) 00:14:32 ]
>>403
ファイルテストを行ってから、print するまでの間に、あったファイルが消えたり、なかったファイルが作られたりした場合はどうすんの?

408 名前:デフォルトの名無しさん mailto:sage [2008/08/30(土) 00:19:47 ]
一回だけ初期化されるstateってどういう意味?
説明四でも意味がわかんない。



state変数

* 一回だけ初期化される変数。
* Cのstatic相当

state変数
今までは...

{
my $i = 0;
sub incr { $i++ };
}

state変数
これからは...

use feature 'state';
sub incr {
state $i = 0;
$i++;
}

409 名前:デフォルトの名無しさん mailto:sage [2008/08/30(土) 00:21:12 ]
もしかして初めてアクセスされる一回目だけ初期化されて、
2回目以降はその初期化の行は実行されずにスルーされるってこと?



410 名前:デフォルトの名無しさん mailto:sage [2008/08/30(土) 00:37:37 ]
それで?

411 名前:デフォルトの名無しさん mailto:sage [2008/08/30(土) 00:41:09 ]
サブルーチンの中に
サブルーチンって書いていいの?

412 名前:デフォルトの名無しさん mailto:sage [2008/08/30(土) 00:46:50 ]
>>408
それを読んでわかんねー、というか理解に少しでも不安があるようなら正直かなりマズい。
Perl をまるで読めてねーっつーことだから。
基礎からがんばれ。

413 名前:デフォルトの名無しさん mailto:sage [2008/08/30(土) 00:52:02 ]
>>411
どこのサブルーチンの中にサブルーチンが書いてあるの?

414 名前:デフォルトの名無しさん mailto:sage [2008/08/30(土) 00:56:15 ]
>>413
いやだから、
自分でこれから、そういうコードを書いても
いいのかなあ?って。

415 名前:デフォルトの名無しさん mailto:sage [2008/08/30(土) 00:59:19 ]
fuga.txtがあるかどうかを調べ、もしあるならあると言い、なければないと言い、ない場合はわざわざ作成してあげて、
作成したと言い、ある場合は、ファイルサイズを調べてレポートするプログラム。↓
binmode STDIN => ":encoding(cp932)";
binmode STDOUT => ":encoding(cp932)";
binmode STDERR => ":encoding(cp932)";
use Encode;
use feature qw( :5.10 );
system q|cls|;
#----------------------------------
my $bar = 'fuga.txt';
my $a=&file;
sub file{
if (-f $bar) {
print "ファイル".$bar."が存在します。\n";
return 1;
}
else {
print"ファイル". $bar."が存在しません。\n";
return 0;
}
}
given($a){
when (1){
my $file_size;
$file_size = (stat'./fuga.txt')[7];
say $bar."のファイルサイズは、".$file_size."バイトです"; }
when (0){
open FH, ">fuga.txt";
say "ファイル". $bar."を作成しました。";
}
}

416 名前:デフォルトの名無しさん mailto:sage [2008/08/30(土) 01:01:09 ]
use utf8;
use open IO => ":encoding(cp932)";

↑先頭の2行にこれを忘れていた。入れてください。

417 名前:デフォルトの名無しさん mailto:sage [2008/08/30(土) 01:08:23 ]
>>415
-f してから open するまでの間に誰かが fuga.txt を作っていた場合、
何もかも台無しになるという点で >>403 より性質が悪化してるんだが
それはいいのか。

418 名前:デフォルトの名無しさん mailto:sage [2008/08/30(土) 01:08:30 ]
ねーねーこれ↓って、実行されちゃうよね?

&で明示的に実行を指示したときだけ
サブルーチンを実行したいんだけど、
これだと、処理の流れがそこまできたときに、
なしくずし的に実行されてしまうんだけど、
それって正常な動作なの?

sub a;
{
print "a";
}

419 名前:デフォルトの名無しさん mailto:sage [2008/08/30(土) 01:10:23 ]
ようは、&aってしたときだけ、そのサブルーチンが実行されて
ほしいのに、ソースコードの一番下にそのサブルーチンの定義部を
置いておくと、そこまできたときに、勝手に実行されてしまうのが
困るといっているんです。



420 名前:デフォルトの名無しさん mailto:sage [2008/08/30(土) 01:14:20 ]
>>418-419
は自己解決したごめん

もう一回ためしたら実行されなかった。
;(セミコロン)が余計に入っていた。

421 名前:デフォルトの名無しさん mailto:sage [2008/08/30(土) 03:14:54 ]
mapの場合はゆっくり出力するってできないのかな?

foreachの場合は、sleepかませて
1行づつゆっくり出力するってできるけど、
mapだと、一度に一気に配列に全部入ってしまうから、
一個づつゆっくり出すとか無理だよね?






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

前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