Perlコーディング初心者質問スレ Part 61
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2010/06/05(土) 21:11:10ID:???【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
お勧めサイトは >2 以降
前スレ http://pc11.2ch.net/test/read.cgi/php/1251989472/
0136nobodyさん
2010/09/08(水) 17:47:40ID:J/6++5D2さくらインターネットですが。
0137nobodyさん
2010/09/08(水) 19:15:02ID:???してみ?
0138nobodyさん
2010/09/08(水) 21:52:41ID:???> $yourURLregex= "s?https?://[-_.!~*'()a-zA-Z0-9;/?:@&=+$,%#]+";
エラーにはならないが $, が展開される。
http://perldoc.perl.org/perlvar.html
>>136
>>1
>>137
それだけでは実行結果に影響しない。
http://perldoc.jp/docs/perl/5.12.1/perlop.pod
print(
"'abcde' =~ '$_' => ", 'abcde' =~ $_ ? '' : 'un', "match\n",
"'abcde' =~ /$_/ => ", 'abcde' =~ /$_/ ? '' : 'un', "match\n",
"'cdefg' =~ '$_' => ", 'cdefg' =~ $_ ? '' : 'un', "match\n",
"'cdefg' =~ /$_/ => ", 'cdefg' =~ /$_/ ? '' : 'un', "match\n",
) for '^[a-e]{5}\z', qr/^[a-e]{5}\z/;
0139nobodyさん
2010/09/08(水) 23:03:55ID:???0140nobodyさん
2010/09/09(木) 21:27:24ID:???0141nobodyさん
2010/09/14(火) 10:39:40ID:RoOJ13yO検索エンジンからのアクセスでキーワードだけ抽出しているんですが、
エンジン毎に左オペランド?が違うのと、文字コードが違うようです。
やっぱりエンジン毎に処理を分岐するしかないですかね?
文字化けが発生する毎に分岐処理に新処理を付け加えています。
なんとか処理を単純化できないだろうか。
0142nobodyさん
2010/09/14(火) 10:54:46ID:???デコード処理はguessとかでどうにでもなるけれども
0143nobodyさん
2010/09/14(火) 11:40:18ID:???でも結局それぞれ違うんだから処理は書かなきゃしょうがない
と思う。
0144nobodyさん
2010/09/14(火) 11:47:53ID:RoOJ13yO手元の逆引き大全の索引をみる限り、両者ともでてこない。
そんなによく使う関数なの?
0145nobodyさん
2010/09/14(火) 11:59:48ID:RoOJ13yOhttp://www.ksknet.net/perl/encodeguess.html
0146nobodyさん
2010/09/14(火) 12:08:36ID:???0147nobodyさん
2010/09/14(火) 12:50:04ID:RoOJ13yOgoogle yahoo bing goo exite biglobe nifty ・・・
そのレベルまでかな。まるっきり知られてないっぽいエンジンまで分岐するとなると分岐が増えて増えて・・・
先日の外部テキストに分離した部分は分岐の部分なんですよ。
require して使う話ね。
これなら、分岐の部分だけ増設できるでしょ。
0148nobodyさん
2010/09/14(火) 13:36:17ID:???perl界隈では有名(なのか?)なアクセス解析スクリプトの AWStats
http://awstats.sourceforge.net/
これのパッケージ内に、検索エンジンごとの定義ファイルみたいなのが含まれてるから、
それを参照するがよろし。
但し基本英語圏のエンジンがほとんどで、日本語圏のサイトは少ない。
あと、各エンジンごとの検索パラメータ、googleならq=,yahooならp=とかもある程度はわかるが、
さすがに文字コードまではわからんから、そこらへんは自前でやる必要があるけど、
かなり参考にはなると思う。
0149nobodyさん
2010/09/14(火) 21:57:32ID:???cgiファイル、ログファイル、HTML出力すべてutf-8にしようと思ってるんですが、
use 〜;やbinmode ~;とか一般的に必要とする物ってあるんでしょうか?
自分の環境はwindowsで借りようと思ってる鯖がfreeBSDでperl5.8のようです。
ついでに文字コードがutf-8Nで改行コードはCR+LFでおkですか?
0150nobodyさん
2010/09/14(火) 22:42:40ID:???> 右も左もわからないんで教えてください。
>>1-2
何から勉強していいのか分からない
http://hibari.2ch.net/test/read.cgi/php/1101491473/
△▲ WebProg 初心者の質問 Part22 ▼▽
http://hibari.2ch.net/test/read.cgi/php/1272872528/
【Perl】掲示板を使ろう!
http://hibari.2ch.net/test/read.cgi/php/988890976/
自分の作ったCGIスクリプトをデバッグするスレ
http://hibari.2ch.net/test/read.cgi/php/1011174442/
自作CGIを評価するスレ
http://hibari.2ch.net/test/read.cgi/php/1049514428/
> 一般的に必要とする物ってあるんでしょうか?
無い。必要な処理を必要なだけ実装しなさいな。
> 文字コードがutf-8Nで改行コードはCR+LFでおkですか?
BOM無しが無難。
http://ja.wikipedia.org/wiki/UTF-8
スクリプトの改行コードは実行環境に、出力の改行コードは
HTTPの仕様や閲覧環境に合わせる。
0151nobodyさん
2010/09/15(水) 07:35:37ID:???その点英語圏は楽でいいよなー
0152nobodyさん
2010/09/15(水) 08:52:32ID:jrRD4zmE0153nobodyさん
2010/09/15(水) 10:56:10ID:FawmhmXvPHPだと$_GETと$_POSTで出来るのですがPerlではどのように書くのでしょうか?
0154nobodyさん
2010/09/15(水) 11:57:40ID:???my $m = new CGI;
my $name = $m->param('name');
0155nobodyさん
2010/09/15(水) 13:38:01ID:5exFybXuしてて$var001、$var002、・・・$var850 くらい変数があります。
スクリプトのはじめに
our $var001;
our $var002;
our $var003;
・
・
とか
my ($var001,$var002,$var003・・・)
みたいなことを書かないといけないのですが、
これをまとめて一括で定義する方法があれば教えてください。
0156nobodyさん
2010/09/15(水) 13:43:17ID:???0157155
2010/09/15(水) 13:49:49ID:5exFybXuあとから、「あ”、しまった!」ってなってます。orz
0158nobodyさん
2010/09/15(水) 13:49:52ID:???my %var
0159nobodyさん
2010/09/15(水) 13:59:12ID:???0160nobodyさん
2010/09/15(水) 14:12:01ID:???0161nobodyさん
2010/09/15(水) 14:21:16ID:q2N7SUAH0162nobodyさん
2010/09/15(水) 14:30:47ID:???そういうプログラムなら、
my $var001;
my $var002;
my $var003;
…
とあえてずらっと書いておいた方が、この後のコードを読むの覚悟しろと宣言しているようでかえってよいかと。
タイプするのが大変というなら、Excelで my $var001; という値を入れて、あとは850行分ドラッグすれば一気に作れるよ。
宣言だけで850行…
それに、同じ悩むなら、すでに書いたコードを直した方がよいよ。それこそperlで置き換えてみれば?
s/\$var(\d{3})/\$var\[$1]/g;
そうすれば、my @var; でok\(^o^)/
スカラー変数を宣言できたところで、どっちみちpushやshiftやspliceのような操作はできないしね。
0163nobodyさん
2010/09/15(水) 14:32:00ID:???サニタイズの方法がわからん
0164nobodyさん
2010/09/15(水) 14:39:17ID:???sub sanitize{
$html = shift;
$$html =~ s/&/&/g;
$$html =~ s/</</g;
$$html =~ s/>/>/g;
$$html =~ s/"/"/g;
$$html =~ s/'/#&39;/g;
return 0;
}
0165nobodyさん
2010/09/15(水) 14:39:34ID:q2N7SUAH@hairetu = '';
も
@hairetu = "";
も、$hairetu[0] に空欄?が入っちゃうのね。
正解は
@hairetu = ();
だた。
配列の初期化(空欄化)って他にどうしてる?
0166nobodyさん
2010/09/15(水) 14:42:09ID:???0167nobodyさん
2010/09/15(水) 14:43:14ID:???ホントにぎやかだねw
0168nobodyさん
2010/09/15(水) 14:46:02ID:???0169nobodyさん
2010/09/15(水) 14:46:19ID:q2N7SUAHそういやそうだなw
しかし、皮肉交じりに人をバカにするその口調は会社でも同じなのか?
だとしたら相当に嫌われてるぞおまえ。
0170nobodyさん
2010/09/15(水) 14:48:59ID:???0171nobodyさん
2010/09/15(水) 14:52:23ID:???0172nobodyさん
2010/09/15(水) 14:54:17ID:???これはどういう概念なんだろうか?
これこそ初期化?
0173nobodyさん
2010/09/15(水) 15:01:44ID:???0174nobodyさん
2010/09/15(水) 15:14:26ID:q2N7SUAHいよ!色男!
0175nobodyさん
2010/09/15(水) 15:18:27ID:???わかったかな
0177nobodyさん
2010/09/15(水) 16:11:27ID:???0178nobodyさん
2010/09/15(水) 16:50:47ID:???0179nobodyさん
2010/09/15(水) 17:06:18ID:???0180nobodyさん
2010/09/15(水) 17:12:15ID:???ただのサブルーチンという言い方はおかしい
0181nobodyさん
2010/09/15(水) 21:27:04ID:st8PUYRkすまん。おれカタカナだめなんだよ。
0182nobodyさん
2010/09/15(水) 22:56:34ID:???> ただのサブルーチンという言い方はおかしい
new という名前だと何か意味あるっけ?
0183nobodyさん
2010/09/15(水) 22:58:17ID:???0184nobodyさん
2010/09/15(水) 23:04:45ID:???0185nobodyさん
2010/09/15(水) 23:10:38ID:???0186nobodyさん
2010/09/15(水) 23:31:49ID:???0187nobodyさん
2010/09/15(水) 23:45:34ID:???0188nobodyさん
2010/09/16(木) 01:49:39ID:???blessされたリファレンスを返すからであって、他言語のように"new"自体は
言語構造でもなければ組込みの関数とかでもないでしょう。
0189nobodyさん
2010/09/16(木) 09:18:22ID:???0190nobodyさん
2010/09/16(木) 10:28:19ID:???0191nobodyさん
2010/09/16(木) 10:35:40ID:???0192nobodyさん
2010/09/16(木) 11:29:04ID:???回線の負荷を5分間隔で
調べたいのですが、
方法はありますでしょうか?
当方、光でインターネットに
つながっています。
0193nobodyさん
2010/09/16(木) 11:36:36ID:???0194nobodyさん
2010/09/16(木) 11:43:36ID:???0195nobodyさん
2010/09/16(木) 12:05:16ID:???もう少し自分の頭で考えてちゃんと作ってみてどうしてもわからない
ところをピンポイントで聞かないとこういうとこでは役に立つ回答は
つきにくい。
でもそんなのいろいろあるから自前で作ることにこだわらず拾って
きて使えばいいんじゃね? mrtgとかmuninとかcactiとか。
0196nobodyさん
2010/09/16(木) 12:12:05ID:???漠然としすぎていました。
失礼しました。
現在、MRTGのグラフで「回線の負荷」と称して、下記の方法でトレンドを見ています。
・自プロバイダ(@nifty)のHPスペースに1MBのファイルのアップロード・ダウンロードを
行い、その所要時間をMRTGでグラフ化しています。
で、この方法が正しい考えなのか否か、また、こういう良い方法があるよ
という参考意見がありましたら、レスをお願いします。
0197nobodyさん
2010/09/16(木) 12:18:01ID:???案内はできんけど。
考え方的にはわからんでもないな。量的に許される程度なのかどうかは
個別の事情だし。
0198nobodyさん
2010/09/16(木) 16:37:33ID:???mrtg には通信した容量とかも記録されてるから (しかも時間ごとに) そのログを活用したほうがいいかと
とりあえず mrtg のログ漁りから始めた方よいかと
定期的にまわすなら cron (Windows 鯖ならタスク) でチェックするスクリプトを走らせればいいかと思う
どう〜しても何をやっていいのか分からなければ
http://hibari.2ch.net/test/read.cgi/unix/1126361848/l200
へ
0199nobodyさん
2010/09/17(金) 00:19:38ID:???レスありがとうございます。
そうなんですよね。
前は10Mでトレンドを取っていたのですが、
本末転倒なので、1Mに変えた次第です。
0200nobodyさん
2010/09/17(金) 08:57:37ID:???方法はないんだよな。途中の通信業者からトラフィック測定データを
もらえるようなコネでもない限り。
0201nobodyさん
2010/09/17(金) 09:05:32ID:???0202192
2010/09/17(金) 13:56:22ID:???@niftyさん、なにか変えたのでしょうか。。。
ということで、tracerouteも含め別の方法を考えてみます。
0203nifty
2010/09/17(金) 14:19:02ID:???0204perl初心者
2010/09/17(金) 14:19:08ID:vsIN50JT添付ファイルの処理を加える前は正常に動作していました。
他のページで同じ質問にあぽーんでかたずけられてましたが、どなたかご教示頂ければ幸いです。
よろしくお願い致します。
※環境(参考情報)
CentOS Apache
perl5.8.8
use Net::SMTP;
use Encode;
use MIME::Entity;
use CGI;
送信フォームのエンコード:utf8
cgiのエンコード:なぜかiso-2022-jp
0205nobodyさん
2010/09/17(金) 14:37:51ID:???今からやる場合、どれがいいですかね?
用途はコマンドラインから動かすのとCGI利用です
0206nobodyさん
2010/09/17(金) 15:41:49ID:???ソース見てないので何ともいえんが
MIME::Entityにファイルデータが渡ってない・・に1票
おいらなりの流れ
1.添付データは、useCGI;のVars()でなく、param()で取得
2.取得したデータをmimeエンコード
3.メールヘッダ&本文をテキストベースで整形して
4.本文をboundaryでブロック分け
5.boundaryの1ブロック目は本文を挿入
6.2つめのboundaryブロックは、mimeタイプ&ファイル名を宣言して、
3)でエンコードしたテキストを貼付け
7.出来上がったメールをsendmalに投げて送信
>>205
onRailが最も流行ってるって観点からだとRubyかな
Perlは一通りなんでもできるけど、
Perl6も出たばっかだしニーズ的に今後どうなるかわからん。
勉強する環境で考えると日本語の教材も多くサンプルも多いperlになる。
PHPも同じこといえる
どっちもレガシーになりつつあるけどね。
0207perl初心者
2010/09/17(金) 15:49:22ID:vsIN50JTMIME::Body::File->open FileName.jpg: No such file or directory at /usr/lib/perl5/site_perl/5.8.8/MIME/Body.pm line 435.,
referer: http://localhost/******/****/form_mail.html
0208nobodyさん
2010/09/17(金) 16:09:32ID:???添付ファイルを一旦サーバー上に保存せんとダメ
だから
open FileName.jpg: No such file になる
メール送信後に削除ね。
0209nobodyさん
2010/09/17(金) 16:14:59ID:???スクリプト2行目に
use CGI::Carp qw(fatalsToBrowser);
の1行かいたら、わざわざエラログ見なくて済む。
0210perl初心者
2010/09/17(金) 16:15:05ID:vsIN50JTたしかに我ながらアポーンな痛い愚問でした。
0211nobodyさん
2010/09/17(金) 17:02:13ID:???0212nobodyさん
2010/09/17(金) 17:31:13ID:???コマンドラインでワンライナー限定だとperl最高だと
思う。慣れもあると思うが。
0213nobodyさん
2010/09/17(金) 19:21:26ID:???クソサンプルの餌食になってしまうよ
1つのやり方に色んなやり方あって柔軟だとは思うけど、初心者には迷うだけなんだよねw
0215nobodyさん
2010/09/17(金) 19:40:23ID:???0216nobodyさん
2010/09/17(金) 19:40:52ID:???0218nobodyさん
2010/09/18(土) 14:29:16ID:???my $query = CGI->new;
*in = $query->Vars();
って、たった2行で書くようになってるけど、
昔みたいに、
if ($ENV{'REQUEST_METHOD'} eq "POST") {
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
@pairs = split(/&/,$buffer);
for $pair (@pairs) {
($name, $value) = split(/=/, $pair);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$value =~ s/\t//g;
$in{$name} = $value;
}
} else {
$buffer = $ENV{'QUERY_STRING'};
@pairs = split(/&/,$buffer);
for $pair (@pairs) {
($name, $value) = split(/=/, $pair);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$value =~ s/\t//g;
$in{$name} = $value;
}
}
って書いたほうが、
素人からは何やってるかが書かれている分、良いように思う。
0219nobodyさん
2010/09/18(土) 17:41:29ID:???0220nobodyさん
2010/09/18(土) 17:57:39ID:???ブラックボックスでおk
0221nobodyさん
2010/09/18(土) 23:52:38ID:???0222nobodyさん
2010/09/19(日) 15:20:57ID:???0223nobodyさん
2010/09/19(日) 16:24:14ID:???悟りが啓けるだろ。
0224nobodyさん
2010/09/19(日) 17:09:11ID:???あらゆるプロジェクトを書き直すのか。ご苦労さんってこった。
0225nobodyさん
2010/09/19(日) 23:22:09ID:ND7IF1JXmy $query = CGI->new;
*in = $query->Vars();
の二行をわかりやすく説明してくれたらどんなに感謝することか。(;´Д`)
0226nobodyさん
2010/09/20(月) 01:01:04ID:???http://search.cpan.org/dist/CGI.pm/lib/CGI.pm#FETCHING_THE_PARAMETER_LIST_AS_A_HASH:
http://perldoc.jp/docs/modules/CGI-3.49/CGI.pod
二行目は真似せず素直に %in = $query->Vars; とした方がいい。
0227nobodyさん
2010/09/20(月) 12:16:11ID:???1行になったw
0228nobodyさん
2010/09/20(月) 12:19:01ID:???0229nobodyさん
2010/09/20(月) 12:30:44ID:???それこそソース嫁。
0230nobodyさん
2010/09/20(月) 12:33:54ID:???プロジェクト書き直すのにお金が発生するって前提だと
ある意味、悪いことではないかも
新言語がリリース→新言語でソフト開発→普及する→追加機能のニーズ
→車輪の再開発→開発案ネタ切れ→仕事がなくなる→誰にも見向きされなくなる
→ちょっと使いやすくした新言語をリリース→新言語でソフト開発→普及する
→追加機能のニーズ→車輪の再開発→開発案ネタ切れ→仕事がなくなる
→誰にも見向きされなくなる
プログラミング市場とは、ちょうどウィルスとウィルス対策ソフトの関係のように
イタチゴッコな構造でなければ繁栄しない。
0231nobodyさん
2010/09/20(月) 12:41:55ID:???の「->」の意味ってそもそもどんな意味?
WorkAをWorkBに任せる?
それとも
オブジェクト指向的に
@List.WorkA.WorkB;
ってこと?
0232nobodyさん
2010/09/20(月) 13:15:25ID:???0234nobodyさん
2010/09/20(月) 22:53:46ID:???0235nobodyさん
2010/09/21(火) 05:32:11ID:???workBはリストを返すので代入する。
0236nobodyさん
2010/09/21(火) 08:10:37ID:???http://perldoc.perl.org/perlop.html#The-Arrow-Operator
http://perldoc.jp/docs/perl/5.12.1/perlop.pod
a. 右辺が [Num] なら左辺を配列リファレンスと看做し、添え字 Num の値を返す。
右辺が {Key} なら左辺をハッシュリファレンスと看做し、キー Key の値を返す。
右辺が (Args) なら左辺をコードリファレンスと看做し、Args を渡して呼び出す。
my $ref = bless [qw( foo bar baz )], 'Foo';
print $ref->[1]; # bar
print { a => 'Foo', b => 'Bar', c => 'Baz' }->{'b'}; # Bar
sub { print join '-', @_ } -> (0..2, 'a'..'c'); # 0-1-2-a-b-c
b. 左辺がクラス(パッケージ)名かそれを収めたスカラー変数なら、右辺にはそのクラス
から辿れるサブルーチン名かそれを収めたスカラー変数、又はコードリファレンスを
収めたスカラー変数を置ける。この場合、右辺のサブルーチンには左辺が第1引数と
して渡される。他の引数は (...) を続ける事で渡せる。
sub Foo::foo { print map("[$_]", @_), "\n" }
my $bar = sub { print 'Bar:', map("[$_]", @_), "\n" }; # パッケージに依存しない
my($Baz, $baz) = ('Foo', 'foo');
Foo->foo, $Baz->foo, Foo->$baz; # [Foo]\n[Foo]\n[Foo]\n
Foo->foo('quux'), $Baz->$baz('quux'); # [Foo][quux]\n[Foo][quux]\n
Foo->$bar, $Baz->$bar('quux'); # Bar:[Foo]\nBar:[Foo][quux]\n
c. 左辺が bless されたリファレンスなら、bless されたクラスを元に b. 同様の動作
をする。第1引数にはクラス名でなくリファレンス自身が渡される。
$ref->$baz('quux'); # [Foo=ARRAY(0xhhhhhh)][quux]
■ このスレッドは過去ログ倉庫に格納されています