Perlについての質問箱 37箱目at TECH
Perlについての質問箱 37箱目 - 暇つぶし2ch321:デフォルトの名無しさん
08/08/25 13:31:10
効率いいかしらないけど・・・
print round(10);
sub round {sprintf('%.1f',($_[0] / 100 ))*100}


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



323:318
08/08/25 16:21:26
ありがとうございます。50行ぐらいあったコードがなくなってすっきりしました。

324:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/08/25 19:10:41
読めねーw

326:デフォルトの名無しさん
08/08/25 20:47:39
>>299

$str=~ s/([①-⑳])/($1)/g;
$str=~ s/([①-⑳])/ord($1)-ord('①') + 1/eg;
$str=~ s/Ⅰ-Ⅹ/ord($1)-ord('Ⅰ') + 1/eg;

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

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

でいい気がするんだが

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


329:326
08/08/25 21:17:50
>>327
そだね

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

330:326
08/08/25 21:28:07
さらに、ミス、スマソ
× $str=~ s/Ⅰ-Ⅹ/ord($1)-ord('Ⅰ') + 1/eg;
○ $str=~ s/[Ⅰ-Ⅹ]/ord($1)-ord('Ⅰ') + 1/eg;

331:デフォルトの名無しさん
08/08/25 21:41:15
全部クラス化した方が効率いいだろ。

@num{ord('①')..ord('⑳')} = 1..20;
@num{ord('Ⅰ')..ord('Ⅹ')} = 1..10;
$str =~ s/([①-⑳Ⅰ-Ⅹ])/$num{ord($1)}/eg;


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

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

334:デフォルトの名無しさん
08/08/25 22:20:40
質問です。

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

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

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

335:デフォルトの名無しさん
08/08/25 22:34:13
>>334 Curses

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

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

337:デフォルトの名無しさん
08/08/25 22:52:30
ググれよ

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

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

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

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

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

有り難う御座います。


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

341:デフォルトの名無しさん
08/08/26 00:49:26
>>334
CPANを読めよ

342:デフォルトの名無しさん
08/08/26 00:50:40
スレリンク(newsplus板:1番)
これみたら2ちゃんは一日に2億アクセスあるみたいですが、2億行の
アクセスログも、Perlだったら、スイスイ取り扱いできますよね。

343:デフォルトの名無しさん
08/08/26 01:00:12
URLリンク(serif.hatelabo.jp)

344:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/08/26 01:57:28
電卓が安物だから。

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

346:デフォルトの名無しさん
08/08/26 04:18:11
perl のコードを実行できる電卓があるんか?

347:デフォルトの名無しさん
08/08/26 04:50:07
バカは消えろ

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

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

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

351:デフォルトの名無しさん
08/08/27 01:40:15
${変数名}

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

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

353:デフォルトの名無しさん
08/08/27 02:10:06
$a=あ;

print "$aい";

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

「あい」

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

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

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

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

Ruby?
PHP?
Phtynon?
C?

355:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/08/27 03:43:28
ActivePerl(Perl 5.10.0) でData::Aliasを動かせている人っていますか?

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

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

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

あと、できるだけ、

  print $a, "い";

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

358:デフォルトの名無しさん
08/08/27 12:42:21
前から疑問だったのですが、

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

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

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

360:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/08/27 12:51:21
結果は同じ。おそらく内部処理が違うだろうけど気にするほどでも無い。
文字列の足し算をするか、しないか。どっちが効率がいいか考えればわかるよね?

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

362:デフォルトの名無しさん
08/08/27 12:59:10
なんという低レベルスレ・・・・

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

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

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

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

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

364:363
08/08/27 13:04:22
投稿ミス

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

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

366:デフォルトの名無しさん
08/08/27 13:38:02
>>363
っ[x]

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

368:デフォルトの名無しさん
08/08/27 13:42:52
xかなあ。

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

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

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


371:デフォルトの名無しさん
08/08/27 14:20:11
>>370
っ[?=]

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

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

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


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

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

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

377:356
08/08/28 02:10:26
とりあえずLexical::Aliasでお茶を濁すことにしました
Data::Aliasとの違いに気を付けようと思います

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

379:デフォルトの名無しさん
08/08/28 10:03:39
ourってなに?
よく使うの?

380:デフォルトの名無しさん
08/08/28 12:13:44
>>375
ぐぐれしね

>>376
逆だしね

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

381:デフォルトの名無しさん
08/08/28 13:09:36
しねしね団ですね。わかります。

382:デフォルトの名無しさん
08/08/28 13:11:09
「逆だし、ね」なのか
「逆だ、死ね」なのか

383:355
08/08/28 17:35:40
回答がなかったので、結局、DBにつっこんだ。

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

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

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

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



386:デフォルトの名無しさん
08/08/29 04:15:14
requireの相互呼び出しってできないんだな。

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

388:デフォルトの名無しさん
08/08/29 11:13:17
URLリンク(digit.que.ne.jp)
↑のページの通りにLWPを使ってPOSTしているのですが、
どのようなデータをPOSTしているか確認する方法はないでしょうか?
%formdataの中を見るのではなく、requestした結果から見れたらいいのですが。


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

390:388
08/08/29 11:43:42
>>389
ありがとうございます。
Etherealというソフトで確認してみたいと思います。

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

392:デフォルトの名無しさん
08/08/29 18:53:40
ぐぐれ

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

394:デフォルトの名無しさん
08/08/29 19:10:19
ぐぐれ

395:デフォルトの名無しさん
08/08/29 19:28:54
ぐぐっても解決しない質問キボウ

396:デフォルトの名無しさん
08/08/29 20:00:13
ファイル名 「a.pl」

ソースコード

print "a";
require a.pl;

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

397:デフォルトの名無しさん
08/08/29 20:23:10
試せ

398:デフォルトの名無しさん
08/08/29 20:24:29
↑が代わりに試せ

399:デフォルトの名無しさん
08/08/29 21:44:59
>これを実行するとどうなる?

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

400:デフォルトの名無しさん
08/08/29 22:21:28
>>399は40代と見た。

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

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

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

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

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

402:デフォルトの名無しさん
08/08/29 23:40:30
my a=1;

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

403:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/08/30 00:10:35
>>401
> いきなり考えなしに実行すると危険なことってあるよね。

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

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

とか、

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

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

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

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

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

406:デフォルトの名無しさん
08/08/30 00:14:16
>>405
自己レス

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

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

408:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/08/30 00:21:12
もしかして初めてアクセスされる一回目だけ初期化されて、
2回目以降はその初期化の行は実行されずにスルーされるってこと?

410:デフォルトの名無しさん
08/08/30 00:37:37
それで?

411:デフォルトの名無しさん
08/08/30 00:41:09
サブルーチンの中に
サブルーチンって書いていいの?

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

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

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

415:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/08/30 01:01:09
use utf8;
use open IO => ":encoding(cp932)";

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

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

418:デフォルトの名無しさん
08/08/30 01:08:30
ねーねーこれ↓って、実行されちゃうよね?

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

sub a;
{
print "a";
}

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

420:デフォルトの名無しさん
08/08/30 01:14:20
>>418-419
は自己解決したごめん

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

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

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

422:デフォルトの名無しさん
08/08/30 03:16:31
久しぶりに来たけど激しくゆとり臭くなったな

423:デフォルトの名無しさん
08/08/30 03:17:30
map {print $_, $/; sleep 1;} 0..100;

なにが不満なの?

424:デフォルトの名無しさん
08/08/30 03:19:54
sleepかませ

425:デフォルトの名無しさん
08/08/30 03:24:09
system q|cls|;
map {
system q|cls|;
print $_, $/;
# sleep 1;
}
0..100000;

こりゃーすげー

426:デフォルトの名無しさん
08/08/30 06:55:02
>>422
明日まで我慢。
あさってには居なくなるから。

427:デフォルトの名無しさん
08/08/30 14:38:11
mod_perl2導入の途中でmod_perl.soを配置するApache2\modulesの指定をしくじりました
mod_perl.soが配置されないままmod_perl2がインストールされてしまいやり直そうにも
"Package 'mod_perl' is already installed."と表示されてやり直しも利きません
どうにか導入する方法は無いでしょうか?

428:デフォルトの名無しさん
08/08/30 17:03:51
my $a;
ってファイルの上のほうで宣言して、
5,000行下でも、その$aにアクセスできるよね。

でもこれって「グローバル変数」とは呼ばないんだよね。

429:デフォルトの名無しさん
08/08/30 17:05:45
a.plと
b.plとあって、
requireで呼び出して使う状況で、
両方とも、$aって変数をつかってても、
myでプライベート化してれば、問題ないのかな?

逆に、myを使ってないで
グローバル変数として使っていたら、
a.plとb.plで同じ$aがあったら、
それは同じ変数として扱われてしまうの?

つまり、複数人で作業するときに、どつぼにはまる
可能性が高い?

430:デフォルトの名無しさん
08/08/30 17:26:47
参考までにどうぞ。
URLリンク(www.rwds.net)
URLリンク(d.hatena.ne.jp)

431:デフォルトの名無しさん
08/08/30 19:39:18
>>427
よく知らんけど mod_perl 無しの状態にロールバックしてやり直せない状態だとしたら、初手から構築し直すのが安全じゃないかな。

432:デフォルトの名無しさん
08/08/30 22:56:41
a.plで、
require b.pl
print "$a";

にして、b.plで、
my $a=1;
にしたら、a.plを実行したときに、
1って表示されないんだけど、
別ファイルでrequireされることがわかっているときは、
変数はmy化したらだめで、グローバル変数にしておかないとだめなの?

433:デフォルトの名無しさん
08/08/30 22:58:11
b.plがrequireされるファイルで、その中でなんかの処理をして、
その処理の結果をa.plに渡す、ってときに、通常
どんな手段で渡しているのかなー?って。

とりあえず、その変数をmy化したら渡せないってのはわかった。
グローバル変数だったら渡せるというのもわかったが、
それって普通の方法なのかな?

434:デフォルトの名無しさん
08/08/31 02:51:00
length q eq ge and print chr ord q each le

