Perlについての質問箱 ..
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
となってしまいます…。
714:デフォルトの名無しさん
08/09/08 05:38:29
use feature qw( :5.10 );
system q|cls|;
for (1..120) {
state $a="a";
print $a," ";
$a++;
}
say"";
#----------------------
↑なにこれ
楽しい
from
URLリンク(jp.youtube.com)
715:デフォルトの名無しさん
08/09/08 05:46:48
use feature qw( :5.10 );
system q|cls|;
open FH,">","1.txt";
for (1..120000) {
state $a="a";
print FH $a," ";
$a++;
}
say "done.Please check out 1.txt";
#---------------------------------
たのしー
これって出力結果を要素ひとつづつ
配列に入れたりもできるのかな?
716:デフォルトの名無しさん
08/09/08 05:58:40
use feature qw( :5.10 );
system q|cls|;
open FH,">","4.txt";
for (1..12000000) {
state $a="a";
print FH $a," ";
$a++;
}
#--------------------------
↑これで1千2百万回まわしたら、
70MBのテキストファイルになって、
エディタで開いたら表示がぶっ壊れた
URLリンク(kazato.run.buttobi.net)
717:デフォルトの名無しさん
08/09/08 06:12:48
>>713
$uri->query_form( hl => 'ja' , q => 'SEX');
この検索ワードだったら
手動とスクリプトで、
ぴったり件数一致しました。
718:デフォルトの名無しさん
08/09/08 06:15:49
何件か試してみたけど、
日本語のキーワードだとずれる、
アルファベットのみだと、ぴったり一致する、
という特性があるみたいですね。
719:デフォルトの名無しさん
08/09/08 06:18:33
俺も何件か試したが、なんでズレるんだ?
720:デフォルトの名無しさん
08/09/08 06:31:19
>>719
英語のみのキーワードだとずれないでしょ?
721:デフォルトの名無しさん
08/09/08 06:50:05
ずれないけど検索するんなら、713もコミュニケーションしてるし、日本語だろうからあんまり意味ないんじゃね?
722:デフォルトの名無しさん
08/09/08 06:55:56
日本語で検索しなければ良い。
723:デフォルトの名無しさん
08/09/08 11:27:12
シェルも使える人にお聞きしたいのですが、Perlとシェルって共通してる部分ありますか?
シェルも勉強したいと思ってきたので。。。
724:デフォルトの名無しさん
08/09/08 12:12:12
my $q = CGI->new();
これを
&Init($q);
みたいにしてその中で
$q->param('filename')
みたいな処理を行いたくて
CGIオブジェクトをいろんな引数に渡したいのですが
どうやってやればいいのですか
725:デフォルトの名無しさん
08/09/08 12:17:37
sub Init { my $q = shift; }
726:デフォルトの名無しさん
08/09/08 12:22:19
おお、そんなことが ありがとうございます
どこら辺の単語で出てきますか
727:デフォルトの名無しさん
08/09/08 12:23:18
>>723
記述的には、C程似て無いとは思う
でも、言語なんて 表示、条件判定、ループ、サブルーチン作成。
こんだけ分かれば、大抵のものは組めるけどね
728:デフォルトの名無しさん
08/09/08 12:26:58
>>723
どちらもソフトウェアという点が共通してるよ。
729:デフォルトの名無しさん
08/09/08 12:48:54
> ・シェルスクリプトのことをシェルってゆーな
なんとなく某所のテンプレから借りて来た。
730:デフォルトの名無しさん
08/09/08 12:50:39
>>713-722
多分だけど、googleに限らず大手の検索エンジンなんか数百台〜数千(数万?)台のサーバーで
構築されてるんだろうから、毎回必ず同じ結果が返って来るとは限らないんじゃない?
(Yahooなんかは、同一環境でもCookeiが違えば、件数どころか上位十件が全然違うこととかもあるw)
たしかgoogleは、ブラウザの HTTP_ACCEPT_LANGUAGE あたりで使用言語の優先順位を判定して
各言語のサーバへリダイレクトしてるとか聞いたことある。
(例えば、一般的な日本語ブラウザでgoogle.comにアクセスしても、co.jpの方へ飛ばされる。とか)
>>726
「perl サブルーチン 引数」とか「perl shift」とか。
731:デフォルトの名無しさん
08/09/08 14:19:56
PerlとPHPはまったく別物なのでしょうか?関連性とかあるのかな、と。
その辺のことよく知りません。
732:デフォルトの名無しさん
08/09/08 14:35:03
>>731
ないから諦めてください
733:713
08/09/08 15:19:52
>>717-722
皆様ありがとうございます。
>>730
そうなんですか…。
じゃあ日本語を検索した際、プログラムで手動と同じ検索結果を出そうとするのは事実上困難って事ですよね…。
わかりました。
ありがとうございます。
734:デフォルトの名無しさん
08/09/08 15:25:32
どういう通信するか観察してきちんと真似てやればなんとかなると思うけどね。
735:デフォルトの名無しさん
08/09/08 16:19:48
>726
どこらへんも何も、普通に引数を渡してるだけだぜ?
736:デフォルトの名無しさん
08/09/08 21:59:04
配列から指定の要素番号を抜き出して、
削除するってできるの?
popの要素番号指定版。
$number = pop @array[5];
みたいな。@arrayの要素番号5が抜き出されて
$numberに入り、なおかつ
@array[5]は消え去る。
737:デフォルトの名無しさん
08/09/08 22:25:25
>>735
つsplice
738:デフォルトの名無しさん
08/09/08 22:34:02
>>737
つ>>736
739:デフォルトの名無しさん
08/09/08 23:44:23
>>39お願いします
740:デフォルトの名無しさん
08/09/09 00:01:37
>>738
頭から1行ずつ読めばそのうち任意の行に到達するよ。
741:デフォルトの名無しさん
08/09/09 00:05:42
ところで>>713はなにをやっているの?
CGIでもないようだし、
にも関わらずWEBのデータ-を取ってきて
なんか遊べるようだが、これって
なんで名前なの?
どういう本にのってるの?
742:デフォルトの名無しさん
08/09/09 00:18:37
>>741
perl スクレイピング
でぐぐれ
743:デフォルトの名無しさん
08/09/09 00:27:08
へーこんな用語があったんだ。
初めて知ったわ。
俺の書いてきたPerlスクリプトは9割がスクレイピングだー
744:デフォルトの名無しさん
08/09/09 00:30:41
オライリーからも本出てるよ。
俺の初めて書いたperlはそれの第一章とかだった気がするw
745:デフォルトの名無しさん
08/09/09 02:00:44
#------------------1
my @a=(1..10);
map {$_ = $_ *2} @a;
print "@a\n";
#--------------------1
#--------------------------
#-----------------------2
my @a=(1..10);
map {$_ = $_ *2} (@a);
print "@a\n";
#------------------2
↑これ、1も2もどっちも
実行できるんだけど、mapの配列の()パーレンは
必要ないってこと?
746:デフォルトの名無しさん
08/09/09 02:36:15
●1
map {print $_,"\n" } 0..10;
これだとちゃんと1〜10が表示されるのに
●2
map {print $_,\n } 0..10;
これだとなぜかアドレスが出てしまう。
なんでだろう?
747:デフォルトの名無しさん
08/09/09 03:09:08
my @a=qw(aaaaa bbb ccc ddd eee fff abf haty juy ade il erat tyu dfg gu );
my @b=grep {$_=~'a'} @a;
print "@b\n";
#---------------------------------------
grepのときに、スマートマッチ〜〜使えないのか。
my @a=qw(aaaaa bbb ccc ddd eee fff abf haty juy ade il erat tyu dfg gu );
my @b=grep {$_~~'a'} @a;
print "@b\n";
#--------------------------------
↑これだとエラーが出る。=〜にしないとだめらしい。
748:デフォルトの名無しさん
08/09/09 03:53:32
my %hash;
$hash{name}='john';
$hash{age}='25';
$hash{city}='london';
print "@{[%hash]}\n";
↑なんでこれでハッシュの中味が出力されるの?
749:デフォルトの名無しさん
08/09/09 04:03:47
何故〜なの?という質問のときは、
「自分は○○されると想ったのに」と付け加えるとアドバイスしやすい。
750:デフォルトの名無しさん
08/09/09 04:24:40
@{[%hash]}
これの記法がまったく意味がわからん
751: ◆TWARamEjuA
08/09/09 06:59:06 BE:980633-2BP(7089)
(grep 1, each %hash)
かな?
752:デフォルトの名無しさん
08/09/09 07:38:24
何年ここにいて、そんな頓珍漢な解答をする? > クソコテ
実行結果すら合わねえじゃねえか
753:デフォルトの名無しさん
08/09/09 07:39:16
URLリンク(jp.youtube.com)
これの最後のやつがちょっと意味わかんないかも。
mapの lcの組み合わせたやつ。
754:デフォルトの名無しさん
08/09/09 07:44:28
$words="a title of a webpage";
$words = join ' ', map {ucfirst lc} split / /,$words;
print "$words\n";
↑これね。
755:デフォルトの名無しさん
08/09/09 07:47:38
>>754
1. スペースで split => 単語毎になる。
2. lc $_ で全部小文字($_ の表記省略)
3. 2. の結果を ucfirst で一文字目だけ大文字化。
4. スペースでくっつける
756:デフォルトの名無しさん
08/09/09 08:00:27
>>736
my $index = 2 ; # 抜きたいindex
my @dat = qw( 1 2 3 4 5 6 ) ;
push @dat, ( splice @dat, $index )[1.. $#dat - $index] ;
print @dat ;
定番
757:デフォルトの名無しさん
08/09/09 08:03:04
>>750
%hash をリストと見做して [] にて無名配列へのリファレンスに突っ込む。
@{} にてそのリファレンスをデリファレンス。
758:デフォルトの名無しさん
08/09/09 08:04:38
>>756
$numberが…
二行に分ければ済む事だけど
759:デフォルトの名無しさん
08/09/09 08:27:14
URLリンク(jp.youtube.com)
これって何やってるの?
760:デフォルトの名無しさん
08/09/09 11:56:00
>>740
了解しました。
一気にその行に行く方法はないんですね。
761:デフォルトの名無しさん
08/09/09 12:24:25
>760
配列にでも突っ込めば?
762:デフォルトの名無しさん
08/09/09 12:42:21
>>760
あらかじめ各行の先頭位置を別に記録してあればseek一発だが、そういう
準備がされてなければ頭から読むしかないね。なにもないときは頭から
改行を頼りに行数を数えるしか何行目か知る方法はないのです。
763:デフォルトの名無しさん
08/09/09 14:04:15
>>761
行数が多い場合、コストが高そうな気がして。。。
>>762
やはりそうですか。
どもです。
764:デフォルトの名無しさん
08/09/09 16:22:23
yyyymmddの日付を比較したいのですが
どうすれば一番簡単ですか
765:デフォルトの名無しさん
08/09/09 16:48:42
比較だけなら、そのまま比較すれば意図した通りの結果になるんじゃない?
766:デフォルトの名無しさん
08/09/09 22:38:26
ディレクトリの中にファイルがあったら
ディレクトリを空にする、という処理をしたいのですが
if(-e "$path/"){
削除処理
}
みたいなものだと、ディレクトリそのものが認識されて
ファイルを認識してくれません
どうすりゃええんでしょうか
767:デフォルトの名無しさん
08/09/09 22:40:18
>>766
ディレクトリを読んでファイルがあるかどうか調べるといいよ。
768:デフォルトの名無しさん
08/09/09 22:57:02
opendirあたりでヤルしかないですか
遠回りだと思ってたけどそれが一番なのかな
769:デフォルトの名無しさん
08/09/09 23:02:59
グロブ使えよ。
中作業だろ。
770:デフォルトの名無しさん
08/09/09 23:05:57
File::Slurpのread_dirが便利
771:デフォルトの名無しさん
08/09/09 23:17:50
これじゃダメ?
if(<$path/*.*>){
削除処理
}
772:デフォルトの名無しさん
08/09/09 23:45:39
>>769
グロブの使い方がわからないであります
>>770
多分はいってないです
>>771
ためしてみます
773:デフォルトの名無しさん
08/09/10 01:45:46
5.10が動くレンタルサーバーってどこがある?
774:デフォルトの名無しさん
08/09/10 02:24:36
事前に膨大な乱数表作っておいて、
substrだけで抜き出して会話するってできる?
775:デフォルトの名無しさん
08/09/10 05:35:12
>774
どういうこと?
776:デフォルトの名無しさん
08/09/10 05:42:43
my $a="g'oiaherugbapowirhaysrgpairhja]ierhgtauw[eifbgaeirhuecf[awierbawirt]aebm";
等の100万語ぐらいの膨大な量の乱数表みたいな
語句のリストをあらかじめ作っておいて、
「hello」って表示したい場合は
「5」番目と「7番目」と「12番目」を抜き出して
表示する」みたいな。
たまたま、うまくつながってるところを見つけると、
ポイントアップです。
777:デフォルトの名無しさん
08/09/10 05:43:46
index と substrを組み合わせたゲームね。
778:デフォルトの名無しさん
08/09/10 06:04:15
(1)
use feature qw( :5.10 );
my $t;
$t=localtime;
say $t;
-------------------------------
(2)
use feature qw( :5.10 );
my $t;
$t=localtime(time);
say $t;
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
(1)と(2)で、実行結果が変わらないのだが、なんで?
どっちでもいいの?
じゃあ、timeの立場は?
779: ◆TWARamEjuA
08/09/10 06:58:15 BE:654023-2BP(7089)
>>752
わはは!
描いて、全然ちゃうわ!と気が付いて投稿窓を閉じたつもりが送信されてたョ(呆)
780:デフォルトの名無しさん
08/09/10 07:03:36
Perlの勉強するときに、実は
ものすごく脳力というか
エネルギー使うんじゃね?
漏れは30分か1時間もやると
ぐったりして集中力がなくなる。
読んでも頭に入らなくなる。
781:デフォルトの名無しさん
08/09/10 07:16:34
>778
捨てハンでもトリッブでもいいから、なんか分かりやすい名前つけたらどうだ?
たぶん皆喜ぶぞ。NG指定するのに。
782:デフォルトの名無しさん
08/09/10 09:10:05
じゃあアンケートとって
スレ住民の51%以上が賛成してたら
そうするよ。
783:デフォルトの名無しさん
08/09/10 10:28:58
住人は>>781の一人だから賛成100%が可決。 俺は通りすがり。
784:デフォルトの名無しさん
08/09/10 14:27:20
トリッブはねえよ
785:デフォルトの名無しさん
08/09/10 16:28:39
>>782
50.4%が賛成だとアウトなのかが気になる
786:デフォルトの名無しさん
08/09/10 19:11:24
Perlで作ったツールをUSBメモリに入れて持ち運びたいんですが、
Perlの動作環境込みで持ち運ぶのは無理でしょうか?
テキストファイルの処理がメインでLinuxとActivePerlでの動作は確認しています。
しかしActivePerlがインストールされているWindowsマシンは少なく、
客先ではActivePerlのインストールも許されていない ので困っています。
787:デフォルトの名無しさん
08/09/10 19:19:03
そのUSBに入れときゃいいやん
788:デフォルトの名無しさん
08/09/10 21:04:57
>>786
「Perlで書いたツールを持ち歩きたいけれど、フルセットの実行環境は要らない」
PAR - Perl Archive Toolkit があなたのわがままを叶えてくれます。
789:デフォルトの名無しさん
08/09/10 21:13:34
PAR の話は「perl.exe だけで足りるかもしれない」と伝えてからでいいんじゃないのか。
790:788
08/09/10 21:37:22
>>789
ああ、もっともだね。先走りました。
791:sage
08/09/10 22:17:56
教えて下さい
windowsでperlを書いてるんですが
$dirName = "C:\\Documents and Settings\\Administrator\\My Documents\\新しいフォルダ";
@res = `"dir \"$dirName\""`;
を実行すると
ファイル名、ディレクトリ名、またはボリューム ラベルの構文が間違っています。
となってしまします。どこがいけないでしょうか?
792:デフォルトの名無しさん
08/09/10 22:29:18
(1) >>2をやっていない??
(2) ディレクトリ名にスペースがあるとエラーになる??
793:デフォルトの名無しさん
08/09/10 22:30:21
>>2じゃなくて>>4だった。
(3)Perlでは日本語のフォルダ名を扱えない??
794:sage
08/09/10 22:42:52
>>792
説明が不足して申し訳ないです。。。
日本語のフォルダが大丈夫なのは確認済みです。
ディレクトリ名にスペースがあると上手くいかないんです。。。
>>4をやっても駄目でした。
795:デフォルトの名無しさん
08/09/10 22:58:31
>>794
$dirName = '"C:\Documents and Settings\Administrator\My Documents\巨乳女子校生・公園で立ちバック"';
@res = `dir $dirName`;
スペースが入るときは "こう 囲んで 渡す" ってとこまでたどり着いてるのに惜しいな。
'これ' と "これ" の使い分けに慣れるといいよ。
796:デフォルトの名無しさん
08/09/10 23:24:02
>>792,793
答えようとするのは良いけれど、
確信がないなら検証してからにしてくれ。
質問者が混乱するから。
797:sage
08/09/10 23:56:44
ご支援ありがとうございます。
>>795
教えてもらった方法で上手く出来ました。
ありがとうございます。
追加で申し訳ないのですが
>>791のコードでディレクトリ名を引数で渡したい場合はどうしたらよいでしょう?
やりたい事のイメージ:
%>perl test.pl "C:\Documents and Settings\Administrator\My Documents\貧乳女子高生・あばらで洗濯"
test.plの内容
$dirName = $ARGV[0];
@res = `dir "$dirName"`;
ちょっとまだ''と""の違いを正確に理解できていない様です。。。
'' => 文字をそのまま代入
"" => 変数を展開して代入
という認識なのですが他にも違いがあるのでしょうか?
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
4395日前に更新/239 KB
担当:undef