【Perl】初心者コーナーPart11
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
02/03/27 12:53ID:wAXxxOxPいらっしゃーい、Perlの「コーディング」で困ってる人のスレです。
1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
1と3が無いと誰も答えられないよ、良い回答は良い質問から。
一緒に勉強しましょう。
参考書籍はこちら【【Perl,CGI】参考書籍 第2版 】
http://pc.2ch.net/test/read.cgi/php/988809842/
CGIの質問はこちら【CGIだけどなんか質問ある Pert 5.01 】
http://pc.2ch.net/test/read.cgi/php/1015127347/l50
その他の雑多な話題は、【CGIに依存しないPerlの話題一般】
http://pc.2ch.net/test/read.cgi/php/991313362/
過去ログ、その他の役立ち情報は>>2-10を見よう。
0140nobodyさん
02/04/02 18:24ID:???{
my $class = shift ;
my ( $filename ) = @_ ;
print "##### $ARGV[ 0 ]\n" ;
my $self = {} ;
bless $self ;
}
クラスのメソッドから、グローバル?の変数参照すんのどうすんの?
0141nobodyさん
02/04/02 18:25ID:???効率よく入出力するためのバッファリングなので、あまり気にしすぎない方がいいよ。
手元にある環境で試したけど、標準出力に対し、cygwin版Perlは行バッファリングされていたけど、
ActivePerlはバッファリングされていなかった。
いずれにせよ、STDOUTに対しては完全バッファリングはしてないんちゃうかな?
よくわかんらんけど。
0142nobodyさん
02/04/02 18:36ID:???main::でアクセスすれば? 行儀悪いと言われるだろうがね。
0144nobodyさん
02/04/02 18:57ID:???0146129
02/04/02 19:24ID:aIwf9lEF記述例など、頂けると助かります。
よろしくお願いします。
0148129
02/04/02 19:37ID:aIwf9lEFでは、Dumperで、無名リストを表示する場合、
名前を付ける方法ご存知の型は、居られませんでしょうか、
よろしくお願いします。
>>147
レスありがとう御座います。
ただ、申し訳ありませんが、今後、私の発言に干渉なさらないよう、
お願い申し上げます。
0150nobodyさん
02/04/02 19:51ID:???氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね
氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね
0151147
02/04/02 20:44ID:???的外れで意味不明な質問をしておきながらそのデカい態度。
見上げたもんだな。
その厨っぷりに感心したから教えてやろう。
Data::Dumper->new([ ref-list ], [ name-list ]);
e.g.
print Data::Dumper->Dump([ \%HASH ], [ 'HASH' ]);
print Data::Dumper->Dump([ \%HASH ], [ '*HASH' ]);
0152129
02/04/02 21:19ID:aIwf9lEF>>151
レスありがとう御座います。
ただ、申し訳ありませんが、今後、私の発言に干渉なさらないよう、
お願い申し上げます。
引き続き、ご存知の方宜しくお願いします。
0153nobodyさん
02/04/02 21:56ID:???$Data::Dumper::Varname="manco";
print Dumper($manco) ;
これじゃだめ?
ttp://www.xav.com/perl/lib/Data/Dumper.html
このあたり参考になるかも
0154139
02/04/02 21:58ID:wv3Og9zkご丁寧にどうもありがとです。
けど、なんか混乱状態に陥ってます。。。
>>139の両者ともサーバへの負担はかわらずという事ですかね?
0155nobodyさん
02/04/02 22:20ID:???0156120
02/04/02 22:36ID:???ソース公開したりして無くて・・・というか、ずっと以前に
公開してた事ありましたが、直ぐに中止してよかった (笑
>>121
m// や s/// 等が続いて switch 分作る時に良くやります。
が、玄人さんは使いたがらないらしいですね。
私は初心者ですのであまり理由がわかりませんが。
>>122-123
自分はまだ「どうにかプログラムを書ける」位のレベルですので、
やっと関数・処理の切り分け、流用・設計を考慮し出したトコなのです。
main ではデータの流れだけを担当し、細かい処理は各関数に
任せた結果が例の処理でした。
で、各関数には @ で渡さず $ で統一したかった、という感じ。
やっぱり >>123 のようなのがやり方が一般的ですよね。
そうすると、便利な関数にはなるのですが、酷いと main 一個だけの
プログラムにもなりかねないので・・・もっと精進します。
有難う御座いました。
0157129
02/04/02 23:35ID:???レスありがとう御座います。助かりました。
URLも参考になりました。
とりあえず、このような形で解決できました。
ありがとうございました。
$aa->{ 'aa' } = 'aa' ;
$Data::Dumper::Terse = 1 ;
print '$aaa = ' . Dumper( $aa ) ;
結果:
$aaa = {
aa => "aa"
}
0158nobodyさん
02/04/03 00:09ID:???$manco='manco';
こんなふうにして、staitc?な変数置きたいんだけど、
駄目?
0161158
02/04/03 00:56ID:???package manco ;
my $manco='manco';
だったぁ〜
0162nobodyさん
02/04/03 01:03ID:???package system;
$system::logfile = 'bbs.log';
package main;
my $filename = $system::logfile;
こういう事じゃなくて?
0163nobodyさん
02/04/03 01:23ID:???わざわざそんなことしてなんになるのか?
ただのアホだな! アホのくせに書き込むんじゃねーよ!
0164nobodyさん
02/04/03 02:53ID:Hn4nUBfcそういうのって可能ですか?
例えば、htmlの場合
<html>
<!--#exec cgi="cgi-bin/accesskaiseki/accesskaiseki.cgi"-->
</html>
みたいに記述すればOKですが、同じ文章を
CGIファイルの中に付け足しても無理ですよね。
アホな質問かもしれませんがわかる方いたら教えてください。
0165nobodyさん
02/04/03 02:59ID:???>やっと関数・処理の切り分け、流用・設計を考慮し出したトコなのです。
>main ではデータの流れだけを担当し、細かい処理は各関数に
>任せた結果が例の処理でした。
>で、各関数には @ で渡さず $ で統一したかった、という感じ。
なるほど、意図が判った。
そういうときは、私はファイル名、もしくはファイルハンドルを関数に渡します。
0168nobody
02/04/03 04:15ID:???具体的に何のCGIに入れるのか分からないが、
掲示板みたいのなら上の方の設定部分に
$honyarara='<!--#exec cgi="cgi-bin/accesskaiseki/accesskaiseki.cgi"-->\n';
とやっておいてhtml表示部分に
print "$honyarara";
を足す。多分だけどな。
うまく行ったら私の幸せでも祈ってください。
0170168
02/04/03 04:41ID:???しかも間違えてたよ。
$honyarara='<!--#exec cgi="cgi-bin/accesskaiseki/accesskaiseki.cgi"-->';
print "$honyarara\n";
だよ。(鬱
逝ってきます。
164は166の方法が難しいときはSSIでなくCGIのアクセス解析にしてimgタグを上記方法で埋め込んで下さい。
0171nobodyさん
02/04/03 11:21ID:???こんな感じで、ファイルハンドルをハッシュの中にいれて使おうと思ったんだけど、
うまくいかんかったのだけど、どして?
0172nobodyさん
02/04/03 11:28ID:???そういう奴は、すっこんでろよ。
ここは、【Perl】初心者コーナーだ。
質問する訳でもなく、答える気も無い奴は、
しゃべるなってこった。わかったか?
0173nobodyさん
02/04/03 11:41ID:???初心者に質問の仕方を教えてますがなにか?
まずは質問の仕方を覚えるのが大事。
質問の仕方がわかるようになれば、問題の解決法を調べる方法もわかるようになってくる。
そうすれば他人に聞かずとも自分で調べる事もできるようになるしな。
回答を教えるだけが親切ではない。
0174nobodyさん
02/04/03 12:00ID:???漏れが、いいたいのはさ、
「そんな事もしらねぇ〜書き込むんじゃねぇ〜よ」
みたいな事いってるのよ、
あんたの、その上から人を見るような、口調は、正直気に入らないが、
教えて欲しい人には、利益になるから、いんじゃねか
0175nobodyさん
02/04/03 12:58ID:???129みたいなのに常駐されると特に厄介だし。
「2:それでこんな風にやってみたが・・・ 」を書いてあると、
間違いを指摘するのが容易で答えやすいのではないでしょうか。
なんの努力もなしに、教えてくれと助けを求める人の中には、
初心者というより、ただ単に頭が悪い人という場合があるので、
適当にあしらってしまうのも理解できます。
FAQのような事はgoogleや適当なWebサイトに誘導するのはアリだと思うし、
調べ方を教えるのが、質問者に対してもっとも利益になると思います。
過度の煽りには賛同しかねますが、
Perlに関する初心者向けの本で解決することを質問されていてはきりがないので、
適度に追い返して欲しいというのが本音です。
と172の煽りに乗ってしまう俺がいる。
ほとんどの方は、努力する姿勢をみせている質問者には、
煽らずに答えてあげていると思います。一部の方は・・・(省略)
172さんのような口調の方がおられると余計に荒れてしまうので、
自身も多少の自粛をお願いします。(気持ちは理解してますけど。)
0176春虫
02/04/03 13:18ID:???foreach $i (@args) {
($name, $val) = split(/=/, $i);
#$val =~ tr/+/ /;
#$val =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack('C', hex($1))/eg;
#$cgi{$name} = $val;
if ( $name eq 'data1' ){
$data1 = $val;
} elsif ( $name eq 'data2' ){
$data2 = $val;
}
}
これだとフォームが増えるとif〜のがズラズラ増えちゃうよね?
なんかスマ〜トにやるにはどー書いたらいいでしょか?w
0180179
02/04/03 13:27ID:???0181nobodyさん
02/04/03 13:48ID:???とりあえず、
print $file{ 'fh' } $str ;
を
$fh = $file{ 'fh' } ;
print $fh $str ;
って対処してはいるんだけど、
なんかスマートじゃないなーって思って質問したんやけど、
これで、あってるのかしら?
0182nobodyさん
02/04/03 13:59ID:???use warnings ;
皆さん使ってます?
0183
02/04/03 15:35ID:7cQZbwjHフォームで取得した情報を、テーブル内に表示しようとすると
並び順がめちゃくちゃになってこまっています。これを順番に表示するにはどうしたら
よいでしょうか?
名前 → 本文
メールアドレス → 名前
本文 → メールアドレス
#フォームデータの復元
foreach $pair (split(/&/, $query)) {
($key, $value) = split(/=/, $pair);
# 文字のデコード
$value =~ tr/+/ /;
$value =~ s/%([0-9a-fA-F][0-9a-fA-F])/chr(hex($1))/eg;
$FORM{$key} = $value;
0184nobodyさん
02/04/03 16:05ID:???>>1から引用
> 1:自分はこう言う事がしたい。
> 2:それでこんな風にやってみたが・・・
> 3:それだとこんなエラーが出て上手く行かなかった。
肝心の「何がしたいか」を書かないでまともな返事を期待するなよ。
アンタのやりたいことは多分これだと思うが。
-- begin code --
print { $file{fh} } $str
-- end code --
0185nobodyさん
02/04/03 16:06ID:???Hashってのはそういう仕様なんだよ。
順番に表示したきゃsort keys %hashやTie::IxHash、DB_FileのDB_BTREEでも使えや。
0186183
02/04/03 16:18ID:7cQZbwjHどうも有難うございました。そういう仕様なのですね。納得です。
勉強してまた、出直してきます。
0187nobodyさん
02/04/03 16:29ID:???sortを使ってハッシュの中身を整列してから表示するという手もある。
0188183
02/04/03 16:38ID:???ところで、hash は順番めちゃくちゃに表示っていうのは
毎回ランダムに順番が代わるのでしょうか?それとも何か規則性あるんですか?
0190nobodyさん
02/04/03 16:54ID:???順番は変化します。
基本的には恐らくハッシュ値の順とかだろうけど、同じハッシュ値の場合は
格納した順によって変化するはずなので、同じ順番に並ぶことを
期待しない方がいいと思う。
以上適当な解答なので、どうしても気になるならPerlのソースコードでも
見て確かめてください。
ハッシュについてはC言語のアルゴリズムの本をみればよく分かると思う。
0191nobodyさん
02/04/03 17:09ID:???モジュールで整列できる物がある。
・・・以前JAPUさんに教えてもらったのにログが見つからない。(涙
0193nobodyさん
02/04/03 18:34ID:???<input type=hidden〜〜〜>
で渡す。
0194nobodyさん
02/04/03 18:39ID:???〜〜.cgi?comment=sage
ってするか、フォームボタン作って
<input type="hidden" name="comment" value="sage">
ってする。もしくはjavascript使って併用することもできる。
あとはクッキー使う方法もある。削除パスワードとか。
0195192
02/04/03 18:44ID:???<input type="hidden" 〜
で解決しました。皆様方に感謝です。
0196nobodyさん
02/04/03 21:56ID:???なんですけど
package test ;
sub new {改行多すぎて省略}
sub a
{
my ( $self ) = shift ;
my ( $str ) = @_ ;
print "$self->{test} ### $str\n" ;
}
sub b
{
my ( $self ) = shift ;
my ( $str ) = @_ ;
# a( $str ) ;
a( $self , $str ) ;
#ここの引数の数と
}
package main ;
my $test = new test() ;
$test->a( "call a" ) ;
#ここの引数の数
$test->b( "call b" ) ;
exit ;
メインから呼ぶとき、
$test->a( "call a" ) ;
だけど、メソッドbから、呼ぶときは、
a( $self , "call a" ) ;
と、なっちゃったんだけど、できれば引数の数が変わるのは、避けたいいんだけど、
これは、言語仕様すか?
それとも、記述の仕方間違ってます?
0198nobodyさん
02/04/03 22:16ID:???$self→a("call a");
ってやりなされ。
0200nobodyさん
02/04/04 01:44ID:???漏れは、
$FORM{$key} = $value;
push(@FORM_ORDER,$key);
てな感じでキーの順序を覚えておいて、
foreach(@FORM_ORDER) {...}
で回すだす。
0201nobodyさん
02/04/04 10:04ID:???0202春虫
02/04/04 15:04ID:???print TMP "$no<>$data1<>$data2<>$date\n";
open(DATA,"$file") || &error("$fileが変!");
while (<DATA>) {
print TMP $_;
記事に$noを振りたいんだけど$noを1づつ増やして
いきたいのですが・・・どうも上手くいきません。
Perlの先輩方々よいアドバイスをください・・・
感じとしては$fileの1行目を読み込んで
$noに+1をする感じでいいのでしょうか。。。
0203nobodyさん
02/04/04 15:16ID:???もう少しわかりやすく。
何をやりたいかよくわからない。
0204202
02/04/04 15:22ID:???書き込みにNoをつけたいんです;−;
1番目記事,2番目の記事って感じに。
0206nobodyさん
02/04/04 15:25ID:???ログにナンバーを振るのでなく、表示の際にナンバーを振っていく方がいいと思うが
それじゃダメなのかな?
0207202
02/04/04 15:35ID:???0208誰かもっとスマートな方法教えて
02/04/04 16:00ID:???open(TMP, ">$tmp") || &error("$tmpが変!");
$tmp = <DATA>;
$tmp =~ /^(\d+)<>/;
print TMP ($1+1) . "<>$data1<>$data2<>$date\n$tmp";
while (<DATA>) {
print TMP $_;
0209nobodyさん
02/04/04 16:00ID:???http://www.nn.iij4u.or.jp/~nabe/osietekunn.html
君はなかなかの教えてクンだ。
だが今一歩足りないな。
もっと無意味な情報をこれ見よがしに提示し、
自分の考えを捻じ曲げて喚き散らし、
狂ったように答えを催促すれば誰しも認める第一級教えてクンになれるゾ!
0211fdg
02/04/04 19:45ID:ggon4ynD儲かる出会い系ビジネス
月収100万円オーバー!!
HP作成できない初心者でも安心して運営
出会いサイトシステムをサーバーごとレンタルします
運営者様には無料で宣伝ソフトもお付けします
1.携帯メール自動生成一括送信ソフト
2.高性能メールアドレス収集ソフト
3.サーチエンジン・掲示板一括自動ソフト
http://www.voo.to/2ch/
0212 ◆Ihiuc0j.
02/04/04 23:14ID:zyOMuMfg例えば
--------------------------------------------------------
test(@DATA1,$data,@DATA2);
sub test{
local(@DATA,$data,@DATA2) = @_;
}
--------------------------------------------------------
のようなソースの場合local(@DATA)に全てのデータが入ってしまいます。
色々試行錯誤したのですが、なかなか望む結果は得られませんでした。
で、ポインタ(リファレンス)渡しでやったみたのですが
ポインタ自体は受け渡せたのですが、そこから配列を丸ごと参照する方法がわかりません。
($data->[x]のように一個一個要素を取り出せば上手くいきました)
何かスマートな方法はないでしょうか?
0214nobodyさん
02/04/04 23:19ID:???0215nobodyさん
02/04/04 23:35ID:???0216 ◆Ihiuc0j.
02/04/04 23:37ID:zyOMuMfgうお、あっさり出来たΣ(゜っ゜
サンクス!
0217nobodyさん
02/04/04 23:49ID:???0218nobodyさん
02/04/05 00:24ID:???sub test(\@\$\@);
test(@data, $data, @data2);
sub test(\@\$\@){
local(*ary, *scl, *ary2) = @_;
# ...
}
0219nobodyさん
02/04/05 01:24ID:zs6TJzXIreturnで値を返すときも内部では参照を返しているのでしょうか?
0220nobodyさん
02/04/05 01:30ID:9ypevpefプロトタイプ野郎を見たいので。
0221nobodyさん
02/04/05 01:39ID:???サブルーチン内でmy宣言した変数をreturnできることを考えればわかるだろ!
このうすらハゲが!
0222nobodyさん
02/04/05 01:54ID:???バレタ!?(;゚д゚|||
0223
02/04/05 03:00ID:don7TGy+ヒアドキュメントを含む部分をサブルーチンにしたい場合、どうしてますか?
0224nobodyさん
02/04/05 03:37ID:???意味がよくわからないけど,こういう事?
&foo(<<" HERE-DOC");
here-document
HERE-DOC
インデントに使用した文字(タブとか)も判定に使われる.
perldataのScalar value constructorsを読むと参考になると思う.
0225
02/04/05 04:11ID:don7TGy+英文は読みませんでしたけど、コードの例見たらわかりました。
英文って読む気がしないんですけど、
やっぱり読むほうが普通なんでしょうかね。
0227nobodyさん
02/04/05 04:24ID:???英語が読めると(Perlに限らず)世界は確実に広がる.
読もうとしなければいつまでも読めないまま.
読むスピードはそのうち速くなるから,頑張り過ぎない程度に気軽に読むのが良いかと.
知っている内容が多いperldocは読み易かったよ,おれの場合.
0228nobodyさん
02/04/05 07:21ID:???お前に能書き垂れられる筋合いじゃネーヨ
何様だオマエ???(゚Д゚)
0229Dream ★
02/04/05 07:27ID:???わかっていてもなかなかね。
英語の読解力付けたいんじゃなくて、Perlで目的の
処理が出来たらいいわけなんで、ついつい。。。
0230nobodyさん
02/04/05 07:52ID:???漏れの場合、UNIXのmanを読むうち、いつのまにか
マニュアル英語だけは読めるようになってたよ。
構文が単純だからかねぇ。
もちろん日本語訳があれば、そっちを先に見ます。
0231nobodyさん
02/04/05 08:07ID:???少しは英語に慣れるんじゃない?
たまにRandal L. Schwartzが答えるね。
0232nobodyさん
02/04/05 15:16ID:cQRjW2rJeffective perlはなかなか評判は良いようですが、こちらのほうはどうでしょう?
近くの本屋に売っていないもので、具体的内容が確かめられません。
0233nobodyさん
02/04/05 15:18ID:???0234727
02/04/05 16:11ID:Oqnvheagけっこう高額だそうですね。
0235nobodyさん
02/04/05 16:38ID:7CGZnUtFこのようなログがtail -fで流しているのですが
Apr 5 16:33:08 udp xxx.xxx.xxx.xxx(139) -> xxx.xxx.xxx.xxx(139)
だけ表示させるperlスクリプトを作りたいと思っています。
初めてperlでスクリプトを作るのでヒントいただけたら助かります。
何かヒントになるスクリプトないでしょうか?
拡張としてはxxx.xxx.xxx.xxxのIPアドレスをgethostbyaddrつかって
ホスト名に出来るようにしていきたいと思っています。
0238235
02/04/05 16:53ID:7CGZnUtFwhile(<STDIN>){
print;
}
まずなにからやっていけばいいのかが解ってないレベルです。
もうしわけないです。
配列にデータを入れていかないといけないのか?とか
基本的な所から解ってないです。
発想ができてない状況なのでとりあえずこういうのをやってみろとか
ありましたら是非ともよろしくお願いします。
0239nobodyさん
02/04/05 17:09ID:???#!/usr/bin/perl
print "Content-type: text/html\n\n";
print "Hello world!!";
まずここから。
■ このスレッドは過去ログ倉庫に格納されています