このコードの意味わかる?
漏れはわからない。

435:デフォルトの名無しさん
08/08/31 03:11:47
B::Deparseに食わせろ

436:デフォルトの名無しさん
08/08/31 03:59:39
>>434
qがquote-like operatorだということに注意すればそんなに難しくはない。

437:デフォルトの名無しさん
08/08/31 07:42:52
>432-433
2000~3000円くらいの安い入門書を買うことをすすめる。
サブルーチンの項目あたりに書いてるはず。

ぶっちゃけ、Perlというか、
プログラミングにおける基本的な考え方の1つなので、そこから勉強するべき。

あと>430は無視なのかい?

438:デフォルトの名無しさん
08/08/31 11:38:11
http.confにLoadModule perl_module modules/mod_perl.soって書くと起動出来ない…
これはバージョンの相性が良くないってことなんでしょうか。Apache自体が起動しないです

439:デフォルトの名無しさん
08/08/31 13:26:43
>>438
ログにエラーが出ていませんか?
出ていればそれを手がかりに調べてください。

440:デフォルトの名無しさん
08/08/31 14:46:33
>>438
どうにか解決しました
どうもです

441:デフォルトの名無しさん
08/08/31 15:28:31
サブルーチンの説明は書いてあっても、
requireとからめた使い方が書いてないんだよっ!

で、requireでインクルード?したファイルの中の
変数を使いたいときって、どうすればいいの?

442:デフォルトの名無しさん
08/08/31 15:31:56
a.plがあったとして、そのa.plの中で、一生懸命に計算なり
処理なりをするよね。そんで、なんかの結果が出てきて、
それを$aに代入したとする。

そんで、b.plを作って、b.plの中で、
require a.pl

ってやって、さっきの$aの結果を利用しようとしたときに、
a.plの中で、
my $a
ってmy化されていたら、b.plから利用できないじゃん。

もちろん、ourでグローバル化しておけば利用できるのは知ってるけど、
やたらとグローバル変数を使うのはバグの元だからやめろって教科書に書いてあるし。

つまり、a.plの中でサブルーチンを作って、
return渡しをすればいいのか?

443:デフォルトの名無しさん
08/08/31 15:37:43
>>441
答えは”モジュール”にあると思う

444:デフォルトの名無しさん
08/08/31 16:26:09
length q pop and print chr oct oct ord q local

このコードの意味がわからん

445:デフォルトの名無しさん
08/08/31 16:37:55
>>444
きみ、Perl に向いてない。

446:デフォルトの名無しさん
08/08/31 17:06:15
use warnings;
use strict;
use diagnostics;

print "a"


↑これでなんのエラーもでないんだが、
もしかして、ワンライナーの場合は
セミコロンは必須ではないのか?

447:デフォルトの名無しさん
08/08/31 17:07:47
つまりセミコロンがついてないのに
なんで実行できてしまうんかと。

448:デフォルトの名無しさん
08/08/31 17:46:06
>>446
ありがちっちゃありがちだけどもな、
Perl の文法をいい加減に覚えていると、そういう疑問を持ってしまう。

perl は文の区切りとして ; を要求するのであって、
文の終端として、ではないのだ。

ブロック内の最後の行で ; を省略できるのも、
ブロック生成子としての {} が文を区切ってしまうためなのだ。

基礎からやり直しつつ1年ほどROMれ。

449:デフォルトの名無しさん
08/08/31 18:57:27
>442
一番最後の行で答えが出てるじゃないか。

>444
まさにPerlの美学であると同時にデメリットだよなあ。
自分なら適当に区切るか括弧をつける。

>448
でもまあ、付けるけどな、俺。


450:448
08/08/31 19:33:07
>>449
>>444 にあるコードは読み手を混乱させるのが目的なので、あえてそのように書いているのはお分かりかと思います。従って可読性を上げては意味がありません。
ただ今回のコードはまったくややこしくない、いわば子供だましの類なので、読めないとちょっとアレなのは確かですが。

>>448
もちろんそれがよいでしょう。理由は…、言うまでもありませんな。

451:デフォルトの名無しさん
08/08/31 19:51:31
>>444
ppencode の出力の一部じゃないのか? ppencode が何者かはぐぐればわかる。

452:デフォルトの名無しさん
08/08/31 20:28:16
print q pop

これでoって出るのがすげーわらえる

453:デフォルトの名無しさん
08/08/31 20:53:40
はいはいわろすわろす

454:デフォルトの名無しさん
08/08/31 21:45:17
>>444って要するに、"q"の意味がわかれば簡単だよね?

455:デフォルトの名無しさん
08/08/31 21:47:55
>>444
それぞれ一つ一つの意味は分かっても、こうやって並ばれると分からないです><


456:デフォルトの名無しさん
08/08/31 21:54:00
残念ながらそれは、知らないと ハァ? なレベルの知識だ。

457:デフォルトの名無しさん
08/08/31 22:08:19
ハァ?

458:デフォルトの名無しさん
08/08/31 23:02:46
今日からPerlを始めたいと思ってます。 
Active Perlというものは今でも無料で入手できるのでしょうか。。。 
Windowsで使いたいのです。 


459:デフォルトの名無しさん
08/08/31 23:11:26
なぜ実際に自分で試そうとしない?

460:デフォルトの名無しさん
08/08/31 23:11:48
>>458
ActivePerl そのものは現在も無料です。楽しんでね。

461:デフォルトの名無しさん
08/08/31 23:40:46
なるほど、ここで生成されたものか

ppencode - JavaScript demo
URLリンク(namazu.org)

462:デフォルトの名無しさん
08/09/01 00:49:55
>>458
ActivePerlは無料です。
でもダウンロードのリンクは
IQ150以上でないと
探せないようになっております。

463:デフォルトの名無しさん
08/09/01 00:51:06
ちなみに最新バージョンは
5.10です。

ごーてんいち、でなくて
ごーてんじゅう、です。

464:デフォルトの名無しさん
08/09/01 00:51:58
ダウンロードしてきたファイルは、
msiファイルを右クリで、インストールを
選べばインストールできます。
ダブクリではインストできないこともあります。

465:デフォルトの名無しさん
08/09/01 00:52:45
ちなみに、VISUALPerlというものは
開発中止になった模様です。

466:デフォルトの名無しさん
08/09/01 01:59:27
レンタルサーバのLWPでhttpsなサイトにアクセスしようとしたら、
Protocol scheme 'https' is not supported (Crypt::SSLeay not installed)
と怒られました。
telnetやsshでログインできないサーバなのですが、httpsなサイトにアクセスできるように出来ないでしょうか?


467:デフォルトの名無しさん
08/09/01 02:03:33
できません

468:デフォルトの名無しさん
08/09/01 02:50:24
鯖缶にモヅル入れろと頼めば突っ込んでくれるとこもある

469:デフォルトの名無しさん
08/09/01 02:52:58
use Term::ANSIColor qw(:constants);
my @colors = qw(RED GREEN BLUE);

for (@colors) {
  print $_, "$_", "\n";
}

みたいな事をやって、ループ内の動きが以下と等価になるようにしたいです。

print RED, 'RED', "\n";
print GREEN, 'GREEN', "\n";
print BLUE, 'BLUE', "\n";

現状はループ内の print の第一引数に文字列がそのままわたっているだけなので、
希望通りの動作をしませんが、希望通りに動かすにはどうしたら良いのでしょうか?

よろしくお願いします。

470:デフォルトの名無しさん
08/09/01 03:18:17
>>469
print eval($_), $_, "\n" for @{$Term::ANSIColor::EXPORT_TAGS{constants}};



471:デフォルトの名無しさん
08/09/01 03:23:24
>>470
なるほど、evalで文字列を評価してやれば良い訳ですね。
リファレンス当たりをごにょごにょするのかなーと漠然と思っていたのですが、
そういう考え方には至りませんでした。

ありがとうございます。

472:470
08/09/01 03:29:30
>>471
eval も一法というだけ。
@colors への代入時に解決してやる手もある。
というかそちらのほうが素直。

my @colors = RED, GREEN, BLUE;

473:デフォルトの名無しさん
08/09/01 03:41:11
>>472
はじめはそのような方法を考えてみたのですが、
代入時に評価してしまった場合、その後どうやって文字列として取得するかがわからず、
先ほどのようなコードになりました。
もしよろしければ、文字列として取得する方法も教えて頂けますか?


474:デフォルトの名無しさん
08/09/01 03:56:10
my @colors = qw(RED GREEN BLUE);
for (@colors) {
    print $Term::ANSIColor::{$_}->($_), "\n";
}

475:デフォルトの名無しさん
08/09/01 04:00:33
my @colors = qw(RED GREEN BLUE);
for (@colors) {
    no strict 'refs';
    print $_->(), $_, "\n";
}

