Perlコーディング初心者質問スレ Part 59
レス数が950を超えています。1000を超えると書き込みができなくなります。
0001nobodyさん
2009/02/16(月) 11:42:29ID:gvPTpodw【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
お勧めサイトは >2 以降
前スレ http://pc11.2ch.net/test/read.cgi/php/1218030872/
0898nobodyさん
2009/08/19(水) 23:39:59ID:1hmn0Zu+全部、UTF-8で作ったら?
0899nobodyさん
2009/08/19(水) 23:48:54ID:???$in{comment}の中身は、shift_jisコードで「あいうえお」なのだから、この中身をeucに変換する必要があるでしょ。
変換するとき自動にすると誤作動するから、my $str = Jcode->new($str, "sjis")->euc; などと元のコードを指定するべし。
あと、ページを出力するときにcontent-typeヘッダにcharsetを指定するべし。
0900nobodyさん
2009/08/20(木) 00:51:47ID:???0902nobodyさん
2009/08/20(木) 05:47:30ID:???今PATH_INFOの汚染チェックでヌルバイト(%00等)があれば消去という処理を
したいんですが、なぜかマッチしてくれません
$PATH = shift;
$PATH =~ s/(\0|\x00|%00)//g;
POSTやGETでは上記の処理で消すことが出来たんですが
PATH_INFOの場合はやり方が違うのでしょうか?
ちなみにタグのサニタイジングは出来ました
0903nobodyさん
2009/08/20(木) 08:42:44ID:???サニタイズ脳乙。
つーかapacheだとNULLは受け付けてくれないんだが(Not Foundになる)。
PATH_INFOを16進ダンプとかしてみた?
0904nobodyさん
2009/08/20(木) 09:14:03ID:???あー
だからPCからだと404に飛んだんだ
test.cgi/test/%00/aaa/
でPATH_INFOを表示させた場合
PC→404エラー
携帯(au)→/test/
となりました
16進ダンプ…調べてきます
0905nobodyさん
2009/08/20(木) 10:52:18ID:???見れるならサーバーのログもみとくといい。
クライアントが蹴って単にサーバーまで届いてない可能性もある。
0906895
2009/08/20(木) 11:42:27ID:???1.EUC-JPとShift_JISの判定問題が疑われるので、両方sjisに揃えてみる
→揃えても$in{comment}の中身は「??????????」で変わらず。この判定問題ではない?
Jcode変換しても全く変わらないので、そもそも「??????????」はshift_jisコードですらなさそう。
2.Encode Guessの使用
→両方sjisに揃えたうえで実行してみましたが、「??????????」はasciiコードとのこと。(「??????????」そのものになっている?)
UTF-8での作成も試してみようと思います。
これで出来なかったら素直にPHPに行ってくる……
0907nobodyさん
2009/08/20(木) 15:40:09ID:???0908nobodyさん
2009/08/20(木) 23:15:50ID:???Encode関連と見た。SJISだと「あいうえお」は全部MSBが立ってるから、
UTF-8ではマップできない。で、?に置換される。
MSBの立ってないのが混じってる「01234」で試してみ?
「?」以外の文字が混ざるようならビンゴだ。
>>897
今のUAでcharset=を解釈しないものとかHTMLの文字コードと送られてくる
文字コードが食い違うものって残ってる?
>>899
Encode使えよ
0910nobodyさん
2009/08/21(金) 00:09:36ID:???> ■bbs.cgi(EUC_JP)
を見て反応して、
> ■html側(shift_jis)
を見逃してた。
なるほどEncode.pm絡みか。
0911nobodyさん
2009/08/21(金) 00:15:52ID:???CGI.pmって
URLデコードが失敗すると?になったような
use CGI;
use URI::Escape;
print CGI::unescape( uri_escape( 'あいうえお' ) );
とかで試してダメならCGI.pmのバージョン上げてみるとか
0912Name_Not_Found
2009/08/21(金) 00:52:35ID:nWh8czvG肝心な質問ですが、
検索ボタンと一緒に付随しているコンボボックス?の事についてですが、何か1つコンボボックスの中の項目を選択して検索ボタンを押した後、その選択したコンボボックスを残した状態で検索結果を表示させたいです。
ただ検索ボタンとコンボボックスの領域は別のhtmlになっていて、検索結果を表示するCGI側で、その検索ボタンとコンボボックスがあるhtmlを読む込みようになっています。
前の検索項目を残すようにすることは可能でしょうか?
よろしくお願いします。
0913nobodyさん
2009/08/21(金) 01:17:05ID:???0914nobodyさん
2009/08/21(金) 03:36:54ID:kHQe2rHZ0915Name_Not_Found
2009/08/21(金) 09:53:12ID:nWh8czvG宜しければ、やり方を教えてください。
0916nobodyさん
2009/08/21(金) 10:34:03ID:???LWP の使い方はここを見ておけば、大概は困ることないよ
っていうサイトはありますか?
0917nobodyさん
2009/08/21(金) 10:43:59ID:???どこで聞いていいのかわからないので適切なスレがあれば誘導お願いいたします。
たとえば下記のようなディレクトリ環境をサーバに上げた場合、
a1以下全ての属性を777にしようとffftpのソフトでやると一つずつしか変更できないようでした。
そこでDOSプロンプトからftpで入り
quote site chmod 777 a1
としたところうまくいったので、下記のように再帰オプションをつけたところエラーになりました。
quote site chmod -R 777 a1
ヘルプをみると引数が2とあったので、ここでのchmodにはオプションが使えないのだと思います。
a1/
|---b1/
| |---text.txt
|---b2/
| |---c1
| |---text.txt
|---b3/
telnetなどがサポートされていないサーバなのですが、再帰処理ができるソフトやコマンドはありますでしょうか。
0918nobodyさん
2009/08/21(金) 12:04:28ID:???http://search.cpan.org/dist/libwww-perl/lwptut.pod
http://search.cpan.org/dist/libwww-perl/lwpcook.pod
>>917
△▲ WebProg 初心者の質問 Part19 ▼▽
http://pc11.2ch.net/test/read.cgi/php/1244038749/
0920nobodyさん
2009/08/21(金) 21:30:54ID:???まず html 側に独自タグを定義して、読み込んだときに置換すればいいかな
例えば
------- test.html -------
<form action="hoge.cgi" method="post">
<input name="nanka_no_flag" value="1"{checked} />
</form>
-------- test.cgi --------
$q = new CGI;
open FH, 'test.html';
print "Content-Type: text/html;\n\n";
while my $line(<FH>){
if($q->param('nanka_no_flag') == 1){
$line =~ s/{checked}/ checked="checked"/;
}
print $line;
}
こんな感じ?
ニュアンスが伝わればいいけど
あとはJavaScript使うとか
0921nobodyさん
2009/08/21(金) 21:32:25ID:???O <input type="radio" name="nanka_no_flag" value="1"{checked} />
orz
0922nobodyさん
2009/08/21(金) 22:04:09ID:???javascriptでセレクト値のクッキー食わせといて、javascriptで選択済みにするかぐらいか。
コンボボックスなら入力値を手入力できるだろうから、その辺もきちんと処理しないとね。
0923nobodyさん
2009/08/22(土) 01:27:58ID:R3OZ89h5そのshtmlページをサーバのロックでなくて、パスワードでアクセス制限したい。
なら素直に全部をトータルでcgi使えという声もあろうが、全部がスクリプトだと
レイアウト変更や更新が面倒。それに、一部iFrameなんかは楽だしね。
で、shtmlページを完全にアクセス制限する手はなんか内でスカイ?
0924nobodyさん
2009/08/22(土) 02:25:22ID:???0925Name_Not_Found
2009/08/22(土) 10:13:30ID:egsrQGCy早速それらの方法を真似て修正したいと思います。
またつまづいてしまったらきます。
ありがとうございました。
0926879
2009/08/22(土) 20:07:07ID:???何が原因でしょうか?今はもう無くなってしまったのでしょうか?
他のモジュールは通常通りインストールできます。
0928879
2009/08/23(日) 18:08:57ID:???他の許可してあるPCではis_successで成功するのですが、私のでは出来ません。
firefoxでプロキシなしでネットに繋ごうとすると繋がりません。
いろいろ試したのですがよく分からないので、考えられる原因を教えてください。
0929nobodyさん
2009/08/23(日) 18:14:27ID:???それってつまり、プロクシなしで正常に外部と通信出来てないってことじゃん。
それじゃあLWP云々の前に、そのPCで正常にアクセス出来るよう
設定見直すなり、会社(組織?)の管理者あたりに相談だな。
0930nobodyさん
2009/08/23(日) 18:16:42ID:???あぶねえ、同じようなこと投稿するところだったw
perlの問題じゃなさそうだし、直接そのPCを見ることのできる人に相談だろうな。
0931nobodyさん
2009/08/23(日) 19:12:32ID:dufUiF83コマンドプロンプトから
pingとtracerouteで接続状況を確認したら?
perlの問題じゃないと思ふ
0932nobodyさん
2009/08/24(月) 15:05:19ID:+a5IC9tF$aには1002が入ってて、$bには002001が入ってるはずだから、print "$a$b" ってすると1002002001となるはずが
1002
002001
と表示される、勝手に改行されている
chomp $aやchop $aしてみたけど、chompをやった結果は最初と変わらんし、chopをやると
100
002001
という結果になる
原因も対処法もわからない
ちなみに$a<>$bってやると
1002<>
002001
<>が上に来る不思議
0933nobodyさん
2009/08/24(月) 15:16:07ID:???パズルの問題でもつくっているのか?
変数毎に検証すれば何も難しくないと思うが。
$a = '1002';
$b = "\n002001";
これで、望み通りの結果だ。
print "$a$b"; # => 1002\n002001
print "$a<>$b"; # => 1002<>\n002001
chomp $a;
print "$a$b"; # => 1002\n002001
chop $a;
print "$a$b"; # => 100\n002001
0934nobodyさん
2009/08/24(月) 15:16:12ID:???変数にs/[\r\n\s]//g;を通してからprintしたら治ったり?
URI::Escape;してprint uri_escape($a,"\0-\377");とかして
変なコードはいってないか見てみたら?
0936nobodyさん
2009/08/24(月) 15:22:00ID:???「改行」は行の後につく、という固定観念なんだろう。
文字列というデータ列がターミナル上で「改行」として表示されている、
という概念に辿り着けていないんだろうな。
0938nobodyさん
2009/08/24(月) 15:33:51ID:+a5IC9tF$bも先頭も最後もいじってみたが解決しなかったぞ、俺を甘く見るな
934ためしてくるぞ、ためしてきてからレスしたほうがいいな
0939nobodyさん
2009/08/24(月) 15:36:12ID:???まあ、自分で検証してみなって。
>>933 の入力で、>>932の文章による結果は満たしている。
十分合理的で簡潔な解だと思う。
他の条件で異なる結果が得られるのなら、
それも示さなければ、他人には絶対理解できない。
0940nobodyさん
2009/08/24(月) 15:39:03ID:+a5IC9tF俺は何も悪いことしてない
俺も933は思いついたんだが、やはり無理でした
0941nobodyさん
2009/08/24(月) 15:42:03ID:???0942nobodyさん
2009/08/24(月) 15:48:02ID:+a5IC9tFまぁ、もうちょっと一人でなんとかしてみるわノシ
0943nobodyさん
2009/08/24(月) 15:53:13ID:???本当に「入っている」のならば、そのデータと eq で比較すればいいだろうに。
print "a is ok. " if $a eq '1002';
print "b is ok. " if $b eq '002001';
0944nobodyさん
2009/08/24(月) 16:00:52ID:???use URI::Escape;
print '$a = ', uri_escape($a,"\0-\377"), "\n";
print '$b = ', uri_escape($b,"\0-\377"), "\n";
0945nobodyさん
2009/08/24(月) 16:04:33ID:???print "$a$b";
print "$a$b";
print "-$a-$b-";
これで少しは問題の切り分けができるだろ。
俺は他の部分のケアレスミスと踏んでるがな。
0946nobodyさん
2009/08/24(月) 16:09:28ID:+a5IC9tFuri_escapeしたら$bの先頭に%0Aがでてきた
しかし対処の仕方は $b =~ s/%0A//; しか思いつかなかった
0949nobodyさん
2009/08/24(月) 17:03:32ID:???しかし、元の問題をそんな対症療法で逃げていいのか?という気がしますけど。
>>932 は unpack('H*', $a) での確認を覚えておくと手軽でいいかな。
0950nobodyさん
2009/08/24(月) 17:14:36ID:???tr/\r\n//dにしとけってこった。
Macだったり、Windowsのファイルで\nだけ取れて\rだけ
残っちゃったとかそういうオチだろ。
でだな、何であるはずのない改行が混じってんだよ?ってことなら、>>949の言うように
原因追求が次の課題だな。そういうのはほっとくとろくなことにならん。
0951nobodyさん
2009/08/24(月) 17:28:15ID:???Mac上で、WindowsのCRLFなファイルをCR区切りで分割した、という線が濃厚ですね。
Mac perlのそのへんの仕様までは詳しく知らないので、予想ですけど。
UNIXベースの最近のMacは、もうCRな改行コードじゃないらしい、とも聞いてますが、どうなんでしょうか?
0953nobodyさん
2009/08/24(月) 18:08:07ID:???http://www.din.or.jp/~ohzaki/perl.htm#CRLF_Unify
>>951
>UNIXベースの最近のMacは、もうCRな改行コードじゃないらしい
YES
他のUNIX系OS同様となっている
0954nobodyさん
2009/08/25(火) 08:52:45ID:???[本]
Effective Perl: ttp://ascii.asciimw.jp/books/books/detail/4-7561-3057-7.shtml
[オンラインマニュアル]
最新のドキュメント: ttp://perldoc.perl.org/
perl5.005_03 のドキュメント: ... ← そろそろ不要?
日本語ドキュメント検索: ... ← 消滅につき削除。
Perldoc.perl.org: ... ← 「最新のドキュメント」と統合。
「ム板Perlスレより x of 2」の一行も要らないかな。少しずつ違ってきてるし。
0956nobodyさん
2009/08/25(火) 16:14:13ID:fNKwG09N0957nobodyさん
2009/08/25(火) 23:02:54ID:???MacOS Xなら、テキストエディットっていうアプリがある筈ですよ。
デフォルトだと文字コードは、Mac Japaneseていうshiftjis互換で
改行は、CRのみです。
しかし、コマンドラインツールなどが吐きだす改行はLFのみです。
目的に応じて変換しないと、分け判らん状態にww
0958nobodyさん
2009/08/25(火) 23:56:21ID:fNKwG09N0959nobodyさん
2009/08/26(水) 00:28:05ID:???0961nobodyさん
2009/08/26(水) 08:05:35ID:???0962nobodyさん
2009/08/26(水) 14:12:54ID:???それは、アプリの設定次第。
perlでコーディングするなら、文字コードはUTF8改行は、LFに
アプリ側で設定しましょうって事です。>MacOS X
0963nobodyさん
2009/08/26(水) 14:18:24ID:???perlが、吐き出す改行の事を言ってるならデフォルトで
¥n は、LF ですよ。
0964nobodyさん
2009/08/26(水) 19:55:07ID:uFgoj7x+エラーコード 500の表示がみっともないので、「print "Content-Type: text/html\n\n";」を追加したらエラーコードは表示されなくなりました。
なぜこの「print "Content-Type: text/html\n\n";」だけで、解消されたんでしょうか?
文字はブラウザに表示させてないのに。なぞです。
よろしくお願いします。
0965nobodyさん
2009/08/26(水) 20:36:23ID:???http://www.studyinghttp.net/cgi-bin/rfc.cgi?3875#Sec6.2
> レスポンスは、message-header と message-body で構成され、空行によって分けられる。
> message-header は一つ以上のヘッダフィールドを含む。 message-body は NULL でもよい。
> スクリプトは、文書レスポンス、ローカルリダイレクトレスポンス、あるいはクライアントリダイレクト
> (文書を伴っても良い) レスポンスのいずれかを返さなければならない。
仕様を満たさないままスクリプトが終了すれば 500 Internal Server Error になる。
CGI: Common Gateway Interface part 13
http://pc11.2ch.net/test/read.cgi/php/1126436361/
0966nobodyさん
2009/08/27(木) 00:12:50ID:???0967nobodyさん
2009/08/27(木) 00:35:39ID:???でいいんじゃないの?
0968nobodyさん
2009/08/27(木) 01:51:21ID:???えっ!?そうゆうことじゃない?
0969nobodyさん
2009/08/27(木) 05:16:47ID:???my $str = "...";
my $uri = uri_join((uri_split($str))[0..2], undef, undef);
0970nobodyさん
2009/08/27(木) 09:06:05ID:???>>968
マジレスしてみる。
それだとhttp://.../が抜ける上に、PATH_INFOが乗らんぞ。そーゆー時はREQUEST_URIが普通。
そんなのHTTP_HOSTとかで組み合わせられると思うだろ?shttpやhttpsスキームはCGIからは判別不能だったと思うぞ。
そもそも自URLしか拾えないし、ftp://..../とかmailto://....とかはCGI噛まないからダメポ。
0972nobodyさん
2009/08/27(木) 09:38:57ID:???で良いんじゃね
0973nobodyさん
2009/08/27(木) 19:11:36ID:lnXiS6J7push(@hoge,$&);
てあったんだけど、$&て何?
0974nobodyさん
2009/08/27(木) 19:46:22ID:???http://perldoc.perl.org/perlvar.html#$MATCH
0975nobodyさん
2009/08/27(木) 20:04:55ID:???ありがとう。
英文なのでわかったような判らないような。
正規表現にマッチする箇所”だけ”拾ってくれるって事でいいのかな?
とりあえず理解する糸口を教えてもらって感謝です
0976nobodyさん
2009/08/28(金) 04:55:41ID:???趣味ならいいけど仕事にするなら英語の勉強もしっかり
しといた方がいい。マニュアル読む程度ならTOEIC550点程度でいい。
読んでるうちになれる。
ただし海外のブログやニュースで情報収集したいなら750程度は欲しいかも。
0977nobodyさん
2009/08/28(金) 14:38:06ID:???0978nobodyさん
2009/08/29(土) 10:09:36ID:???0979nobodyさん
2009/08/29(土) 10:33:17ID:???もちろんウザイという意味で
0982nobodyさん
2009/08/31(月) 17:11:21ID:???最新のパターンマッチで成功した文字列(ただし当該ブロック中で、ブロックやeval()文
で隠れた部分のマッチは勘定に入れない)。
(覚え方:いくつかのエディターでの&のようなもの)この変数は呼び出し専用で当該ブ
ロックに対して動的なスコープを持ちます。
プログラムのどこかでこの変数を使用すると、全ての正規表現マッチにおいてかなりの
性能低下をもたらします。"BUGS"を参照してください。
これの代替として"@-"を参照してください。
0983nobodyさん
2009/08/31(月) 20:40:55ID:???横からすまないが、今まで知らなかったので勉強になった。
perldoc perlvar によると
$& is the same as "substr($var, $-[0], $+[0] - $-[0])"
らしいけど、$& と比較すると使いにくいね..
0984nobodyさん
2009/09/01(火) 06:56:19ID:???0985nobodyさん
2009/09/01(火) 20:00:21ID:???0986nobodyさん
2009/09/01(火) 21:03:00ID:jzXz2QoA本文(description)だけが取得できません。考えられる原因があれば教えてください。
何度も確認したのでケアレスミスはない(はず)です。
0988nobodyさん
2009/09/01(火) 23:11:45ID:???みたいなリンクってなんか名前ついてたと思うんだけど、なんて名前だか分かります?
CPANにモジュールがあった記憶があるのに、探そうにも名前が浮かんでこない。。。
0989nobodyさん
2009/09/01(火) 23:16:15ID:???ニュース毎のdescriptionは無いように見えるけど
0990988
2009/09/01(火) 23:18:52ID:???0991nobodyさん
2009/09/02(水) 00:08:39ID:???0992nobodyさん
2009/09/02(水) 11:27:48ID:???ありがとうございます。その様でした。
スレチなのですが、ニュース記事のRSSでdescriptionも配信されているサイトがあれば
教えてくれませんか。
ブログ記事でのdescriptionはありますが、ニュース記事だと見つからないので・・・
0993nobodyさん
2009/09/03(木) 11:25:23ID:???0995nobodyさん
2009/09/03(木) 12:40:28ID:???0996nobodyさん
2009/09/03(木) 21:34:21ID:???webprogは2日か3日だっけ?
0997nobodyさん
2009/09/03(木) 22:36:50ID:???レス数が950を超えています。1000を超えると書き込みができなくなります。