【Perl】初心者コーナーPart10
■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。
02/02/24 22:18ID:zOj6Yq/31:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
1と3が無いと誰も答えられないよ、良い回答は良い質問から。
一緒に勉強しましょう。
参考書籍はこちら【【Perl,CGI】参考書籍 第2版 】
http://pc.2ch.net/test/read.cgi/php/988809842/
CGIの質問はこちら【CGIだけど、なんか質問ある?part5】
http://pc.2ch.net/test/read.cgi/php/1009331505/
その他の雑多な話題は、【CGIに依存しないPerlの話題一般】
http://pc.2ch.net/test/read.cgi/php/991313362/
過去ログ、その他の役立ち情報は>>2-10を見よう。
0795nobodyさん
02/03/21 12:14ID:???元々レポート作成言語。
そのため文字列操作が異様に発展。
CGI使いからはマイナーだがレポートのテンプレートを指定する機能も。
と、言うか、
Perlってレポート作成以外で何に使います?
CGIとかです。
が正しい。
0797nobodyさん
02/03/21 12:15ID:???自分がよく作るのはなんちゃらコンバータとかかなぁ。
HTMLから,ある規則に従ってリンク抜き出したりとか。
>793
どっちも変わらないみたいなので,私は短い前者を使う。
0798nobodyさん
02/03/21 12:19ID:???レポート処理とか。
おれはチャットログの整理とかもしてる。
複数のログから特定のキーワードを探したりするときも手軽で便利。
0799nobodyさん
02/03/21 12:23ID:???2バイト文字列指定してる場合は囲んだほうがいいよ。多分ね。
0800nobodyさん
02/03/21 12:29ID:???自己レス。
推測だが変数名に使えない文字の場合は囲まないとエラーが出る。
ただし変数名に使える文字なら不要。
例。$ENV{HTTP_HOST} と$Rom{"坂田@アホ"}。
0802nobodyさん
02/03/21 14:09ID:???sub manco
{
print "sage\n" ;
}
$a = manco ;
$a() ;
なんか解決ないすかね?
0803nobodyさん
02/03/21 14:15ID:???意味ねー(w
おとなしく&manco;しろ。
0804nobodyさん
02/03/21 14:33ID:???$a[ i ]() ;
こんな感じで
0805nobodyさん
02/03/21 14:34ID:???リファレンス使ってこんな感じかな
$a = \&manco ;
&$a() ;
0806nobodyさん
02/03/21 14:36ID:???$a = "print";
&{$a};
sub print {
print qq(<hr>ok!<hr>);
}
とりあえずこれで動いた。
>803
if elsif文を並べてサブルーチンに飛ばすような時とかに便利かも。
0807nobodyさん
02/03/21 14:53ID:???if elsifを並べるのはあんまり良くないでしょ。
ハッシュに入れたサブルーチン名(もしくはリファレンス)
をコールするってことでどうかね>適用例
0808792
02/03/21 14:53ID:???回答ありがとうございました。
レポート処理のソース書いて、実行はMS-DOSからやるんですか?
CGIしか作ったことないんで、少し気になります。
0810nobodyさん
02/03/21 15:01ID:???$b = $a[ 0 ] ;
&$b() ;
これ、いいね、
でも、
$a[ 0 ] = \&manco ;
&$a[ 0 ]() ;
これだと駄目ね
0811nobodyさん
02/03/21 15:03ID:???&manco;
なんて、レスキューやKENTみたいなことやってんじゃねーよ。
それじゃ、プロトタイプのチェックしねーだろ。
>>806
man perlref
man perldub
組み込み関数とユーザサブルーチンの区別つけれ。
ユーザ定義ハンドラを許すようなオブジェクトなら必須。
0812nobodyさん
02/03/21 15:03ID:???そうだろね。LUTみたいな考え方だね。
>808
CGI以外の用途に使うなら「Perlを始めよう」というソフトがおすすめ。
ソースを書いて直接実行したりできる。
0813803
02/03/21 15:05ID:???詳しく解説きぼん。
0815nobodyさん
02/03/21 15:10ID:???皮肉にしか聞こえん・・・
0817nobodyさん
02/03/21 15:59ID:???どこでエラーになるか確かめれ。
固いコードを書きたいんだったらプロトタイプ使え。
sub manco($)
{
print "$_[0]\n";
}
&manco();
manco();
0818nobodyさん
02/03/21 16:35ID:7Dyo1H3nフレームで上と下に分割して下のフレーム内にdocファイルへのリンクを張ったのですが、
docファイルへのリンクをクリックするとフリーズして強制終了してしまうのですが
どうすれば正しく表示できるのでしょうか。
ちなみにOSはxp proです。
0819nobodyさん
02/03/21 16:37ID:???Web製作板かWin板で聞くべし。
Perlと関係ないじゃない。
0821818
02/03/21 16:43ID:7Dyo1H3n0822nobodyさん
02/03/21 16:50ID:???0823やっぱり
02/03/21 16:51ID:???0824間違えた
02/03/21 16:51ID:???0826nobodyさん
02/03/21 18:10ID:TYcdRNHScgiで、同じディレクトリにある他のファイルのパーミッションを変更したいんだけど、
chmodを使ってもなぜか変更できないです。
chmod 0777,"./abc.dat";
こんな風にしてるんですが、何かやり方がいけないの?
0830nobodyさん
02/03/21 21:58ID:???$manco->{'kuri'}=1;
$manco->{'torisu'}=1;
print Dumper($manco);
ってすると、
$VAR1 = {
'kuri' => 1,
'torisu' => 1
};
こんな感じで表示されんだけど、
$VAR1ってなるんだけど、
これに、名前付けられないの?
0831nobodyおっさん
02/03/21 22:06ID:???こう書いたほうが尚よいダロウ!
$_= '>>1-100';
print />>(\d+)(-\d+)?/ ? $2 ? "$1$2" : $1 : "unmatched";
0833nobodyさん
02/03/21 22:24ID:???use Data::Dumper;
%hash = ('A' => 'apple', 'B' => 'buffalo');
$d = Data::Dumper->new([\%hash], ['hash']);
print $d->Dump;
0834830
02/03/21 22:27ID:???あんな、
use XML::Simple;
$manco->{'kuri'}=1;
$manco->{'torisu'}=1;
print XMLout( $manco ) ;
これ動かすと
<opt kuri="1" torisu="1" />
って表示されんだけど、ノード名前が、optになっちゃうのね、
でな、無名のハッシュだっけ?に名前付けたら、変えられんじゃね
っと思ったンヨ
はずしとりすかね?
0836830
02/03/21 22:43ID:???こうだった。
my $xs = new XML::Simple( rootname => 'mesu' ) ;
$manco->{'kuri'}=1;
$manco->{'torisu'}=1;
print Dumper($manco);
print $xs->XMLout($manco);
$VAR1 = {
'kuri' => 1,
'torisu' => 1
};
<mesu kuri="1" torisu="1" />
0837830
02/03/21 22:48ID:???漏れさ、PerlのCGIって、
WEB FORUMっていう掲示板をいじる事から
始まったんだけどね、
なんか、記述スタイルが古いつ〜かさ、
もっといま風な、オブジェクト指向っぽくやりたいな、
なんて思ってるんだけど、
これは参考になるぞ!、っていうソースどっかに
転がってないすかね、よろすく
0838nobodyさん
02/03/21 23:01ID:???いっておくが,おれは >830とは別人だぞ・・・
0839nobodyさん
02/03/21 23:08ID:???(TOPページの)最新更新日を表示させたいと思っています。
リンク先のページの最新更新日を取得するような方法はあるのでしょうか。
ご指南の程、よろしくお願いします。
なにぶんPerlは始めたばかりなので、ムズかしい処理は理解できないかも
しれないので、なにをどこらへんを勉強すれば理解できるようになるのか
教えていただけるとありがたいです。
0840nobodyさん
02/03/21 23:10ID:???sub mancoとか、
$unco
もしくは、それに類似する単語で
書かないと、誰も答えてくれねぇ〜ぞ、ゴウラァ!!!
0845839
02/03/21 23:25ID:???「河馬屋二千年堂's Page」さんを見てみましたが、すみません。
まったく理解できませんでした(涙
「モジュールとはなにか、どうやって使うのか」から勉強し直します。
せっかく教えていただいたのに、すみませんでした。
0846nobodyさん
02/03/21 23:33ID:???アンテナ系のスクリプトを改造してみたら?
基本的な対象は日記だけど、別に普通のリンク集に使ってもいいだろ。
「アンテナ なつみかん」とかで検索してみ。
>「モジュールとはなにか、どうやって使うのか」から勉強し直します。
とか言うレベルだと改造は厳しいと思うが。
0848839
02/03/21 23:38ID:???やっぱりレベル低いのに、高望みしすぎなんですかね・・・。
とりあえずダウンロードしてソースをじっくり見てみます。
ありがとうございました。
0849nobodyさん?
02/03/21 23:44ID:???>べつにモジュール万能主義でもないだろうよ。
846さんはモジュールを勧めているわけではなく、モジュールというものを
知らないレベルの人には、改造は難しいかもしれない、
という懸念をの述べただけじゃないかな。煽りネタだったらスマソ。
0850nobodyさん
02/03/21 23:50ID:???perlは、本読まないと理解は難しいよ。
他の言語と違って、他人のperlのソース読むのは、
時間の無駄のような気がする。(解説がついてるソース
とかならいいけど)
08511234
02/03/21 23:52ID:di2RpoJqありがとうございます。
ところでこれではだめだということに気づきました。
>>1
>>1-
>>1-20
これ全部にヒットしないといけなかったんです。
書いてて気づきました。
すみませんもう一度おしえてもらえませんか?
08531234
02/03/21 23:54ID:di2RpoJq>>2-
でヒットしてないのかな?
08541234
02/03/21 23:56ID:di2RpoJqこうっすね
0857nobodyさん
02/03/21 23:58ID:CC60PDt40858nobodyおっさん
02/03/22 00:00ID:???ヒットするんじゃないの?
>>1- は >>1 と同じとみなすんじゃダメかい?
0860nobodyさん
02/03/22 00:27ID:???ファイルハンドルで索引を見たら書いてあった。
0862839
02/03/22 02:05ID:???テストではうまく動いてる気もするんですが、これでよろしいのでしょうか。
use LWP::Simple;
($content_type, $document_length, $modified_time, $expires, $server) = head "http://www.aaa.ne.jp/test.html";
($sec, $min, $hour, $day, $mon, $year) = localtime($modified_time);
$year += 1900;
$mon ++;
print "$year/$mon/$day/$hour";
0864839
02/03/22 03:18ID:???はい、その通りでした・・・・。
更新時刻が取得できないサイトがいくつかありました。
私のLWPの使い方が間違ってるのでしょうか。
それとももっと良い方法があるのでしょうか。今一度、探してみます。
またヒントを与えてもらえれば幸いです。
0865nobodyさん
02/03/22 03:32ID:???(貴方のマシンがWinなら)WWCとかWWDとかのメジャーな更新チェッカ落として
みると参考になると思うよ。ヘッダも表示されるし。
0866nobodyおっさん
02/03/22 08:23ID:???こんな感じかい?
$_= '>>1-100';
if ( />>(\d+)((-)(\d*))?/ ){
if ( $4 ){ print "$1$2"; } # >>n-n
elsif ( $3 ){ print "$1$3"; } # >>n-
else { print "$1" ; } # >>n
}
0867nobodyさん
02/03/22 08:35ID:???見られないようにする方法ってどうするんですか?
0868nobodyさん
02/03/22 08:38ID:???相手サーバの問題。
更新時刻がとれなかったら長さや内容を前回チェックのと比べるとか。
いくつかのサーバは更新時刻いいかげんに返すので
そのあたりは試行錯誤で。
>867
それらのファイルにアクセス制限をかける。
近ごろの apacheは標準でそういう設定になってる。
0870出来の悪い子
02/03/22 08:54ID:???申し訳ありません m(_ _)m
とりあえず実験してみて
>>774さんのやり方で大丈夫でした
= じゃなくて! ってことですね
もっと頭を解して考えるようにします。
ありがとうございました。
0871nobodyさん
02/03/22 09:49ID:???なぜprintするのかわからないのだけれど,それは効率悪いんじゃないか?
↓こうできるよ.
/>>(\d+(?:-\d*)?)/ and print $1;
0872nobodyおっさん
02/03/22 10:28ID:???print してるのは、だた結果が正しいかを確認するため。
確かに、後読みだとコンパクトにまとめて書けるのでよりいいと思います。
ただし、やりたいコーディングが
>>n
>>n-
>>n-n
の3パターンへのリンクを張るだけならいいのですが、もしかしたら
>n- の場合など、nが1なら100までとかに制御する余地を残す意味で敢えて
わけているだけです。
0873nobodyおっさん
02/03/22 10:48ID:???1つにまとめるなら以下のようによりコンパクトにも書けます。
/>>(\d+(-\d*)?)/
0874縞栗鼠(シマリス)の親方
02/03/22 10:54ID:pJ6rZ2itここは、完全に狂ってる。
授業料は一年分一括前払いなので、
金が入れば、生徒は要らない
金を振り込んだら、何とかその生徒を辞めさせようと
講師どもが、あの手、この手でイヤガラセをしてきますね。
セクハラはもちろん、脈絡の無い罵倒は日常茶飯だね。
酒臭い講師もいるし・・・ 人生の最果て中央高等学院
学歴詐称、経歴詐称、合格実績詐称、デタラメ授業、
http://www.chuo-school.ac/
http://chs-f.com/index.html 中央高等学院福岡校
司法浪人の田中校長は ↑ また司法試験に落ちましたが
HP上では下らない見栄を張っています
0875839
02/03/22 12:08ID:???長さっていうのはファイルサイズのことでしょうか。
そんなこともできるんですか・・・。
LWPモジュールについてもう少し勉強してみます。
0876nobodyさん
02/03/22 12:22ID:???おっさんおっさん、いくらコンパクトでも効率的には>871のほうが上だぞ。
つーか(?:regexp)はNon-capturing groupingsだろ。何でここで後読みなんだよ(w
学生はperldocでも読んで勉強しとけ。
0877nobodyさん
02/03/22 12:26ID:???長さってのは、
use LWP::Simple;
$content = get ("http://www.2ch.net/");
$length = length($content);
と言うことだと思う。868じゃないから知らんけど。
0878nobodyさん
02/03/22 17:23ID:2hKQObXwいま、仕事で掲示板の修正をやってるんですが、
特殊文字を削れってんで、メッセージに対して、
$value =~ s/&/&/g;
$value =~ s/\"/"/g;
$value =~ s/</</g;
$value =~ s/>/>/g;
$value =~ s/\|/¦/g;
$value =~ s/\[/[/g;
$value =~ s/\]/]/g;
$value =~ s/\\/¥/g;
みたいなことをやってます。
そしたら、
「申し込み」が「・yen;し込み」みたいな感じで思いっきり化けちゃいます。
どうすれば文字化けしないで、特殊文字の変換ができますか?
0879nobodyさん
02/03/22 17:26ID:2hKQObXw$value =~ s/&/&amp;/g;
$value =~ s/\"/&quot;/g;
$value =~ s/</&lt;/g;
$value =~ s/>/&gt;/g;
$value =~ s/\|/&#166;/g;
$value =~ s/\[/&#91;/g;
$value =~ s/\]/&#93;/g;
$value =~ s/\\/&yen;/g;
こっちが正しいです。
ちなみに「&」は実際は半角文字です。
0880nobodyさん
02/03/22 17:31ID:???Shift-JISだったらモロ化けるね。
上の4つだけで十分。
どうしても変換したいならEUCにすれば?
0881nobodyさん
02/03/22 17:35ID:2hKQObXwえ?意味ないんですか?
某雑誌にこれらの特殊文字は削るか置換しろ!
って書いてあるんですよ。
で、その通りにしてほしいってことで、修正依頼が来たんですよ・・・。
0882868
02/03/22 17:36ID:???ごめんレス番間違えてたね。
>>862で $document_lengthに長さが入ってるみたいなので
それも見たらどうかってこと。
0883nobodyさん
02/03/22 17:37ID:???変換結果に「yen」って出てるので分かるかと思うけど、
「申」のSJIS2バイト目が「\」なのです。
なので、2バイト文字をうまく扱ってくれる jperl を使うってのが、
とりあえずよいのではないかと。
0884nobodyさん
02/03/22 17:38ID:???(もしShift-JISだったら)漢字の一部が変換されてることになる。
わかりますか?
0885nobodyさん
02/03/22 17:39ID:???0886nobodyさん
02/03/22 17:42ID:2hKQObXw環境を変えるのはきびしいです。
>>884
意味はわかります。
それでは、文字コードがSJISならばどうしようもないってことですかね?
880さんが言ってるみたいに、とりあえずEUCに変換しとけってことですか?
0887nobodyさん
02/03/22 17:45ID:???制御文字?
0x0〜0x19 ぐらいのやつ?
特殊文字の変換とかって、どのくらいのことやるのが普通なんですか?
ここ見ろ! ってとことかあります?
0888nobodyさん
02/03/22 17:46ID:???0889878
02/03/22 17:53ID:???0891878
02/03/22 18:03ID:???0893nobodyさん
02/03/22 19:10ID:???決めて貰い後で参照しますが、その際「定義されていない or
空か無効」と「正常」を区別するスマートなやり方ありませんか?
# ユーザの設定
package user;
$file = 'bbs.cgi';
# プログラム
package main;
my $file = (defined($user::file) && $user::file)
? $user::file : 'bbs.cgi';
これだと何度も $user::file をタイプしないといけないので
なんか無駄に文が長くなってしまうような気がします。
なんとなく perl -w で文句を言われるのも嫌なので
my $file = $user::file || 'bbs.cgi';
のような記述も避けたいのですが・・・・。
■ このスレッドは過去ログ倉庫に格納されています