[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 2chのread.cgiへ]
Update time : 06/02 01:51 / Filesize : 211 KB / Number-of Response : 664
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Perlコーディング初心者質問スレ Part 63



1 名前:nobodyさん mailto:sage [2011/09/09(金) 18:11:49.71 ID:???]
Perlのコーディングで困ってる人のスレです。

【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。

1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。

最低でも1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。

お勧めサイトは >>2 以降

前スレ hibari.2ch.net/test/read.cgi/php/1295170172/

274 名前:nobodyさん mailto:sage [2011/11/01(火) 15:36:36.16 ID:???]
>>273
$b = { map { $_ => "$a->{$_}[0]-$a->{$_}[1]" } keys %$a };
# or
$b = { map { $_ => join '-', @{ $a->{$_} }[0,1] } keys %$a };

275 名前:nobodyさん mailto:sage [2011/11/01(火) 15:59:53.49 ID:???]
>>273
my $b = { map ref $_ ? join('-', @$_) : $_, %$a };
my $b; %$b = map ref $_ ? "$_->[0]-$_->[1]" : $_, %$a;

276 名前:273 mailto:sage [2011/11/01(火) 16:40:41.18 ID:???]
>>274,275

解決しました。
回答が早くて助かりました。
ありがとうございます。

277 名前:nobodyさん mailto:sage [2011/11/01(火) 17:31:41.93 ID:???]
サンプルとはいえ$aと$bは安易に使わないほうがいいぞ

278 名前:273 mailto:sage [2011/11/01(火) 17:56:13.77 ID:???]
use HTML::Template について質問です。
テンプレートファイル内で、「html出力させないコメント」というのは書けないのでしょうか?
例えば下記の#の行はoutputで出力させないといった動作をさせたいです。
もしできないのであれば、使用されている皆さんはコメントを書きたい時、<!-- -->で対応しているのでしょうか?

<html>
<head>
<title>hoge</title>
</head>
<body>
fuga<br>
#コメントを書きたい
</body>
</html>

279 名前:nobodyさん mailto:sage [2011/11/02(水) 04:52:21.99 ID:???]
>>278
無かったはず。

ただし、new()の際にfilterを設定することで、前処理を行うことが出来る。
これを利用して、特定の文字列を置き換える(削除する)ことは可能。
詳細はドキュメントを参照されたい。

HTML::Templateは痒いところに届かないというか、痒み?何それ? って作り方だからなあ。
非PGのデザイナーにテンプレートファイル作りを任せるなら、これくらいじゃないと使ってくれなかったりするがw


280 名前:nobodyさん mailto:sage [2011/11/02(水) 07:58:44.36 ID:???]
>>276
案の定Wikipediaの丸暗記か

281 名前:nobodyさん mailto:sage [2011/11/02(水) 10:15:20.86 ID:???]
>>280
君はまた見えない敵を作って、勝手に戦うのかい?

282 名前:デフォルトの名無しさん mailto:sage [2011/11/03(木) 03:59:56.91 ID:???]
>>280

おみそれいたしました。
丸暗記だと応用が効かなくて行き詰ってしまうことが多いです。



283 名前:nobodyさん mailto:sage [2011/11/03(木) 20:45:59.15 ID:???]
↓こちらのスレで誘導されてこの板に来ました。

Perlについての質問箱 49箱目
hibari.2ch.net/test/read.cgi/tech/1319953460/100-102n

Windows 2000、Activeperl 5.8 の環境で、
use Socket;
socket(・・・);
connect(・・・);
な感じでインターネット上のwebサイトからページを取得してるんだけど、
サイトの応答が遅いとき、応答が帰ってくるまでCPU負荷が100%近くになる。

これってどういった原因が考えられますか?
あるいは仕様でしょうか。
PCのスペックはWin2000を使っているというあたりで想像いただける通りかなりしょぼいですが、それにしても負荷高すぎかな、と。

Activeperlのバージョン上げれば直るのかな…

284 名前:nobodyさん mailto:sage [2011/11/03(木) 22:20:35.11 ID:???]
パソコンを変えることができないなら、LANカードを取り替えるか
あるいは追加して、それを使うようにして対処。
今使っているLANカード+ドライバが割込みに対応した作りではない
のでCPU負荷が100%近くになっている。

285 名前:nobodyさん mailto:sage [2011/11/03(木) 22:28:37.56 ID:???]
>>PCのスペックはWin2000を使っているというあたりで想像いただける通りかなりしょぼいですが
端折るな


ちなみに Pentium3 1GHz、ActivePerl 5.12 のうちの環境は sleep 使うと CPU 占有率が 80-90% とかになる。


286 名前:nobodyさん mailto:sage [2011/11/03(木) 22:52:53.96 ID:???]
>>284
LANカードの問題ですか。
ノートだから交換や追加は難しいですね…
>>285
すみません。
Pen4M1.8G(但し1.2G動作)です。