476:458
08/09/01 08:33:05
>>460 >>462 
 先ほど無事インストールし、[Hello World!!]を表示できました。 
 いろいろありがとうございました。。。 (´・ω・`) 



477:466
08/09/01 10:50:02
>>467,468
サーバの管理者へインストールをお願いしてみます。


478:デフォルトの名無しさん
08/09/01 20:26:36
「1.pl」の内容

use feature qw( :5.10 );

sub a {
my $a=1;
return $a;
}

1;

------------------
「2.plの内容」
use feature qw( :5.10 );

require q|1.pl|;

say &a;
----------------------
これで、「2.pl」を実行すると、「1」と表示されるが、
本当にこれでいいのか?
つまり、1.plの変数の内容を、2.plで、requireで呼び出して使うとき、
サブルーチン渡しでいいのか?

それとも、モジュール渡しをするのが普通なのか?

our渡しは、できるけれども、教科書に「やるな」と書いてあるので
排除の方向で。
それとも、ほかの何かがあるのか?

479:デフォルトの名無しさん
08/09/01 20:27:24
1.plで変数があって、
それを
requireで、
2.plからその変数を利用したいときに、
どうやって変数を渡すのか、という
問題です。

480:デフォルトの名無しさん
08/09/01 20:38:24
q| | って書く頭わるいの前からいるけど同一人物だよな。
夏休みいつまでなの?

481:デフォルトの名無しさん
08/09/01 20:43:36
毎日がエブリデイなんじゃないかな。

482:デフォルトの名無しさん
08/09/01 21:56:53
>>476
おめでとさん。Perl の泥沼へようこそ。
泥んこ遊びは楽しいYO!

483:デフォルトの名無しさん
08/09/01 22:22:05
もうPerlなんてみたくもさわりたくもないと思いながら、早2年。
毎日のように#!/usr/bin/perl -wと書いています。

484:デフォルトの名無しさん
08/09/01 23:41:22
>>483
> 毎日のように#!/usr/bin/perl -wと書いています。

これを自分で書く奴は相当のバカ

485:デフォルトの名無しさん
08/09/02 00:32:56
晒しage

486:デフォルトの名無しさん
08/09/02 00:42:38
URLリンク(drop.io)
URLリンク(jbbs.livedoor.jp)

これおかしなプログラムとか組み込まれてませんか?

487:デフォルトの名無しさん
08/09/02 00:45:18
板違いです

488:デフォルトの名無しさん
08/09/02 01:21:12
ファイルをまたいだ引数の渡し方について
マジでおしえてくんないかなー?
requireでなくてuseを使うの?

489:デフォルトの名無しさん
08/09/02 01:44:08
うるせーよだまってろ

490:デフォルトの名無しさん
08/09/02 02:07:54
ここはひどいインターネッツですね

491:デフォルトの名無しさん
08/09/02 02:34:26
URLリンク(drop.io)
URLリンク(jbbs.livedoor.jp)

これおかしなPerlとか組み込まれてませんか?
Perlで組まれてるらしいでつ

492:デフォルトの名無しさん
08/09/02 02:37:29
板違いです

493:デフォルトの名無しさん
08/09/02 03:45:53
なんだ・・・解析できないのか・・・はぁ・・・


494:デフォルトの名無しさん
08/09/02 04:13:48
もしかして、パッケージを一致させればいいのか?

495:デフォルトの名無しさん
08/09/02 04:18:31
もしかして、モジュールとパッケージとrequireについて
調べればいいのか?

それで、読むべき教科書は
URLリンク(www.rfs.jp)
ここであってる?

496:デフォルトの名無しさん
08/09/02 05:21:19
>495
結論が出てるのに何が疑問なのかが分からない。
それと多分、誠意が足りてない。


497:デフォルトの名無しさん
08/09/02 08:07:27
>>496 を読んだ >>494

「なんだよ、あってるならあってるってとっとと言えばいいのに」
「誠意とか意味わかんないし関係ないじゃん」
「まあいいや。誰かも煽りはスルーって言ってたし。バカには言わせとけばいいんだ」

498:デフォルトの名無しさん
08/09/02 11:41:23
質問です。

my @aaa = ("A" , "B" , "C" , "D");
foreach(@aaa){
@aaaの中を一つ飛ばす。
printf("%s\n",$_);
}

とし、結果を

B
D

としたいのですが、どのようにしたら簡単に出来ますでしょうか。
for()で$iを途中インクリする方法を考えたけど、いまいち複雑になったので。

499:デフォルトの名無しさん
08/09/02 11:58:28
next;

500:デフォルトの名無しさん
08/09/02 12:05:45
splice

501:デフォルトの名無しさん
08/09/02 12:06:44
my @aaa = qw(A B C D);
for my $i (0 .. $#aaa) {
 next if $i % 2 == 0;
 print $aaa[$i], "\n";
}

502:デフォルトの名無しさん
08/09/02 12:10:17
ヒアドキュメント内でループ処理したいのですが
コンボボックスをループで動的に生成したいのです。
どうやってやればいいのですか


503:デフォルトの名無しさん
08/09/02 12:21:31
>>502
@{[ 任意の式 ]} を埋め込めばいいだろ。式としてdo BLOCKをつかえばおよそ何でも書ける。

Template Toolkitとか使った方が幸せになれそうだけどな。

504:デフォルトの名無しさん
08/09/02 12:29:08
mapでおk

505:デフォルトの名無しさん
08/09/02 14:53:09
リャマ本の133ページ(手元にあるのは11版です)の「8.5.1 優先順位の例」にある

  このパターンは、文字列先頭にあるfredにマッチするか、あるいは末尾にあるbarにマッチします

の部分ですけれど、これって

  このパターンは、文字列先頭にあるfredにマッチするか、あるいは末尾にあるbarneyにマッチします

の誤りじゃないんですか?オライリーのエラッタには載ってないみたいなんですが。



506:デフォルトの名無しさん
08/09/02 14:54:56
途中で送信してしまった…

/^fred|barney$/ だとそうなるような気がするんスが。

507:498
08/09/02 14:54:57
>>499-501

サンクス。
確認できますた。

508:デフォルトの名無しさん
08/09/02 15:03:51
>>505
最初/^foo|bar$/ってなってたのを書き直したんだろうなw

509:デフォルトの名無しさん
08/09/02 16:05:42
>508
なんだか急に親近感がwww


510:デフォルトの名無しさん
08/09/02 17:04:03
そして11版まで行って誰も指摘してないのかよこれww

511:デフォルトの名無しさん
08/09/02 17:32:56
指摘しちゃだめだろjk

512:デフォルトの名無しさん
08/09/02 18:13:41
Perlを勉強する分には、Win上でActive Perlを使うのでも支障は無いでしょうか? 
UNIX上とはかなり差があるような気がして… 


513:デフォルトの名無しさん
08/09/02 18:17:08
Perl自体にWindowsもUNIXも組み込みも関係ない

514:デフォルトの名無しさん
08/09/02 20:11:06
>>512
コマンドプロンプトの操作性やパスの設定、文字コードを考えると、
Unix系のOSでperl使った方がましだと思う。

Cygwinでもいいんだけどさ。

515:デフォルトの名無しさん
08/09/02 20:33:34
>>512
perlを1ヶ月学んできづいたことは、
CPANからモジュールとってくる、ってときに、
WinのActivePerlだと、PPMっていうソフトで
新しいモジュールをインストールするんだけど、
そこのPPMのメニューにすでに登録されている
モジュールしかインストールできない。

厳密に言えば6段階くらい複雑な手順をふめば
PPMを使わないで手動でインストールできるらしいんだが
初心者にはおすすめできない。

つまり、CPANから○○をダウンロードして使え、だとか
言われたりしたときとか、あるいは自分でグーグルで検索して
よさそうなモジュールみつけたときでも、それをかんたんには
入れられないケースが発生することがある。

自分がはまってるのは、mp3を鳴らすなんとか、ってモジュールを
入れたいんだが、PPMにのってないので困っている。

516:デフォルトの名無しさん
08/09/02 20:35:12
2番目は、文字コードの問題。
DOSプロンプトで勉強するときに、必ず

use utf8;
use open IO => ":encoding(cp932)";
binmode STDIN => ":encoding(cp932)";
binmode STDOUT => ":encoding(cp932)";
binmode STDERR => ":encoding(cp932)"; # ※1
use Encode;

と書かないといけない。

517:デフォルトの名無しさん
08/09/02 21:08:44
>>512
coLinux+debian sidオススメ。
無駄にハイクオリティーなことをすると楽しい。

518:デフォルトの名無しさん
08/09/02 21:46:20
$file = 'C:/なんたら/かんたら.txt';
open my $fh, '<', encode("cp932", $file) or die $! ; # ※2
print <$fh>;
# 以上の内容は、日本語処理が解らない人でも、とりあえず日本語処理ができてしまう
# おまじないです。条件が異なる場合の対処方法は、ご自分で勉強して下さい。
# 【注】※1.の行を入れると、DOS窓への日本語出力は簡便になりますが、
# ソースファイル名に非ANSI文字が含まれる場合にdie 文の出力が失敗します。
# ※2.OSに渡す文字列(ファイル名,dosコマンドのオプションなど)は、
# この例のようにcp932でエンコードする必要があります。


-----------------------------------------------------
↑これの説明がよくわからないんだが、ファイル名が日本語の場合、
上記の措置が必要という意味なの?

それとも、ファイル名がアルファベットでも、
そのファイルの中味に日本語が書いてあったら、
上記の措置が必要という意味なの?

で、あれば、ファイル名が英語で、なおかつ
ファイルの中味が全部英語なら、上記の措置は
必要ないってことなの?

519:デフォルトの名無しさん
08/09/02 21:55:57
どっちが主流ですか?

1. $obj = new X;
2. $obj = X->new;

1. call_sub();
2. &call_sub;

520:デフォルトの名無しさん
08/09/02 22:02:39
$file = 'C:/なんたら/かんたら.txt';
open my $fh, '<', encode("cp932", $file) or die $! ; # ※2
print <$fh>;

-------------------------
↑これってmy $fhって、なんなの?
ファイルハンドルなの?

521:デフォルトの名無しさん
08/09/02 22:09:10
open(IN, "1.txt");
while (<IN>) { print; }
close(IN);

-------------------
別に、>>4に書いてあるようにcp932ってしなくても、
上記で日本語を含むファイルを開けるのですが、
これでいいの?

522:デフォルトの名無しさん
08/09/02 23:30:15
>>515
こんなんもあるYO

Strawberry Perl
URLリンク(www.moongift.jp)

523:デフォルトの名無しさん
08/09/02 23:37:16
別ファイルに変数を渡す問題だが、
サブルーチン渡しにしたら問題が解決したと書いたが、
参考書で調べたところ、
「サブルーチンは宣言すると、すべて自動的にグローバルになる」
と書いてある。
つまり、ourでグローバル渡しをしているのと
実質的にまったく同じことなので、意味がないのだ。

ここはやはり、モジュールとかパッケージの勉強を
するべきなのか?

本当はどうやって渡すの?

524:デフォルトの名無しさん
08/09/03 01:37:40
use utf8;
use open IO => ":encoding(cp932)";
binmode STDIN => ":encoding(cp932)";
binmode STDOUT => ":encoding(cp932)";
binmode STDERR => ":encoding(cp932)"; # ※1
use Encode;

525:デフォルトの名無しさん
08/09/03 01:38:28
$file = 'C:/なんたら/かんたら.txt';
open my $fh, '<', encode("cp932", $file) or die $! ; # ※2
print <$fh>;

526:デフォルトの名無しさん
08/09/03 01:39:15
>>524をファイルの先頭に書けば、
>>525は必要ないの?

実際、>>524だけで、
>>525なしでも、動いたんだけど。

527:デフォルトの名無しさん
08/09/03 01:46:07
何もせずにそのままコピーするだけならエンコーディング無視のバイト列で
扱ってもいいけど、普通は中身みて加工とか集計とかするわけで、そういう
ときに違いが出るんだな。


528:デフォルトの名無しさん
08/09/03 02:10:24
$fhってのはファイルハンドルなの?

普通は出てくるはずの
<IN>とかの文字が見えないので不安なんですけど。

529:デフォルトの名無しさん
08/09/03 02:13:03
他ファイルのmy化された変数を別ファイルで読み込んで
使うのって、結局ourでグローバル変数化しておくか、あるいは
サブルーチンに入れて、return渡しするしかないの?

サブルーチンにいれるのは、すべてのサブルーチンは
宣言すると自動的にグローバル化されるのだから、
他ファイルに渡せるのはあたりまえなんですよね。

結局ourでグローバル化してるのと本質的には同じだし。

パッケージとモジュールの勉強をしてみましたが、
それでも結局グローバル化されてる変数は読み込めましたが、
my化されてる変数は読み込めませんでした。

530:デフォルトの名無しさん
08/09/03 02:46:49
自分で何回もためしてみたけど、やっぱりモジュールファイルの中で
my化してるとだめなんだ~

他ファイルで使って欲しい変数はグローバル化してないと
だめなんだね。

531:デフォルトの名無しさん
08/09/03 02:48:43
>529
相変わらず質問の意図が分かりかねるのだが、それはさておき。


>他ファイルのmy化された変数を別ファイルで読み込んで
>使うのって、結局ourでグローバル変数化しておくか、あるいは
>サブルーチンに入れて、return渡しするしかないの?

やり方が分かってるなら、そうすればいい。


>それでも結局グローバル化されてる変数は読み込めましたが、
>my化されてる変数は読み込めませんでした。

myで宣言されてる変数が他から読めたら、myの意味が無いっしょ。



例えばグローバル変数にはメリットとデメリットがある。
特に理由が無ければデメリットの少ないローカルな変数を使って、サブルーチン間を渡せばいい。
ただし、メリットとデメリットを理解している人間が、的確な場所に使う分には何も問題がない。

グローバル変数を使うのも使わないのも、両方とも正解だ。
その「的確な場所」が分からないのなら、まだ使うべきではないということだ。



532:デフォルトの名無しさん
08/09/03 02:50:26
Wikipediaの「名前空間」の項目が、少しは疑問を解決してくれるかも。
URLリンク(ja.wikipedia.org)

533:デフォルトの名無しさん
08/09/03 02:56:37
だーかーらー。

たとえば、モンスターの設定ファイルで、
スライムの体力=1とかって設定するとするでしょ。

ファイル名「a.pm」

package 1;
my $a=1;
1;

---------------

このmy $aを
他のファイルから読みたかったの。
でも無理だとわかったの。
この理解であってる?

534:デフォルトの名無しさん
08/09/03 03:03:42
>>533
いい加減しつこい。とりあえず以下のドキュメント読んどけ。読み終わるまで戻ってくんな。
> perlboot - Perl OO tutorial for beginners
> perltoot - Perl OO tutorial, part 1
> perltooc - Perl OO tutorial, part 2
> perlbot - Perl OO tricks and examples


535:533
08/09/03 03:05:01
読み終わりましたー

536:デフォルトの名無しさん
08/09/03 03:08:03
だってグローバル変数絶対使うなみたいなことよく
書いてあるじゃん。

だから絶対使ったらダメなのかと思ったし。

でも外部から読み込まれることを前提に設計されてる
モジュールの場合は、外部に渡す変数はグローバル宣言なのね。

最初からそう言ってくれればいいのに。

入門書にも書いてないしー

537:デフォルトの名無しさん
08/09/03 03:50:29
>>536
・Perlについてくるマニュアルに書いてある
・標準モジュールやユーティリティのソースで実例が見られる
・Webを検索すれば割とすぐに見つかる
・それについて書いてある本がいくつもある

そういうアレな質問に回答を返す病的に親切な人が出てきても、
「聞きたいのはそれじゃない」だったり、完全スルーだったり。

回答者が寄り付かないように工夫しているとしか思えないです。

あなたの好みと水準にぴったり合わせた答えを提供する義務は
誰にもありません。その点は忘れないで下さい。

538:デフォルトの名無しさん
08/09/03 03:51:14
>>533
だーかーらーそれが勇者の設定ファイルなら読めるわ

539:デフォルトの名無しさん
08/09/03 03:59:50
病的に親切な人と、叩こうとする=構おうとする人がなぁ。

540:デフォルトの名無しさん
08/09/03 04:00:02
>533
それであってると言う主旨の回答を3回くらい見かけてるわけだが

541:デフォルトの名無しさん
08/09/03 11:02:26
下でエラーが出るのは何故ですか?

--a.pl----------------
our $a = "hoge";
---------------------

--b.pl----------------
use strict;
require "a.pl";
print $a;
---------------------

C:\>perl b.pl
hoge
_____________________________________________________________________________

--a.pl----------------
our $aa = "hoge";
---------------------

--b.pl----------------
use strict;
require "a.pl";
print $aa;
---------------------

C:\>perl b.pl
Global symbol "$aa" requires explicit package name at b.pl line 3.
Execution of b.pl aborted due to compilation errors.

542:デフォルトの名無しさん
08/09/03 11:02:59
perl -wで動かすと、
Use of implicit split to @_ is deprecated
というものが表示されるのですが、これはどういう意味でしょうか?
-wをつけなければ表示されません

543:デフォルトの名無しさん
08/09/03 11:14:13
>>542
splitをスカラーコンテキストで使うとばらした内容を@_に入れるという
仕様なんだが、サブルーチンの引数渡しに使われる@_を壊すので
よろしくないということになっている。

perldiag(1)の説明によればコンパイラに負担がかかるらしい。

Use of implicit split to @_ is deprecated
(D deprecated) It makes a lot of work for the compiler when you
clobber a subroutine's argument list, so it's better if you assign
the results of a split() explicitly to an array (or list).

古いプログラムはしょうがないが新しく書くプログラムでは避けた
方がいいと思われ。

544:542
08/09/03 13:01:45
ありがとうございます

my $tab = split( /\t/, $_);
こう書いているのですが、どのように修正すればいいのでしょうか?


545:デフォルトの名無しさん
08/09/03 13:07:07
>>544
$_ には何が入っていて、$tab には何を入れたいの?
もしかして @tab と書くべきところだったってオチか?

546:デフォルトの名無しさん
08/09/03 13:33:32
ダミーの変数を用意して:

my $tab = my @dummy = split( /\t/, $_ );

が楽だし確実だな。

でも実はタブを数えたかったのなら、タブによって分割された
項目数を数えるより直接タブを数える

my $tab2 = tr/\t//;

の方が効率的なのでおぼえておくといい。

ただしsplitは(第3引数に負の数を与えなければ)末尾の空フィールドは
捨てるので、この動作を利用してなんかしている場合はtrで数える手は
使えない。

547:542
08/09/03 14:07:31
>>545
ありがとうございます。
$_には、
foo\tbar\tbaz

\t
のような値が入っています。
$tabには配列の数を入れたかったです。(1行目なら32行目なら0

>>546
ありがとうざいます。
頂いたとおりに修正することで、-wをつけても何も表示されなくなりました。

548:デフォルトの名無しさん
08/09/03 14:58:36
Perlを始めてみたのですが、 
UNIXだとファイルの最初に[ #! /usr/local/bin/perl ]などとフルパスを書くと
コマンドだけで実行できるようですが、Active PerlをWindowsで使ってる場合は、
こういうやり方は無理なのでしょうか? 

今は、ファイルを保存したディレクトリ内で、[ perl <ファイル名.pl> ]を打ち込んで実行しています。 


549:デフォルトの名無しさん
08/09/03 15:54:33
>>548
ちゃんとインストーラでインストールした?
解凍してコピーしただけじゃOSの設定はされないよ。
ちゃんとインストールすれば、ほげ.pl をマウスでクリックするだけで動いてくれるよ。

#! /usr/local/bin/perl
が必要なのは、UNIXというOS固有の問題だから Windows には関係ない。
# で始まってるのでタダのコメント文として無視される。

550:デフォルトの名無しさん
08/09/03 15:56:48
ActivePerlなら、インストール時に(デフォルト設定でインストしてれば)*.plの拡張子に関連付けられてるハズだから、
.plの拡張子を持つファイルなら、コマンドプロンプトから、C:\> ~~.plでも実行できる。
(頭の#!~~はまず気にしなくてよし。#!/usr/bin/speedy とか書いてる時はエラー出るけど・・)

つうか、拡張子が関連付けられてたら、エクスプローラーからダブルクリックでも実行できる。
けど、前にもココだったか、Webprog板の方だったかにいたけど、
「コマンドプロンプトが一瞬で消えてしまい、出力が読めません。」とか言わないでね。

551:デフォルトの名無しさん
08/09/03 16:20:47
自分は「Perlをはじめよう」ってソフトを使ってる。
便利。

552:デフォルトの名無しさん
08/09/03 16:22:38
sleep 100;

553:デフォルトの名無しさん
08/09/03 16:26:34
質問。
>>525との組み合わせなのですが、
教科書や解説ページを見ると、よく
open FH, ">filename.txt";
---------------
$FH = "filename.txt";
open FH;
------------------
open(FH,"<data.dat"); # 入力モードでオープン
--------------------
$line = <FH>; # 1行読み込み
----------------------
open(FH, $datafile);

@list = <FH>;
-------------------
foreach $data_line( @list ) {
print $data_line;
}
---------------
open(IN, $datafile);

while ( $line = <IN >) {
  print $line;
}
--------------
↑このような例がでてくるのですが、いずれもファイルハンドルとして
INとかFHとか大文字がでてくるのですが、>>525だと
そのような文字が見当たりません。
できれば我々初心者が見慣れた例で書き直した
サンプルをいただきたいのですが。

554:デフォルトの名無しさん
08/09/03 16:43:21
そういう古いのは使っちゃだめ。覚え直せ

open my $fh, ">", "filename.txt";
------------------
open my $fh, "<", "data.dat";
--------------------
$line = <$fh>;
----------------------
open my $fh, "<", $datafile;
my @list = <$fh>;
-------------------
foreach my $data_line (@list) {
print $data_line;
}
---------------
opem my $in, "<", $datafile;
while (my $line = <$in>) {
print $line;
}

555:デフォルトの名無しさん
08/09/03 16:59:55
>>549-550
ありがとうございました。
拡張子つけないでファイル名だけでできるかなと思ったわけです。 

>>551
それインストールしてみました。イイ情報をありがとうございました。 


556:デフォルトの名無しさん
08/09/03 17:05:56
>>553
君の大嫌いなグローバルな変数(ファイルハンドル)を使っていいのかい?

557:デフォルトの名無しさん
08/09/03 19:44:37
>>554,556

まじで?
また古い本を読んでしまったのかな、、、

558:デフォルトの名無しさん
08/09/03 19:45:30
つまりファイルハンドルも実は変数の一つにすぎないと?

それで、プライベートなファイルハンドルと、
グローバルなファイルハンドルが存在すると??

559:デフォルトの名無しさん
08/09/03 19:59:17
<IN>の実体は型グロブ*IN

560:デフォルトの名無しさん
08/09/03 20:31:44
URLリンク(ja.wikibooks.org)変数、データ構造

561:デフォルトの名無しさん
08/09/03 20:54:24
>556
たぶん別人。もしくは壮大な釣り

562:デフォルトの名無しさん
08/09/03 22:42:54
>>541
> 下でエラーが出るのは何故ですか?

perldoc strict
の "strict vars" の項を読んでみてください。

# そして、上の例でなぜエラーが出ないかについては:
# perldoc -f sort

563:デフォルトの名無しさん
08/09/03 23:04:43
>>562
サンクス

パッケージ名を明記しなくちゃいけないんですね。
でも、$aと$bは、自動的にパッケージ名をつけてくれると。

564:デフォルトの名無しさん
08/09/04 01:10:57
ファイルハンドルを変数に格納するやり方は
「間接ファイルハンドル」
という名前がついていることはつきとめました。

マッキンゼーに2,000万払って調べてもらいました。

で、古いやり方はやめて
間接ファイルハンドルを使え、と
書いてあるWEBページはどこにあるのでしょうか?

565:デフォルトの名無しさん
08/09/04 01:48:34
>564
ここのスレだってウェブサイトの1つってことでいいよね?


566:デフォルトの名無しさん
08/09/04 02:01:01
スレがやけに加速してると思ったらほとんど同一人物ぽいな。
低レベルなレスでスレ汚すなよ。中学生だろ、おまえ。

ま、おれもヒトのこと以遠が。。。でも俺よりは年下だな。

ひとつだけ教えといてやろう。
パッケージ変数はサブルーチンでアクセスしろって、PBPに書いてあった。
Class::Data::Inheritableとか使ってもいいだろう。
だから、もうこの関連で書き込みすんなよ。

567:デフォルトの名無しさん
08/09/04 02:02:32
あ、ちなみに俺、中学生じゃないです。その上だから。

568:デフォルトの名無しさん
08/09/04 02:04:39
>>565
いまボストンコンサルティングに1、500万払って
調べてももらってますが、

「古いファイルハンドルの指定の仕方(FILEとか)でなくて、
新しいやり方、間接ファイルハンドルを使え」


と明確に書いてあるWEBページは、
なかなか見つかんないですよ。

たぶんメリットがないんじゃないですか?

569:デフォルトの名無しさん
08/09/04 02:06:19
>>566-567

高校生でperlできるんだーすごいねー
偏差値68以上の学校?

570:デフォルトの名無しさん
08/09/04 02:09:48
>>568
頭が悪いのにも限度があると思うんだ。


571:デフォルトの名無しさん
08/09/04 02:13:39
>>569
年なんか関係ないだろ。黙って勉強しとけよ、青二才。

上では余計なこと書いた。今は反省している。

572:デフォルトの名無しさん
08/09/04 02:16:28
>>571
進学校?数学得意?プログラミングをはじめたのは何才から?

573:デフォルトの名無しさん
08/09/04 06:56:17
スレリンク(php板:981番)

PHPの連中は本当にキモイなぁ

574:デフォルトの名無しさん
08/09/04 08:46:42
perlの連中もきめえよ

575:デフォルトの名無しさん
08/09/04 08:51:19
五十歩ひゃっほー

576:デフォルトの名無しさん
08/09/04 10:18:13
五十歩ヒャッハァーあの村の井戸を奪えー!

この場合は my $well か?

577:デフォルトの名無しさん
08/09/04 12:22:57
この流れワロタ

578:デフォルトの名無しさん
08/09/04 16:00:43
汚物は消毒だーっ!

579:デフォルトの名無しさん
08/09/04 16:55:06
任意の数の配列 @minshu 全てをチェックし、もし obutu であれば値を kasizumi にするソースコードを書け。
ただし @minshu の中に値 kenshiro があった場合は直ちに処理を中止するものとする。

580:デフォルトの名無しさん
08/09/04 17:07:21
自分で書け

581:デフォルトの名無しさん
08/09/04 17:29:48
>579
keshizumi じゃないのか?

582:デフォルトの名無しさん
08/09/04 17:30:41
どこの宿題だよ

583:デフォルトの名無しさん
08/09/04 17:32:56
断る

584:デフォルトの名無しさん
08/09/04 17:52:46
ワンライナー自重

585:デフォルトの名無しさん
08/09/04 17:56:49
ActivePerl 5.10 で、Gmail に Mail::IMAPClient で接続、
メールの添付ファイルを取ってくるスクリプトを書いています。

ログインしてメールの本文などを取得することはできたのですが、
MIME::Parser で parse した時点で、破損したファイル(最後までデータが出ていない)が
出力されてしまいます(output_to_core(1)を消して試してみました)。

この場合、原因として考えられるのは何でしょうか? ここで詰まってしまってます……。



586:デフォルトの名無しさん
08/09/04 19:37:19
どんなスクリプト書いたの?

587:デフォルトの名無しさん
08/09/04 19:49:08
>>586
すいません、最初から書けばよかった。ちょっとはしょってますが、こんな感じです。
use strict;
use MIME::Parser;
use Mail::IMAPClient;
use IO::Socket::SSL;
my $parser = new MIME::Parser;
$parser->output_to_core(1);
my $socket = IO::Socket::SSL->new( PeerAddr => 'imap.gmail.com', PeerPort => 993 ) or die "socket(): $@";
my $client = Mail::IMAPClient->new( Socket => $socket, User => 'hogehogehoogehoge@gmail.com' ) or die "new(): $@";
if ( $client->IsAuthenticated() ){
$client->select('INBOX');
my @uid = $client->unseen;

foreach my $id (@uid) {
my $message = $client->message_string($id) or warn "Timeout!";
my $entity = $parser->parse_data($message);
my $header = $entity->head;
if ( $entity->is_multipart ){
my $parts_count = $entity->parts;
for (my $i = 1; $i < $parts_count; $i++) {
my $part_entity = $entity->parts($i);
my $filename = $part_entity->head->recommended_filename;
my $filebody = $part_entity->bodyhandle->as_string;
open(FILE, ">$filename");
print FILE $filebody;
close(FILE);
}
}
}
}

588:デフォルトの名無しさん
08/09/04 21:11:33
もしかして、他ファイルに定義された変数を
別ファイルから読みたいときは、
「Perlのオブジェクト指向」
を使えばいいんじゃないかな??

あってる?ちがう?

589:デフォルトの名無しさん
08/09/04 21:59:34
>588
誰にレスしてるんだ?

590:デフォルトの名無しさん
08/09/04 22:07:34
オブジェクト指向を使えば、
他ファイルにかかれているmy化された
変数も読めるんじゃないか?
と質問をしてるわけです。

591:デフォルトの名無しさん
08/09/04 22:16:38
今日の発見。

use feature qw( :5.10 );
say 2 ** 50;

これを実行すると
1.12589990684262e+015
とでてくるが、

use bigint;
use feature qw( :5.10 );
say 2 ** 50;

とすると
1125899906842624
と出てくる。

いくつの桁まで表示できるか、
今からちょっと実験してみる。

592:デフォルトの名無しさん
08/09/04 22:17:32
>591
質問は?

593:デフォルトの名無しさん
08/09/04 22:20:03
そういえば、ちょっと前のCGIゲームで、
数値の表記が、3桁づつ、、(カンマ)で
区切られて表示されないのがあって、
これを、3桁づつカンマで区切って表示するように
改造したい、と思ったんだが、これって難しいの?


1234567円→1、234、567円

594:デフォルトの名無しさん
08/09/04 22:24:31
printfって知ってるかい?


595:デフォルトの名無しさん
08/09/04 22:27:18
use bigint;
system q|cls|;
use Win32::Sound;
use feature qw( :5.10 );

say 2 ** 55555;
Win32::Sound::Play("file.wav");


↑これすごいよ。
2の55555乗を計算して
画面に出力するんだけど、
DOS窓が全部数字で埋め尽くされてしまって
もはや何桁あるかなんで数え切れないよ。

CPUが計算するのに5秒もかかるし。(ウチのパソコンでは)

596:デフォルトの名無しさん
08/09/04 22:35:28
>>593
1 while s/^([-+]?\d+)(\d\d\d)/$1,$2/;


597:デフォルトの名無しさん
08/09/04 22:54:46
use utf8;
use open IO => ":encoding(cp932)";
binmode STDIN => ":encoding(cp932)";
binmode STDOUT => ":encoding(cp932)";
binmode STDERR => ":encoding(cp932)";
use Encode;
use bigint;
use feature qw( :5.10 );
use Time::HiRes 'sleep';
system q|cls|;
$|=1;
#----------------------------------
use Win32::Sound;
use feature qw( :5.10 );
say "2を1000回、掛けてみますですよ...";
my $a=2;
say "結果が出ましたですよ...\n".&aaa."ですよ...";

say "あと、結果の出力を画面の真ん中に出すやり方をおしえてくだしあ";
sub aaa{
for (my $b=1;$b<=499;$b=$b+1){
$a=$a*2;
say "2を500回、掛けてみますですよ...";

say "今、第".$b."回目の計算中ですよ...";
say $a;
system q|cls|;
}
return $a
}
Win32::Sound::Play("file.wav");

598:デフォルトの名無しさん
08/09/04 23:02:07
ファイルアップロードしようとして
同じものがあったらエラーって処理をしたいのですが

URLリンク(www.ss.iij4u.or.jp)

ここの改良版の方に

opendir(DIR , $logfiles);
@filelist = readdir(DIR)
closedir(DIR)

foreach (@filelist){
next if $file =~ /^\.{1,2}$/;
if(compare( $fh , $_){
error処理;
}
}
みたいな感じでやっているのですが
上手くいかんのです
たすけてくだしあ


599:デフォルトの名無しさん
08/09/04 23:17:18
-fとかでいいだろ

600:デフォルトの名無しさん
08/09/04 23:19:54
名前を変えてるのでcompareで比較がしたいのです
助けて下しア

601:デフォルトの名無しさん
08/09/04 23:21:56
compareって何だよ

602:デフォルトの名無しさん
08/09/04 23:22:18
>>598
webprog板池よ

603:改良版ですよ1
08/09/04 23:42:40
use utf8;
use open IO => ":encoding(cp932)";
binmode STDIN => ":encoding(cp932)";
binmode STDOUT => ":encoding(cp932)";
binmode STDERR => ":encoding(cp932)";
use Encode;
use bigint;
use feature qw( :5.10 );
system q|cls|;
use Win32::Sound;
my $a=2,$c,$d,$f;
print "2を何乗させたいのか、数字を入力してくだしあ(例:500)>";
$f=<STDIN>;
chomp $f;
my $e=$f;$d=$e-1;
$c=&aaa;&bbb;
Win32::Sound::Play("file.wav");
sub aaa{
for (my $b=1;$b<=$d;$b=$b+1){
say "2の".$e."乗を計算してみますですよ...";
say "今、2の".$b."乗目の計算中ですよ...";
say $a; $a=$a*2;
system q|cls|;
}
return $a
}
sub bbb{
say "結果が出ましたですよ...\n";
say "2の"."$e"."乗は ".$c." ですよ...";
say "あと、結果の出力を画面の真ん中に出すやり方をおしえてくだしあ\n";
}

604:デフォルトの名無しさん
08/09/04 23:47:43
これなんじゃないの?

use File::Compare;
URLリンク(d.hatena.ne.jp)

605:デフォルトの名無しさん
08/09/04 23:49:39
自分でプログラム組めるようになると
すっごい楽しいね!

606:585
08/09/05 00:02:52
分からない! 誰か助けてください……。

607:デフォルトの名無しさん
08/09/05 00:03:52
>>598
最近、知ったんだけど、下記で、"."や".."を含まない、ファイル一覧が得られる。

@filelist = <$logfiles/*.*>;

608:607
08/09/05 00:06:48
そしたら、>>598の処理がこんなに短くなったり。。。

foreach (<$logfiles/*.*>){
if(compare( $fh , $_){
error処理;
}
}

609:デフォルトの名無しさん
08/09/05 00:21:48
>606
WebProg池、と言おうと思ったが、問題はそこじゃないっぽいしなあ。


>598>607
状況次第だが、毎回ファイルの中身を全チェックだと効率悪すぎないか?

バイナリから何らかのハッシュを生成しておき(同一バイナリなら同一のハッシュ)、
そのハッシュを保存しておいて比較した方がいいと思う。

稀に別バイナリが同一ハッシュを返すこともあるが、
その時は諦めるか、バイナリを直接比較すればいい。

610:デフォルトの名無しさん
08/09/05 01:22:26
>>585
現象は添付ファイルの種類を問わず発生しますか?
複数のファイルを用意し、それぞれを添付したメールを用意して試してみましょう。
添付ファイルのファイル名に日本語が含まれているか否かで変化があるか確認してください。

611:デフォルトの名無しさん
08/09/05 01:26:40
>>607
本当に? 間違いない? 信じて大丈夫?

いや、誰も信じないからいいんだけどさ。

612:585
08/09/05 01:32:48
>>610
添付ファイルの種類を問わず発生しているように見えます。試しているファイルはすべて英語名です。
binmode FILE することで、JPG は開くことができるようにはなりました。

PDF = ファイルが壊れている、と出て開けない。
JPG = 画像の下の方がブロックノイズ(最後までデータができていないっぽい)
HTM = ファイルの最後の方で途切れてしまう。
TXT = ファイル末尾に謎の文字化け。(=ェ涇攵モ]スクラmエ輜オラ ←こんなのが。なんだこりゃ。)

message_to_file で書き出してみたファイルを見る限りでは、途中でデータの転送が止まっているようなこともなく、
正常に処理できているように見えます。parse_data して、print する途中でどこか変なところがあるのでしょうか。

613:デフォルトの名無しさん
08/09/05 04:05:43
xorってよくわからないな。

614:デフォルトの名無しさん
08/09/05 04:14:30
ヘルプに誤字発見。これってどこに通報すればいいの?

Parentheses missing around "my" list at 1.pl line 27 (#1)
(W parenthesis) You said something like

my $foo, $bar = @_;

when you meant

my ($foo, $bar) = @_;

Remember that "my", "our", "local" and "state" bind tighter than comma.

615:デフォルトの名無しさん
08/09/05 04:42:13
stateって結構便利だと思うんだけど、
これってバリバリつかっていいの?

gotoみたいに、「絶対に使うな!」とかって怒られない?

616:デフォルトの名無しさん
08/09/05 07:46:59
perlのゲーム作りたいなー
誰か一緒に作らない?

617:デフォルトの名無しさん
08/09/05 07:54:21
>615
ちゃんとメリットとデメリットを理解して、それが適切だと思えば
別に何を使って良いんでねーの?

stateを使うならオブジェクト指向にしてもいいかなあと思ってみたが、
これは単に自分が無知なだけか。


>616
ゲ製板池

618:デフォルトの名無しさん
08/09/05 08:21:12
URLリンク(www.geocities.jp)
このページすごいわかりやすいね

619:デフォルトの名無しさん
08/09/05 10:55:16
>>609
Webprog 板に行ってきますヽ(´Д`;)ノ

620:デフォルトの名無しさん
08/09/05 12:06:49
>>618
宣伝厨うざい、マルチウザイ

>print "$str"; # ***123***\n を出力
こんな事書くアホなページの宣伝すんな
「参考書籍」でPBPやらEffectiveやら勧めてるが
読んでないのバレバレじゃねえか

621:デフォルトの名無しさん
08/09/05 12:17:37
そこまで過剰に反応する意味がわからない。

622:デフォルトの名無しさん
08/09/05 12:34:15
>>621
> そこまで過剰に反応する意味がわからない。

ウソが広まるのを放置しておくと何年もすべての人が被害を被り続けるからでしょう

623:デフォルトの名無しさん
08/09/05 13:45:58
まぁ実際、とほほとKENTで広まりまくってるけどな

624:デフォルトの名無しさん
08/09/05 15:19:06
だからこそ過剰に反応するんだろうな

625:デフォルトの名無しさん
08/09/05 16:09:32
これだから原理主義者は困る

626:デフォルトの名無しさん
08/09/05 16:13:05
オライリーの「プログラミングPerl」
って、読んだけど、よくわからないね、難しくて。

これって中級者以上向けだよね。

627:デフォルトの名無しさん
08/09/05 16:18:27
>626
ラクダの前にリャマがいるだろ

628:デフォルトの名無しさん
08/09/05 16:29:40
「はじめてのPerl」ね。
うん、そっちから読んだ方がいいみたいだね。

629:デフォルトの名無しさん
08/09/05 16:30:31
Perlでソースコード書いて、
それをCのコードに変換するのってできるの?

630:デフォルトの名無しさん
08/09/05 16:42:34
Cで書けばいいんじゃね?

631:デフォルトの名無しさん
08/09/05 16:50:01
>>629
つB::C

でもperlらしいperlプログラムはたいていCにしても速くなんないから
やめとけ。

632:デフォルトの名無しさん
08/09/05 20:15:47
「続・はじめてのPerl」読んでみたけど、わからんね。
理解できるページが3ページくらいしかない。

633:デフォルトの名無しさん
08/09/05 20:16:52
>>631
速度を速くしたいんでなくて、
あの難しいCのプログラムを自分の手で
生成できるというのがしびれるんです。

昔C勉強したけど結局理解できなかったし。

そんで、B::Cで検索しても情報がでてこないんで、
使い方を解説してあるページを教えてもらえますか?

634:デフォルトの名無しさん
08/09/05 20:26:11
CもPerlも難易度なんて変わらんと思うけどな。
むしろPerlの方が覚えること多い印象だが。

635:デフォルトの名無しさん
08/09/05 20:30:20
>>633
URLリンク(search.cpan.org)

636:デフォルトの名無しさん
08/09/05 20:48:28
>>635
よんだけどわからないよどうしよう
日本語で詳しく説明書があるサイトをおしえてください

637:デフォルトの名無しさん
08/09/05 20:54:13
Can't locate B/C.pm in @INC
(@INC contains: C:/Perl/site/lib C:/Perl/lib .)
at 6.pl line 1.

BEGIN failed--compilation aborted at 6.pl line 1.

とでてくるのですが、ひょっとして
自分のパソコンにはB::Cが入っていない?

これってPPMで入れるの?

638:デフォルトの名無しさん
08/09/05 20:55:27
>>636
それを読み解く気合がないなら、その類のモジュールは楽しめない。

639:デフォルトの名無しさん
08/09/05 21:00:52
>>637
そこから手取り足取り教えにゃわからん奴がちょっかい出すブツじゃないよ。

640:デフォルトの名無しさん
08/09/05 21:05:05
いやまじでボクのパソコンにはB::Cが入ってないような気がします。
これはどうやったら確定できますか?

それでPPMみたんですけど、そこにもB::Cが登録されてないんです。

641:デフォルトの名無しさん
08/09/05 21:15:19
しんごけ

642:デフォルトの名無しさん
08/09/05 21:15:40
5.10だと、perlccやらB::Cやらはごっそり標準配布から無くなってるが
もしかして5.10? perldelta参照してみそ

…つーか深追いすんな、しても無意味だ。
ちょっとした想定外のモジュールをuseしてるだけで、B::Cは通らない
んだから(実用的じゃ全くない)。

643:デフォルトの名無しさん
08/09/05 21:16:35
>>640

釣りだといってくれ

644:デフォルトの名無しさん
08/09/05 21:32:53
いつもの独り言の人はもしかしなくても 5.10 だよ。

645:デフォルトの名無しさん
08/09/05 21:36:27
ああ、いつもの人か。レスすんじゃなかった orz...


646:デフォルトの名無しさん
08/09/05 22:14:45
URLリンク(trends.google.com)

CPANやべええ
どっかの株価1円企業みたいだ

647:デフォルトの名無しさん
08/09/05 22:27:30
Perlってスレッドプログラミングとかってできないの?

Aというスレッドと
Bというスレッドがあって、
AとBを同時に走らせるみたいな。

648:デフォルトの名無しさん
08/09/05 22:30:35
>>646
今時わかってる連中が CPAN に用がある時は Google なんぞ通さずに CPAN Search をひっぱたくからな。

649:デフォルトの名無しさん
08/09/05 22:37:33
>>646
日本一位なのか

650:デフォルトの名無しさん
08/09/05 22:47:10
>>647
>>223

651:デフォルトの名無しさん
08/09/06 00:06:09
>648
あ、CPAN自体に辿り付くのにgoogle使う……

652:デフォルトの名無しさん
08/09/06 00:30:52
ブックマークから自分のアカウントを開く

653:デフォルトの名無しさん
08/09/06 00:33:42
Firefox の smart keyword に登録してる。

654:デフォルトの名無しさん
08/09/06 00:36:26
search.cpan.org と毎回入力してる。ブックマークしろよと打つたびに思う。

655:デフォルトの名無しさん
08/09/06 09:30:16
アロー演算子を使う局面や場面は、
どういうときと、どういうときと、どういうときがあるの?

自分が知ってるのは、
「リファレンス経由で配列要素にアクセスする」
っていう場合だけど、そのほかにも、
オブジェクト指向のときもアロー演算子を使うの?

656:デフォルトの名無しさん
08/09/06 10:36:40
●配列に限らない
●Perlにおいてオブジェクト指向はリファレンスを利用

なので、>655の質問は少しだけ着目点がズレてる。


657:デフォルトの名無しさん
08/09/06 10:53:06
URLリンク(www.rwds.net)

パッケージの説明として、これはわかりやすい。

658:デフォルトの名無しさん
08/09/06 10:55:41
package main;

use Stone;
my $obj = Stone->new('石灰岩','100');



-----------------------
↑たとえばこれ。
これってオブジェクト指向だからアロー演算子を
使ってるという理解でいいよね?

659:デフォルトの名無しさん
08/09/06 11:01:38
それでhelpのタイポを見つけたら
どこに通報すればいいの?

660:デフォルトの名無しさん
08/09/06 11:11:19
print "a";
die;
------------------
↑このコードだと、
Died at 6.pl line 3.
a
という出力になるのに、

-------------------
print "a\n";
die;
-------------------
↑このコードだと
a
Died at 6.pl line 3.
という出力になる。つまりひっくりかえってるんだが、
なんで?

661:デフォルトの名無しさん
08/09/06 11:18:48
気分がいいのでレスしちゃう。

>658 それはそうとして>656は無視かい?
>659 ココロの110番に
>660 flush


662:デフォルトの名無しさん
08/09/06 11:19:55
C言語とPerlは近い部分があると聞いたのですけど、ほんとでしょうか。
それを聞いてPerlも勉強してみたいと思ったので。 

printf が print だったり、微妙に違うようですが。 
難しいのかな。


663:デフォルトの名無しさん
08/09/06 11:22:52
perlは超カンタンです。
なにしろ俺サマでさえ、一ヶ月もあれば
基本は理解できます。

664:デフォルトの名無しさん
08/09/06 11:23:51
サブルーチン呼び出すときに、
aaa;
だとウオーニングが出るんだが、
aaa();
だとウオーニングがでない。つまり、
サブルーチンを呼び出すときは必ず
aaa();と、パーレンをつけなければいけない、というルールなの?

665:デフォルトの名無しさん
08/09/06 11:25:03
>>662
C言語をマスターしているのなら、普通の頭脳の持ち主なら、1週間で完全に
習得できます。

666:デフォルトの名無しさん
08/09/06 11:25:38
自己解決した。
サブルーチンの定義が、
ソースコードの最初のほうに書いてあれば
()をつけなくてもできるということか。

だったら、サブルーチンの定義は
ソースコードの後ろでなくて、
最初のほうに書いたほうがいいんでないの?

667:デフォルトの名無しさん
08/09/06 11:29:43
>662
printfもある。

>666
お好きなように。
俺はCで言うところのプロトタイプ宣言だけしてるけど。

668:デフォルトの名無しさん
08/09/06 12:42:31
unlinkって自分は消せないのね。

669:デフォルトの名無しさん
08/09/06 12:45:37
日本語のファイル名ってunlinkで削除できないの?

「あ.txt」とか。

670:デフォルトの名無しさん
08/09/06 12:54:58
SND_ASYNCのフラグの書き方と指定の仕方がわからない。

URLリンク(homepage3.nifty.com)

671:デフォルトの名無しさん
08/09/06 12:55:45
Win32::Sound::Play(SOUND, [FLAGS])

この例を見て、

Win32::Sound::Play("file.wav",[SND_ASYNC]);

と書いたが、なんか違うようだ。

672:デフォルトの名無しさん
08/09/06 13:23:23
perl2exe
おもしろ

673:デフォルトの名無しさん
08/09/06 21:43:36
>671
なんでリストにしてんの?

674:デフォルトの名無しさん
08/09/06 21:56:11
>>673
書き方間違ってる?
書き方のサンプルがないから
正直、よくわからんかった。

675:デフォルトの名無しさん
08/09/06 21:57:28
use feature qw( :5.10 );
system q|cls|;

sub abc{

state $a=10;
say $a;
$a--;
if ($a>=5) {
abc();
}
}

abc;


------------------------------
サブルーチンの再帰呼び出しで、
サブルーチン内部の定義部分で、
自分自身を呼び出すときには、
()パーレンの記述は必須なんだね。
これを省略しようと少し考えたけど
無理っぽい。

676:デフォルトの名無しさん
08/09/06 21:59:11
&アンパサンドをつけてサブルーチンを呼び出すのは
古いやり方なので極力さけましょう、とか書いてあるので
&をはずして呼び出そうとするんだけど、そしたら今度は
()パーレンの記述が必須になってしまう。()パーレンのほうが
100倍メンドイと思うんだけど。

、、と思うなら、ソースコードの最初のほうに
サブルーチンの定義を書けばいいじゃん、と思ったけど
通常の関数ならそれでいいけど、再帰の場合はやっぱり無理なのね。

677:デフォルトの名無しさん
08/09/06 22:01:10
stateとmyって実質同じだよね。
どっちも変数をプライベート化して、
どっちも歴史狩る変数っていう。

ただ、stateの方は一回だけ実行されるという
違いがあるけど。

それで、すべてのmyをstateに変更しようかなと
おもうんだけど 、stateにすると何か問題ある?

678:デフォルトの名無しさん
08/09/06 22:01:58
ちなみに歴史狩る変数っていうのは、
過去の歴史あるソースコードを無効にする
って意味です。

679:デフォルトの名無しさん
08/09/06 22:10:44
open( FD, "| C:\\WINNT\/NOTEPAD.exe");

↑これでメモ帳を開くのと、
system関数でメモ帳を開くのと、
何か違いはありますか?

見た目は同じように見えるんですが。

680:デフォルトの名無しさん
08/09/06 22:31:45
>674
一般的に、[ ] は省略可能な要素を意味する記号。

681:デフォルトの名無しさん
08/09/06 22:35:24
>>667 効果が全く違うぞw

682:681
08/09/06 22:36:20
>>681はアンカーミス。>>677への突っ込み。

683:デフォルトの名無しさん
08/09/06 22:42:21
>675
サブルーチンの宣言と定義を切り離せばいける。面倒だけど。

use feature qw/:5.10/;

sub abc; # 宣言だけして…
sub abc { # こっちで定義
  state $x = 10;
  say $x--;
  if ($x >= 5) {
    abc;
  }
}

abc;


684:デフォルトの名無しさん
08/09/06 22:52:15
>>683
あー
内容が書いてなくても
宣言だけ先にしてあれば
()パーレン無しでもいけるんだー

685:デフォルトの名無しさん
08/09/06 22:53:43
>683
Cとかに慣れるとそんなに面倒でもないけどねー。
さくっとコメントでサブルーチンの説明するときとか、長くなるんで先頭に並べちゃってる。


>676
省略はPerlの美学なので、
出来る限りタイプを少なくするという思想は正しい。

だけど、わざと面倒な書き方をしておいて、
かつ、そこから外れた書き方をしたらエラーが出るようにしておく、という思想もある。
もしミスった時に、こっちの方が分かりやすいからだ。

この2つはどっちも正しい。
どっちを採用するかは自分で決めるしかない。
仕事でやっているならば、諸乳母で指定される場合があるのでそれに従おう。

686:デフォルトの名無しさん
08/09/06 22:55:54
諸乳母ってなんだ、職場。

687:デフォルトの名無しさん
08/09/07 04:25:30
質問です。
先日MacPortsで自動アップデートを実行してから下記のエラーがperl実行時に出てくるようになりました(その前までは出なかったのに…)

Use of uninitialized value in concatenation (.) or string at /opt/local/lib/perl5/5.8.8/darwin-2level/Scalar/Util.pm line 30, <> line 6.

CPANの自動アップデートも行ったのですが、同じエラーが出続けてしまいます。
プログラム事態は特に問題なく実行できているのですが、これを解決するにはどうしたら良いのでしょうか。
よろしくお願いいたします。

MacOSX 10.5.4
MacPorts 1.600
Perl 5.8.8

688:デフォルトの名無しさん
08/09/07 05:22:27
>>687
no warnings;

689:デフォルトの名無しさん
08/09/07 06:24:49
no warnings野郎がキチガイだから無視しないとだめ。

で、回答だが、変数を初期化しないのが理由でウオーニングが出ているのだから、
$aとかの変数をすべて、my $aとかで初期化すれば解決する。
それはUtil.pmの30行目と
本体の6行目にある。

690:デフォルトの名無しさん
08/09/07 06:25:56
ところでみんなこのシリーズみてる?
perl tutorial
URLリンク(jp.youtube.com)

691:デフォルトの名無しさん
08/09/07 06:39:15
>>688
Scalar::Utilの30行目の警告という事は分かってるんです。消し方も。
ただ気持ち悪いじゃないですか。

CPANで最新のソースを調べても特に修正は無いし、
実際のソースを見てもどうしてそうなるのか分からないんですよね。

URLリンク(search.cpan.org)

--------------------------------------------
if (grep { /^(dualvar|set_prototype)$/ } @_ ) {
require Carp;
Carp::croak("$1 is only avaliable with the XS version"); #エラーにある30行目はここ
}
--------------------------------------------

$1ってのに値が入ってないとかそういう意味だと思うのですが、
値が入らないのであれば、この29~30行目は実行されないはずではないのでしょうか…。
初心者なりに色々考えてるのですが全く分からない…。

692:デフォルトの名無しさん
08/09/07 06:45:48
>>689
no worningsはやっぱりダメですよね!
どの本見ても書いてあったので、必ず入れてます。

本体の6行目というのは、Util.pmを直接の
本体という意味でしょうか?(どいつが本体かわかん無い…)
Util.pmを直接自分の書いたスクリプトは実行していなく、
自分の書いたスクリプトの6行目は
use Encode;
なので、なんも問題が無いと思うのですが。

すみません、ご教授下さい。

693:デフォルトの名無しさん
08/09/07 07:05:38
ここで空気を読まずに別の質問

Perlもサイドエフェクトってあるの?

694:デフォルトの名無しさん
08/09/07 08:10:35
>>691
grepを一旦、@aで受けるとかどう?

if (my @a = grep { /^(dualvar|set_prototype)$/ } @_ ) {
require Carp;
Carp::croak("@a is only avaliable with the XS version"); #エラーにある30行目はここ
}

695:デフォルトの名無しさん
08/09/07 11:51:40
>>691
こんな感じの事が起きている。
$_ = q/abcd/;
{
m/^(abcd)$/;
print "a:$1\n";
}
print "b:$1\n";

しかし、grep BLOCK LIST の代わりに grep EXPR,LIST を使っても同じ結果になるので要注意。
理由は未確認。(内部的に BLOCK になっているのだろう)

このエラーが放置されている理由は、おそらくこのエラーが報告されていないから。
なにしろ、これはXSバージョンが使えない場合かつユーザーが(デフォルトで輸出されない)特定の
処理を要求した場合のみに発生するエラーだから。
今までエラーが出なかかったのは、単にXSバージョンが使われていたからだろう。

>>687 にあるようにプログラムの動作に問題が無いならば、dualvarまたは(/かつ)set_prototype
を必要無いのに要求していたという事なので、単にこれらを要求する事を止めればよい。


696:デフォルトの名無しさん
08/09/07 12:33:07
>>695
$数字はダイナミックスコープだからブロックを抜けたら元に戻るというのは
その通りだが、今回の例は抜けてないので違うんじゃない?

697:デフォルトの名無しさん
08/09/07 15:38:34
コマンドラインで引数を与える時に、間違った変数名で入力した場合に
Usageを出したいのですが、どうすればいいでしょうか?

698:デフォルトの名無しさん
08/09/07 15:40:28
正規表現で判定するか、CPANからモジュール引っこ抜いてきて判定する
後はprintでusage出せばおk

699:デフォルトの名無しさん
08/09/07 15:43:47
その正規表現の方法がわからないのです。

C:xxx.pl -aaa=1を間違って
C:xxx.pl -aa=1と入力なのですが・・・・

中で変数を宣言してなくて、外でしているのですが、変数名を見ることができるのですか?

700:デフォルトの名無しさん
08/09/07 15:46:07
何を言っているのか意味不明

701:デフォルトの名無しさん
08/09/07 15:51:00
C:xxx.pl -aaa=1を間違って
C:xxx.pl -aa=1入力した場合エラーをだしたい

-aaa=1 が正しく
-aa=1 が間違い

プラグラム中には

our $aaa は宣言してますが
our $aa  は宣言していません

なのですが

説明下手ですいません

702:デフォルトの名無しさん
08/09/07 16:13:28
ああ、そうか。
引数で -aaa って言ったら、普通は a が3つって解釈すると思う。

んで、素直に if 文じゃダメ?

703:デフォルトの名無しさん
08/09/07 16:14:21
>>694-696
XSや、エラーを出す原因となっているスクリプト部分や、
dualvar、set_prototypeなど何だか分からない言葉が
大量に出てきたので、勉強して出直してきますw

自分の書いたプログラム以外の物を編集するのは
気が引けるので、環境を整える方向で考えてみます。

ありがとうございました。

704:デフォルトの名無しさん
08/09/07 16:17:05
>>701
必要な変数に値が与えられたかどうかを判別するので対処出来るのでは?
与えられた引数全てを見れるような方法が欲しいってこと?

705:デフォルトの名無しさん
08/09/07 16:54:19
>>697
> コマンドラインで引数を与える時に、間違った変数名で入力した場合に
> Usageを出したいのですが、どうすればいいでしょうか?

?を使えばいい。

706:デフォルトの名無しさん
08/09/07 17:12:25
引数のオプション名を変数名に紐付けるのではなく、
ハッシュキーに紐付けることで少し楽になる。
あとは Hash::Util を使ってロックした上でエラートラップするなり、
keys %hash リストの各要素と順次 eq するなり。

707:デフォルトの名無しさん
08/09/07 17:23:51
>>699
なんでそんな入り組んだややこしい遠回りで手の込んだことをしたいの?

ふつうにGetopt::Longで処理するのではだめなのか?

708:デフォルトの名無しさん
08/09/07 17:27:42
宣言されている変数に値を代入したいという意味なら、こうするのはどうだろうか?

# 宣言時にとりあえず空文字をいれておく
our $aaa = "";
our $bbb = "";

for (@ARGV) {
defined ${$1} and ${$1} = $2 if( /-(.+)=(.+)/ )
}

709:デフォルトの名無しさん
08/09/07 19:18:10
>>696
今回は grep BLOCK LIST なので、マッチ演算が行われた(目に見える)ブロックから抜けている罠。

695をブロックで書いたのは $数字 のスコープから抜けている点がブロックと同じだからなんだけど、
組み込みのgrep関数のソース(pp.c 内の pp_grepstart)を見たら中でENTER を行っていた(==grepの
中にブロックに入る/抜ける時と類似の処理が含まれていた)ので、ブロックでも構わなくね?

そうでなくても組み込み関数のオーバーライドがありうるので、関数はブロック(サブルーチン)のよう
に扱う方が無難だと思うのだが、Scalar::Util の作者はそう考えなかったみたい。

710:デフォルトの名無しさん
08/09/07 19:50:06
>>709
grepのあとがブロックになってるのを見落としていた。スマン。
で、これどうみてもScalar::Utilのバグじゃね?


711:デフォルトの名無しさん
08/09/07 20:17:01
URLリンク(itpro.nikkeibp.co.jp)
この人て有名なの?

712:デフォルトの名無しさん
08/09/07 20:31:43
【コミュニティーサイト作成有志募集!】

現在コミュニティーサイトGaccoで有志を募集しています。
詳しい概要等は
URLリンク(www36.atwiki.jp)
こちらをご覧下さい。

・プログラミングができる方
(現在技術陣は6名です)
・ウェブデザイン・画像編集能力がある方
(現在デザイン陣は2名です)
・宣伝能力のある方
(人員募集やサイト完成後の宣伝等。動画編集ができると○。)

を募集しています。
気軽にIRCに参加、またはsuteあっと2ch.bona.jpまでメールを下さい。

スレッド:URLリンク(ex14.vip2ch.com)

713:デフォルトの名無しさん
08/09/08 05:24:01
perlを始めて日の浅い初心者です。
練習として、google検索をしてその件数を出すというプログラムを書いているのですが、
出力と手動で検索した時の件数に誤差が生じます。
ソース挙げておきますので、良ければご指摘下さい。
よろしくお願いします。
use Web::Scraper;
use URI;
use utf8;
use Encode;

my $scraper = scraper { process '/html/body/div[2]/p/b[2]', 'kensuu' => 'TEXT';};
my $uri = new URI('URLリンク(www.google.com)');
$uri->query_form( hl => 'ja' , q => 'コミュニケーション');
my $res = $scraper->scrape($uri);
print $res->{kensuu};

出力
33,500,000
手動で検索
33,900,000
となってしまいます…。


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch