くだすれPerl(超初心者用)3
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2009/03/31(火) 22:20:27ID:???もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。
Perl使いが優しくコメントを返しますが、
お礼はPerlの布教と初心者の救済をお願いします。
前スレ
くだすれPerl(超初心者用)2
http://pc11.2ch.net/test/read.cgi/php/1204488452/
関連スレ
Perlについての質問箱 39箱目
http://pc12.2ch.net/test/read.cgi/tech/1234181856/
Perlコーディング初心者質問スレ Part 59
http://pc11.2ch.net/test/read.cgi/php/1234752149/
【Perl上級者コーナーPart01】
http://pc11.2ch.net/test/read.cgi/php/1024741312/
0450nobodyさん
2009/11/23(月) 22:45:22ID:g+VEp3/W「exit」を入れています。
sub a { }
exit;
sub b { }
これをライブラリとして使用する場合、別のcgiから呼び出すと、
途中で終了してしまいます。
どのように動作を区切っておけばよいのでしょうか?
0451nobodyさん
2009/11/24(火) 01:28:07ID:???まったく何を言ってるのか分かりませんが、
exit;
の行を消せば良いんじゃないでしょうか
サブルーチンを使うとき、途中で終了する目的はなんでしょうか?
そもそも、exit以降にサブルーチン定義しかなかったら、
exitが有っても無くても動作は変わらないような気がするのですが。
0453nobodyさん
2009/11/24(火) 10:33:29ID:???初心者で済みません、基本が分かってないのだと思います。
サブルーチン一つに変えて質問します。
例えば上から下に流れていって、
コード1・・・・
& a;
コード2・・・・
sub a{ }
コード2の部分で終わりたい場合に、
exit;がなかったら最後まで実行するのではと思うのですが?
0454nobodyさん
2009/11/24(火) 10:54:55ID:???ライブラリは基本的には関数定義群
自分が何をやっているのか分からなければ、関数化できないような余計な処理をサブルーチンの外に書いてはいけない
関数は定義しただけでは実行されないため、exitはいらない
多分main.plを流用しようとしたから余計な処理が入ってるんだろうが、それなら関数のみ抽出したものを新たに作る必要あり
それから.pl形式のライブラリは時代遅れ
パッケージ(.pm)の作り方&使い方を学ぶべし
0456nobodyさん
2009/11/24(火) 22:40:50ID:???0457nobodyさん
2009/11/25(水) 00:02:19ID:4vaBixa80458nobodyさん
2009/11/25(水) 04:47:50ID:???sub a{}を"実行する"っていうのはどういう意味ですか?
サブルーチンが定義されると何か困ることでもあるんですか?
なんなんですか?
0459453
2009/11/25(水) 11:53:02ID:???ちょっと勘違いしておりました。
0460nobodyさん
2009/11/25(水) 12:16:55ID:???全てはpackage mainのグローバルスコープで命令が動いてしまうperlが悪いんや
でもそのおかげでワンライナー美味しいです
0461nobodyさん
2009/11/25(水) 12:35:19ID:???穴が開くこともあるから
0462453
2009/11/25(水) 12:52:24ID:???一つでいいですので例をお願いします。
0463nobodyさん
2009/11/25(水) 13:14:26ID:???どんなライブラリかは知らないけど、コンストラクタを作っているなら、パッケージ内の変数に外から直接アクセスすることで予期せぬ動作を招くことがある
0464nobodyさん
2009/11/25(水) 14:47:15ID:???0465nobodyさん
2009/11/25(水) 17:11:08ID:???Exporterを使う伝統的なライブラリも、
あれはあれでけっこう良いよね。
サザエさん的な良さがある気がする。
のんびり和むっていうか。
0466nobodyさん
2009/11/25(水) 21:40:04ID:???そもそもオブジェクト指向を理解してたら、あんなクソレスは付けられん
0467nobodyさん
2009/11/25(水) 21:50:52ID:???0468nobodyさん
2009/11/26(木) 15:00:47ID:???こういった物を作るにはどの言語を使うのが最適なのでしょうか?
ケースバイケースとか○○ならxxとか自分の知ってる言語が最強とか
よく分からないので、具体的な目的をあげました
もしかすると結論は「何でもいい」のかもしれませんが
□□ならこういった点が良いというのを教えて下さい
制作者
ttp://laggard.maxs.jp/ms_tactics.htm
稼働例
ttp://2ch.guda-guda.net/cgi-bin/mst/
0469nobodyさん
2009/11/26(木) 15:08:24ID:???スレ違い。
△▲ WebProg 初心者の質問 Part21 ▼▽
http://pc11.2ch.net/test/read.cgi/php/1257701535/
このあたりで聞いてくれ。
0471nobodyさん
2009/11/26(木) 18:01:55ID:???上記「Content-type」の頭文字は大文字じゃないとダメなんでしょうか?
0472nobodyさん
2009/11/26(木) 18:05:27ID:???0474nobodyさん
2009/12/02(水) 13:12:52ID:???オライリーの初めてのPerlはレベルが高いでしょうか?
お薦めの入門書があったらお願いします
0476nobodyさん
2009/12/04(金) 13:50:17ID:???C++、Python辺りがかけるならいきなりラクダに行って
大丈夫だと思う。perldoc公開されてるから軽く読んでみ。
0477nobodyさん
2009/12/05(土) 00:52:22ID:B4BYeir+ラクダ本から「すぐ分かるオブジェクト指向Perl」へ進むのが
現状ではベストだと思う
0478nobodyさん
2009/12/06(日) 08:28:13ID:???その間に「入門Git」とかも買ってプロジェクト管理にも
慣れておくといい。
0479nobodyさん
2009/12/06(日) 11:02:28ID:???0480nobodyさん
2009/12/15(火) 02:38:41ID:???そのまま記してもエラーは出なかったのですが、大丈夫なのか心配に。。。
0481nobodyさん
2009/12/15(火) 02:54:10ID:???ただ、ヒアドキュメントはソースが汚くなりやすいので、外部の HTML を読み込んで出力させたほうがいいかなと思う。
0482480
2009/12/15(火) 04:07:33ID:???そのままで大丈夫でしたか
ありがとうございました
外部から読み込むというのは、元ファイルで使用する変数も書いたhmtlを記述したファイルを作成して、
適当に変数に代入して分割、適所に読み込んではめ込む感じで良いんでしょうか?
(配布物をいじるだけという程度ですので的外れなことを言ってそうですが
0483nobodyさん
2009/12/15(火) 08:45:12ID:???テンプレートエンジンがいくつも開発されてる
0485nobodyさん
2009/12/18(金) 22:53:46ID:kWIKrWct$hoge[0]->{'age'} = 20;
$hoge[0]->{'tall'} = 165;
$hoge[1]->{'age'} = 18;
$hoge[1]->{'tall'} = 180;
$hoge[2]->{'age'} = 13;
$hoge[2]->{'tall'} = 170;
のとき、
{'tall'}が小さい順に
@hoge の中を$hoge[0],$hoge[2],$hoge[1]と並び替えたいとき、どうすればいいでしょうか。
初心者なので、言っている意味が分からなかったら、すいません。。。orz
よろしくお願いします。
0486nobodyさん
2009/12/18(金) 23:03:48ID:???0487nobodyさん
2009/12/18(金) 23:42:19ID:???助かりました。
0488485
2009/12/18(金) 23:43:08ID:???0489nobodyさん
2009/12/29(火) 07:31:09ID:???ディスクI/Oは時間を含めいろいろとリソースを食うので、
速度がクリティカルになる場面や頻繁にI/Oがある場面では
ヒアドキュメントの方が良い。
まあこれはHTMLのテンプレートみたいだから外部ファイルの方がいいだろうな。
1アクセス1ディスクアクセスは大した負荷じゃないし、テンプレートはファイルに
分けた方がモダン。
0490nobodyさん
2009/12/29(火) 21:37:25ID:???> 速度がクリティカルになる場面や頻繁にI/Oがある場面では
> ヒアドキュメントの方が良い
cache すればよくね
0491nobodyさん
2009/12/30(水) 01:00:40ID:MRCq7PuI0492nobodyさん
2009/12/31(木) 06:31:42ID:???0493nobodyさん
2009/12/31(木) 08:05:41ID:???短けりゃコード埋め込みでもいいと思うし(ファイルにするとかえって
可読性が落ちることがある)、何百行とかやたら長いのならファイルに
入れてそれこそキャッシュしてやればいいと思う。
0494nobodyさん
2009/12/31(木) 18:54:26ID:???CGIで、srandを使用せず(勝手に呼び出される物だけで)にrandを使用していた場合、
srandが呼び出されるのはいつになりますか?
複数ファイルに別れていて、複数のクライアントからアクセスした場合、いつ初期化が行われるかが知りたいのです。
宜しくお願いします。
0495nobodyさん
2009/12/31(木) 22:44:41ID:???0496nobodyさん
2009/12/31(木) 22:55:44ID:???よろしくおねがいします。
0497nobodyさん
2010/01/01(金) 17:23:01ID:???http://www.cpan.org/src/5.0/
まぁここらへんだろうねぇ
pp.c(2717): PP(pp_rand)
embed.h(1985): #define pp_rand Perl_pp_rand
embed.h(4027): #define pp_rand() Perl_pp_rand(aTHX)
opcode.h(858): MEMBER_TO_FPTR(Perl_pp_rand),
pp_proto.h(145): PERL_PPDEF(Perl_pp_rand)
0499nobodyさん
2010/01/01(金) 19:12:18ID:???PL_srand_calledをチェックして種を初期化するルーチンが入ってる
つまり最初にrandを呼んだ時点でsrandが呼ばれる
ではrandはいつ呼ばれるのか?
それはあんたにしか分からんよ
0500nobodyさん
2010/01/01(金) 21:35:42ID:???ありがとうございます。
ソース単位で最初に呼ばれた時に初期化されるようですね。
もう少し勉強してみようと思います。
0501nobodyさん
2010/01/03(日) 08:19:35ID:???srandは過去の遺物だから、今はrandは何も考えずに純粋に
擬似乱数発生器として使って問題ない。
つーかソースなんか読まなくても普通にperldoc -f randすりゃ
いいだけだと思うが。マニュアル読むよりソース読む方が速いとか
どんだけだよ。
0502nobodyさん
2010/01/03(日) 17:40:19ID:???0503nobodyさん
2010/01/04(月) 05:20:30ID:???テストスクリプト数回走らせればいいだけの話。
0504nobodyさん
2010/01/04(月) 15:37:53ID:???<input type="text" name="○○">
<input type="submit" value="送信">
</form>
このような形で文字列を違うページに送り、そのページに表示たいのですがどうしたらいいのでしょうか?
CGIとなるファイルの中身(?)と表示させる方法がいまいちわかりません。
0505nobodyさん
2010/01/04(月) 15:40:38ID:???0506nobodyさん
2010/01/04(月) 16:03:07ID:???0507nobodyさん
2010/01/04(月) 16:07:33ID:???とりあえず簡単な雛形を書いたので、それから細かい質問を受けるとしよう。
use CGI;
my $q = new CGI;
my $some_str = $q->param("○○");
print $q->header( -type => 'text/html', -charset => q{} );
print "<p>$some_str</p>";
0508nobodyさん
2010/01/04(月) 16:18:11ID:???すみません…
>>506さん
今まで携帯のレンタルスペースを使用していました。
(独自タグでフォームで送信した文字を受けとったりすることはできました。)
勉強する為にレンタルスペースを離れ、昨日サーバーを借りたんです。
借りたのはいいんですが独自タグに甘えていたせいなのかどうやって受け取っていいのかも全然わからない状態です。
0509nobodyさん
2010/01/04(月) 16:59:28ID:???0510nobodyさん
2010/01/04(月) 17:19:32ID:???HTMLテンプレートエンジンを紹介すればいいんでないかな?
それよりPHPでしたほうが楽?
0512nobodyさん
2010/01/04(月) 17:37:50ID:???use CGI;
my $q = new CGI;
my $some_str = $q->param("○○");
print $q->header( -type => 'text/html', -charset => q{} );
print "<p>$some_str</p>";
これにformで指定した値(○○)を○○に入れるんでしょうか?
PerlはHello Worldをコマンドプロンプトでできた位で書いてもらったのもほとんど理解できていません…
>>509さん
関係していないのでしょうか?
Perlを勉強したいと思い、レンタルスペースを離れたのもあるんですが…
formで送信するにはレンタルスペースでないとCGIが必要と聞いたのでここで質問させてもらったのですが…
とりあえず今はCGIのURLの部分にあたるCGIを作ってみたいと思っています。
0513nobodyさん
2010/01/04(月) 17:45:19ID:???ローカル(手元の)マシンでやればいいのよ・・・
0514nobodyさん
2010/01/04(月) 17:59:01ID:???>formで指定した値(○○)を○○に入れるんでしょうか?
そうです。
name="○○"の、"○○"に相当する部分です。
0515nobodyさん
2010/01/04(月) 17:59:11ID:???XAMPP(?)というのはApache(?)というものと同じで自分のパソコンをサーバー化するみたいなやつですか?
(私はActivePerlをインストールしてあり、Apache(?)はインストールしていない状態です)
サーバーを借りた目的は携帯サイトを作りたいのとPerlの勉強をしたかったからなんです…
0518nobodyさん
2010/01/04(月) 18:12:56ID:???ありがとうございます。そこは理解できました。
他のところがどのような意味をしているのか全くわからないのですが
コピーしてメモ帳で拡張子を.cgiで保存してサーバーにアップロードしてもいいのでしょうか?
>>516さん
それは携帯にも対応できますか…?
パソコンは2カ月前に購入したので正直わからないことだらけです…
>>517さん
ありがとうございます。
0520nobodyさん
2010/01/04(月) 18:20:35ID:???アップロードしてもいいけど、今後のことも考えて、自分のパソコンにWebサーバーを構築
しておいて、そこで試してうまくいってから本サーバーにアップするようにしたほうがいいよ。
0521nobodyさん
2010/01/04(月) 18:24:04ID:???0522nobodyさん
2010/01/04(月) 21:07:54ID:???ありがとうございます。
--
use CGI;
my $q = new CGI;
my $some_str = $q->param("○○");
print $q->header( -type => 'text/html', -charset => q{} );
print "<p>$some_str</p>";
--
name="○○"の"○○"を○○にいれてアップロードすれば動く(?)のでしょうか?
アップロードするのが心配です…
また送信した文字を表示するにはどのようにしたらいいのですか…?
送りたいのはURLの違うページなんですが…
0523nobodyさん
2010/01/04(月) 21:17:53ID:???それは送信した文字を表示するだけのスクリプトですので害はないです。
ただ、できれば自分のパソコンにWebサーバーを構築して試すことをお薦めします。
0524nobodyさん
2010/01/04(月) 21:41:05ID:???ありがとうございます。
ちょっとわからないのですがサーバーはロリポップです
use CGI;
my $q = new CGI;
my $some_str = $q->param("○○");
print $q->header( -type => 'text/html', -charset => q{} );
print "<p>$some_str</p>";
○○以外にいじる必要があるところはあるのでしょうか?
○○の部分をname="○○"と同じにしてtest.cgiで保存、アップロードしてみたところ
test.cgi.txt となってしましました…
from側もCGIのURLというところにURLをいれて文字を入れて送信しても
「※CGI もしくは SSI が正しく動作していません。」とでてしまいます…
0525nobodyさん
2010/01/04(月) 21:43:03ID:???○ test.cgi.txt となってしまいました…
です
0526nobodyさん
2010/01/04(月) 21:52:38ID:???後ろの.txtを消してください。
パーミッションを700(rwx------)にしくてください。
パーミッションについて / ホームページ / マニュアル - ロリポップ!
http://lolipop.jp/manual/hp/permission/
0527nobodyさん
2010/01/04(月) 21:55:28ID:???勉強したいんだったら、何か入門用の読み物見ながらゆっくりいろいろ遊んでみたらどう?
今まで使ってた独自タグとかいうのと同じことをしたいだけなら
<?php echo htmlspecialchars($_GET['hoge']) ?> こんな感じのを埋め込むほうが楽だと思う。
0528nobodyさん
2010/01/04(月) 22:01:17ID:???そうだね。
先頭行に、これを付け加えてください。
#!/usr/bin/perl
use CGI;
my $q = new CGI;
my $some_str = $q->param("○○");
print $q->header( -type => 'text/html', -charset => q{} );
print "<p>$some_str</p>";
0529nobodyさん
2010/01/04(月) 22:01:57ID:???何度も何度も申し訳ないです、本当にありがとうございます。
.txtは消しました。
パーミッションというのはどこにある(?)のでしょうか…?
/usr/local/bin/perl もしくは /usr/bin/perl
これは関係ないのですか?
0530nobodyさん
2010/01/04(月) 22:03:50ID:???0532nobodyさん
2010/01/04(月) 22:06:27ID:???>>528のように先頭行に書いてください。
パーミッションの設定方法は、>>526のURLを見てください。
0533nobodyさん
2010/01/04(月) 22:09:00ID:???単純なことなら問題ないのだろうけど
0534nobodyさん
2010/01/04(月) 22:24:36ID:???<html>
<head>
<body>
<form action="http://○○.△△/test.cgi" method="post">
<input type="text" name="id">
<input type="submit" value="送信">
</form>
</body>
</head>
</html>
--
cgiファイルが
#!/usr/bin/perl 700(rwx------)
use CGI;
my $q = new CGI;
my $some_str = $q->param("id");
print $q->header( -type => 'text/html', -charset => q{} );
print "<p>$some_str</p>";
こうなっているんですが、これでいいのでしょうか…?
間違っている場所があれば教えてください。
皆さん本当にありがとうございます。
0535nobodyさん
2010/01/04(月) 22:29:40ID:???明日近くの本屋さんに行ってPerlの本を見てきたいと思います。
Perlを最初にやるとPHPはわかりやすいと聞いたので
Perlから勉強しようと思ったのですがPHPを最初に勉強することも考えてみます。
0536nobodyさん
2010/01/04(月) 22:30:45ID:???0537nobodyさん
2010/01/04(月) 22:32:10ID:???ここ↓は、
#!/usr/bin/perl 700(rwx------)
こう↓です。
#!/usr/bin/perl
パーミッションは通常、FTPソフトで設定します。
>>526のURLのパーミッションの設定方法を見て設定してください。
0538nobodyさん
2010/01/04(月) 22:59:36ID:???ありがとうございます。
おかげでformで送信したものを.cgiファイルのほうに表示することができました。
0539nobodyさん
2010/01/04(月) 23:02:35ID:???0541nobodyさん
2010/01/04(月) 23:42:56ID:???0543nobodyさん
2010/01/05(火) 17:14:37ID:???ただの喩えだからPerl6がどうとか関係ないと思うが。
昔はこういう質問で溢れてたよなあ。フォーム作れなくて困ってるとか
久しぶりに見たわ。
XSSとかCSRFとかにも一応気をつけろよ(CSRF対策とかできなさげな気がするが)
0545nobodyさん
2010/01/05(火) 17:30:49ID:???まあ、実際にはリファラ見れば大抵のCSRFは防げるわけだが、
http://〜からマッチかけると可搬性がなくなるし、かといってファイル名部分で
マッチをかけると罠サイトも同じにしてくる可能性もある。
リファラに送らないUAに対応しようとすると非直リンでCSRFの穴があく、
などであまり対策にならない。
GET->POSTもしないよりはマシだが、そもそも悪意のサイトだったりXSSされてれば簡単に穴空くしな。
0546nobodyさん
2010/01/05(火) 23:08:06ID:???今日、近くにある本屋をいろいろ見てまわってきました。
「10日でおぼえる Perl/CGI 入門教室 第2版」という本しかなかったのでそれを購入しました。
いろいろ読んで勉強してみたいと思います。
昨日は本当にありがとうございました。
0547nobodyさん
2010/01/06(水) 05:58:47ID:???一番買ってはいけない類の本を買ったな・・・。
普通にらくだ・りゃま本とCatalystのマニュアルでよかったのに。
0548nobodyさん
2010/01/06(水) 06:25:15ID:???それで一応ソース読み書きできる程度になって、
その後はネット上なりリャマなりでいろいろ学んだり実践していけば、
そのうち最初に買った本の内容にツッコミ入れながら読めるようになるだろ。
■ このスレッドは過去ログ倉庫に格納されています