ありがとうございました。

287 名前:285 mailto:sage [2011/11/03(木) 23:57:43.11 ID:???]
NetBurst か。
デスクトップの Pentium4 ですら同じくロックまで落とすと Pentium3 に負けるからなぁ・・・
ただそれ以外の部分 (チップセットとかね) は Pentium3 世代よりも上だから、CPU はボトルネックとは考えられないか。

古いノートだったら 10Base-T とかの可能性も否定できないよね。

あとアンチウイルスとかスパイウェア関連は外すのも手。
TCP/IP の入出力を監視してたりするので負荷が掛かるのは当たり前だから。

定期的にスクレイピングのために Perl スクリプト走らせてるんだけど、
今見たら 60-80% の CPU 占有率だった。


これ以上はハードとか OS の問題になってきそうなのでスレ違いどころか板違いすらにもなってくるかな?w
その前に色々書いておく。

特に大事なデータが無ければ OS 再セットアップして、アンチウイルスとかスパイウェア関連は入れない。

もし直らなければ、ノートの製造が AOpen や Acer などの安かろう悪かろう的なメーカーでないか確認。
なおかつ使用チップセットが Intel 以外だった場合は遅いのはハードウェアが原因と見て良いかと。

上記以外のメーカーで Intel チップセットの場合は >>284 が書いたとおり LAN カードが怪しいかも?
USB の LAN もあるけど、そもそも負荷が高いので使っちゃだめ。 32bit CardBus が付いてるならその LAN カードを。

これでも駄目なら投げ捨てる。

288 名前:nobodyさん mailto:sage [2011/11/04(金) 00:21:01.33 ID:???]
CD起動のLinuxで同じスクリプトを実行してハードの問題かどうかを切り分けてみる。

289 名前:283 mailto:sage [2011/11/04(金) 08:21:22.37 ID:???]
>>287
ハードやOSの問題だと板違いですね。
ただ、ブラウザでアクセスしている場合にはそういった問題は発生しないのでperl側の問題という線も捨てきれないのかな、と。

ちなみに、常駐系のソフトは全て停止しても状態は同じでした。
とりあえず、まずはLANカードの線で、何か試す方法がないか検討してみます。

>>288
ちょっとハードルが高いですね。
Linixの知識は全くないので、そこにたどり着くまでの時間が取れそうにないです。

改めてありがとうございました。

290 名前:278 mailto:sage [2011/11/04(金) 11:25:15.47 ID:???]
>>279
最初に任意のルーチンの割り込みができるんですね。
いまバタバタしてるので時間が空いたらじっくり調べてみます。
ありがとうございました。

291 名前:nobodyさん mailto:sage [2011/11/05(土) 11:43:23.98 ID:???]
>>289
BIOSのIRQの設定も板違いですね。
そうだとするとLANカードを変えても同じことになりそうなので。

292 名前:nobodyさん mailto:sage [2011/11/06(日) 08:06:31.58 ID:???]
$test . '_aiueo'

こうゆう文字列でマッチさせようとしたときに、何も考えずに書けば

/$test_aiueo/

だけど、これじゃ $test_aiueo っていう変数は無いからエラーになるわけで、
$test という変数の直後に半角英数でマッチさせるにはどうすれば良いのでしょうか?




293 名前:nobodyさん mailto:sage [2011/11/06(日) 08:12:06.72 ID:???]
すんません解決しました。

/${test}_aiueo/

こうゆう書き方できるんですね。
$hash={} を %{$hash} とか普段から使ってるクセに、なんですぐに書けなかったんだろう。。。


294 名前:nobodyさん mailto:sage [2011/11/06(日) 10:03:01.99 ID:???]
こういう

295 名前:nobodyさん mailto:sage [2011/11/06(日) 12:03:43.66 ID:???]
作ったスクリプトのどこの部分が処理に時間が掛かってるのか知りたいです。

処理ごとにデバッグプリントすれば可能ですが、非現実的だし、
後々デバッグプリントを消すのも手間なので、Perlでどこの部分で
時間が掛かってるとかのデバッグというか、トレースというか、
そういう事は出来るモジュールなどはあるのでしょうか?



296 名前:nobodyさん mailto:sage [2011/11/06(日) 12:30:01.91 ID:???]
>>295
perldoc.jp/docs/perl/5.10.1/perlfaq3.pod#How32do32I32profile32my32Perl32programs63

297 名前:nobodyさん mailto:sage [2011/11/07(月) 11:15:35.01 ID:???]
>>296
ありがとうございます。


#!/usr/bin/perl -d
use Devel::DProf;

で tmon.out を吐かせた後に dprofpp で得たいデータが取れました。


298 名前:278 mailto:sage [2011/11/07(月) 14:03:34.80 ID:???]
以前html::templateで質問したものです。
>>278の件は解決できました。
ありがとうございました。

もう一つ質問があります。
TMPL_INCLUDEのパスをcgi上でコントロールしたいのですが、下記のようなテンプレートはNGとなっています。

<TMPL_INCLUDE NAME="<TMPL_VAR NAME=incPath>">

そこでfilterを使って表現しようと思うのですが、どのようにすればよいでしょうか?
※cgi内の変数がfilter内のサブルーチンでそのまま使用できるのは確認できています。

my $incPath = './tmpl/inc.tmpl';
my $template = HTML::Template->new(
filename => './aaa.tmpl',
filter => sub{
my $ref = shift;
$ref =~ s/(\$[a-zA-Z0-9_]+)/eval($1)/g; #←ここの置換後の表現が思いつかないのでやりたいことのイメージを書いています。
},
);

--- template ---
<TMPL_INCLUDE NAME="$incPath">

299 名前:298 mailto:sage [2011/11/07(月) 17:02:01.60 ID:???]
>TMPL_INCLUDEのパスをcgi上でコントロールしたいのですが、

すみません。この一文はわかりづらいですね。
この文は無視してください。

300 名前:nobodyさん mailto:sage [2011/11/08(火) 02:25:10.62 ID:???]
>>298
コメント削除の件は解決して何より。

インクルードファイルを動的に制御するなら、素直に<TMPL_IF>や<TMPL_UNLESS>で分岐させるのが良いのでは。
もしくは、CGI側で別途に読み込んで、<TMPL_VAR>で吐き出すか。

インクルードファフィルのルートディレクトリを指定するだけなら、
new()の時に path を指定することでコントロールできるっぽい。


【余談】
HTML::Templateは条件分岐がマトモに書けないから、可能なら拡張モジュールの利用も考えてみて。
自分は使ったことがないんだけど
search.cpan.org/~samtregar/HTML-Template-Expr-0.07/Expr.pm
とかどうだろうか


301 名前:298 mailto:sage [2011/11/09(水) 16:21:33.08 ID:???]
>>300
もしかして279の方ですかね?
またまたご意見ありがとうございます。

色々試行錯誤しましたが、今回はfilterに下記のようにして対応することにしました。
$replace_ref = {
HENSUU => 'hogehoge',
};

filter{
$ref = shift;
$$ref =~ s|\[\#.*?\#\]||gxms; # [# 〜 #]までをコメント
$$ref =~ s|\[\%\s+([a-zA-Z0-9_]+)\s+\%\]|$replace_ref->{$1}|gxms; # [% 〜 %]を置き換え
}

----- html -----(どんなフォーマットがHTMLに影響ないかわからなかったので変数置き換えはtemplate-toolkitを参考)
<html><body>
[# コメント #]
変数=[% HENSUU %]
</body></html>
---------------

HTML::Template::Exprいいですね。
HTML::Template::Proにも取り込まれてるんで、高速化したい時には置き換えが簡単そう。
HTML::TemplateはIF文が貧弱すぎる。

302 名前:nobodyさん mailto:sage [2011/11/15(火) 20:21:14.83 ID:???]
パターンマッチについてなのですが、

-------------------
<span class="availGreen">在庫あり。</span> <a href="/gp/help/customer/display.html?&nodeId=915624">
在庫状況</a>について<br /> この商品は、<b><a href="/gp/help/customer/display.html?ie=UTF8&nodeId=64
3004">Amazon.co.jp</a></b> が販売、発送します。 ギフトラッピングを利用できます。
-------------------
この文字列(実際には改行は入っていない)から、「Amazon.co.jp」(他の店名になることもある))の部分だけを取り出す為に

if ( $_ =~ />(.*?)<\/a><\/b> が販売/ ) {print $1;}
とすると、
-------------------
在庫あり。</span> <a href="/gp/help/customer/display.html?&nodeId=915624">
在庫状況</a>について<br /> この商品は、<b><a href="/gp/help/customer/display.html?ie=UTF8&nodeId=64
3004">Amazon.co.jp
-------------------
までが拾われてしまいます。

if ( $_ =~ /この商品は、<b><.*?>(.*?)<\/a><\/b> が販売/ ) {print $1;}
とすることにより、目的は達成できたのですが、何故最初のがダメなのかが良くわかりません。

なお、直前の「643004」の部分は場合によって変わるのでキーワードには出来ません。



303 名前:nobodyさん mailto:sage [2011/11/15(火) 20:47:48.16 ID:???]
何故って…
.*?にはタグ(<.*?>)を含まないなんてルールはないし

304 名前:nobodyさん mailto:sage [2011/11/15(火) 21:30:08.07 ID:???]
最小マッチの「最小」の意味を勘違いしてるパターンと予想。
.*? か .* かで影響されるのは "</a></b> が販売" の部分の探し方であって、
マッチすること自体が確定したら最初の ">" の位置は動かない。

関係ないが、この手の情報取得は可能ならまずAPIを検討すべき。
泥臭くスクレイピングするとしても、よほど高速性を重視するとかでなければ
正規表現じゃなくてTreeBuilderとかでDOMをパーズするほうが安全。

305 名前:nobodyさん mailto:sage [2011/11/16(水) 00:15:29.63 ID:???]
>>304
ありがとう。
最初の「>」で拾ってしまうんですね。

高速性の必要なものではなく、いくつかの商品の価格変化をログ取ってるだけなので、
API利用するところまでは考えてません。手続きめんどいので。

306 名前:nobodyさん mailto:sage [2011/11/16(水) 06:46:36.29 ID:???]
>>305
拾いたい箇所が1ファイルに1箇所くらいで構造も単純ならパターンマッチングの方が
手っ取り早いよね。
でも構造が繰り返しだったりややこしかったりする時はWeb::Scraperとか便利よ。

>>304
パーズ? パース? ← parse

307 名前:nobodyさん mailto:sage [2011/11/16(水) 07:50:11.05 ID:???]
考えるの面倒だからという理由で、モジュールに丸投げする底辺でゴメンナサイ

308 名前:nobodyさん mailto:sage [2011/11/16(水) 09:59:12.27 ID:???]
そのためのモジュールでしょ 無問題

309 名前:304 mailto:sage [2011/11/16(水) 10:04:04.24 ID:???]
ありゃ。smooth(ズ)→スムース みたいなもんで英語では parz って発音するものだと思い込んでたからそれに合わせてたわ。
調べてみたらイギリス英語系の辞書だとパーズだけど、アメリカ英語でパースが一般的みたいだからそっちのほうがいいや。サンクス

310 名前:nobodyさん mailto:sage [2011/11/16(水) 16:16:46.49 ID:???]
>>309
>イギリス英語

へー。良いことを知った。

311 名前:nobodyさん mailto:sage [2011/11/16(水) 16:34:39.13 ID:???]
本当だ。
2つ発音されるね。

parseの意味 - 英和辞書 - goo辞書
dictionary.goo.ne.jp/leaf/ej3/61513/m0u/parse/

312 名前:nobodyさん mailto:sage [2011/11/16(水) 16:52:26.25 ID:???]
そうか。どっちもありなんだ。
勉強になったぜ。



313 名前:nobodyさん mailto:sage [2011/11/16(水) 23:26:19.41 ID:???]
テキストファイルから3行だけほしいときって、1行で記述することってできますか?

今は for で回して push してるんだけど、
@lines = <$fh> x 3;
みたいな感じで書けたら落ですよね。。。

314 名前:nobodyさん mailto:sage [2011/11/17(木) 00:05:31.82 ID:???]
>>313
#!/usr/bin/perl -w
use strict;
my @line = (scalar <DATA>, scalar <DATA>, scalar <DATA>); # 幾つ?
print @line, "---\n"; seek DATA, -12, 1; @line = ();

@line = map scalar <DATA>, 0..2; # 0から2とは?
print @line, "---\n"; seek DATA, -12, 1; @line = ();

push @line, scalar <DATA> while @line < 3; # 意図が分かりやすい
print @line;

__DATA__
foo
bar
baz
quux

315 名前:nobodyさん mailto:sage [2011/11/17(木) 00:27:12.12 ID:???]
やっぱ、なんかしらで回すしか無いですよね。
ありがとうございました。

316 名前:nobodyさん mailto:sage [2011/11/17(木) 00:48:38.68 ID:???]
>>315
ループを避ける事自体が至上命令ならば >>314 の1番目か
$/ = \64; # 充分なサイズのバッファ
my @line = <DATA> =~ /^(.*\n)(.*\n)(.*(?:\n|\z))/;

317 名前:nobodyさん mailto:sage [2011/11/17(木) 00:53:27.15 ID:???]
@line = (<DATA>)[0..2];

318 名前:nobodyさん mailto:sage [2011/11/17(木) 09:42:10.49 ID:???]
至上主義ってわけじゃないんだけど、ループの中で特に処理をするわけじゃないから
1行で簡潔にできたら嬉しいよね〜

っていう程度です。


319 名前:nobodyさん mailto:sage [2011/11/18(金) 00:09:48.76 ID:???]
ループを決して書こうとしない部下を思い出した。
そいつは自分自身がループして同じ内容を必要な行数分タイプしてたっけ。

320 名前:nobodyさん mailto:sage [2011/11/18(金) 09:22:43.24 ID:???]
8bit機の時代はループの条件判定のタイムロスを惜しんで
ループ展開とかやったっけな。アセンブラで。

321 名前:nobodyさん mailto:sage [2011/11/18(金) 10:21:10.82 ID:???]
ループではないけど、100程度のif文を自動生成するプログラムなら見たことがある…

322 名前:nobodyさん [2011/11/18(金) 21:40:15.63 ID:1hunDax1]
入門書を読んでて気になったのですが
ダブルクォート文字列で使われるエスケープシーケンスと
マッチ演算子の中の正規表現で使われるエスケープシーケンスは
よく使われる改行文字(\n)やタブ(\t)などが両方にあるので
厳密に言えば違うけれども、大体同じものと理解していいのでしょうか?

それとも全く違う、あるいは全く同じものなのでしょうか?



323 名前:nobodyさん mailto:sage [2011/11/18(金) 21:56:27.18 ID:???]
覚えることが少なくなるように同じ記法を採用しているだけで、
それを解釈するコードは文字列と正規表現では別物だと考えて
ください。

324 名前:デフォルトの名無しさん mailto:sage [2011/11/19(土) 13:39:08.87 ID:???]
全く同じであれば、本の記述は1回のはず。
別物だから区別して書いてあって、本に2回出てくる。

でも覚えやすいように同じ記法にしている。

325 名前:nobodyさん mailto:sage [2011/11/23(水) 23:35:55.57 ID:???]
やっと規制がとけました

>>323-324
ありがとうございます

326 名前:nobodyさん mailto:sage [2011/11/26(土) 22:25:41.09 ID:???]
CGIに値を渡したいときの方法で質問です。

@ttp://example.com/index.cgi/1/2/

と、PATH_INFOで渡すのと

Attp://example.com/?a=1&b=2

と、.htaccessに「DirectoryIndex index.cgi」を書いてPOST風?(呼び方がわからない)で取得する方法があると思いますが、
みなさんどちらを使っていますか?
どちらを使おうか悩んでいます。
(最初、index.cgiを消してPATH_INFOで渡せればすっきりするなと思いましたが、それだとttp://example.com/1/2/となって
index.cgiを読ませる場所とPATH_INFOの切り分けができないと気づいて今に至っています)

個人の好みになるかもしれませんが、こっちをこんな理由で使っているという感想などいただけたら参考にしたいと思います。
ちなみにformタグではGETを使用しています。

327 名前:nobodyさん mailto:sage [2011/11/26(土) 22:49:02.08 ID:???]
>>326
txqz.net/blog/2007/06/16/1641

328 名前:nobodyさん [2011/11/26(土) 23:38:20.62 ID:zFlJhwY9]
system()で外部コマンドを呼び出すと呼び出しは行われるのですが、そのあとの処理に進まずに
Internal errorになってしまいます。なにか呼び出し方があるのでしょうか

system '/bin/ls', "-la";
print "Location: index.html\n\n";


329 名前:nobodyさん mailto:sage [2011/11/26(土) 23:51:55.90 ID:???]
そのスクリプトを手元で実行したことはあるかい?

330 名前:nobodyさん mailto:sage [2011/11/27(日) 00:07:55.85 ID:???]
CGIで動かしてるんだったらHTTPサーバのログにエラー内容が記録されてるんじゃないか?

331 名前:nobodyさん [2011/11/27(日) 00:56:06.95 ID:E4v1+esL]
malformed header from script. Bad header=total 68: test.cgi, referer: redhat6/test.html
とか出てます。Systemを実行しなければこのメッセージは出ないです。


332 名前:nobodyさん mailto:sage [2011/11/27(日) 01:07:18.85 ID:???]
>malformed header
だからヘッダがどうなってるか見ろ



333 名前:nobodyさん [2011/11/27(日) 01:44:44.18 ID:E4v1+esL]
ls -la とか バイナリの実行ファイルとかですが、、、

334 名前:nobodyさん mailto:sage [2011/11/27(日) 02:47:47.23 ID:???]
うーん…
真っ先に HTTP ヘッダがなければCGIとして機能しないでしょ。
エラーになるのは当たり前。
でもって Location: で飛ばしてるんだから system '/bin/ls', '-la'; は全く意味がない。
仮に print "Location: index.html\n\n"; の次に置いても無視されるだけ。
そのCGIの目的(用途)は何なの?

335 名前:nobodyさん mailto:sage [2011/11/27(日) 03:52:11.45 ID:???]
ん? Location: 〜 を print しようがスクリプト自体は最後まで走るでしょ?
問題は system の出力先が標準出力、つまり普通に print するのと同じところに行ってるせいで、
スクリプトからサーバーへ渡される出力が

total 8
drwxr-xr-x 2 nobody nogroup 4096 Nov 27 00:00 ./
drwxr-xr-x 3 nobody nogroup 4096 Nov 27 00:00 ../
Location: index.html

みたいになってて、
サーバーとしては改行2つより前の部分は HTTP ヘッダとして解釈しなきゃいけない、
でも Location 以外の行は正しい HTTP ヘッダではない。
だからそこで内部エラーとして止めてる、ってことでは?
CGI 試す環境ないんで推測だけど。

336 名前:nobodyさん mailto:sage [2011/11/27(日) 04:36:05.90 ID:???]
>>335
だからそう書いてるだろ。

337 名前:nobodyさん mailto:sage [2011/11/27(日) 23:08:22.74 ID:???]
>>332
「ヘッダ」が分からないので見ろといわれてる対象が分かっていない
に一票。

つまり
print "Location: index.html\n\n";
は、理解して書いているのではなく、他のプログラムのコピペ。

338 名前:nobodyさん mailto:sage [2011/11/27(日) 23:27:05.03 ID:???]
print "Location: index.html\n\n"; の前に system を置いちゃうくらいだからそうなんだろうな。

339 名前:nobodyさん mailto:sage [2011/11/28(月) 01:55:16.13 ID:???]
ここまで答えのようなヒントが出てれば、あとは大丈夫でしょう。きっと・・・

340 名前:326 mailto:sage [2011/11/28(月) 15:55:21.96 ID:???]
>>327

ありがとうございます。
作成中のものはエントリのページなのでPATH_INFOで渡したいと思います。

この場合、URLからindex.cgiを消して尚且つPATH_INFOを取得するには
どのようにしたら良いのでしょうか?

ttp://example.com/index.cgi/1/2/

ttp://example.com/1/2/
にして、index.cgiを実行し、PATH_INFOから"/1/2/"取得したい

341 名前:326 mailto:sage [2011/11/28(月) 16:21:49.46 ID:???]
>>340
を実現するためググってみました。

ttp://hatsugen.zakzak.co.jp/qa6717936.html

↑ここの「ANo.3」で下記のように書かれていました。


たとえば、httP://hoge.com/A/B というURLをブラウザに与えると、ブラウザはHTTPサーバー(hoge.com)に対して、/A/Bという
ファイルを送れと要求します。
サーバーはこれを探しますが、Bというファイルがなければ、それをディレクトリとみなして/A/B/として/A/B/を探します。
それが存在していれば開いてみます。
 httpd.confや.httaccessで下のように指定してあれば、
<IfModule dir_module>
  DirectoryIndex index.html index.htm index.cgi index.sh
</IfModule>
 前から順番にファイルを探して表示します。いずれもなければ、またこれも設定にしたがってディレクトリ内のファイル一覧を表示するか、
エラーを返すか、その指定もなければ/B/を切り捨てて環境変数に格納し、/Aについて同様な処理を繰り返します。


つづく

342 名前:326 mailto:sage [2011/11/28(月) 16:23:22.87 ID:???]
つづき

そこで下記を行いました。

@ttp://example.com/ の階層にindex.cgiと下記一行を書いた.htaccessを置きました。
DirectoryIndex index.cgi

Attp://example.com/で、ttp://example.com/index.cgiにアクセスしたことを確認しました。

Bttp://example.com/a/にアクセスするとエラーになりました。

ttp://example.com/a/というディレクトリは存在していないので、
一つ上がったttp://example.com/のindex.cgiを探しに行くのではないかと思うのですが
何か間違えているのでしょうか?
どこをどうすればできるようになるのか教えてください。



343 名前:nobodyさん mailto:sage [2011/11/28(月) 16:28:04.90 ID:???]
>>340-342
>>1
Apache〜嗜みとして〜 Part3
hibari.2ch.net/test/read.cgi/php/1043851302/
【Apache】mod_rewriteについて語るスレ
hibari.2ch.net/test/read.cgi/php/1023791370/

344 名前:342 mailto:sage [2011/11/28(月) 23:12:53.78 ID:???]
>>343
ここまでいくとCGIとは関係なくなってきますね。
誘導ありがとうございます。

質問は取り消します。

345 名前:nobodyさん [2011/11/30(水) 10:29:57.17 ID:gvpuZTLB]
以前、Perlのマニュアル(リファレンスドキュメント)をダウンロードしたことがあったのですが、
今行ったら見つかりませんでした
どのページの、どの部分からダウンロードにいけるのでしょうか?

また、以前ダウンロードした時はは内容が英語でした
出来れば日本語版があればそちらをダウンロードしたいのですが、どこか内でしょうか?

346 名前:nobodyさん mailto:sage [2011/11/30(水) 10:51:48.72 ID:???]
perldoc.jp

347 名前:nobodyさん mailto:sage [2011/11/30(水) 21:09:58.63 ID:???]
Markdown.plの出力結果にhtml, head, bodyなどの要素を加えたいんですが
そういうオプションとかってデフォルトの機能にはないですよね?

出力されたhtmlファイルを開く→先頭に書き足す→末尾に書き足す→上書き保存
という処理をするスクリプトを書くということ以上の解決策ってないですよね?

348 名前:nobodyさん mailto:sage [2011/11/30(水) 23:31:46.18 ID:???]
中間ファイル作らなくっても
先頭を書き出す→markdown.plを呼び出して結果を書き出す→末尾を書き出す→保存
でいいんじゃね?

349 名前:nobodyさん mailto:sage [2011/12/03(土) 17:25:31.47 ID:???]
>>347
>上書き保存という処理をするスクリプトを書くということ以上の解決策

何をもって上/下と言っているのか分からんが、Markdown.pl に書き足す
方法はなぜ思い浮かばないのか。

350 名前:nobodyさん mailto:sage [2011/12/03(土) 19:26:36.05 ID:???]
>>349
まあMarkdown.plはいじらないでそのまま使う方が自然だろう。
やるとしたら別名にリネーム(コピー)してから自分専用にカスタマイズ、かな。

ついでに350ゲト

351 名前:nobodyさん mailto:sage [2011/12/04(日) 11:44:58.71 ID:???]
>>347
作者に要望を出す。これ最強。たぶんやってくれる。

352 名前:nobodyさん mailto:sage [2011/12/05(月) 11:39:58.61 ID:???]
GoogleAnalyticsのモバイル版perlコードについて質問です。
下記の@の所って$ENV{'HTTP_REFERER'}が空だったら$refererはundefになりますよね?
ということはAの $referer eq "" でワーニングになるから、
修正したほうがいいですよね??

if ($referer eq "") { #→ ×
if (defined($referer) && $referer eq "") { #→ ○

#####################################################
# Copyright 2009 Google Inc. All Rights Reserved.
use URI::Escape;
use constant GA_ACCOUNT => 'MO-1887809-14';
use constant GA_PIXEL => '/ga.pl';

sub google_analytics_get_image_url {
my $url = '';
$url .= GA_PIXEL . '?';
$url .= 'utmac=' . GA_ACCOUNT;
$url .= '&utmn=' . int(rand(0x7fffffff));
my $referer = $ENV{'HTTP_REFERER'}; #@
my $query = $ENV{'QUERY_STRING'};
my $path = $ENV{'REQUEST_URI'};
if ($referer eq "") { #A
$referer = '-';
}
$url .= '&utmr=' . uri_escape($referer);
$url .= '&utmp=' . uri_escape($path);
$url .= '&guid=ON';
$url =~ s/&/&/g;
$url;
}



353 名前:nobodyさん mailto:sage [2011/12/05(月) 13:46:44.74 ID:???]
しっかりと書くなら
my $referer = exists $ENV{'HTTP_REFERER'} ? $ENV{'HTTP_REFERER'} : '-';
Referer: 0 は明らかに無効だから単に
my $referer = $ENV{'HTTP_REFERER'} || '-';

あと、uri_escape()でやるならURIつかったら
sub {
my $uri = URI->new(GA_PIXEL);
$uri->query_form(
'utmac' => GA_ACCOUNT,
'utmr' => $ENV{'HTTP_REFERER'} || '-',
...
);
return $uri;
}

354 名前:352 mailto:sage [2011/12/05(月) 15:34:16.27 ID:???]
>>353

my $referer = $ENV{'HTTP_REFERER'} || '-';

が自分にはしっくりきました。
ありがとうございます。
よくみたら $query は使ってないですね。
よくみてたら何か色々おかしなコードだ。

とりあえず感謝です。

355 名前:Web初級 [2011/12/08(木) 16:43:00.58 ID:bceXKvCi]
超初心者です。仕事でホームページ1つ作る事に成りました。
職場では私しかDTPの経験がありません(Webかじったのも私一人)。
イラストレーターからドリームウエバーへ、やっと持って来れるようになりましたが、
コーディングがさっぱり上手く行きません。2度ほどWebスクールにデータ持参で習いに
行きましたが、真似してもさっぱり上手く出来ません。
これじゃ何回習っても、金捨てに行くようなもので困っております。
簡単なビジュアルなので、ハイレベルな技術はいらないと思います。
分かりやすい本とかあれば最高なんですが、なにか名案ありませんか。
よろしくお願いします。

356 名前:nobodyさん mailto:sage [2011/12/08(木) 17:01:30.14 ID:???]
>>1を読むこともできないようじゃあ何もできないだろうねえ

357 名前:Web初級 [2011/12/08(木) 18:06:56.56 ID:bceXKvCi]
はははは‥…失礼しました。

nobodyさんが即答するスレでしたか、暗号のようなQAで驚きました。
おみそれしました。

358 名前:nobodyさん mailto:sage [2011/12/08(木) 23:09:44.53 ID:???]
>>355
355のレベルでこれから頑張るよりも専門の会社に発注して、
自分は本業に専念したほうがよい

359 名前: ◆gHpPvpjxUOSB mailto:sage [2011/12/09(金) 00:04:54.14 ID:???]
格安で俺が引き受けちゃるけんね

360 名前:nobodyさん mailto:sage [2011/12/09(金) 10:54:15.39 ID:???]
>>355
そりゃコーディング違いだ。
私もコーディングは外注した方が幸せになれると思う。そんな付け焼き刃じゃどうにもならんでしょ。

361 名前:Web初級 [2011/12/10(土) 08:46:00.83 ID:Suxg5Gi2]
買って来ました「ドリームウエバーCS5.5スーパーリファレンス」と
「3週間でマスターWebデザインの教室」の2冊、これ見て仕上げる
しかありません。やっと再就職して、よこされたのがこの仕事。
試用期間中だし、だれもウエブの事は知りません。
やるしかありません。

362 名前:nobodyさん mailto:sage [2011/12/10(土) 08:57:02.65 ID:???]
>>361
それと、Perlになんの関係が?



363 名前:nobodyさん mailto:sage [2011/12/10(土) 09:12:56.68 ID:???]
>>362
何がわからないのか、わかっていないやつだな。

364 名前:nobodyさん mailto:sage [2011/12/10(土) 09:49:06.29 ID:???]
      r;ァ'N;:::::::::::::,ィ/      >::::::::::ヽ
.      〃  ヽル1'´        ∠:::::::::::::::::i
       i′  ___, - ,. = -一   ̄l:::::::::::::::l
.      ! , -==、´r'          l::::::/,ニ.ヽ
      l        _,, -‐''二ゝ  l::::l f゙ヽ |、 ここはお前の日記帳じゃねえんだ
        レー-- 、ヽヾニ-ァ,ニ;=、_   !:::l ) } ト
       ヾ¨'7"ry、`   ー゙='ニ,,,`    }::ヽ(ノ  チラシの裏にでも書いてろ
:ーゝヽ、     !´ " ̄ 'l,;;;;,,,.、       ,i:::::::ミ
::::::::::::::::ヽ.-‐ ト、 r'_{   __)`ニゝ、  ,,iリ::::::::ミ
::::::::::::::::::::Vi/l:::V'´;ッ`ニ´ー-ッ-,、:::::`"::::::::::::::;゙ ,  な!
:::::::::::::::::::::::::N. ゙、::::ヾ,.`二ニ´∠,,.i::::::::::::::::::::///
:::::::::::::::::::::::::::::l ヽ;:::::::::::::::::::::::::::::::::::::::::::/ /
::::::::::::::::::::::::::::::! :|.\;::::::::::::::::::::::::::::::/ /

365 名前:nobodyさん mailto:sage [2011/12/10(土) 16:44:40.44 ID:???]
最近では、広告も電子化されてしまい、チラシといっても
なかなか通じません。

チラシの裏エディタを紹介しておきますね。
(私も愛用しています)

ttp://yuukiremix.s33.xrea.com/chirashi/

>>361
たぶん、それはくびっていう意味だと思うけど。

366 名前:nobodyさん [2011/12/10(土) 17:53:31.12 ID:bJAhMBsm]
Perl CGIで、
WEBページにラジオボタン、チェックボックスを配置して、
保存ボタンで各項目のチェック状態をDBに保存して、
次回ページを表示するときに、前回のチェック状態を再現させたいのです。

DBに保存まではできたのですが、ラジオボタンとかのチェック状態を設定するにはどうやればいいのでしょうか?

367 名前:nobodyさん mailto:sage [2011/12/10(土) 18:04:10.96 ID:???]
>>366
ラジオボタンやチェックボックスなら該当するinput要素に、
checked="checked"
ってすればいいとおもいます。

368 名前:nobodyさん [2011/12/10(土) 18:14:29.61 ID:bJAhMBsm]
>>367
HTMLのコードを出力する時に
if (checked) {
print <input type="radio" checked="checked">
else {
print <input type="radio">
}
とかやるってことですか?
数が多くてすごい大変なんだけど、これ普通のやり方なのかな

369 名前:nobodyさん [2011/12/10(土) 18:16:11.86 ID:phxklYwZ]
>>366

どんだけ馬鹿なの?消えろ

おおwwwwだっせーーーーーーーwwwwwwwwwwwwww

そんなチェック状態とか簡単に考え付くだろwwwwwwww
引き継げばいいだけなのにwwwwwwwwwww
頭悪すぎ

自分=ウサギ
お前ら=カメ

まじまだまだ寝てても平気みたいだね

370 名前:nobodyさん [2011/12/10(土) 18:18:06.55 ID:phxklYwZ]
こいつらがやってること全部できる

低レベルすぎる

やっぱりセンスが違うんだなあ

371 名前:nobodyさん mailto:sage [2011/12/10(土) 18:23:07.58 ID:???]
>>368
ヒアドキュメントに変数埋めといて、該当箇所だけにchecked="checked"が展開されるようにするとか、
input要素はループで生成するようにしておいて、if文減らすとか、とか、

372 名前:nobodyさん mailto:sage [2011/12/10(土) 18:27:04.72 ID:???]
保守性とるなら、配列かハッシュにラジオボタンやチェックボックスに必要な内容を入れといて
ループで処理かなぁ。



373 名前:nobodyさん mailto:sage [2011/12/10(土) 21:39:06.91 ID:???]
.emlからbase64の部分だけ正規表現で抽出する方法ってありますでしょうか?

374 名前:nobodyさん mailto:sage [2011/12/10(土) 22:10:18.53 ID:???]
あります。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<211KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef