Perlコーディング初心者質問スレ Part 61
Perlのコーディングで困ってる人のスレです。
【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
お勧めサイトは >2 以降
前スレ
http://pc11.2ch.net/test/read.cgi/php/1251989472/
>>1 乙
と、前スレ993
>&send_item2() の第1引数で $m を渡してるのに、第3引数で $m の中身の一部分を送ること自体が無駄。
$m と、 %m は別物だ。
第三引数 $m{wea} とかは明かに、ハッシュの値だ。$m と混同すんな。
4 :
nobodyさん :2010/06/05(土) 22:44:10 ID:BPQlnKOc
レファレンスがわからなくて疲れてるオイラにどなたか応援の一声をノタム。(;´Д`)
つ[ユンケル]
6 :
nobodyさん :2010/06/05(土) 23:37:59 ID:WMYKbA0D
リファレンス=オブジェクトの理解で乗り切った あとデリファレンスって言葉がこの先頻出してくると思うが、 これがメンバ変数にアクセスする行為そのもの 実際、この先出てくるであろう、オブジェクトでもリファレンスを使って 実装されてる
(;><)
リファレンスとか文字で言われると分からないが、説明を読むと多用してることに気が付いた。 でも改めて説明されても分からないwww $cnofig = { 'array' => [0, 1, 2, 3, 4, 5], 'hash' => {'first' => 0, 'third' => 3}, 'scalar' => 'monyumonyu', }; print $config->{'array'}->[1]; 1 print $config->{'hash'}->{'third'}; 3 print $config->{scalar}; monyumonyu 基本こんな感じでしか使ってない。 初期化してない段階では $config->{'array'} = [0, 1, 2, 3]; みたいな代入でいいのかな? わっかんないやw
リファンレス=ポインタもどきだろ……
もどきっつかそのものじゃね
女子高生だろ常識的に考えて
ところで前スレからなんですがNet::DNSが使えないと やっぱりホスト名の逆引きはできませんか
なかったら入れればいいじゃん
16 :
前スレ921 :2010/06/06(日) 16:41:21 ID:+nevgJE6
sub hokan { my $target = shift; if ($m{is_full_g}) { $mes = "$max_depot_g個までしか保管することはできません"; return; } if ($weas[$m{wea}][1] eq $target) { $npc_com = "$items[$m{ite}][1]を倉庫にいれました\n"; my $send_id = unpack('H*', $m{guild}); if (-f "$guilddir/$send_id/depot_g.cgi") { open (OUT,">> $guilddir/$send_id/depot_g.cgi"); print(OUT "1<>$m{ite}<>\n"); close(OUT); $m{ite} = 0; } } elsif ($arms[$m{arm}][1] eq $target) { $npc_com = "$items[$m{arm}][1]を倉庫にいれました\n"; my $send_id = unpack('H*', $m{guild}); if (-f "$guilddir/$send_id/depot_g.cgi") { open (OUT,">> $guilddir/$send_id/depot_g.cgi"); print(OUT "2<>$m{ite}<>\n"); close(OUT); $m{arm} = 0; } }
17 :
16 :2010/06/06(日) 16:48:18 ID:+nevgJE6
elsif ($ites[$m{ite}][1] eq $target) { $npc_com = "$items[$m{ite}][1]を倉庫にいれました\n"; my $send_id = unpack('H*', $m{guild}); if (-f "$guilddir/$send_id/depot_g.cgi") { open (OUT,">> $guilddir/$send_id/depot_g.cgi"); print(OUT "3<>$m{ite}<>\n"); close(OUT); $m{ite} = 0; } } if ($npc_com) { &get_depot_cg; return; } $mes = qq|どれを倉庫にいれますか?<br />|; $mes .= qq|<span onclick="text_set('@ほかん>$weas[$m{wea}][1] ')">$weas[$m{wea}][1]</span> / | if $m{wea}; $mes .= qq|<span onclick="text_set('@ほかん>$arms[$m{arm}][1] ')">$arms[$m{arm}][1]</span> / | if $m{arm}; $mes .= qq|<span onclick="text_set('@ほかん>$ites[$m{ite}][1] ')">$ites[$m{ite}][1]</span> / | if $m{ite}; $act_time = 0; } &send_item2を無くして自分で分かるように直に書いてみたのですが 結果は変わらずエラーのままでした。 $guilddir/$send_id/depot_g.cgiには書き込まれましたが $m{ite} = 0;が実行できないみたいです。どうすればいいんだろ・・・orz
18 :
14 :2010/06/06(日) 18:04:21 ID:???
レンタルサーバなんだけどどうにかなるかな
local::lib使えば入る
>>17 @itesと、@itemsどっちかがtypoだ。
これ↓、前のバージョン用に整理した奴。
sub hokan {
my $target = shift;
if ($m{is_full_g}) { $mes = "$max_depot_g個までしか保管することはできません"; return; }
# 構造が同じ二次元配列を、別名で三つ作る必要あんの?
# $items[$m{ite}][1]とどっちが正しいの?
my @keys = qw( wea arm ite );
my %hash = ( wea => $weas[$m{wea}][1], arm => $arms[$m{arm}][1], ite => $ites[$m{ite}][1], ) ;
# if ~ elsif は、やることが同じなら
# for( next if 条件 ; 処理 ; last ) に纏められる
# typo も減らせるからそちらお勧め
for my $i ( 0 .. $#keys ){
next if $hash{$keys[$i]} ne $target ;
$npc_com = "$hash{$keys[$i]}を倉庫にいれました\n";
# $m{$keys[$i]}はsend_item2内で使ってないよ?渡すの?それでも
&send_item2($m, $i + 1, $m{$keys[$i]});
$m{$keys[$i]} = 0;
last ;
}
if ($npc_com) { &get_depot_cg; return; }
$mes = qq|どれを倉庫にいれますか?<br />|;
for my $key ( @keys ){
next if ! $m{$key} ;
$mes .= qq|<span onclick="text_set('@ほかん>$hash{$key} ')">$hash{$key}</span> / | ;
}
$act_time = 0;
}
エラー内容もさらしてごらん さすがにソースだけでは辛い
前スレ含め、これ以上汚されるの勘弁。 (今回の明かに)typoが原因のエラーとか、そんなん自分で解決すべきだ。
こんな短い部分さらすだけで、スパゲッティーソースなことが分かるなぁ・・・
スパゲッティでも芸術的なぐらい短ければ神コードに昇華するのにね
それはスパゲッティとは言わん。
じゃあ可読性が著しく低いコードと言い換えようか
それゴルフ
定数を定義することはできます? constとかdefineみたいな。
>>28 勉強と回答しにだが?
普通は「エラーコードを晒せ」ってのに賛成だが、
これ以上、この人の質問が増えて何かメリットあるか?
リライトしてる様なもんだぞ?
ちなみに前スレ985、このスレ
>>3 、
>>20 は俺だ。
大嘘(perl的に間違った物)答えられるのにも辟易すんだよ、
この手の質問には。
>>29 core module の "CONSTANT"
CPAN module の "Readonly"
を使う。
サブルーチン呼び出しに&をつける人が今も生き残っているって すごいな。 &ありとなしは同じじゃないので良い子は真似しないようにね。
32 :
nobodyさん :2010/06/07(月) 09:12:11 ID:7ToGpYbm
>>6 『概念』かな。
どうしてこういう概念が必要なの?Perl独特みたいだけど。
リファレンスに代入せずとも今まで通り、変数に代入するんじゃダメなの?
>>16 weaを扱ってるはずなのにiteを操作してたり、コードが混乱してるように見える。
まず、このサブルーチンで何をやりたいのか文章にしてくれ。
> 1: 自分はこういう事がしたい。
へ〜、&呼び出しには弊害があったんだね
へぇ? サブルーチンはsub 名前{ 処理 }で作って、 &名前; で呼ぶものだと思ってたけど、今は違うのですか? ネットで拾ってきたプログラムをちょこっと改造するぐらいのことしかしてないんですが KENT Webとかに代表される一般に出回っているものって、殆んど古いものばっかりなんですかね。 使っている鯖の仕様みたらperl5.8.9なので、そんなに古いほうじゃないみたいですが。
動けば何でも良いよ perlなんて道具に過ぎないんだからさ
あと、jcode.plが古いとか前スレにあったけど、 今もあちこちの掲示板とかで、使っているcgiはかなり多い。 むしろ最新の書き方のほうが、使えない鯖もあるので少数派。 ここではバカにする人がいるけど、事実だから。
Basic認証でのログアウトの仕方
http://shorindo.com/tech/tech0002.html #!/usr/bin/perl
print <<EOF;
HTTP/1.0 401 Unauthorized
WWW-Authenticate: Basic Realm="valid users only"
Content-Type: text/html
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<HTML><HEAD><TITLE>401 Authorization Required</TITLE></HEAD>
<BODY>
<H1>Authorization Required</H1>
</BODY>
</HTML>
を試したんだが、
malformed header from script. Bad header=HTTP/1.0 401 Unauthorized
で動かない(Internal Server Errorになる)
これ、使えないスクリプトを堂々と載せてるの?ぐぐるとここへリンク張ってるとこもいくつかあるんだけど。
そりゃそれじゃあ動きませんてば ちゃんと最後のEOFまでコピペってくださいねー
EOFのあとの改行までね
>>39 いやそれだとそのエラーメッセージにはならないと思うよ。
nphスクリプトになってないんじゃないか? ファイル名間違えたとか?
すまんEOFがないのはコピペミスだ。実際はちゃんと入ってます。 ファイル名もあってます。 さっぱりわからんが、ApacheのVerによってエラーになったりするのだろうか。2.2.15だけど。
何故かもっかいやったらできた わけわからんが解決
>>9 俺もリファレンスワカラン部類なんだけど、それ二次ハッシュとどう違うの?
>>31 ソースくれ。
&の有無関係なくmod_perlだと動かん事しか知らん。
46 :
nobodyさん :2010/06/07(月) 14:38:19 ID:e5tZsgVK
>>45 要するに、省略できるようになってるってことかな?
ちゃんと読めよ...
配列、スカラ、ハッシュと記号が付いてるし &付けててもいいじゃんw とは思うが、配布元が奨めてないなら外しておく方がいいのかねん
49 :
nobodyさん :2010/06/07(月) 15:22:01 ID:e5tZsgVK
perlを学ぶ良い書籍ってありますか? 現在、リファレンスとモジュールのところで壁にあたっています。 ネットショップのショッピングカートを作った実績はありますが、これからクレジットカード機能を付加したいと思っていまして、 クレカ代理店への接続をしようと試みています。
&を付けてサブルーチンを呼ぶコードを書いてると、 鼻で笑われるとか、ロートルとか言われるぐらいのものだろう。 たまに実害が出るかも知れないが、そのときは気合でなんとかすれば問題なし。 自分の生き様を示して行けばいいよ。 私は実害が出たときに面倒だから付けないけどね。
実害って?
>>49 リファレンスとモジュールなら「続・初めてのPerl 改訂版」だな。
あと「Perlベストプラクティス」も読んどけ。
>>49 【Perl,CGI】参考書籍 第四版
http://pc11.2ch.net/test/read.cgi/php/1250989562/ >>51 fooは元々引数を1つ取るサブルーチンだけど、忘れて呼び出すとどうなるか。
use strict;
use warnings;
sub bar{ &foo }
sub foo{ print shift }
bar("Hello, World!");
と
use strict;
use warnings;
sub bar{ foo() }
sub foo{ print shift }
bar("Hello, World!");
を比べるといいよ。
54 :
nobodyさん :2010/06/07(月) 15:48:32 ID:6I7S3VUo
55 :
nobodyさん :2010/06/07(月) 16:16:24 ID:U/buYqwE
今、ちょっと思い当たることがありました。 リファレンスってひょっとして二次元配列などの縦横座標のあるデータを扱う為の概念ですかね? こんな感じ。 商品コード | 商品名 | 価格 | 内容 商品A 商品B 商品C これを座標指定で呼び出す為の概念ですかね? そうだとしたらかなり理解が進んだ気がします。 今、そこのところ勉強中です。
リファンレスはポインタもどきだと何度行ったらわかるんだよ
ここはレガシーな環境を無視するスレですか?
>>57 サブルーチンを&つけて呼ぶのは普通だよ。だまされないようにね。
59 :
nobodyさん :2010/06/07(月) 18:02:35 ID:ne0ODycT
>>56 ここでのポインタに意味がわからない。
>>57 レガシーってどういう意味?
英和辞書に載っていない。
>>57 質問するときにPerl4以前の環境であることを明言すればいいんじゃないの?
しかしいまどきperl4使ってる奴なんているのか?
62 :
nobodyさん :2010/06/07(月) 18:22:17 ID:yJ6kU2rx
バージョンなんて気にしてる? 私などはバージョンのことなんかまず考えていない。 いつのまにか変わってるみたいな。 バージョンの特徴を生かせないけどさ。
63 :
nobodyさん :2010/06/07(月) 18:32:22 ID:yJ6kU2rx
リファレンスの件、うっすらとわかってきました。 つまり、スカラーや配列やハッシュの指定方法では指定できない場合に使うのがその使用法の一つなのかな?と。
リファレンスをポインタといわれると、めんどくせーもんとしか思えなくなる オブジェクトと思え
リファレンスはリファレンス。 オブジェクトでもないしポインタでもない。 このスレにJAVAとかCに精通してる人が質問しに来るとは 思えんし。 自分の中で理解するのは構わんが、勝手に「~の様なもん」とか 「~と思え」ってーのは無しにしないか? 誰もが貴方達のバックグラウンドを持ってる訳では無い。
だいたい、perlのオブジェクトはblessされたリファレンス
67 :
nobodyさん :2010/06/07(月) 19:27:14 ID:ejsF48jq
プログラマーって個人差すごくありそうだね。 もし仮に一ヶ所に集まって会議したらまとまるんだろうか?
いちいち上げんなよ。
age-sageとかどうでもよすぎワロタ
71 :
nobodyさん :2010/06/07(月) 21:03:08 ID:fBML121+
オブジェクト指向ってどういう意味なんですかね? まだ悟れないでいます。
そうやって、耳慣れない単語が出たら全て質問するつもりか? 素直に参考書の一冊でも読め。 お勧めは既に出てる。
73 :
nobodyさん :2010/06/07(月) 21:19:37 ID:fBML121+
翔泳社の10日でおぼえるPerl CGI入門が私の入門書です。
74 :
16 :2010/06/07(月) 21:35:33 ID:Ha23rV7v
ごめんなさい もうコードが馬鹿な自分でもわかるくらい滅茶苦茶になってるので もう一回デフォルトのを最初から改造したら解決しましたm(__)m せっかくレスしてくれた人に申し訳ないです とりあえず 出直してきます。 「は?何て言ってんのコレ?」っていうのが多すぎました。すみません。
75 :
nobodyさん :2010/06/08(火) 18:08:50 ID:e74okk0C
リファレンスとはC言語のポインターのようなもんだって話があるけど、 この言い方はC言語を知らないと理解できない言い方だよね。
Cもやれってことじゃないかな
77 :
nobodyさん :2010/06/08(火) 18:20:33 ID:e74okk0C
このスレってどの時間帯でも誰かいそうですねw ネット事業者だから常にネットができる環境下にあるからと思うけど、 何人くらいいるのかな?いや、心強いなとおもって。
変数や配列、ハッシュ、関数への参照を示した文字列と言ってもわけわからんだろ
80 :
nobodyさん :2010/06/10(木) 22:50:37 ID:e7/5TejE
perlでメール送信プログラムを作ってます。 Net::SMTPを採用。 どこのサイトもエラーを拾ったりせずに、 $smtp->data(); $smtp->datasend(""); ・・ $smtp->dataend(); と、コーディングしていますが。 これって普通はエラーを拾ったりしてやる必要があるんですよね? メール送信がうまくいかず、各行にor dieを付与してチェックしてみました。 すると$smtp->data()の部分でdieしていました。 ・・・が、具体的なエラー内容がわからず。 こういう場合どうしたらいいんでしょうか? アドバイスをばお願いいたします。
ifでくくりゃいいんじゃね?
die $! とか?
84 :
80 :2010/06/11(金) 01:15:57 ID:HNRsRFk/
皆様ありがとうございます。 >83 マニュアルに明記されてます?(見落としてるだけ? ソースは・・・すいません見てみます!
85 :
80 :2010/06/11(金) 02:34:15 ID:HNRsRFk/
Net::SMTPをDebug => 1で実行した所、メールアドレスがおかしくなっていたのが原因のようです。
メールアドレスの@がperlに解釈されてしまっていたのが問題でした。
ついで質問なのですが、メールアドレスの受け取りをCGI::Applicationにて
my $mail = $self->query->param('mail');
のような感じで受け取っています。
この部分を
my $mail = '
[email protected] ';
とすることで正しくメールが送られることは確認しました。
my $mail = $self->query->param('mail');
の時点で@をperlに解釈させないようにするにはどうしたらいいでしょうか?
受け取ってから@をエスケープすればいいんだとは思いますが、
他にスマートな方法ありましたらアドバイスお願いします。
エスケープする以外の方法があれば大発見
そもそも@の解釈なんて文字列に埋め込んだときしか行われないんだから、 CGIに渡ってくるものがそもそもおかしいんじゃねーの?
88 :
nobodyさん :2010/06/14(月) 21:40:31 ID:mh5UZ2p/
selectで標準出力の変更は出来ますが、標準エラー(STDERR) を変更する 方法はないでしょうか? 色々テストのスクリプトを書いているのですが、「エラーが出る」確認の テストを書こうと思ったら、die で死ぬのを eval することは出来ても STDERR への表示を消すことが出来なくて困っています。 STDERR への出力を一旦抑制して、また元に戻すといったことはできない でしょうか?
90 :
nobodyさん :2010/06/15(火) 12:07:10 ID:FKT5DQzr
どなたかお願い致します。 perlで、FTPSによるファイル送信を行いたいと考えております。 調べたところNet::FTPSSLというモジュールがあるのですが、 現在契約しているホスティングサーバーではインストールされて おりません。 そこでNet::FTPSSLのモジュールをダウンロードしてみると、FTPSSL.pmという ファイルがありました。このファイルをrequireするなどして、なんとか インストールしないで動作させたいと考えておりますが、このような 事は可能なのでしょうか?
perl use lib
93 :
nobodyさん :2010/06/21(月) 00:35:12 ID:5zE9MeIY
マルチポストです。 申し訳ありません。 あまりCatalyst版には人がいないようなので、 こちらにも質問させて下さい。 Catalyst を勉強中です。 モデルをCatalystから分離した方が良いとは 知っていますが、とりあえず勉強中なので、 app_create.pl model で DBIC を作りました。 ところが出来上がった Schema/Result/ 以下の クラスにメソッドを定義しても呼び出す事が 出来ません。 ログではこのように出ています。 Can't locate object method "foo_bar" via package "DBIx::Class::ResultSet" 見るとResult以下のクラスのベースクラスは DBIx::Class:Core でした。 自分でも何かとんちんかんな事を聞いている気がするのですが、 Catalyst で ResultSetに メソッドを定義したい 場合はどのようにすればよいか教えていただけますか。 宜しくお願いします。
>>93 カタリーは使ったことないからわからないが。
useし忘れてパッケージ名で呼ぶとそのエラーメッセージがでますよね。
"そのパッケージにそんなメソッドないです"なのでバージョン違いの資料を使ってないか等も疑ってみたらどうでしょう。
カタリストってカタリーって略すのがPerl使いの正しい姿?
96 :
94 :2010/06/21(月) 18:33:46 ID:???
>>95 いや、5文字がめんどくさい怠け者の略し。
よい子のパーラーは真似しちゃいかんと思う
97 :
194 :2010/06/21(月) 23:42:36 ID:???
>>105 ありがとうございます。
やはりそうですよね。。
そこに追加しているんですが、呼び出せないです。
気になったのはResultSet 云々のエラーメッセージがでてるけど、そこのクラス群はDBIC::Core が親になっている事でした。
モデルは自動生成させているので、手では作っていないです。
何かの手順間違いでおかしな事になってるんですかね。
再確認します。
分かりました。 load_components に ResultSetManager とメソッドに ResultSet 属性が必要なのですね。 Catalyst というよりはまるまるDBICでした。 ありがとうございました。
文字列"ABC"が無くて"DEF"が有る場合はどう書けばよいですか? /(忘ABC)DEF/ or die; 忘の所に何と書くのか教えてください。
/ABC/ and die; /DEF/ or die; じゃだめなん?
?!
「直前にABCが無いDEFにマッチする」ということを言ってるんなら /(?<!ABC)DEF/
103 :
99 :2010/07/01(木) 12:50:10 ID:???
>>100 >>101 >>102 みなさんありがとうございます。
やりたいのは
>>102 さんの言う通りなのですが、説明が下手で
どうとでも取れるような書き方だったと反省しています。
回答ありがとうございました。
perl 5.8.8 でImageMagick 6.6.1を使って画像変換しようとしているのですが $image->Distort("virtual-pixel"=>"Transparent" と指定しても背景が透過になってくれません。 Black, White, Random など別の物を指定すると変更されます。 ImageMagickの問題なのですが、Perlで使用しているのでこちらへ質問させていただきました。 スレ違いでしたら誘導をお願いします。
>>104 バックグラウンドカラーは設定した?
$image->Set('background' => 'none');
107 :
nobodyさん :2010/08/02(月) 03:40:13 ID:FdS+e4Ne
ひと月も前のレスに噛み付かれても、、、
108 :
102 :2010/08/02(月) 04:45:31 ID:???
なんかごめん
夏だ
110 :
Perl神 :2010/08/02(月) 17:08:54 ID:9KfPyaTP
カタリストの語りがうざい まじカタリ!!!!!!
111 :
nobodyさん :2010/08/02(月) 21:04:27 ID:fXTYTb4c
愚問でしょうがお許しください。 配布されてるCGIゲームを改造中の初心者です。とほほのPerl入門とか見ながらやってます。参考書とかは持ってません モンスターの経験値などを設定するのにモンスターの画像名を番号にして 番号が大きければ大きいほど経験値も多くなる・・・という風にしたかったのですがいい方法が思いつきませんでした。 文字列の中の数字("100.gif"とかの100)を数値に変換して扱う方法を教えて欲しいのですが・・・無いですかね
112 :
nobodyさん :2010/08/02(月) 21:10:15 ID:28r5QWdl
>>111 my $file = "100.gif";
my $ex = $1 if $file =~ m/^([0-9]+)/;
print $ex; # 100
こういうこと?
しかも
>>102 は質問者の疑問をちゃんと解消しているのに
114 :
nobodyさん :2010/08/09(月) 18:03:38 ID:K6ZCyo17
use threads + XML::FeedPPでRSSを巡回するCGIを作成しています。 巡回して取得したRSSをブラウザに書き出すだけのプログラムです。 チェック先のRSSが200件程度まではうまく動作していたのですが、 現状250件でHTMLへの書き出しが途中で止まってしまいます。 最初はタイムアウトを疑っていたんですが、 ブラウザのkeep-alive、httpd.confのtimeout値も300になっています。 (プログラム実行時間は30秒程度) スレッド数に上限とかあるんでしょうか? なにかヒントを頂けたらありがたいです。 よろしくお願いいたします。
スレッドを数百発行してないかチェック。
116 :
114 :2010/08/09(月) 18:25:11 ID:K6ZCyo17
>>115 チェック対象のRSS数のスレッドをnewしてthread->joinで終了待ちしてます。
なので、仰るとおり100以上のスレッドを発行している状態です。。。
ありがとうございます。修正してみます。
117 :
114 :2010/08/09(月) 18:38:49 ID:K6ZCyo17
すみません、よくよく考えたらThread::Semaphoreで並列数を50に設定していました。 なのでスレッド数はマックス50件です。
いったんブラウザではなくコンソールで実行してみて、全ての RSS に対して 最終実行日時 実行結果の HTTP レスポンス 取得に掛かった時間 を記録して、どこが引っかかってるのかチェックしてみては?
119 :
114 :2010/08/09(月) 18:51:43 ID:K6ZCyo17
>>118 特定のRSSが原因かと思い、チェック順序を逆順にしたりして検証しましたが、
やはり数が問題のようです。どのようなRSSをチェックさせても220〜225件程度
チェックしたあたりでHTMLの出力がとまってしまいます。
(コンソールでも同様です)
※追加情報
apacheのエラーログには「Out of memory!」、「Ouf of memory(Needed 8164 bytes)」
と記述されていました。
スタックサイズが足りない???
perl で thread 使う時点で ng
121 :
nobodyさん :2010/08/14(土) 15:19:13 ID:5o00tDGC
my $query = CGI->new; *in = $query->Vars(); Encode::from_to(*in, 'shiftjis', 'utf8'); でUTF-8にエンコードされません やりかたが違うんでしょうか?
122 :
nobodyさん :2010/08/14(土) 15:50:24 ID:5o00tDGC
でけた事故解決 my $query = CGI->new; *in = $query->Vars(); foreach (%in) { Encode::from_to($_, 'shiftjis', 'utf8'); $_ =~ s/</</g; $_ =~ s/>/>/g; $_ =~ s/'/&squot;/g; $_ =~ s/"/"/g; }
<img>タグ内にPerlの処理結果を挟み込む場合の動作がよくわからず悩んでます。 ヒントなどあればお願いします。 PerlでHTMLを出力し、その中で動的にグラフを生成しようとしています。 まず以下のようにして、望みどおりの出力を得ました。 print '<img src="graph.cgi">'; #OK これを以下のようにすると、画像でなく文字列が表示されてしまいます。 print '<img src="'. (require 'graph.cgi') . '">'; #NG またモジュール化してgetした場合も、同じく文字列が表示されてしまいます。 print '<img src="'. $graph->get(\@data). '">'; #NG なお、いずれも処理側は画像を以下のように出力しています。 print "Content-type:image/gif\n\n"; binmode STDOUT; print $image->gif; #GD::Graphを使っている 文字列が表示されてしまう場合でも、 出力をSTDOUTからファイルに変えてみれば画像はちゃんと生成されているようです。 疑問1) 1番目の例はOKで他がNGな理由がいまいちわかりません。 疑問2) 3番目のようにOOPな感じで通したい場合、どう記述すればよいのかわかりません。 PerlでなくCGIの範疇だったらすみません。判断がつかないのです。
グラフを出力部分を別ファイルにした方がいいかな? graph.cgi でグラフ出力 HTML は print '<img src="graph.cgi">'; で OK graph.cgi にパラメータを渡す必要があっても、 graph.cgi?x=??&y=?? っていう風にすればいいだけなので解決できる
125 :
123 :2010/08/26(木) 20:13:27 ID:???
やはりその方法か、画像ファイルを出力してそれを表示するしかないですかねー \@dataとして渡したい内容が、わりと複雑なため(24時間のアクセス統計3〜5種類など) リファレンスで渡せると楽だったのですが レスありがとうございました
getのREQUEST URIは長さ制限があるから、あんまり引数が長くなるなら考えた方が良い つかそれならHTMLは静的でいいんじゃないか
$image->gifをbase64でエンコードして <img src="data:image/gif;base64,ここ"> でいけるかも
128 :
123 :2010/08/31(火) 14:10:20 ID:???
できた! モジュールの側で return MIME::Base64::encode($image->gif); として、 これを教えていただいた通りデコート指定(?)つきでimgタグに入れたら見事に表示されました これですっきりしました。どうもありがとうございました しかしこれ、PerlというよりHTMLの問題だったかもしれませんね 見分けがつかずこちらで質問してしまい、失礼いたしました
>>128 そんなことしてGD使ってサーバに負荷かけるより
棒グラフなら素直に
$resultW=幅ピクセル;
print '<img src="pink.gif" style="width'.$resultW.'px;height:5px">
とかってやった方が早くね?
円グラフならGD使う意味は分かるが。。
130 :
nobodyさん :2010/09/07(火) 21:05:39 ID:KEDp6nh+
よくあるurlの自動リンクですが、urlが長いとレイアウトを 崩してしまうので、ある一定の長さ以上は省略したいです。 正規表現に組み入れてできませんよね? となると、一旦配列に入れて一行ごとに処理せねばなりませんか?
>>130 $text =~ s{($yourURLregex)} {
my($url, $face) = ($1, $1);
...; # $face を適当に縮める
qq|<a href="$url">$face</a>|;
}eg;
サンクス テストで $yourURLregex= "s?https?://[-_.!~*'()a-zA-Z0-9;/?:@&=+$,%#]+"; $face = substr($face,1,30); でやってみたけど、エラーが出ちゃいます 下の式抜いてもだめです
結局、置換を2つに分けることにしました 1回目でurlにマーク付けて、2回目でマーク内をsubstrでカット 不格好ですけど
別にエラーなんて出ないんですが^^; エラーって出るのは、あなたがエラーしてるからからでは
全角スペースが原因に一票
136 :
nobodyさん :2010/09/08(水) 17:47:40 ID:J/6++5D2
なんででしょうね「" 」をシングルに替えてもだめです。 さくらインターネットですが。
$yourURLregex=qr/regexp/ してみ?
>>132 > $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/;
お前ら読解力あるな
読解力ないと回答なんてやってられんでしょ
141 :
nobodyさん :2010/09/14(火) 10:39:40 ID:RoOJ13yO
自作のアクセス解析を制作しているんですが、 検索エンジンからのアクセスでキーワードだけ抽出しているんですが、 エンジン毎に左オペランド?が違うのと、文字コードが違うようです。 やっぱりエンジン毎に処理を分岐するしかないですかね? 文字化けが発生する毎に分岐処理に新処理を付け加えています。 なんとか処理を単純化できないだろうか。
分岐するしかないだろうね デコード処理はguessとかでどうにでもなるけれども
Strategyあたりのデザパタで書けば見通しは良くなるかもね。 でも結局それぞれ違うんだから処理は書かなきゃしょうがない と思う。
144 :
nobodyさん :2010/09/14(火) 11:47:53 ID:RoOJ13yO
うー、guess に strategy と初めて接する関数が出てきた・・・(;´Д`) 手元の逆引き大全の索引をみる限り、両者ともでてこない。 そんなによく使う関数なの?
145 :
nobodyさん :2010/09/14(火) 11:59:48 ID:RoOJ13yO
まー検索エンジンごとに分岐するのがいいかな
147 :
nobodyさん :2010/09/14(火) 12:50:04 ID:RoOJ13yO
ちなみに、検索エンジンつってもほとんど知られていないエンジンもけっこうあるのね。 google yahoo bing goo exite biglobe nifty ・・・ そのレベルまでかな。まるっきり知られてないっぽいエンジンまで分岐するとなると分岐が増えて増えて・・・ 先日の外部テキストに分離した部分は分岐の部分なんですよ。 require して使う話ね。 これなら、分岐の部分だけ増設できるでしょ。
>>147 perl界隈では有名(なのか?)なアクセス解析スクリプトの AWStats
http://awstats.sourceforge.net/ これのパッケージ内に、検索エンジンごとの定義ファイルみたいなのが含まれてるから、
それを参照するがよろし。
但し基本英語圏のエンジンがほとんどで、日本語圏のサイトは少ない。
あと、各エンジンごとの検索パラメータ、googleならq=,yahooならp=とかもある程度はわかるが、
さすがに文字コードまではわからんから、そこらへんは自前でやる必要があるけど、
かなり参考にはなると思う。
練習にutf-8で掲示板を作ってみようかと思ってる初心者なんですが、右も左もわからないんで教えてください。 cgiファイル、ログファイル、HTML出力すべてutf-8にしようと思ってるんですが、 use 〜;やbinmode ~;とか一般的に必要とする物ってあるんでしょうか? 自分の環境はwindowsで借りようと思ってる鯖がfreeBSDでperl5.8のようです。 ついでに文字コードがutf-8Nで改行コードはCR+LFでおkですか?
本当の初心者なら文字コードより危険な入力を弾く勉強が先だと思うけど その点英語圏は楽でいいよなー
152 :
nobodyさん :2010/09/15(水) 08:52:32 ID:jrRD4zmE
英語圏はいいよなー
153 :
nobodyさん :2010/09/15(水) 10:56:10 ID:FawmhmXv
すいませんフォームから送信されたPOSTとGETを取得することはPerlではどのように書くのでしょうか? PHPだと$_GETと$_POSTで出来るのですがPerlではどのように書くのでしょうか?
use CGI; my $m = new CGI; my $name = $m->param('name');
155 :
nobodyさん :2010/09/15(水) 13:38:01 ID:5exFybXu
use strict; してて$var001、$var002、・・・$var850 くらい変数があります。 スクリプトのはじめに our $var001; our $var002; our $var003; ・ ・ とか my ($var001,$var002,$var003・・・) みたいなことを書かないといけないのですが、 これをまとめて一括で定義する方法があれば教えてください。
配列使え
157 :
155 :2010/09/15(水) 13:49:49 ID:5exFybXu
コードはすでに書いてしまって あとから、「あ”、しまった!」ってなってます。orz
my @var my %var
printf '$var%03d,', $_ for 1..850;
今日はにぎやかだなここw
161 :
nobodyさん :2010/09/15(水) 14:21:16 ID:q2N7SUAH
みんな難しいことやってんだなあ。
>>155 そういうプログラムなら、
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のような操作はできないしね。
perl難しすぎる サニタイズの方法がわからん
適当 sub sanitize{ $html = shift; $$html =~ s/&/&/g; $$html =~ s/</</g; $$html =~ s/>/>/g; $$html =~ s/"/"/g; $$html =~ s/'/#&39;/g; return 0; }
165 :
nobodyさん :2010/09/15(水) 14:39:34 ID:q2N7SUAH
ねえねえ、配列の初期化って()意外は駄目なんだね。 @hairetu = ''; も @hairetu = ""; も、$hairetu[0] に空欄?が入っちゃうのね。 正解は @hairetu = (); だた。 配列の初期化(空欄化)って他にどうしてる?
undef
そりゃ左辺が配列型なのに、右辺がスカラー型だったらダメだろう ホントにぎやかだねw
集合とか考えると初期化はφ=空集合=()を代入するだろJK
169 :
nobodyさん :2010/09/15(水) 14:46:19 ID:q2N7SUAH
>>167 そういやそうだなw
しかし、皮肉交じりに人をバカにするその口調は会社でも同じなのか?
だとしたら相当に嫌われてるぞおまえ。
もう少し勉強した方がいいってことですよ:-)
一理あるな。
おれが入門時に読んだ参考書には new が全く使われてなかったんだけど、 これはどういう概念なんだろうか? これこそ初期化?
インスタンス作成
174 :
nobodyさん :2010/09/15(水) 15:14:26 ID:q2N7SUAH
もそっとわかりやすく。 いよ!色男!
クラス名(めい)とリファレンスを関連(かんれん)付(づ)けたものを返(かえ)すメソッドだよ わかったかな
perl だとさオブジェクト作成とかよりも、普通に関数作ってくだけで問題無いだろw
モジュール化すると再利用がきくからな
ってか、Perlにおいて new は只のサブルーチンだし・・
コンストラクタとして定義したサブルーチンだろ ただのサブルーチンという言い方はおかしい
181 :
nobodyさん :2010/09/15(水) 21:27:04 ID:st8PUYRk
> コンストラクタとして定義したサブルーチンだろ > ただのサブルーチンという言い方はおかしい new という名前だと何か意味あるっけ?
慣習的にコンストラクタにはnewと名付けるんだが
名付けたところで、ただのサブルーチンでしょ。
コンストラクタと定義したサブルーチンだと何度言ったら(ry
どこにそんな定義があるの?
はいはい
Perlでコンストラクタたりえるのは、定義した関数(サブルーチン)内で blessされたリファレンスを返すからであって、他言語のように"new"自体は 言語構造でもなければ組込みの関数とかでもないでしょう。
言い方だけの問題だからどうでもいいよ...
Perlが生き残れるかはこのスレのサポートにかかっている
Perlって、そんなヤバい状況なんですか?
perlのバッチ処理で、 回線の負荷を5分間隔で 調べたいのですが、 方法はありますでしょうか? 当方、光でインターネットに つながっています。
回線の負荷というのは何を指すの
5分毎にパケット通信量を取得して前回の通信量と比較する
問題設定がおおざっぱ過ぎるな。方法はあるよ。 もう少し自分の頭で考えてちゃんと作ってみてどうしてもわからない ところをピンポイントで聞かないとこういうとこでは役に立つ回答は つきにくい。 でもそんなのいろいろあるから自前で作ることにこだわらず拾って きて使えばいいんじゃね? mrtgとかmuninとかcactiとか。
>>193-195 漠然としすぎていました。
失礼しました。
現在、MRTGのグラフで「回線の負荷」と称して、下記の方法でトレンドを見ています。
・自プロバイダ(@nifty)のHPスペースに1MBのファイルのアップロード・ダウンロードを
行い、その所要時間をMRTGでグラフ化しています。
で、この方法が正しい考えなのか否か、また、こういう良い方法があるよ
という参考意見がありましたら、レスをお願いします。
それperlと何の関係もないじゃん。どこが適切かは俺もわからんので 案内はできんけど。 考え方的にはわからんでもないな。量的に許される程度なのかどうかは 個別の事情だし。
>>198 レスありがとうございます。
そうなんですよね。
前は10Mでトレンドを取っていたのですが、
本末転倒なので、1Mに変えた次第です。
経路の途中の混み具合を知ろうと思うと実際に取って見るぐらいしか 方法はないんだよな。途中の通信業者からトラフィック測定データを もらえるようなコネでもない限り。
traceroute の結果で経路の混み具合は分かるじゃん
202 :
192 :2010/09/17(金) 13:56:22 ID:???
今日からなぜか、put,getコマンドで所要時間が出力されないようになりました。 @niftyさん、なにか変えたのでしょうか。。。 ということで、tracerouteも含め別の方法を考えてみます。
203 :
nifty :2010/09/17(金) 14:19:02 ID:???
ぼくのせいにするのやめて
204 :
perl初心者 :2010/09/17(金) 14:19:08 ID:vsIN50JT
メールフォームに添付ファイルを付けて処理しようとしたら、can't build entity: no body, and not multipartというエラーが出ます。 添付ファイルの処理を加える前は正常に動作していました。 他のページで同じ質問にあぽーんでかたずけられてましたが、どなたかご教示頂ければ幸いです。 よろしくお願い致します。 ※環境(参考情報) CentOS Apache perl5.8.8 use Net::SMTP; use Encode; use MIME::Entity; use CGI; 送信フォームのエンコード:utf8 cgiのエンコード:なぜかiso-2022-jp
Perl使える方でRubyかPythonも使える方にお伺いします 今からやる場合、どれがいいですかね? 用途はコマンドラインから動かすのとCGI利用です
>>204 ソース見てないので何ともいえんが
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も同じこといえる
どっちもレガシーになりつつあるけどね。
207 :
perl初心者 :2010/09/17(金) 15:49:22 ID:vsIN50JT
>>207 添付ファイルを一旦サーバー上に保存せんとダメ
だから
open FileName.jpg: No such file になる
メール送信後に削除ね。
>>207 スクリプト2行目に
use CGI::Carp qw(fatalsToBrowser);
の1行かいたら、わざわざエラログ見なくて済む。
210 :
perl初心者 :2010/09/17(金) 16:15:05 ID:vsIN50JT
ご回答ありがとうございます。 たしかに我ながらアポーンな痛い愚問でした。
あぽーんて
まともなプログラム書くならお好みでってとこだけど、 コマンドラインでワンライナー限定だとperl最高だと 思う。慣れもあると思うが。
perl はサンプルは一杯あるけど、自分で試行錯誤しようとする気持ちがないと クソサンプルの餌食になってしまうよ 1つのやり方に色んなやり方あって柔軟だとは思うけど、初心者には迷うだけなんだよねw
Perlが読めればいろんなCGIスクリプトが読めるわけでうらやましい
もしかしてお前読めないの?
>>214 ちしょうはチンコでも吸ってろ
って意味
今では、フォームの受け取りに 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; } } って書いたほうが、 素人からは何やってるかが書かれている分、良いように思う。
あっ、そう
仕組みなんて分からなくていいんだよ ブラックボックスでおk
inとか使ってる奴はcgi-lib.pl時代の亡霊
ライブラリに入ってるコード毎回コピペするのかよw
写経だよ写経。 悟りが啓けるだろ。
何かバグってるときライブラリならアップデートが楽なのに、 あらゆるプロジェクトを書き直すのか。ご苦労さんってこった。
225 :
nobodyさん :2010/09/19(日) 23:22:09 ID:ND7IF1JX
>>218 my $query = CGI->new;
*in = $query->Vars();
の二行をわかりやすく説明してくれたらどんなに感謝することか。(;´Д`)
おーー! 1行になったw
( ゚д゚ )
> の二行をわかりやすく説明してくれたらどんなに感謝することか。(;´Д`) それこそソース嫁。
>>224 プロジェクト書き直すのにお金が発生するって前提だと
ある意味、悪いことではないかも
新言語がリリース→新言語でソフト開発→普及する→追加機能のニーズ
→車輪の再開発→開発案ネタ切れ→仕事がなくなる→誰にも見向きされなくなる
→ちょっと使いやすくした新言語をリリース→新言語でソフト開発→普及する
→追加機能のニーズ→車輪の再開発→開発案ネタ切れ→仕事がなくなる
→誰にも見向きされなくなる
プログラミング市場とは、ちょうどウィルスとウィルス対策ソフトの関係のように
イタチゴッコな構造でなければ繁栄しない。
my @List = WorkA -> WorkB の「->」の意味ってそもそもどんな意味? WorkAをWorkBに任せる? それとも オブジェクト指向的に @List.WorkA.WorkB; ってこと?
WorkAのWorkBを@listに代入する
新言語にリプレースしないからといって脅威が発生するわけでもないのに
workAオブジェクトの属するクラスで呼び出せるworkBを呼び出す。 workBはリストを返すので代入する。
>>231 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]
237 :
231 :2010/09/21(火) 10:22:02 ID:???
>>235 ,
>>236 なるほど、ありがと!
ドキュメントあったのね。
グーグルで「perl ->」で検索できなかったら
ドキュメントが探せないってのは痛いなぁ。
googleは、「->」の文字列が無視されてしまう。
Perl アロー演算子
検索で困る人が多そうなのはたいてい perlop か perlvar の どっちかに載ってる傾向があるような気がする。
240 :
nobodyさん :2010/09/22(水) 01:11:34 ID:AC22vKYS
1: 自分はこういう事がしたい。
index.htmlのプルダウンメニューで「あ」を選択すると、value="01"がchoice.cgiに渡されて
http://www.ほげ.jp/a/ に飛ぶようにしたい。
2: それでこんな風にやってみたが・・・
index.htmlとchoice.cgiは下に記載。
3: こんなエラーが出て上手く行かなかった。
choice.cgiの数値を$page08ぐらいまで作ると500 Internal Server Errorを吐き出して停止する。
これを$page08、$page09と数値を増やしても、しっかり動くようにできませんか?
index.html
<form action="choice.cgi" method="GET">
<select name="choice" onchange="this.form.submit();" size="10" style="width: 200px;">
<option value="01">あ</option>
<option value="02">い</option>
<option value="03">う</option>
<option value="04">え</option>
<option value="05">お</option>
<option value="06">か</option>
<option value="07">き</option>
<option value="08">く</option>
<option value="09">け</option>
<option value="10">こ</option>
<略>
</select>
</form>
241 :
nobodyさん :2010/09/22(水) 01:12:47 ID:AC22vKYS
世の中には8進数というものがあってだな。
> elsif($value == 08) {$jump = $page08;} 書き損なうも何もここで Illegal octal digit 出るだろ
08 は八進数っていう認識になっちゃうから 数字で扱うならアタマに 0 は付けないように。 でも文字列として扱った方が何かと楽なので、 elsif($val eq '08')〜 とした方が良いかと
if($value eq '01'){ $jump = $page01; } elsif($value eq '02'){ $jump = $page02; } elsif($value eq '03'){ $jump = $page03; } elsif($value eq '04'){ $jump = $page04; } elsif($value eq '05'){ $jump = $page05; } elsif($value eq '06'){ $jump = $page06; } elsif($value eq '07'){ $jump = $page07; } elsif($value eq '08'){ $jump = $page08; } elsif($value eq '09'){ $jump = $page09; } elsif($value eq '10'){ $jump = $page10; } <略> print "location: $jump\n\n"; exit;
正規表現でカッコにマッチしたのは $1、$2、$3、…に格納されますが、 これらをまとめて取り出すための特殊変数とかありますか。 「perl 特殊変数」でぐぐっていくつかページを読んだのですが、 それらしい特殊変数がみつかりませんでした。
use strict; use warnings; my $str = '今日は暑かったかもしれない。 しかし今日と違って明日は寒いようだ。 今日はお買い物に行った。'; my @test = $str =~ /今日.*?っ/gi; print join("\n", @test);
>>248 ありがとうございます。
while文との組み合わせでも動くでしょうか。
ためしたとろ、無限ループになるようです。
my @x;
while (@x = $str =~ /¥w+/g) { print Dumper(¥@x); } # 無限ループ?
for my $str ( @str ){ if( my @x = $str =~ /\w+/g ){ print Dumper( \@x ); } }
use strict; use warnings; my $str = '今日は暑かったかもしれない。 しかし今日と違って明日は寒いようだ。 今日はお買い物に行った。'; my @test = $str =~ /今日.*?っ/gi; print "文字列:$str\n"; print "_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/\n"; print "foreach を使う場合の一例\n"; foreach my $regex (@test){ print "取得したのは : $regex\n"; } print "_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/\n"; print "while を使う場合の一例 \n"; my $str_bak = $str; # 削除しながら取得するため、バックアップをとる while($str =~ s/(今日.*?っ)//){ print "取得したのは : $1\n"; } $str = $str_bak; # バックアップを戻す
実行結果: 文字列:今日は暑かったかもしれない。 しかし今日と違って明日は寒いようだ。 今日はお買い物に行った。 _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ foreach を使う場合の一例 取得したのは : 今日は暑かっ 取得したのは : 今日と違っ 取得したのは : 今日はお買い物に行っ _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ while を使う場合の一例 取得したのは : 今日は暑かっ 取得したのは : 今日と違っ 取得したのは : 今日はお買い物に行っ
253 :
240 :2010/09/22(水) 19:08:57 ID:???
>>242-246 うおーーー、皆さんレスありがとうございます。
やっとこ仕事が終わったので、これから弄ってみます。
254 :
240 :2010/09/22(水) 20:22:03 ID:???
動作確認完了しました。 08に特別な意味があることを勉強できました。 感謝です。
my $s = "a s,d f"; my @r = split /[\s,]+/, $s; my @f = split /([\s,]+)/, $s; @rと@fの結果が一致しないのは何故ですか?m//において()は特殊変数$1,$2...への記憶でしかないのですよね?
see perlfunc.pod PATTERN に括弧が含まれていると、デリミタ内の部分文字列にマッチするものも、 リスト要素に含まれるようになります。 split(/([,-])/, "1-10,20", 3); は、以下のリスト値を生成します。 (1, '-', 10, ',', 20)
Shell::* や Term::* のように、CLI環境でシェルのようなものを提供するモジュールで、出力にlessのようなページャを使えるものはないですか? 出力が長い場合、ターミナルのバックログを見ているんですが、lessが使いたいです
>>258 perl hoge.pl | less
これじゃだめなの?
260 :
nobodyさん :2010/09/27(月) 11:10:54 ID:hIL0AOHQ
自作のアクセス解析なんだけど、これ分かる人いないかな? 1秒間に6回のアクセスをし、 アクセスする度に違ったHPのURLをリンク元として記録を残していく同一アクセス者がいるんだよ。 以前から見慣れないリンク元URLが見受けられるようになったんだけど、 見に行くとリンクなんてしてなにわけ。おかしいでしょ? これは何かあるんじゃないかな。 思うに、SEO業者でリンク元URLを残していくことで、、、
スレ違い、あと普通
しかもマルチポストか死ね
263 :
nobodyさん :2010/09/27(月) 14:22:26 ID:o+RpwStb
駄目なスレだなあ 何の役にもたたない
>>263 ID変えて逆キレ カコワルイ(・A・)イクナイ!!
すんません。宿題下さい、ってとこにも書き込んでしまいました。
真面目に質問です。
トーナメント表を作りたくてPHPの勉強始めました。
ここが目標です。
http://hanamachi.com/tnmt/i212.html 1.ブラウザから参加者登録
2.点数を記入して、勝ち上がりを更新する
参考になる考え方、sampleなどご指導下さい。
よろしくお願いします。
266 :
nobodyさん :2010/09/28(火) 04:11:04 ID:5eMRq53y
unless (-d "~/foo/bar") { system("mkdir ~/foo/bar"); } linux で ~/foo/bar が存在しないなら、そのディレクトリを作成する ということをしたいのですが、-d "~/foo/bar" が正しく判定されません。 ~/foo/bar ディレクトリがあるのに、無いと判定されてしまいます。 -d "/home/andy/foo/bar" というように絶対パスなら正しく判定されます。 -d "~/foo/bar" の場合何がまずいのでしょうか?
>>266 なんかようわからんけど -d "$ENV{HOME}/foo/bar" なら動いたよ
想像だけどPerl自体はチルダを展開しなくて、systemなんかでシェルが処理するときは展開するんじゃないか?
>>268 ありがとうございます
多分
>>268 さんのおっしゃる通りなんでしょうね
「初めてのperl」にも chdir の説明のところですが「チルダがホームディレクトリを指すのは
シェルの機能だからOSを直接呼び出すPerlでは使えないよ」と書いてあります
でもなぜ system 関数では使えるの?という疑問が出るのですが
はっきりした事はググっても見つかりませんでした
>>269 いやぐぐるまでもなくマニュアルに書いてある。
ttp://perldoc.jp/docs/perl/5.10.0/perlfunc.pod より:
# system LIST system shell
# system PROGRAM LIST
exec LIST とほとんど同じですが、まず fork を行ない、親プロセスではチャイルドプロセスが終了するのを wait します。
exec の項で述べたように、引数の処理は、引数の数によって異なることに注意してください。 LIST に複数の引数がある場合、
または LIST が複数の要素からなる配列の場合、リストの最初の要素で与えられるプログラムを、リストの残りの要素を引数
として起動します。スカラの引数が一つだけの場合、引数はシェルのメタ文字をチェックされ、もしあればパーズのために引数
全体がシステムコマンドシェル (これは Unix プラットフォームでは /bin/sh -c ですが、他のプラットフォームでは異なります)
に渡されます。シェルのメタ文字がなかった場合、引数は単語に分解されて直接 execvp に渡されます。この方がより効率的です。
「スカラの引数が一つだけの場合〜」のところをよく読め。この説明でわからなければ
勉強が足りないのでがんばれ。
>>270 どうもありがとう
やっぱりちょっと難しい。もうすこし調べてみます
272 :
nobodyさん :2010/09/29(水) 14:40:47 ID:LPXumyyo
if(-f "hoge"){} の否定は if(!-f "hoge"){} でしょうか? if( !(-f "hoge")){} でしょうか?
unless(-f "hoge"){}
>>273 ありがとうございます
ifを使った否定はどちらでしょうか?
試せばわかると思うけどどっちでもいけるので後は好み
use CGI; my $cgi = new CGI; my $cgi = CGI->new; 上述の二つはどう違うのでしょうか?
おんなじです。 my $cgi = CGI::new('CGI'); とも書けます。まず使わないけど。
>>277 結果は同じだけど過程が違わなかったっけ?
記憶が曖昧ですまんが
>>276 の2つはDeparseしたらどっちも 'CGI'->new と解釈されてたよ。
んでもってそれは
>>277 のシンタックスシュガーであると。
newに引数使うときにCGI->newとか使う希ガス
俺が勘違いしてたみたいだね。 横やり失礼
open( DATA, "<", $logAll); flock( DATA, 2); $cnt = <DATA>; close( DATA); chomp( $cnt); $cnt++; open( DATA, ">", $logAll); flock( DATA, 2); print DATA $cnt; close( DATA); このように書くと、ログがリセットされてしまうことがあります。 どのようにかけばいいでしょうか?
open DATA, "+<", $log; flock DATA, 2; $cnt = <DATA>; chomp $cnt $cnt ++ seek DATA, 0, 0; print DATA $cnt truncate DATA, tell(DATA); close DATA; # chompする必要あるの?
注意する点は、 flockが有効な間に読んで1増やして書くまでやらないと ロックする意味がない '>'で開くと開いた瞬間にファイルが空にされるので、 そのあとでflockしても手遅れ(ロックしてないうちに ファイルを壊したことになる) use Fcntl qw(:flock :seek); open( DATA, "+<", $logAll); flock( DATA, LOCK_EX); $cnt = <DATA>; chomp( $cnt); $cnt++; seek(DATA, 0, SEEK_SET); print DATA $cnt; close( DATA);
セミコロン抜けすぎワロタ>283
286 :
282 :2010/09/29(水) 21:14:18 ID:???
ありがとうございました。
リセットされないようになりました。
教えていただいたコードの中でわからないことがあるので、
もう一度質問させてください。
seekについてしらべてみたのですが、どのような動作をするのでしょうか?
ポインタを移動させるということはわかったのですが、そのポインタが先頭に行くということは
既存の文字の前にインサートすることにはならないのでしょうか?
また、
>>283 さんのtruncateはファイルサイズを変更しているようですが、
どのようないみがあるのでしょうか?
お手数をおかけしておりますが、宜しくお願いいたします。
>>286 インサートじゃなくて上書き。
truncateしないと新たに書いた文字列がもとのより短いときに
問題になる。たとえば100を99にしようとしても990になっちゃう
みたいな。今回は1ずつ増やすので桁が減ることがないから
truncateしなくても大丈夫なので284はさぼったんだと思うけど
一般的には必要。
288 :
282 :2010/09/29(水) 21:31:14 ID:LPXumyyo
>>287 ありがとうございます。
ポインタはC言語と同じ動きをするんですね。
ファイルポインタ移動後に挿入してくれる言語があるなら知りたい
蝉焜炉
291 :
nobodyさん :2010/10/01(金) 01:36:17 ID:qWU05yPj
自作のショッピングカートを使ってきたんだけど、 この度、クレジットカード決済を同CGIに導入することになったんだが、 接続とデータの渡しに更なる知識と技術が必要みたいなんだな。 リファレンスっていうのがよくわからない。 どなたか、分かりやすく説明していただけませんか?
>>291 さすがにそれは…
頼むから人の金を扱わないでくれないか
293 :
nobodyさん :2010/10/01(金) 01:49:05 ID:qWU05yPj
>>292 どうして?
どういうこと?
SSLは導入してるよ?
リファレンスも理解してないレベルの奴が作ったプログラムに 金を扱わせるのは怖いって話だろ。SSL使ってりゃいいって もんじゃない。
リファレンスもわからずに組んでるようなショッピングカートって……
>>291 perlrefを嫁。
↑に書いてあるようなボリュームのことを1行で聞いて済ますとは大胆な。
こういう人はクレジット会社に不正データ送りまくって 損害賠償請求でもされないと、自分のやっていることの 問題がわからないタイプの人
>>293 そもそもクレジットカード決算とリファレンス直接関係ないし
WEBでビジネスやろうと思うなら少なくともCSRF・XSS・SQLインジェクションくらいは理解した上で質問をしろ
熟練して、リスクとコストを見比べてそれでも自作でやろうと思うならそれでもいいが、
どんなリスクがあってそれがどれほどの損害を生むかを理解していないうちから人の金を扱うのは
無責任にもほどがある
299 :
nobodyさん :2010/10/01(金) 16:27:35 ID:qvat8ps4
そうすると、CGIで注文を受けるシステムを作るのは無謀だと? それは全く違うと思うのだが。 クレジットカード決済代行業者の存在は知ってる? 上手く繋げられれば決してありえない話ではないと思うのだが。
知識もなしに作ろうとするのは無謀だろ
直接は関係ないけどそういうレベルだと他のスキルもそれなりなんだろうな ということだよ。 決済代行につなげて出来た出来たじゃすまないんだよね。
その程度の知識で進むステップじゃないだろう ってことだよw >>クレジットカード決済代行業者の存在は知ってる? たぶんみんな知ってる あまり、自分だけ知ってるんだぜ?的な発言は敵を増やすだけで良質な回答は増えないと思う。 質問したなら、回答を得るまで下手にかつ積極的に動けないかねぇ まぁ手数料覚悟で自分のカードでテストするのも手だけど、 とりま paypal つこーとけ あそこはカード決済がテストで出来たと思った
303 :
nobodyさん :2010/10/01(金) 16:43:40 ID:qvat8ps4
>>302 代行業者の利用案内ではCGIからの繋げ方が解説されていて、
努力すれば可能なんだがな。
>自分だけ知ってるんだぜ
回答はありがたいが、どの程度の前提なのかは当然わからないわけで、
技術者は兎角視野が狭まりがち。
プログラマーでも決済代行業者知らないことはあり得るんじゃないか?
304 :
nobodyさん :2010/10/01(金) 16:46:53 ID:qvat8ps4
ちなみにじゃあ、実際にCGIプログラムから決済代行業者へ接続させるプログラム作ったことある人いる? 渡すデータってどんなデータだと思う? カード番号等は代行業者のページに入ってから入力するから、 ショップ側はタッチしないシステムになっている。 なんら問題はないと思うけどな。
>>304 業者によるぞ
決算代行と単に決済システムを置いてくれてる会社がある
代行で簡単なところはデータ渡すだけでいいけど、決済システムを置いてくれてるだけなら
自分でデータを加工して指定の方法に従って渡さないといけない。
何度も作ったことがあるけど、結構めんどくさい。
業者のシステムの仕様のマニュアルから読まないといけないから。
完全な代行業者ならデータすら渡さずに、代行業者のサイトに遷移させるだけだから、
CGIを導入するって言った時点で前社ではないんじゃないの?
しらんけど
306 :
nobodyさん :2010/10/01(金) 17:17:03 ID:qvat8ps4
>>305 >代行で簡単なところはデータ渡すだけでいいけど、決済システムを置いてくれてるだけなら
>自分でデータを加工して指定の方法に従って渡さないといけない。
これです。
つまり、商品メニューの表示と支払い合計額の計算、
個人情報の入力と送信はショップが行い、
支払い手続き等の決済は決済代行業者が行う。
ショップは名前と電話番号と決済額を決済代行業者に渡すだけで、
クレジットカード手続きは代行業者ページで行う。
めんどくさいけどギリギリでできそうなところにきている。
クレジットカード番号等の保管をしなくてもいいし、リスクもショップ側は少ない。
なにが問題だろうか。
ところが、リファレンスがわからないんだな。
配列の配列(の配列?)みたいなデータを扱う場合に必要になるっぽいのはわかりかけてるけど、
おそらくここのところがネックになってるものかと。
perllol を読めばリファレンスが何なのかわかんないままでもデータの扱いかたはわかると思う。
308 :
nobodyさん :2010/10/01(金) 17:31:09 ID:qvat8ps4
>リファレンス それが、書籍を読むと理解が難しくて。 >配列の配列 つまり、縦列と横列のある表の位置情報の指定ってことですかね。 これはわかるのですが・・・
俺も昔、リファレンスもOOPも全然わからないときに
似たようなシステム作ったことあるから出来ないって事はないと思う。
でも問題なのは
>>298 が言ってるように 動けばいいってだけじゃなくて
『CSRF・XSS・SQLインジェクション』とかの対策をしっかりしないと
みんな不幸になりますよって事だと思う。
310 :
nobodyさん :2010/10/01(金) 17:43:12 ID:qvat8ps4
確かに、CGIから決済代行業者のページに接続するシステムの場合、 どんな危険があるのかはあまり知らないのかも知れない。 盗聴はSSL使って避けるとして、 他のリスクについては想定していないかも知れない。 >インジェクション等 今検索して知ったけど、 そういう 攻撃 をされた場合は脆いかも知れない。 けど、全世界から繋がっているweb界で、リスクリスクと言われたらきりがないのでは? 顧客情報をネットサーバー上におかないことしかできないよ。
>リスクリスクと言われたらきりがないのでは? 上記の対策は最低限のことだからキリがないとかの話ではないよ。 対策不足だとレンタルサーバーの他の契約者に迷惑がかかることだってある。 特にカード決済型ショッピングカートなんていうエンドユーザーのお金に関わることなら リスクは限りなく少なくしていかないと・・・ 下手するとショップ側の信頼ガタ落ちだよ。
312 :
nobodyさん :2010/10/01(金) 18:05:04 ID:qvat8ps4
SSL利用の代行業者接続じゃ不足かい? これ以上、どうしろと?
いやw 不足だから最低でも上記の対策をしようよw
314 :
nobodyさん :2010/10/01(金) 18:11:22 ID:qvat8ps4
SSLにクレジットカード決済代行業者利用。 これで何が不足?他にどういう対策法がある?
>>306 それ矛盾してるよ
> つまり、商品メニューの表示と支払い合計額の計算、
> 個人情報の入力と送信はショップが行い、
> 支払い手続き等の決済は決済代行業者が行う。
商品の表示とか計算を代行業者がやるのに
> ショップは名前と電話番号と決済額を決済代行業者に渡すだけで、
> クレジットカード手続きは代行業者ページで行う。
なぜ、決済額を渡す必要があるの?
マニュアルを読み直すか、有償でもサポートもとめたほうがいいよ。
もし、決済額を渡す必要があるのであれば、今の知識では計算間違えとかの
リスクが大きいと思う。
316 :
nobodyさん :2010/10/01(金) 18:16:49 ID:qvat8ps4
>>315 いやいやw 貴殿の言ってるのはレンタルショッピングカートのことだよ。
私が言ってるのはクレジットカード決済代行業者ね。両者は違う。
前者は、商品とその情報を登録すればあとはお任せ(?)
後者は、諸決済の中のクレジットカード決済(コンビニも)を代行してもらうだけ。
既にカートは自作のCGIでやってまして、
これからコンビニ・クレジットカード決済を導入するんです。
何をしたいのかさっぱりわからんなこいつ
318 :
313 :2010/10/01(金) 18:20:47 ID:???
>これで何が不足?他にどういう対策法がある? 上記の対策って言うのは、『CSRF・XSS・SQLインジェクション』対策ね。 それ以外にどんなリスクがあるかを、常にアンテナ張って調べるぐらいの探求心が必要だよ。
319 :
nobodyさん :2010/10/01(金) 18:24:01 ID:qvat8ps4
>>318 その インジェクション等は検索してざっと読んだけど、
できる対策といったらアクセス制限くらいではなかろうか?それと、顧客データのサーバー非保管。
ネット上に個人情報置かないこと。
通信ではSSL。
決済では代行業者。
このほかにどんな対策がある?
なにかこう・・・
契約してるならもう交わしたと思うけど、カードの規約はかなり厳しいから 1回でも誤った操作したり(多重私とか)、金額を間違ったりしたら、契約者に 損害賠償があるぞ。 信販会社は誤った請求させられたらおしまいだからな。
>>319 お前じゃないちゃんとしたプログラマに依頼する
>>320 損害賠償じゃなくて、損害賠償請求な
322 :
313 :2010/10/01(金) 18:31:51 ID:???
> その インジェクション等は検索してざっと読んだけど、 しっかり読め。今の君が数分読んだだけでは1%も理解できてはいない。 > このほかにどんな対策がある? 『このショッピングカートは、リスクに関して無知なプログラマによって制作させているので怖い人は利用しないでください』 っていう文言を入れろ
323 :
nobodyさん :2010/10/01(金) 18:38:05 ID:iC/l9piS
>>320 今はまだ本契約はしていない。
実際に利用できるか、動かせるかのテスト期間。
けど、ほぼ間違いないんじゃないかな。
既にクレカ決済無しのネット取引経歴が何年もあるのね。
よって、誤送信の心配はほとんどしていない。
でも、請求額が違ったとしてもそれは代行業者の責任ではないでしょ。基本的に。
もちろん、個別に調べてみないとわからないけど。
それに、クレカ決済が手軽に利用できるようにするのが代行業者の仕事でもある。
ショップが利用しやすいようなサービスを追及してるはず。
>>321 ちょっとわからないね。
なにかこう、あまり知られていない言葉を言って自分の知識の広さ深さをアピールしてるような感触もしている。
SLLと決済代行業者利用のほかにどう対策しろと?
アクセス制限は既にしている。
顧客個人データはサーバー上に残さないのもやっている。
他は?
もうほっといたらいい 自分の腕に相当自身があるようだし、話を聞こうともしてないんだから 俺みたいに裁判沙汰になって初めて後悔するタイプでしょ 一回そういう目に逢えば、嫌でも身にしみる そういう俺は、基本的に金銭を扱うコードはトラウマで書けなくなった
325 :
nobodyさん :2010/10/01(金) 18:39:47 ID:iC/l9piS
>>322 君はどんだけその リスク とやらを広く深く知っているのかな。
じゃあ、既存の周囲のショップは何をどこまで実際にやっているか。
SSLと決済代行orカートレンタルくらいではないか。
どうしてこれ以上を?
うむ。 こんなやつのために巻き込まれたくもないし、 こんなやつのシステムを使う被害者を増やしたいとも思わないな。
327 :
nobodyさん :2010/10/01(金) 18:45:46 ID:iC/l9piS
あのさ、失礼なこと言うようだけど、 本当にわかってるの?
328 :
nobodyさん :2010/10/01(金) 18:47:33 ID:iC/l9piS
CSRF・XSS・SQLインジェクションとかは知ってるようだけど、 単に深い知識があるだけ?いわゆるヲタク? ちなみに、自分のサイトではどう対策しているの?
ココは初心者のスレであって、ど素人のスレッドではありません。 出直してください
330 :
nobodyさん :2010/10/01(金) 18:54:18 ID:iC/l9piS
説得力がないよw そのレスでどうして納得できる? SSL+レンタルカートor決済代行業者 で不足だとか言われたら、 ほとんどのショップがセキュリティー対策不足ってことにならないか? 確かに、それもまたそうっぽいけどね。 対策案が言えないんじゃ単なる因縁付けだよ。 重箱の隅をつつく行為だよ。 そんなのにつきあっていたらいくら経費かかることやら。 その方面の業者を太らせるだけ。違うか?
331 :
nobodyさん :2010/10/01(金) 18:59:27 ID:iC/l9piS
SSL+レンタルカートor決済代行 でもし情報漏洩等が起きたら、それはSSLまたはレンタルカートor決済代行の責任だよ。 ショップに非はないでしょ。 これ、わからない?
ワロタww
親切な俺が一つだけアドバイスを上げるとすると
SSL使ってようが、決済代行使ってようが、
そのSSL通信の中を通って、代行業者に不正な値が流れたらどうする?
不正な値を流す方法は、いっぱいアルファベットが連続したやつ。
今まで連呼してるからわかるでしょ?
今までうまくいってるからって安心してるようだけど、その今までは
代行決済がなかったから誰も相手にしてなかっただけ。
クレジットカードとか扱いだすとそのカード番号を抜くためとか、不
正請求を起こすために狙われる。
だがこれは、お前は被害者じゃなくて加害者になる。リスクがあるの
に、そのリスク対策をしていなかったという責任で加害者。
あと、
>>323 の
「請求額が違ったとしてもそれは代行業者の責任ではないでしょ。」
これは、もちろん代行業者の責任じゃなくてお前の責任。
だからお前に、信用が傷つけられたという賠償請求がある。
まず、技術より過去の裁判とかを調べたほうがいいよ。
自分がやることのリスクが金銭的にいくらかとか、参考になると思う。
自信があるなら、セキュリティ審査会社とかに君のCGIを調査してもらっ
たらいいよ。
法人なら簡単な検査を無料でやってくれるところがある。
333 :
nobodyさん :2010/10/01(金) 19:05:54 ID:iC/l9piS
>>332 >SSL使ってようが、決済代行使ってようが、
>そのSSL通信の中を通って、代行業者に不正な値が流れたらどうする?
>不正な値を流す方法は、いっぱいアルファベットが連続したやつ。
>今まで連呼してるからわかるでしょ?
その計算は自作CGIで行うから、そこで間違いがあった場合は責任はショップにあるね。
しかし、計算違いはまず 無い。
よって、不正な値が流れることは 無い。
SSLの意味はわかってる?
>今までうまくいってるからって安心してるようだけど、その今までは
>代行決済がなかったから誰も相手にしてなかっただけ。
意味不明
>クレジットカードとか扱いだすとそのカード番号を抜くためとか、不
>正請求を起こすために狙われる。
SSLの意味や存在意義はわかる?
>だがこれは、お前は被害者じゃなくて加害者になる。リスクがあるの
>に、そのリスク対策をしていなかったという責任で加害者。
SSLの他にどういう対処法がある?と何度も聞いている。
>>331 親切だからもう一つアドバイス
>SSL+レンタルカートor決済代行 でもし情報漏洩等が起きたら、それはSSLまたはレンタルカートor決済代行の責任だよ。
>ショップに非はないでしょ。
完全にショップ側に非がある。
SSLは通信を暗号化するのであって、通信中以外に漏れた内容には関知
しない。アルファベットのやつは通信中に漏らす行為じゃない。
あと、SSLには契約するときに補償額が決まってるから、裁判で賠償請
求があったとしても、その補償額以外の補償はしてくれない。
安いSSLだったら、1万円以下の補償額。
決済代行業者も流れてきた情報に従って決済をするだけだから、その情
報を流したショップに非がある。
このフローがわかってないようなら、プログラムというものがどう動い
てるかもわかってないから、本気で勉強しなおした方がいいと思うよ。
Perlならオライリーの入門書を3冊買えばいい。
335 :
nobodyさん :2010/10/01(金) 19:07:59 ID:iC/l9piS
>>332 >信用が傷つけられたという賠償請求がある。
この点は確認しておくよ。
しかし、(ry
>セキュリティ審査会社
そうなんだ?
この話は有難い。御礼。
こいつSSLがなにかもわかってねぇwwwww
337 :
334 :2010/10/01(金) 19:09:08 ID:???
ダメだこりゃ。 SSLがどういうものかもわかってないみたい。
338 :
nobodyさん :2010/10/01(金) 19:11:08 ID:iC/l9piS
>>334 情報がどこで漏洩したか確定すべきという話は無しでその結論に帰結するのか?
ショップから漏れたならショップの責任だろうが、
代行業者から漏れたなら当然、代行業者の責任。
君はちょっと先走ってるよ。
339 :
nobodyさん :2010/10/01(金) 19:12:54 ID:iC/l9piS
>>334 オライリーは難解で無理。
まあ、クレカ代行業者との本契約では今言われた部分の確認は必ずするよ。
SSLって無敵だったのか 初耳だ
341 :
nobodyさん :2010/10/01(金) 19:14:33 ID:iC/l9piS
SSLとは、通信途中での盗聴等から情報を守る為に暗号化して送信する技術。 そんなとこ。 おかしいか?
でも脆弱性つけば盗めるんだな、これが
そろそろこの流れも飽きてきたから、ちょっと他の質問を。 シングルトンってみんな当たり前のように使ってるのかな? この前、自作mvcでちょうどショッピングカート作ったんだけどw シングルトン意識しながら作ったらほとんどシングルトンなんじゃないかと思って・・・ CだってVだって1つ以上のインスタンスは不要な気がする。 俺の設計がイマイチだったのかな
344 :
nobodyさん :2010/10/01(金) 19:16:18 ID:iC/l9piS
>>342 君のかかわるwebサイトではどう対策しているんだい?
345 :
334 :2010/10/01(金) 19:17:03 ID:???
諦めないでこれはマジでアドバイスしておいた方がいいな・・。
>>333 >しかし、計算違いはまず 無い。
君が作ったプログラムが計算間違えをしないでも、XSSなりを使ったら
その計算を狂わすことも、そもそも計算処理を通さないでも決済に流す
ことができるの。(もちろん対策していたら大丈夫。
>SSLの他にどういう対処法がある?と何度も聞いている。
SSLは通信を暗号化するものだから、XSSなりの対策とは無関係。
君が商品を送るときにかぎの付いた箱で送ったとしても、かぎを閉める
前に別の商品に摺りかえられたり、そもそも君じゃない誰かがその箱で
送られたらどうする?
運送(SSL)は安心でも、別の商品が届いたり、自分で送ってないものが
届くでしょ?
何度も言うけど、SSLは通信の暗号かね。
ショッピングしてる最中とか、住所入力したりしてるのは通信じゃない。
>>338 もちろん代行業者で漏れたら、代行業者の責任だよ。
でも、代行業者は君異常の知識を持った人がそろってるよね?
なら、どっちがリスクがあるか考えてみよう。
>>339 オライリーの入門書が難解というレベルなら、今のコードも相当危ないと
思うよ。
>>344 XSS対策
DB使うならSQLインジェクション対策も
この板ってこんなに親切だっけ それほどID:iC/l9piSがあほなのか
348 :
nobodyさん :2010/10/01(金) 19:23:04 ID:iC/l9piS
>>345 >今のコードも相当危ないと
どう危ないんだい?
さすがに釣りに思えてきた。 釣りじゃなかったら相当やばいぞこいつ。
350 :
nobodyさん :2010/10/01(金) 19:26:29 ID:iC/l9piS
>>346 これは、入力にタグやスクリプトを許さないことで避けられるかな?
これだけのアドバイスでも業者に頼めば、数万とか数十万するんだからもう十分でしょ。 これだけ話きかないんなら、審査会社に言われたことも聞かないだろうし。 もうあとは、自分に被害が出て悔い改めるしかない。
オライリーすらろくに理解できない奴が作ったのなんて誰も使いたくないと思うわ
353 :
nobodyさん :2010/10/01(金) 19:31:40 ID:iC/l9piS
>351
そんな、すぐに実感なんてできないよ。
ましてや、姿形も経歴も、文字意外に何もわからないんだから。
どういう前提で話してるのかもわからないんだから。
これはわからん?
>>352 レベル高すぎだよ。
あんな難しい本、読む気になれん。
354 :
nobodyさん :2010/10/01(金) 19:33:45 ID:iC/l9piS
じゃあさ、今この2chでXSSやってみてくれないか? 2ちゃんってSSL使ってないでしょ?ならば非常に危険なはず。 XSS対策はできてるの? 君らの話は理屈ではわからなくはないけど、いまいち実感が持てない。 実感の持てない危険を感じろといわれても困る。
Perlでプログラムを作る時って、どのバージョンをターゲットにしてる? 5.6はさすがにもうターゲットから外していいだろうか。 KENTとか相当古いバージョンもサポートしてるけど、需要あるの?
2chは丹念に脆弱性対策してるから^^;
357 :
nobodyさん :2010/10/01(金) 19:35:01 ID:iC/l9piS
フォームからスクリプト等送って いけない行為 やってみてもらいたい。
>>354 実感しなくてもいいよ。
君には難しいから
>>355 おれも 5.8以降かな
utf8で書くし
361 :
355 :2010/10/01(金) 19:36:33 ID:???
>>358 ありがとう。
官公庁みたいにパッケージが追加できない環境で、5.6なところって
もうないかな?さすがに5.8に移行してる?
362 :
nobodyさん :2010/10/01(金) 19:37:55 ID:iC/l9piS
よしわかた。 じゃあきみらレベルのプログラム作れるようになるよ。 君らはどんな環境下でプルグラムを学習したんだい? 相当、専門的にやったんだろうね。
>>361 さがせば5.6使ってるところもあるかもしれないが、実際組むとなったら5.8を基準にして組むのが一番やりやすいと思う
追加パッケージが入れれない環境で、HTML::Templateが入ってないのはつらい Perlはなんで標準モジュールにテンプレートいれないの? Templateじゃなくて、HTML::Templateでいいからマジで入れてほしい。 まぁ、いまさら入れたところで遅いか・・。 ところで、追加で入れれないところで作業するとき、自作でテンプレートシステム作ってる? あ、HTML::Templateってコンパイル必要なかったっけ?
たぶんコンパイルは必要なかったはず
>>363 自分も5.8をターゲットにしたいんだけど、他の環境の人は見る機会ないかと思って。
某大手イベンターの自社サーバが5.6だってシステムを作り直したことがあってから、5.6にはトラウマ。
あれから2年たつけどいまだにあそこは、5.6で納品させてるんだろうな・・。
Templateもオプションによってはコンパイル不要じゃなかったでしたっけ。
367 :
nobodyさん :2010/10/01(金) 19:47:22 ID:iC/l9piS
ここ、初心者スレなんだがな。
369 :
nobodyさん :2010/10/01(金) 19:50:12 ID:iC/l9piS
おかしいと思うわ。 語られてることは初心者レベルではないと思うんだが。 自分らの知識能力の自慢かアピール?
さすがに6になったら入るでしょ。 でるの10年後くらい?
smarty並の機能を求める場合は、何を使えばいい?
>>371 Smartyが機能多いとは思わないのは、使いこなせてないせい?
SmartyレベルならHTML::Templateじゃないの?
Templateはすごいよ。マジで。
一回使うと、HTML::Templateが使えなくなる。
373 :
nobodyさん :2010/10/01(金) 19:53:31 ID:iC/l9piS
少なくとも、議論に夢中になると大前提が見えなくなる人物であることは理解できる。 自分らの興味関心に出会うと他が見えなくなる性質が感じられる。 SSL+レンタルカートで駄目では、ネットショップなんてもう無理でしょ。 どうやら、複雑高度なことは理解できても、単純明快なことが理解できなくなっちゃったのかな?
HTML::TemplateがHTMLに入れられてるのに、Template ToolkitはまんまTemplate。 簡単にはそんな直接的な名前は使わせてくれないのに、 Template ToolkitがTemplateを使えたのはその強力さにある。 HTML::Template使ってた時は、PHPプログラマがすらすら書いててしばいてやろう と思ってたけど、Template使い始めてからはPHPなんてどうでもよくて、 Pythonプログラマをしばくタイミングをうかがってる。
375 :
371 :2010/10/01(金) 19:56:57 ID:???
>>372 あう・・・ そうなのか
{$hoge|html_entity_decode}
みたいな書き方がhtml::templateで出来ないような気がしたり、その他に何点か不便に感じたからsmarty>>html::templateかと思ってた
templateってのもちょっと調べてみます
376 :
nobodyさん :2010/10/01(金) 19:59:03 ID:iC/l9piS
とうとうスルーか 参ったね
TTより軽くてPPでPerlコードも簡単に埋め込めるText::MicroTemplateに一票
質問させてください。 Perlの勉強を始めたばかりなのですが、 use utf8; の意味がわかりません。 どのような時に使い、どのようなメリットがあるのでしょうか?
>>378 あれはプログラマ向きであって、デザイナ向きではないよ。
デザイナ向きはTemplateToolkit一択。
HTML::Templateはどういう風に分業したらいいかわからなかった。
>>377 あー ごめん言い方が悪かった
{$hoge|html_entity_decode} みたいに テンプレート内にphp関数まぜたり
{$hoge|nl2br} 改行をbrタグに変えてくれたり
{$smarty.const.SCRIPT} 定数にアクセスできたりするのがsmartyは便利だけど
HTML::Templateは出来ないっぽいから不便だなぁと
>>381 本屋さんにSmartyの本が何冊かあるけど、あれなんなの?
そんなに複雑なの?
TTのマニュアルですら、上のリンクだけなんだが。
385 :
nobodyさん :2010/10/01(金) 20:12:52 ID:iC/l9piS
今日、話たことは利用を検討しているクレカ決済代行業者に質問してみるよ。 今、その業者のHPをみてるんだけど、 HPを読む限り、とりあえず心配すべきことはないと思う。 今日のみんなはどうやらいろいろと高度な専門知識を持っているようだけど、 なにかおかしいと思う。ヲタ過ぎるっていうのかな?不必要に知識を持っていたり、警戒してるかのような。 初心者スレで平気で高度?な話してるところも非常識だと思うし。 一度会って人間性を見てみたい気も。
386 :
379 :2010/10/01(金) 20:14:18 ID:???
>>383 そういった記事はある程度読みました。
ですが、どのような利点があるかがいまいちわかりません。
例えばutf8を読み込まなくても、プログラム自身はutf8で書けますし、
utf8の文字列も扱えます。
utf8を読み込めばサブルーチン名にutf8な日本語が使えるなどだけなのでしょうか?
途中でutf8プログマを使うと、動かなくなるのはあるある?
389 :
nobodyさん :2010/10/01(金) 20:17:57 ID:iC/l9piS
ショップ側では顧客のクレカ情報は保持しないんだから、クレカ情報の漏洩は一切ないとある。 ショップから決済代行業者へ渡すのは金額や商品名や決済方法等の注文情報だけ。 仮に漏れても個人情報は漏れない。 おかしいよ、やっぱり君らは勘違いしているよ。 あるいは、わかっていないよ。 失礼かもしれないけど、気を悪くしないで考えてもらいたい。
>>389 だから君が思ったようにすればいいじゃん
もうだれも止めてないでしょ
>>389 SSLと決済サイトだから安全というレベルの認識だと
たとえば改竄とかされたら無力なんだよね。
穴があったら君のサイトの中で決済サイト使わずに
クレカ入力してよって風に改竄されちゃうかもしれない。
あとはわかるよな。
SSLと決済サイトだから安全なんて思考停止をせずに
隅々まで気を使ってちゃんと書けってこった。
>>386 変数名や関数名に日本語ってあんまり使わないと思うけど、
文字列定数に日本語を書いた場合に、utf8フラグがついた
文字列になるか、ただのバイト列になるかは違うと思うよ。
正規表現とかも。
掲示板等の投稿を行うシステムを作るときのことなのですが、投稿ログに順次 書き込みを行っていくのではなく、投稿内容に応じてログへの記述位置が違う 場合、 一度ログを全て読み込み、ファイルを閉じ、書き込み位置をスキャンした後に 書き込み用に開いて、当該個所に追記するというのがいいのでしょうか? それとも、読み込んでスキャンしている最中も開きっぱなしで書き込みが終わっ てから閉じるものなのでしょうか? また、検索の際も 検索を行う該当箇所だけ開き、マッチした記事のID等をひろってから、再度開 きなおしてIDから記事全体を取得するのか、開きっぱなしでマッチした記事を 拾ってから閉じるのでしょうか? 前者だと、書き込みや検索が多い際にファイルへアクセスするプロセスが待つ 時間が短くなると思うのですが、2度開くのでファイルを開くのとメモリに読み 込む時間がかかってしまうと考えています。 後者であれば、ファイルを開くのと読み込むのが一度なのでその時間が短く済 みますが、スキャンしている時間もファイルをロックしているので、プロセス が待つ時間が長くなってしまうと考えています。 私の考えも含めて間違っている個所があれば、ご指摘いただければと思います。
>>393 > 間違っている個所があれば、ご指摘いただければと思います。
質問するスレを間違えている。
△▲ WebProg 初心者の質問 Part22 ▼▽
http://hibari.2ch.net/test/read.cgi/php/1272872528/ >>1 > Perlのコーディングで困ってる人のスレです。
>
> 【投稿する際の注意】
> 質問するときは内容をよく吟味してから投稿してください。
> 「コマンドの意味がわかんない」とかはマニュアル見ましょう。
> 回答者さんは何でも屋じゃありません。
>
> 1: 自分はこういう事がしたい。
> 2: それでこんな風にやってみたが・・・
> 3: こんなエラーが出て上手く行かなかった。
>
> 最低でも1と3が無いと誰も答えられないよ。
396 :
393 :2010/10/01(金) 20:46:44 ID:???
>>394 ありがとうございます。
現在Perlの勉強をしているのですが、他の言語でも同じ問題があるんですね。
もう少し考えてみて、誘導していただいたスレッドに書き込もうと思います。
397 :
nobodyさん :2010/10/01(金) 20:58:29 ID:CSXq1VpS
>>391 顧客やショップの情報が決済代行業者経由で送信される際には暗号化通信が行われるため、情報の漏洩、改ざんなどの心配はないとある。
398 :
395 :2010/10/01(金) 20:58:30 ID:???
うーーーん。 いくら調べても分かんないです・・・ なんとなくは、フラグが付いているのはシステム内部のコードで フラグが付いてないのは何なのか知りまへん。みたいな感じだっ てことはわかったのですが・・。 use utf8で、そのフラグを付けることに何のメリットがあるのでしょうか・・。
399 :
nobodyさん :2010/10/01(金) 20:59:58 ID:CSXq1VpS
ちょっとね、ここの住人らのレスはおかしいと思う。 広くて深い知識をもちながらどうしてなんだ?嫌がらせ?初心者を却って迷わせてしまっているではないか。 それが熟練先輩のやることなのか?
400 :
nobodyさん :2010/10/01(金) 21:05:36 ID:CSXq1VpS
一見、熟練熟知なように思えるけど、 実はあまり実践体験は無いとかじゃないだろうね? 外の世界を知らないプログラムオタクとか。 なんだかなあ
401 :
nobodyさん :2010/10/01(金) 21:11:54 ID:5IgqgdH1
自演と来たかwww
すまん 俺までageちまった。
403 :
nobodyさん :2010/10/01(金) 21:13:35 ID:CSXq1VpS
知識と学習と理論武装してるのに限ってそのほとんどが実際の役に立っていなかったりするよくあること。 いい話もあったけど、遣りすぎは却って迷惑だよ。熟練の先輩らには後輩にとって役立つような、力を与えるようなレスを心がけてもらいたい。 そういう人なら尊敬できるんだけどね。
404 :
nobodyさん :2010/10/01(金) 21:15:46 ID:CSXq1VpS
>>401 自演と判断したかw
君のものの見方が知れるよ?
人を疑うクセか性質持ってるよね。人間不信?
信じるべきでない人を信じないのは妥当な判断だけど、
なんでもかんでも信じないのは単なるバカの一つ覚えだよ。
後者になるなかれ。
まずageつづけるのが自演の証拠だろ・・ せめて2ちゃんの使い方ぐらい覚えてこようや・・
406 :
nobodyさん :2010/10/01(金) 21:19:06 ID:CSXq1VpS
ここ、あげないとIDつかないじゃんかw なんでこうなんだ?
407 :
398 :2010/10/01(金) 21:28:02 ID:???
ますますわからんくなってきました Perlは内部コードとしてUTF-8を使っていて、utf8プラグマをつけるとプログラム内のリテラルは 内部コードのUTF-8として扱われる。んでもって、内部コードに合わせるために外からの入力文字列は decodeを使って内部コードにする。外に出すときはencodeして好きな文字コードにする。 Perlの内部コードはUTF-8だけど、そとから入ってくるUTF-8とは違う・・。 でも、utf-8プラグマ使わなくてもUTF-8でコードを書いておけば処理は普通にできる。 わからん・・。 教えてけれ
408 :
nobodyさん :2010/10/01(金) 21:38:08 ID:CSXq1VpS
思うに、知識ばかりあって実践で役立てた経験の薄いヲタクだったのかな? そういうのは迷惑だぞ。聞いたことの無い専門用語をたくさん知り使うことで自分の高い専門度に自己満足?みたいな。 けど、嫌がられないか?そういうのは。 他人をぶっちぎって悦に浸る車や単車の走り屋と同じだよ。他人より抜きん出ることで満足するガリベン野郎?みたいな。 一生家と塾の往復してろ。
IDが見えないからといってあげ続けてるのは、この板でお前くらいだろ。 残念だね
そか。 じゃさげるよ。 しかし、そういう時は さげてくれないか?と言いなさい。 現代人って他人に頼むってことができないんだよな。
頼まれないと自分から行動できないの? 残念だね。現代人は。
>>411 おれはあげてもいいと思ってる。
そういうこと言うならあげで続けるよ?
人に確認しないと何もできない。 残念だね。現代人君。
414 :
nobodyさん :2010/10/01(金) 21:48:46 ID:CSXq1VpS
そうか。それじゃあ自分に素直にあげでいかせてもらうよ。
なんでもかんでも人に報告しないといられない。 残念だね。現代人って。
416 :
nobodyさん :2010/10/01(金) 21:50:49 ID:CSXq1VpS
しかし、専門家じゃなくてヲタって陰湿で執拗だよね。 ちょっと不快な思いをさせると根に持つ 迷惑だね。困ったもんだ。 そのまま一生やってくつもりか? みんなから迷惑がられて嫌われて死ぬのか?
>>407 use Encode;
my $hoge1 = "ほげ"; # not flagged
my $hoge2 = "\xe3\x81\xbb\xe3\x81\x92"; # not flagged
my $hoge3 = do { use utf8; "ほげ" }; # flagged
my $hoge4 = "\x{307b}\x{3052}"; # flagged
my $hoge5 = decode_utf8($hoge1); # flagged
my $hoge6 = encode_utf8($hoge5); # not flagged
perl側から見れば
$hoge3,$hoge4,$hoge5は「ほげ」という2文字の文字列
$hoge1,$hoge2,$hoge6は「ほげ」を表してはいるもののただの6バイトのバイト列
みたいなかんじ
陰湿なのはインターネットで愚痴ってるやつだろ。 自分のことに気がついてないのね。 残念だね。お前。
419 :
nobodyさん :2010/10/01(金) 21:52:04 ID:CSXq1VpS
>>415 その調子だと会社じゃ上手くやってけないだろ?
今はフリー?それでも客はつかんだろ?
どの程度のプログラムが組めるんだ?作例は?
>>416 君は陰湿じゃないんだね。
なら本名とか住所とか書いたら?
自分の情報も出さないで、ぐちぐち言ってるのは陰湿じゃないの?
の?
421 :
nobodyさん :2010/10/01(金) 21:53:38 ID:CSXq1VpS
>>418 その人格からするに、最前線で人に接する仕事は無理だろうな。
それ以前に、他人と接するのも無理なのでは?
何年くらい今のその生活してるんだ?
あの。 ここはPerlスレなんで関係ないことは他でやってください。
423 :
Perl忍者 ◆M5ZWRnXOj6 :2010/10/01(金) 21:55:34 ID:OBUOwpHF
たくさんつれましたー!
424 :
nobodyさん :2010/10/01(金) 21:57:19 ID:CSXq1VpS
>>420 それは嫌だなあ。
陰湿で嫉妬深いきみのわるいのがいるから。
それに、他人のこといえるの?自分はやらんで。
荒らしに構うのも荒らし
>>417 ありがとうございます。
なんとなくその辺は理解できたのですが、そのバイト列と扱われるか文字として扱われるか
の違いはどういったことで表れるのでしょうか?
427 :
nobodyさん :2010/10/01(金) 22:02:07 ID:CSXq1VpS
広くて深い知識がありながら人格は幼いよな。 PCしか取り得のない頭でっかちなガリベン中学生みたいな印象だ。 こういうのには少しでも力もってもらいたいくないな。
>>426 それぞれに
$hoge =~ s/\B/-/g;
とかやって結果をみればわかると思うよ
429 :
nobodyさん :2010/10/01(金) 22:44:18 ID:CSXq1VpS
ここの人たちって自作でチャットとか作れる?
チャットとか難易度低めのほうだろ
431 :
nobodyさん :2010/10/01(金) 22:57:24 ID:CSXq1VpS
今一番作りたいCGIってどんなもの? 今まで作った一番難しいものは?
432 :
Perl忍者 ◆M5ZWRnXOj6 :2010/10/01(金) 23:05:33 ID:OBUOwpHF
Perl忍者(^∀^)ゲラゲラ
このスレの推奨はオライリーなのに、 それが読めないバカが紛れ込んでハイレベルだっつっても おまえがレベル低いだけとしかいえんわな
435 :
nobodyさん :2010/10/02(土) 00:09:51 ID:VTsDZ410
あんなでかくてクソぶ厚い本なんて読めるかボケが 少しは書籍側の欠点や反省点を指摘してみろっての。 ここは初心者スレだぞ。わかってんのかカス
たかだか300ページが分厚いって、普段本読まないのか? 新書でも200ページくらいあるだろ
いいからSSLで万全にして、サイトのURL貼っとけ。 クラックされなかったらお前の勝ちでいいんじゃね。
落ち着いたようなので・・・ die したときの出力先は STDERR でいいんですよね? めんどくさいから常に utf-8 でいこうかなと思ってて・・・
何か沢山スレが進んだと思ったら
>>438 よくイマイチつかめないけど
die "fuck!";
ってかいたときにfuck!の出力先はSTDERRですよ
テンキュー!!
オライリーが難しいって 学校の授業も難しくてついていけなかったんだろなw
今まで問題が無かったんじゃなくて 問題があっても、客のせいにしてきただけじゃないのwwwww くそわろたww
444 :
nobodyさん :2010/10/02(土) 23:55:55 ID:YMDWyyqc
そうすると、決済代行業者の言い分がおかしいのか? 危機意識が軽いのか?
445 :
nobodyさん :2010/10/03(日) 00:03:59 ID:YMDWyyqc
少なくとも、決済代行業者の説明を読む限り、 君らが言うような心配をする必要は無いと考える。
再登場wwww ここはPerlスレッドですwwwwww 日本語も難しい技術ですかwwwwwwww
447 :
nobodyさん :2010/10/03(日) 00:09:44 ID:LIDo2XC6
やあ。^^ お迎えご苦労。
なんかこの人のサイトって法令にも順守してなさそう そんなもの守ってなくても、逮捕されてませんよ? って開き直って。
SSLだから安全(キリッ と言いながら顧客情報ファイルをドキュメントルート内に置いて 世界中に公開する人っているよね。
perlってもう駄目だな。 質問スレでさえゴミみたいな煽りしかいない。
2ch がすべてと思ってるお前ってもう駄目だな 質問スレでさえゴミみたいなお前しかいない。
マジレスするとどんな奴が集まるかはスレタイ見れば猿でも分かるというのに
まともな質問さえあれば真剣に答えるよ
先のマジ吉の件も真剣な対応はされていた 質問者次第でしょ
古いCGIを見ていると、 hoge'foo() のような書き方がありますが、これは hoge::foo() と等価と考えていいのでしょうか? この書き方ははじめてみたのですが、最近は推奨されていない書き方なのですか?
perl4 style foo'bar perl5 style foo::bar
ありがとうございます Perl4の書き方なんですね。 シングルクオートはエディタのシンタックスが対応していないみたいなんで、 表示が乱れてあせりました。
459 :
nobodyさん :2010/10/04(月) 10:26:36 ID:pE0m1OKq
>>448 遵守すべき法令とはどんなものがあるか挙げてみよ。
461 :
nobodyさん :2010/10/04(月) 10:43:02 ID:5t40Vj5P
なんだ言えないんじゃないかw 実は知らないのかな?あるいは、単に「法令遵守」って言いたかっただけなのかな? SSL+レンタルカートでも駄目論者は自分の知識の高さをアピールしたいだけで、 法令遵守論者は自分は違法行為はやってないよってアピールしたいだけとみた。 実は関係法令なんて知らないのにね。 すごいすごいw
462 :
nobodyさん :2010/10/04(月) 10:59:00 ID:DXgsUZrn
このスレ住人ってひょっとしたら自分の知識自慢したい中学生かな
463 :
nobodyさん :2010/10/04(月) 11:44:11 ID:jxefQVkw
スルーに入ったね
アホはほっとくのが一番でしょ 法令があることも知らないというのは、さすがにやばいな。 誰か通報してくれないかな。
465 :
nobodyさん :2010/10/04(月) 13:34:54 ID:MhLBVfU1
して、触れる法令とやらは?
>>465 わからないのなら自分で調べたら?
法人なら知らないとマジでやばいよ。
弁護士でも、近くのWeb制作会社にでもいいから金払ってチェックしてもらった方がいい。
俺たちが教えても信じないだけだし、自分で行動して確認した方が確実でしょ?
相手にすんな。図に乗るだけだから。 こういうやつは一度痛い目にあわんとわからん。 以後放置でお願いします。
自演乙
なぜばれたし
なんか荒れてますね。 ところで今日知ったんですが qw/aaa bbb ccc/に対して、 /.+?\s/でマッチすると、"aaa "にマッチするんですね てっきり、"a "かと思っていました どういう理屈なんですか、教えてください
いちおう補足すると、"aaa "にマッチしたいような場合、 /^.+?\s/と今まではしていたんですが、 ^いらなかったんだなぁ、と
. 任意の1文字(改行除く + 直前のパターンの1回以上の繰り返し
>>470 最小マッチは「一番短くなるように」マッチさせるのではなく、「条件を満たした時点で打ち切る」と
いう挙動をする。なのでマッチ部分が短くなるよう、マッチングの開始位置までずらすといった事は
してくれない。
qw// は qq// の typo だとして、
> perl -Mre=debug -e "qq/aaa bbb ccc/ =~ /.+?\s/"
Compiling REx ".+?\s"
Final program:
1: MINMOD (2)
2: PLUS (4)
3: REG_ANY (0)
4: SPACE (5)
5: END (0)
plus minlen 2
Matching REx ".+?\s" against "aaa bbb ccc"
0 <> <aaa bbb cc> | 1:MINMOD(2)
0 <> <aaa bbb cc> | 2:PLUS(4)
REG_ANY can match 1 times out of 1...
1 <a> <aa bbb ccc> | 4: SPACE(5)
failed...
REG_ANY can match 1 times out of 1...
2 <aa> <a bbb ccc> | 4: SPACE(5)
failed...
REG_ANY can match 1 times out of 1...
3 <aaa> < bbb ccc> | 4: SPACE(5)
4 <aaa > <bbb ccc> | 5: END(0)
Match successful!
Freeing REx: ".+?\s"
/.+\s/ だと貪欲に "aaa bbb " までを食うのは言うまでもないが、 いわゆる最短マッチ、/.+?\s/ とした場合の .+? は最初に \s(空白文字)見つかるまでという意味での最短であって、 マッチの開始位置が最初にマッチした任意の文字(先頭)であることに変わりはない。
475 :
nobodyさん :2010/10/04(月) 16:51:33 ID:qA0vUoH8
>>466 知識もないくせに知ったかぶりをするのはやめなさい。
見苦しいですよ?
よくわかってない人が間違うもとだから最短と呼ぶのはやめよう。 「貪欲でない」といわれればなんだそりゃと思って調べるけど 最短といわれるとわかった気になっちゃうからな。
なんでPerlの正規表現がちやほやされてるの? そんなにすごいの?
>>473-474 は初心者が分かりやすい説明なのか?
人に説明するなら相手にわかり易い説明をなさい。
あなたは道端で人に道を教える時も難解な説明をするのかね?
ここは道端だったのか……
ああわけわからんよ。 初心者なんでね。 いつからここは熟練者スレになったのかね?
perlってもう駄目だな。 質問スレでさえゴミみたいな煽りしかいない。
>>481 君が質問者だったらもっと丁寧に質問するが
君は質問者じゃないだろ?
質問があれば質問者のレベルに応じて解答する
今回の場合は質問者は正規表現の書き方を理解しているので、
そのデバッグ手法を説明しているだけ。
君のたとえで言うと、
道端で道を聞かれても、その人を対象にではなく
3歳児を対象に「右」がどっちかっていう説明から始めるのと同じ。
粘着なんてしてないで、XSSについて調べてきたら?
>>483 おいおい、どうしておれがXSSについて調べる必要があるんだい?
そうね。 XSSより前に、本を読む練習からしないとね。 のんたん何かどうだ?
? は ?に続く文字が見つかった時点までマッチ と思ってりゃいいよ
バーバーパパの方がオススメだろ
千秋ディスってんじゃねーぞ子ら
>>485 どうしておれが本を読む練習をしないといけないんだね?
スルーしろよ……耐性足りんぞ
はいはいリファレンスはポインタみたいなもんだよ ひとりで完璧に安全なプログラム作れる天才さんはこれで理解したろ? さっさと糞脆弱なショッピングカートでもなんでも作ってなさいってこった
ちげーよバカw
いやまあその名の通り参照なんですけどね
なんかこう...教えてるつもりの奴が馬鹿しかいなくなった。
495 :
nobodyさん :2010/10/05(火) 00:30:28 ID:cRXiRLz+
プロの熟練者さんはどのレスとどのレスが同一人物なのかわからなくなってるようで。 さすがですね。プ
496 :
470 :2010/10/05(火) 01:31:17 ID:???
>>473-474 よく分かりました。
なにを勘違いしていたのかわかりました。
(qwとqqを書き間違えたのはご愛嬌で)
毎晩このスレを見るのが楽しみになりそう バカな人間を見て、自分はこうならないようにと頑張れる ・知ったかぶりをしない ・わからないことは素直に聞く ・人に言われたことは、疑わずに調べる ・自分の知識を過信しない ・必死にならず冷静に ・日々勉強をする ・分厚い本を読む ・自演はばれないようにする これは肝に銘じておこう
出来ればコテつけてほしい NG出来ない
読まなきゃいい
こんなことを言われました Perl使いが何十億人もいるのに今からPerlを覚える必要はない やるならPythonかRubyやれ 本当ですか?
うそです。 > Perl使いが何十億人もいるのに そんなにいません > 今からPerlを覚える必要はない でも、もしそんなにたくさんいたとしても、 だから覚える必要はないということはありません。 「英語を使える人は10億人を超えるのに、今から英語を覚える必要はない」 と言われたらあなたはそれに納得しますか? > やるならPythonかRubyやれ この3つはそれぞれ有用です。 職業プログラマーになりたいんだったら全部やりましょう。 趣味でちょっとしたものを工作するならどれか一つでも構いません。 どれをやってもあなたの世界は広がります。 暇だから、gizmodo翻訳風に釣られてみた。
それぞれの質問スレを覗いてみるのも有用かと。 スレの雰囲気や回答者の質など。
>>501 先生ありがとうございます
Perl,Python,Rubyを覚えるとしたらどの順番で覚えたほうがいいでしょうか?
N88BASIC
505 :
nobodyさん :2010/10/05(火) 13:37:27 ID:tVnNPBxi
その日が祝日だった場合は赤い文字で祝日の名称を表示したいのですが、 祝日ってかならずしも定日ではないんですよね。第二日曜日とか第三とか。 こういう場合はみなさん、どう振り分けていますか?
春分秋分みたいにかんたんな規則じゃ求まらないのがある以上は 祝日データを持つしかないと思う。
507 :
nobodyさん :2010/10/05(火) 13:44:06 ID:tVnNPBxi
つまり、毎年1年分の休日データを手動で更新するってこと?
そう。気の利いたアプリなら祝日データ配信機能をもたせてどっかkら 配ったりするかも。あるいは自動バージョンアップ機能に含めるとか。 なんしろ勝手に法律かわったり天皇が代替わりしたりするわけで計算 じゃどうにもならんよ。
第二月曜とか第三月曜とかくらいまでは計算でなんとかならんかな?
振替休日の判定式も忘れないでね。 去年のシルバーウィークは まともに休日表示されてないカレンダーが多かった。
Calendar::Japanese::Holiday
モジュールってやつですか? use で使えばいいのかな? ググレカスですかそうですか。
土日を含まない祝日に挟まれた平日は祝日 だっけ? めんどくせぇなぁww
毎年祝日データを載せてるサイトがあればそこから毎年抽出すればいいと思うが
プログラマに「祝日」という言葉はない!! 「客から電話がかかってこない日」ならある
それは業務的話ねwwwwwwwwwwwwwwww
つ holiday.pl
ENDLESS BATTLEっていう8年前くらいに流行ったCGIゲームの質問なんですが 人を表示させるときの配列を下記のように、DBの格納順で設定しています while (($Key,$Value) = each %P){ @VS_VALUES = split(/\s/,$Value); これをランダムにするのはどうすればいいんでしょうか? どうかお願いいたします。
521 :
Perl忍者 ◆M5ZWRnXOj6 :2010/10/06(水) 07:41:58 ID:2XmazIev
俺の影響うけてPerlうちこみだしたやつがうざい 俺が知ってる中では100人ぐらいが俺の影響うけてPerlとかわめいてやがる まじうぜえんだが もともとPHPやってるウンコどもも俺の影響でPerlやりだしたし 俺がJPAに献上してるってことあいつらは だけどあいつらは俺の真似ばっかりしてくんだよ 模倣 アイディアとか発言とか 知ってるプログラマとかも 本当うざくてうざくてたまらねえわほんとに
522 :
Perl忍者 ◆M5ZWRnXOj6 :2010/10/06(水) 07:43:12 ID:2XmazIev
もともとドラクエやってるのに 横からFFやってたやつがドラクエやりだして熱弁しだすのがきにくわねえ 本当消えろ!!
>>519 そういう枕をつけるから相手にしてもらえなくなるわけだな。
一行目のeach %Pをperlが勝手に決めた順番じゃなくてランダムにしたいのか、
二行目の@VS_VALUESの中身の並び順をランダムにしたいのかどっちだか
よくわからんが、とりあえずList::Utilのshuffleでなんとかなるんじゃね?
やりたいのは%Pのシャッフルです @keyに取得させてshuffleさせてみました use strict; use List::Util qw/shuffle/; my @key = ($Key,$Value) = each %P; @VS_VALUES = split(/\s/,$Value); my $key = List::Util::shuffle @key; ------------------------------- use strict; use List::Util 'shuffle'; my @key = ($Key,$Value) = each %P; @VS_VALUES = split(/\s/,$Value); print shuffle( @key ); スクリプトエラーはでてないのですが、実際に入れてみたところ二つともダメでした
keys %Pをshuffleして使え。
こんな感じに書き換えればおk foreach $Key(shuffle keys %P){ $Value = $p{$Key}; @VS_VALUES = split(/\s/,$Value);
Perl文法エラーがでてしまいますね sub shuffleを使ってみようかと思ったんですがその場合whileとforeachどっちのほうが良いんですか?
whileとforeachじゃ全く働きが違うわけだが。そのくらいの 判断もつかないようだともう少しちゃんと勉強して出直した 方がいいレベル
<?PHP shuffle($key); foreach $Key (keys %P){ @VS_VALUES = split(/\s/,$P{"$Key"}); } ?>
PHPじゃダメだろ use List::Util; @key = List::Util::shuffle %P; %P = @key; while (($Key,$Value) = each %P){ @VS_VALUES = split(/\s/,$Value); } こんなところか
ハッシュのキーも値も一緒くたにする勢いで shuffle しなくてもいいんじゃないか。
この前の天才CGIショップ運営者はどうなったの? 問い合わせしておんなじコト言われた? 問合せ先の業者がかわいそうだな。ごねてんだろうな。
>>534 529と530はまるでだめだが526は大筋問題ない。
「}」の省略とpの大文字小文字間違いぐらいは
自分で修正しろw
foreachにshuffleとか使えないですしおすし
>>537 使えるよ。List::Utilをuseしてないとか言いたいのかな。
List::Utilのshuffle使おうって話の流れなんだから
そのぐらいは補えよ。
useが省略されてても foreach $Key(List::Util::shuffle keys %P){ @VS_VALUES = split(/\s/,$P{"$Key"}); こうだろ ただVALUESの値が取得できてないな
requireしなくての使えるの?
>>539 use List::Util 'shuffle'; はナシですか
ハッシュって初めから乱数でランダム格納されてるんじゃなかったっけ
>>543 順番は保証されてないけど、同じ環境で実行するとたぶん同じ順番になるから
毎回違う順番にしたいって時にはshuffleしたキーを使わなきゃだめ
>>545 うーん読んでるとシャッフルは必要ないように思ったんだけど、どうだろう
5.81以前を使っているのかな
>>542 多分ダメじゃない?
HASHには最初にランダムに格納されるだけだから、ちゃんと回さんとダメ
548 :
544 :2010/10/08(金) 20:02:12 ID:???
俺の環境だと5.10.1、5.12.1、5.12.2のどれで何回やっても同じ順番になるな use strict; use Data::Dumper; my %hash = (foo => 1, bar => 2, baz => 3, qux => 4); print "perl $]\n"; print "keys: @{[keys %hash]}\n"; print Dumper \%hash; __END__ perl 5.012002 keys: bar baz qux foo $VAR1 = { 'bar' => 2, 'baz' => 3, 'qux' => 4, 'foo' => 1 };
ちゃんとシャッフルしてやらんと
>>535 サポートの姉ちゃんに粘着してんだろ。
察してやれ。
552 :
Perl忍者 ◆M5ZWRnXOj6 :2010/10/09(土) 19:21:18 ID:7nxLhNm/
はじめまして GD::GraphがJcode使っててむかつくので なんかグラフ表示させるやつ教えてください javascriptでもいいですか?教えてください クソコテですが まじめに教えてください
マルチしね
554 :
Perl忍者 ◆M5ZWRnXOj6 :2010/10/09(土) 21:58:06 ID:7nxLhNm/
俺は死なない…たとえ肉体は滅んでも俺の遺志を継ぐものが必ず立ち上がり、そして松本ひろゆき、Rubyたちを倒す!
de?
シャッフルは俺の得意分野 use List::Util 'shuffle'; foreach $Key(shuffle keys %P){ @VS_VALUES = split(/\s/,$P{"$Key"}); } HASHはランダムに納められてるだけでランダムに表示されるわけではない
list.txt内にユーザーID:名前と記録してるのですが、 この中から名前を検索して、リンクのさいにuser.cgi?=ユーザーIDとしたいのですが、どのように書けば良いのでしょうか?
メールフォームの開発の話。 最初はGETメソッドで開発して、 最後にPOSTに変更するとやり易いなあと。 クエリーがアドレスバーに表示されるので、渡すデータやキーを確認できるから。 これまでは$queryで処理結果ページに表示してた そう思わない? みんなどうしてる? 日本語スマソ
562 :
nobodyさん :2010/10/15(金) 16:50:22 ID:1IbFyG9F
DBIでmysqlのblob型に入ったテキストを取り出したいのですがテスト環境ではうまくいくのですが 本番環境では文字化けしてしまいます。Mysqlのバージョンは5.1.34です。 テキストはUTF8でバイナリデータとしてはきちんと入っていました。 Blob型からデータを取り出すときには何かしないといけないのでしょうか?
取り出すときにset names utf8とかすれば?
>>563 接続時はSET NAMES utf8としていますが
SQLの実行直前ですか?
ぐぐるとSET NAMES binaryとしている人もいるようです
565 :
nobodyさん :2010/10/16(土) 12:15:08 ID:4m15JmGp
>>563 ナイスヒントでした。
SET NAMES utf8ではだめでしたが直前でSET NAMES binaryを入れたところ化けないようになりました。
blob型を使うときは切り替えないといけないんですね
use LWP::UserAgent; と require LWP::UserAgent; とは同じということでよろしいかな?
下の方法で呼べるっけ?
そう書いてあるHPがあるんだ。 意外だた。
動作が違うけどそれでもよろしければ。
>>567 違うのはimportの有無と読み込みタイミングだが、LWP::UserAgentは
$ua = LWP::UserAgent->newしたら$uaのメソッド呼ぶだけだから普通の
使い方なら特にimportしなきゃいけないもんないしな。どっちでもいいん
じゃない?
SYNOPSYSにも require LWP::UserAgent; ってなってるしな。
573 :
567 :2010/10/19(火) 10:42:31 ID:???
このスレすごい。(;´∀`)
は〜わかんね。perlのモジュール。(;´Д`)
sprintf("%d", 680*1.4) が951になる理由を教えてくれ
理由はわからんなぁ。。でもそういう内部処理を解説してるサイトどっかで見た 1.4が少数部持ってるから掛け算した結果も小数部を持つ952 これを%d整数としてはめ込むときにどうにかしてるんだから (680*1.4) . ''で 一旦文字列にすれば952になるだろうね
掲示板作ってるのですが、なぜ2ちゃんねるはdatファイルでログを作成しているのでしょうか? textファイルじゃダメなんでしょうか? 2ちゃんねるのログをそのままtextファイルを使用した場合のデメリットなどがあったら教えてください
>>577 ただのテキストだと本文に他の記事をコピペされると記事の区切りとか
わかんなくなったりするので、はっきり区別がつくように特別な約束を決めて
あるわけだな。
2ちゃんねるのログはテキストファイルだよ。
そういや今ふと思ったんだが2chといい何で今の掲示板には必ずといっていいほど メール欄[ ] ↑これがあるけど、需要ねぇだろコレ マジ何でほぼ全ての掲示板に共通してあるんだよ
事実上sageって書く欄になってしまってるがいきなり名前を変えたら 混乱するからな。
拡張子なんて飾りです……偉い人にはそれが分からんのですよ
584 :
575 :2010/10/19(火) 18:46:36 ID:???
機械の中は2進数の世界というのが理由か 680*14/10 として小数を使わなければいい よくよく考えてみたら当たり前の話だな intで切り捨てとかsprintf使えとか言うてるサイトは死滅してくんねーかな
自分の知識の無さを放っておいて氏ねですかそうですか
int も、 sprintf も、POSIX qw(floor) も、「0.5 足せ!」も、 浮動小数点の丸め誤差を理解出来てない奴が、 適当に解説するのは止めてくれ!と心底思うが 584に言われたくは無いだろーなあ。
みなさん、モジュールについてはどう学習していますか? 書店で関係書籍を見る限り、モジュールについて詳しく書かれている書籍はほとんど無いと思うんですが。 やっぱりCPANを直接読むんですか?英語だと思うんですが・・
>>581 いやあ、私は時々使いますよ。
運営側としては名前もメール欄も使うべきものなんだと思ってます。
多くの人が使わないようだけど、本来は使ってしかるべき機能かと。
名前も連絡先も明らかにせずにいきなり話に入るなんていうのがリアルで当然にはなって欲しくないです。
>>589 モジュールに詳しい書籍はほとんど無いかと。
載っているものはあるにはあるけど。
そんなに難しい英語でもないだろう… あとはperldoc.jp
>>587 英語ぐらい読めよ。技術文書はそんなに難しくないぞ。特にコンピュータ系の
専門用語は英語そのままカタカナにしたのが多いから楽だよ。
今、モジュールについて学んでいるんですが、
何か良い書籍はありませんか?
知りたいのは主に以下のもの
CGI
LWP::UserAgent
HTTP::Request Jcode
XML::DOM
XML::Parser
全部ネットで情報が得れる
あれ、以前、検索エンジンからの検索語を取り出す話をした時に、 エンジンによって振り分けて処理するしかないって結論になってなかったっけ? Jcodeモジュールでできるのでは?
598 :
Perl忍者 ◆M5ZWRnXOj6 :2010/10/19(火) 23:36:59 ID:I4QlovXi
検索力がない奴はモジュール使えない
あららw Jcodeモジュールで文字化けもあった検索語の抽出が一気に直ってしまったw これって検索エンジン毎に分岐しなくてもいいんじゃないかな? 以前、質問したら自信満々に 「エンジン毎に分けるしかないでしょうね」 とか言われたけど、 そんなことないじゃないか。
スゴイw 何行にも渡って処理していた日本語変換が2行ほどになってしまったw モジュールスゴイね。(;´∀`)
今時Jcode.pmかよwって思ったけどなんでEncode.pmが使われるようになったの? 日本語の変換するならJcode.pmで十分実用に足るんじゃないの?
え、今時って、Jcodeよりもっといいものがあるってこと? 充分に単純化できてるし、効果も得てるんでこれでいいと思ってる。 2行を1行に出来たところでさしたる差はないから。 Encodeは正直まだどういうものなのかわかってない。 文字コード変換と日本語変換の違いなのかな?って想像してる。
Perlが5.8.1以降の場合、JcodeはEncodeのラッパーとして振る舞います。
>>602 初心者だったらJcode.pm使うよりは素直にEncode使ったほうがいいような気も。
Jcode.pmを使ってるサンプルスクリプトは、
pre-modernで参考にしない方がいいものも結構あるし。
Encodeは文字列をバイトストリームでなく文字(Unicode)として認識させたいときに使うのかな? $string =~ tr/一二三/壱弐参/;
それはuse utf8の仕事ではなかろうか
ちなみに、Jcodeを使っているのは自作のアクセス解析 これまではjcode.plやutftosjisとかを検索エンジン毎に分岐し、更にキーワードが入ったパラメーター名毎に分岐して入手していました。 モジュールJcodeを使ったら何十行にも渡っていたものが短い2行に。 モジュールの威力を知った。
Emacs使ってる人いる? すごい高機能なんだって?本で知って興味持ってる。 昨日話したJcode、その後も順調に機能してるよ。以前はどうしても文字化け出てきちゃうのもあったんだけど、 いまやほとんど無し。 ありがたやありがたや。
609 :
Perl忍者 ◆M5ZWRnXOj6 :2010/10/21(木) 07:33:22 ID:im6AkfLS
得意気にEmacs使いほざいてても 成果物がクソとかプログラミングもクソなやついるから あーあーあのubuntu厨見たいなかんじですね(笑)
そっか Emacsと言っただけで ほざいてる とか言われるわけか、参ったな。 話に聞いただけでまだこれから試すか否かなんだけどね。 体験者がいたら話聞いてみたいなと。
611 :
Perl忍者 ◆M5ZWRnXOj6 :2010/10/22(金) 16:50:09 ID:1atSZw6K
Emacs興味もってるから死ねよ
612 :
Perl忍者 ◆M5ZWRnXOj6 :2010/10/22(金) 16:54:37 ID:1atSZw6K
ごめん
講義で課題が出たのですがわからないので質問していいですか? よろしければ問題文を張るので協力御願いします。 あと、もし他に相応のスレがあるなら誘導御願いします。
宿題は自分でやれ
相応のスレぐらい自分で探せ
Perlの宿題スレってなくね? 貼ってくれたら俺はやるよ。 なんか宿題とかそういう下らないことしたい気分だし。
俺もニートだから宿題やるよ
凝った使い方せずとも、そろそろ db ぐらいは使えたほうがいいのかな?と思い始めた。 MySQL とか PostgreSQL とかのセットアップがめんどくせーw もっと、ちゃちゃっとセットアップできるの無いのかしら?
sqlite?
>>618 俺もそう思って2年前にDBの勉強をしたけど、結局使うことなく今はさっぱり忘れてしまったw
623 :
Perl忍者 ◆M5ZWRnXOj6 :2010/10/23(土) 16:46:29 ID:21A5e235
DBすら使えないとかごみ
なんだかんだでDB使ってるなあ 自前でデータ保存読み込みのコードを書くより楽だから
テキストファイルはシステムもクソもないから、ファイルが生きてれば運用可能。 DB はシステムが逝くと使い物にならない。 こうゆう部分で二の足踏んでる。
DBを使わなくて、トランザクションを保証するシステムできるのか?
そこまでクリティカルなの作らないし・・・
webアプリなら用途にもよるがKVSでもいけるな
>>616 617
ありがとうございます。本当にわからなくて困っていたのでお願いします。
問題:関数のfactorial、area_circle、wrapitを使って出力が得られるよう
主モジュールを作成せよ。(関数と一体になった完全なプログラム)
(テキストp03176.plの青春の詩YOUTHを用いる)
下記p03176.pl #getsrc x 176 use strict; my %count; my $size = 4; # カウントする単語の最小サイズ while( <DATA> ) { my @words = split; foreach my $word ( @words ) { next if length($word) < $size; $count{$word}++ if $word =~ m/^[a-zA-Z]+([-'][a-zA-Z]+)*$/; } } my $uniq_words = keys %count; unless ($uniq_words) { print "ファイルには単語がありません。\n"; exit; } my $total_count = 0; my $total_length = 0; foreach my $word ( keys %count ) { $total_count += $count{$word}; $total_length += length($word); } my $avg_length = $total_length/$total_count; print <<STATUS; $size文字以上の長さの単語の出現状況 ------------------------------------------
総単語数 = $total_count 単語の種類 = $uniq_words 平均の単語長 = $avg_length STATUS __DATA__ YOUTH Youth is not a time of life - it is a state of mind, it is a temper of the will, a quality of imagination, a vigor of the emotions, a predominance of courage over timidity, of the appetite for adventure over love of ease. Nobody grows old only by merely living number of years; people grow old only by deserting their ideals. You are as young as your faith, as old as doubt; as young as your selfconfidence, as old as your fear; as young as your hope, as old as your despair.
>>629-631 検索エンジンも使えないの?
その問題は具体的にfactorial、area_circle、wrapitがどういうルーチンなのかわからないと解けないんだよ。
factorial、area_circle、wrapitがどういうルーチンかはわかっているんでしょ?
だったらそれを書いた後に、名前から勝手に想像するが、
print factorial(5);
とかやってみればいいじゃない。
SJIS + ActivePerl5.12 x64 + WinSrv2008の環境でCOMを使ったエクセル出力が上手くいきません $filepath = "c:/folder"; $filename = "excelfile"; $xlspath = "${filepath}/${filename}.xls"; 略 print $xlspath; $wb->SaveAs($xlspath); printの時点ではちゃんと拡張子も含まれた完全なパスなのですが OLE32 LastErrorを取ってやるとSaveAsのところでC:\//folder/excelfile というパスが見つからないというエラーが出ているようです SaveAsの引数に直接ファイル名まで入れた絶対パスのリテラルを書くとちゃんとxlsファイルが出力されるので単に渡される文字列が正しくないことが原因だと思うのですが・・・ どのように修正すればよいのかご教授ください、よろしくお願いします
my $in = new CGI; my $param = $in->param('abc'); abc が渡されてなければ、param の結果は undef でいいんですよね?
636 :
Perl忍者 ◆M5ZWRnXOj6 :2010/10/28(木) 22:28:11 ID:oSh7LqBC
しってるのにきくんじゃねえよ 老人? 確認するための老人?
637 :
nobodyさん :2010/11/04(木) 14:47:19 ID:8SyFnlua
teigi.txt------------------------------------------------------------- hoehoeとは,[ 1 ]上の[ 2 ]の[ 3 ]となることができる[ 4 ]をいう。 hoehoeは,[ 5 ]時に取得する。 hoehoe,[ 6 ]よって[ 7 ]する。 ----------------------------------------------------------------- ここから[]に含まれた1から7までの数字を全部抽出したくて、 open( DATA, "C:\teigi.txt" ); while(<DATA>){ if(/\[\s(\d+?)\s\]/g){ print "$1\n"; } } とやってみたのですが、 1 5 6 のように各行で最初にマッチした数字しか取り出せません。 どのように修正したらいいか教えてください。お願いします。
if->while
639 :
637 :2010/11/04(木) 15:13:27 ID:???
>>638 さん
できました!ありがとうございます。
open(IN, '<', 'teigi.txt'); my $text; read(IN, $text, (-s IN)); close(IN); my @data = $text =~ /\[ (\d+?) \]/gs; print join("\n", @data); exit;
641 :
637 :2010/11/04(木) 15:19:36 ID:???
>>640 さんが示してくださった方法でもいけました!
ありがとうございます。
iniファイルを読み書きするConfig::Simple;を使っていて、質問があります。 $cfg->param(-block=>'hoge', -values=>{'time'=>time()}); とするとブロックを追加でき、 $cfg->param(-block=>'hogel'); でブロックにアクセスできます。 が、 $cfg->delete(-block=>'mysql'); としてもブロックを削除できません。 ブロックごと削除するにはどう記述したらよいですか?
ini ファイルの場合、ブロックを削除する方法はない。 delete メソッドを拡張するといいよ。
private なデータにアクセスするので紳士協定に反するが、 delete $cfg->{_DATA}->{mysql}; とやれば消えるか。
Perlでlz形式(Compress.exe)で圧縮されたファイルの解凍をやろうと思っているのですが・・・
あまりにもマイナーな形式のため、標準のモジュールでは対応してないみたいです。
ただAPIを使用すれば解凍できそうなので、下記のURL(C言語?)を参考にPerlでAPIを組むことにしました。
ttp://tokovalue.web.infoseek.co.jp/LZOpenFile_U.htm ----------------------------------------------------------------------------------------
use Win32::API;
my $kaitou = new Win32::API("lz32", "LZOpenFile", ["P,P,N"], "N")
----------------------------------------------------------------------------------------
しかしAPIの宣言はできたのですが、下記の構造体の部分をPerlで書く方法がわかりません…
Type OFSTRUCT
cBytes As byte
fFixedDisk As byte
nErrCode As Integer
Reserved1 As Integer
Reserved2 As Integer
szPathName As String * 128
End Type
調べたらpack、unpackを使えば構造体を使用できるらしいのですが、例等がないため見当もつかないです。
もしどなたか分かる方がいれば教えて頂いてもよろしいでしょうか?
お願い致します。
>>645 使い方も使用例もマニュアルに書いてあるから読めよ
647 :
nobodyさん :2010/11/08(月) 18:53:06 ID:u2tFSMiG
半角全角 変換で調べてみると以下のような選択肢が見つかったのですが、 Encode::JP::H2Z Lingua::JA::Regular::Unicode Unicode::Japanese 何が主流なんでしょうか? CentOS5.5 perl v5.8.8
動くの使ったら良い 微妙に機能が違った気がするけど覚えてない 俺はLingua::~~ を使ってる
入力フォームのHTMLファイルと、入力を処理するCGIファイルの2個をを同じCGIファイル一個に纏めたい。 具体的にはクエリが空っぽなら入力フォームを表示。 表示した入力フォームから入力があればクエリのデータを読み取って出力をするプログラムが走るようにしたい。 空を判定するのにunless( !defined( $a )こうやって見たけどどうやら空でも0でもない何かが入ってるらしくバグる。
何かがとかいってないで表示させてみればいいじゃない。
perlfunc defined
>>649 $a $bは使うなとなんべん言ったら…
それと今回はそれ以前の話だったようだけど、
本来空文字かどうか判断するなら ne を使うべきで defined は使うべきでない
# 文字があるとき true を表示したい
$str = '';
defined $str ? print "true\n" : print "false\n"; #=> true
$str ne '' ? print "true\n" : print "false\n"; #=> false
>>653 なにかコードがPerlとは違うように見えるのですが。
省略か何かの書き方の違いですか?
それとどこかで拾ってきたサンプルソースがdefinedではなく!definedなってて
それでバグったみたいです!definedは単なるミス表記なのか何か意味があるのか教えてください。
>>654 三項演算子
(条件式)?true処理:false処理
否定演算子
!(条件式)
BOOLEANを反転。
>>649 今時のMVCモデルに逆行している…。
unless (!defined(**)) は、 if (defined(**) と同じ。
$aと$bはsortに使われる特殊な変数なので、それ以外の用途には使わないのがお約束です。
素直にCGI.pmを使ってはいかがでしょうか。
use CGI;
my $q = new CGI;
だったとして、
htmlの中に、<input name="flag" value="1" />などと仕込んでおいて、$q->param("flag")の真偽で判定するとか。
print defined $str ? "true\n" : "false\n"; #=> true 関係ないけど、このほうが気分的にすっきりしてて好き
print defined $str ? 'true' : 'false', "\n";
print (defined $str ? 'true' : 'false') . "\n"; ってやりたくなっちゃうw
Perl って 「やり方は1つじゃない」 が開発者の意図するもんでしたよね? でもフレームワークって人によるコーディングの揺らぎを制限するもんじゃないっすか? 矛盾してるよね。 開発者の意図を汲むなら、Perl にフレームワークって必要無いんじゃね? って思えてきた木曜日の深夜。
661 :
nobodyさん :2010/11/11(木) 06:31:03 ID:9cAwBIie
>>660 フレームワークの選択肢はあるし、自分でも作れるから矛盾はしてないんじゃない?
663 :
nobodyさん :2010/11/15(月) 22:57:52 ID:rKCqUAEL
質問です。 httpd.confや.htaccessの設定で認証を行うと、セキュリティは高いのですが、ログアウトができません。 そこでクッキーとスクリプトで認証(パスワードからハッシュを求めてパスワードファイルと比較)しようとしたのですが、 Apacheの認証(httpd.confや.htaccess)と併用すると、スクリプトで認証した後でApacheが認証要求を 出して二回ログインする必要がありそうです。 何か良い方法はないでしょうか?
スレ違いっつーか板違い。webprog行け
板はあってたorz...
666 :
663 :2010/11/15(月) 23:28:15 ID:???
というわけでみなさん回答お願いします(w
スレ違い
668 :
663 :2010/11/15(月) 23:48:34 ID:rKCqUAEL
誘導プリーズ
669 :
663 :2010/11/16(火) 00:01:48 ID:???
質問です Webページ内の任意のタグ内のテキストを全て取得する方法を探しています 以下のような処理です <div class="hoge" id="moge"> <a href="hage">TEST</a> </div> ↑Webページ内から上記のような部分を探し出し、div、hoge、mogeといったパラメータを指定して ↓以下を出力する <a href="hage">TEST1</a> 対象ページを全取得し、改行やタブを消去して正規表現で…と最初は考えていたのですが、 もっとスマートな方法があれば知りたいです 参考になるサイトなどありましたら教えて下さい
671 :
670 :2010/11/16(火) 03:29:36 ID:???
補足です 抽出対象は「入れ子」になっていない事が前提です つまり以下のような存在は考慮する必要はありません <div class="hoge" id="moge"> <div class="hoge" id="moge"><a href="hage">TEST</a></div> </div>
673 :
nobodyさん :2010/11/16(火) 05:48:42 ID:MILxW7l4
Web::Scraperでいいんじゃないかな
674 :
670 :2010/11/16(火) 06:45:19 ID:???
>>673 ありがとうございます
Web::Scraperで簡易なテストプログラムが動作する所まで進みましたが、
今の所HTMLタグを全て除去した素のテキストしか取得してくれません
>>670 で言えば「TEST」しか表示されない状態です
もう少し調べてみます
675 :
670 :2010/11/16(火) 07:32:25 ID:???
さらに調べました process "mage", "hige" =>"TEXT"; を process "mage", "hige" =>"HTML"; に変更してうまくいったようです
DBIの定義(ユーザ名、パス、サーバ)が面倒なので 以下のように、定義だけモジュール化しています。 use My::Module; my $mod = My::Module->new(); my $dbh = $mod->ret_DBI; 同様に、Text::XslateをMy::Moduleに書いて my $tx = $mod->ret_Xslate;という風に使おうと思ったのですが、 mod_perl環境下では、正しく定義されないようなのです。 (My::Module中でpath => '/var/www/html/myapp/template' としているのに、 /var/www/htmlにそんなテンプレはねぇ!と怒られます。) 何か回避策はないものでしょうか? また、Tiantモードでも怒られまくるのですが、 「Tiantモードでテンプレートエンジンを使った書き方」講座みたいなURLを ご存知なら、併せて教えてください。 よろしくお願いします。
何らかの Web Application Framework 使ってみればいいと思うよ。 その My::Module は singleton にすべきじゃないかな。
パンくずリスト作成 テンプレート出力 ファイルロック そのほかモロモロ など、自作関数がいくつかあり、今までは require してただけなんだけど、 これら関数をモジュールにしてファイルを分けるのって非効率だと思います? なんか自分がどうやって関数とかまとめていけばいいのか分からなくなってきた orz
ファイル分けなくても use myModule qw/function_to_use/; できるようにすればいいんじゃない。
680 :
676 :2010/11/19(金) 16:58:32 ID:???
既にmod_perlに読み込まれているモジュールへの修正は、
httpdを再起動するまで反映されない事によくやく気づきました
orz
>>677 singleton初めて知りました。
稀に引数受けて挙動を変える事もあるので、
なんとなくデメリットの方が大きい気がします。
(きちんとsingletonを理解できてないだけかもしれませんが)
>>678-679 私の場合、主にメソッドを返すMy::Moduleと、
DBIやら自分の鯖へのログイン状態(WWW::Mechanize)やら、
主に定義を返すMy::Definitionに分けてます。
が、Perlしか知らないし、そのPerl関連の書籍も一冊も持ってない人間なので
参考にはしない方がいいんじゃないかなーと思います。
(参考にすべき人のご登場をお待ちしております)
perl しってるということにするにはちょっと。
>>678 捨てずに使うことを前提にすると、自分ならこんな感じ。
テンプレート出力はメールの本文作成にも使えそうだから独立したモジュールに。
ファイルロックはファイルシステム関係でまとめたパッケージに放り込む。
パンくずリストは作り次第でフレームワークのプラグイン的位置づけを考えるか、HTML生成系でまとめとくか、かな。
#デザイナーと共同作業するならできるだけテンプレートに直書きしておくのもアリだと思う
#(例えば「>」を「>」に変える程度ならソース追わなくていいように)
まあ、一部分使いたいのに余計なものが付いてくる嫌悪感の度合いで決めたらいいんじゃないかな。
あとちょこちょこ手入れるだろうからバージョンは書いといた方がいいよ。
> あとちょこちょこ手入れるだろうからバージョンは書いといた方がいいよ。 そんなつまらんことよりは、機能増やすたびにテスト書くようにして、 git なり svn に入れて一元管理するべき。
今時modperlなんて使わないでplack使いなよ。書き換える度にmodperl再起動とか面倒くさいでしょう。 ちゃんとしたMVCで書いてれば動作確認をブラウザからじゃないと出来ない、なんてことにはならないけど。
685 :
682 :2010/11/20(土) 08:29:04 ID:???
>>683 説明不足だったけど、
過去に納品したものに改修の依頼が入った時に$VERSION変数があるといいよという程度の話。
svnで言うならリリースごとにタグを付ける感覚かな。
文字列を置き換えする時に変数の中身を正規表現として扱わないようにしたいのですが、 この場合個別にエスケープしなければいけないのでしょうか? my $value = "test(test)[test]{test}test"; my $replace = "(test)[test]{test}"; $value =~ s/$replace/test/g; 上のような場合に結果が「testtesttest」になるようにしたいといった感じです。 単純に置き換えしたいだけなのでraplace関数的なものがあればそれで十分なのですが… 初歩的な質問ですみません。よろしくお願いします。
$value =~ s/\Q$replace\E/test/g;
>>687 メタ文字で回避できたんですね、
もう一度よく調べて直してみようと思います。
どうもありがとうございました。
quotemeta もあるよ。
>>684 > ちゃんとしたMVCで書いてれば動作確認をブラウザからじゃないと出来ない、なんてことにはならないけど。
ちゃんとしたMVCについて詳しく。
HTML を返すかどうか (テンプレート出力とかパンくずとか) ファイルロックほかファイル操作全般 汎用 (time で得たのを文字列で返すとか) の3つに分けてみた。 オブジェクトにしたら便利なのは、ファイルロックとテンプレート出力ぐらいかな。。。 がんばりゅ!
>>691 github とかで晒すとアドバイスもらえていいと思うよ。
>>690 684ではないけど、少なくともMに関してはCやVが無くても(ブラウザじゃなくても)テストできるって意味じゃないかな。
#plackは使ったことないから分からないけど、Cも作り次第でテストケース作れないことはないはず
> Cも作り次第でテストケース作れないことはないはず C に M 置いちゃう?
>>690 ・Cにビジネスロジックが書かれていない
・Mに書かれたビジネスロジックは全てスクリプトから呼び出せる
大雑把に言うとこんな感じ。用はブラウザを通してしか呼び出せないロジックを生み出さないようにする。
>>693 確かにApache::TestやTest::WWW::MechanizeなどでCのテストも書けると言えば書ける。
でもそれらはLWPなどを使って、ブラウザからのアクセスを模してるだけなんだよね。
>>684 CGI::Sessionでログイン状態の確認なんかも
ブラウザなしでできる?
open(IN,"+>> po.txt"); while($_ = <IN>){ chop; print "$_"; } close(IN); ファイルの内容を1行ずつ読み込んで出力したいのですが出力できません 行入力演算子が効かないのか何なのか、原因がよくわかりません どうしたらいいでしょうか?
"+>>" を使っているからダヨ open(IN, "po.txt"); でイイヨ ていうかなんで "+>>" なんか使ってんだ?
699 :
697 :2010/11/24(水) 05:07:13 ID:???
できました 読み書き両方出来た方がいいと思って+>>付けていました ありがとうございました
読み書き可能にするopenの仕方には'+>' '+<' '+>>'の3通りあるけど全部動作が違うダヨ どう違うのかは参考書を見るなりして自分で調べるダヨ
読み書きしたくてファイルがなければ作って欲しくてすでにあったら 中身は消さないで欲しくて、でもappendじゃ困るというときに使える のがないんだよなw 結局sysopenのお世話になるしかないという...
>>701 どういう状況でそんなオープンの仕方が必要になるのかよくわからんが、たとえば
my $filename = "foobar.txt";
open my $fh, -f $filename ? '+<' : '+>', $filename or die $!;
みたいなのでいいんじゃね?
>>702 むかしCGIのアクセスカウンターを自作しようとして困ったんだよね。
その方法だと-fとopenがatomicじゃないので運悪いと書いたのが消えちゃう。
結局'+>>'で開いてとじてから'+<'とかやったっけ。なんか無駄っぽいなーと
思ってすごい嫌だった記憶が。
<, >, >> これしか使った事ないし困った事もないんだけど、+>, +<, +>> ってどういう時に嬉しいの?
>>684 MVCって
M − モジュール
V − テンプレート
C − スクリプト
って解釈してもおk?
>>703 排他制御したいんだったら結局flockなり使わないとだめなんでは。
'+<'でも排他的にopenはできないでしょ。
同時に2つ以上のプロセスから'+<'でopenされて書き換えられたら、
内容が消えることはないとしても本来の値と食い違う可能性があると思うが。
そこらへんはsysopenでも同様なんでは。sysopenだと排他的にopenできたりすんのかな。
>>704 あるファイルに対して読んだり書いたりを同時にしたい時に使う。
おいらも使ったことない。
>>704 更新の必要があるログを開く時
< で読み込んでも、更新しようとする時一々閉じてから開かなきゃいけないでしょ?
+< で開いておけば、seek するだけで書き出しできる。
アクセスが少なくて DISK IO が少ないなら、いったん閉じて開いてもいいとは思うけど・・・
>>706 当時は +< で開いた後さらににflockしてました。
sysopenというのがあるというのを知ったあとは、
sysopen FH, 'file', O_RDWR|O_CREAT|O_EXLOCK
で一発でできて感動したものです。
今だとDB使っちゃいますけどね。
なるほど。O_EXLOCKはBSD系だけ有効で、Linuxだと使えないんだ。
プロセス1、ファイルが存在しないと判別 プロセス2、ファイルが存在しないと判別して作成してflockまで行う プロセス1、ファイルが存在してなかったから作成(プロセス2によりロック中)してデータ壊れる これで壊れないか?
俺もファイルの排他で疑問に思っていたけど、 DBと同様なトランザクションの仕組みって perlで可能なの?
perlでDBMS書けば可能。
本格的?な既存のDBと比べたらパフォーマンスは比べものにならんくらい落ちるだろうけど まあ"DBと同様のトランザクション"は実現できるんじゃないかと。 必要な機能だけに絞って実装すればいいんだし。 インタフェースも別にSQLに準拠しなくても好きなように設計すればいいし。 DBでflockによる排他処理とか面倒なことを考えなくていいのは DBが単独で一手に集中してそのへんを引き受けてるからで、 片や複数プロセスが素のファイルにアクセスする時にflockとかで排他処理をするのは、 競合しないよう一手に引き受けてくれるまとめ役(交通整理役、管理役)がいないからで、 だったらデータの面倒を集中的に見てくれる、独立して動作するプログラムをperlで書いて、 複数プロセスからのデータのアクセスはそいつを介してやるようにすればいい訳で、 それはつまりperlでDBシステムを書くってことになる訳で。という話。 といっても実際に作ったことがある訳じゃないんで具体的にどう作るかとかは 実際に作ってみないとわかりません。
自分でフラグ用ファイル作ればいいんじゃないの? 初心者の洞察でスマンが とあるプロセス my $flagfile="locked"; while(!do{ open my $fh,">",$flagfile; close $fh; }) {} # ファイル処理 unlink $locked; 別のプロセス my $flagfile="locked"; while (-e $flagfile) {} # ファイル処理
>>717 残念ながらそれじゃだめだな。
「Perl 排他処理」でググれ。
>>718 別に俺には同でもいい話なんで、思いつきを書いたまで
どこらへんが残念で、なぜだめなのか、説明できるかい?
さすがにそこまで俺は深入りする気はない、すまんね
>>719 とりあえず簡単な例として、「別のプロセス」が「ファイル処理」を
開始してから終わるまでの処理中に「とあるプロセス」が動き出したら
2つのプロセスが一緒に処理してぶつかっちゃうだろ。
>>720 多少の遅延が許されるなら
while(!do{ open my $fh,">",$flagfile; close $fh; }) {}
の直後にsleep関数かませばよくね?
>>716 書こうとした事を先に書かれた orz
「まとめ役が居ないから」
これに限る。
全てのファイル操作を一手に引き受ける Apache モジュールを作って、
全ての CGI/モジュールは ファイル操作を受け持つ Apache モジュール経由で
操作すれば OK
そうすれば DB を使わないスクリプトとかでも完全なファイルロックが可能。
そのモジュールにバグが無ければだけどw
>>717 > while(!do{ open my $fh,">",$flagfile; close $fh; }) {}
このopenて、毎回必ず成功するか毎回必ず失敗するか、しかないよ。たぶん。
必ず失敗するとしたらファイルのパーミッションで弾かれるとかくらい。(他にもあるかな?)
だからwhileで「closeが成功するまで繰り返す」てのは意味ない。
まあ仮にこれで「ファイル使用中ですよ」宣言ができたとして、
前者のプロセスと後者のプロセス、それぞれ同時に1つのプロセスしか起動しないとしても
タイミングによってはまったく排他処理できない。
上のプロセスをA、下のプロセスをB、としてそれぞれ行番号つけてみる。
A1: my $flagfile="locked";
A2: while(!do{ open my $fh,">",$flagfile; close $fh; }) {}
A3: # ファイル処理
A4: unlink $locked;
B1: my $flagfile="locked";
B2: while (-e $flagfile) {}
B3: # ファイル処理
(続く)
(続き)
AのプロセスとBのプロセスは同時に任意のタイミングで動作するわけだから、
もしも次のような順番で処理が進むと…
B1: my $flagfile="locked";
A1: my $flagfile="locked";
B2: while (-e $flagfile) {}
A2: while(!do{ open my $fh,">",$flagfile; close $fh; }) {}
B3: # ファイル処理
A3: # ファイル処理
A4: unlink $locked;
B2の段階でA2のロックはかかってないので、プロセスBは次にB3の処理に入る。
その直前にプロセスAがA2でロックをかけても、プロセスBはそれに気づかない。
で、プロセスAのファイル処理(A3)とプロセスBのファイル処理(B3)が同時に(交互に)走って、
結果がわやくちゃになる、と。
どのプロセスも、自分以外のプロセスがロックをかけてないかチェックする必要があるし、
自分のプロセスが使用中なことを他のプロセスに知らせる(ロックをかける)必要がある。
そして、その時に上の方にでてきた「atmic」な処理が必要になるんだな。
つまり、ロックをチェックする処理とロックをかける処理を、OSのマルチタスク処理で
細切れにされないようにまとめて(一気に)やらないといけない。
それが可能な手段はflockやsymlinkやmkdirや、sysopenのO_EXLOCKなど、限られている。
という訳で
>>721 のsleepかます処理は全く意味がないんだった。
>>723 Windows用のPerl5.8で確認してみたけどsleep(1)をそれぞれのwhile文の後に
かますとちゃんと動作するようだよ
確認してみた?
>>725 sleepかまさなくても不都合なく動作する時は動作するし
(ていうかプロセス数が少なく処理のタイミングがまばらなら大抵の場合は問題ないだろう)
sleepかましてもカチ合ってうまくいかない時はうまくいかない。
それだけのことでしょ。
逆になんでsleepかますとうまく動くのか説明してくれ。
スリープ時間がアクセス権を他のプロセスに譲るのに必要なんじゃないの? と思ったけど?
ちなみにスリープ時間なくすと、動作が不安定化してうまくいかなかった 最初たまたまうまくいくことがあるが、すぐにどちらかのプロセスがアクセス権を独占する
> どちらかのプロセスがアクセス権を独占する そりゃたぶんどちらかじゃなくて上の方のプロセスがいつも独占するんだろう。 おそらくそれぞれの処理をwaitを置かずに無限ループ内でひたすら繰り返すような検証スクリプトを書いたんじゃないの。 1秒もsleep入ってるんだから、それぞれ処理時間が1秒以内に完了する程度の量なら、 うまく相互の起動のタイミングが合えば延々走り続けるだろうな。 ただループを回る時間に両者で少しでも差があれば、 いつかは上の方のプロセスが処理を独占するようになる。 ループ1回につき1秒ずつ遅延があるから、そうなるまでだいぶ待たないといけんだろうけど。
>>729 いや、正確に言うとごく短時間のウエイト処理を置いた
その処理時間ではアクセス権を譲渡しきれなかった
というか、要するにウエイト時間を長くしていけばうまくいくという理解でいいのかな?
もう、これ以上この件に関わるの疲れてきたんだけど・・・
>>730 > というか、要するにウエイト時間を長くしていけばうまくいくという理解でいいのかな?
違う。ちゃんと排他制御をしないと結局のところ解決はしない。
ウェイト(sleep時間)を長くすればするほど、カチ合う確率は低くなるだろうけど、
確率が低くなるだけでカチ合わなくなる訳ではないのだ。
まあ「1秒」ってコンピュータの処理速度からしたらものすごーく長い時間だけどさ。
> もう、これ以上この件に関わるの疲れてきたんだけど・・・
おつかれさま。おやすみ。気が向いたら排他制御の仕組みをきちんと勉強してみてね。
>>730 追伸。「sleepを入れることでアクセス権の譲渡が間に合うようになる」という解釈は間違っているので、念のため。
コード晒せよと思ふた>釣り
Web上にしっかりした解説が山ほどあるんだから、
>>718 で終わってた話なんだけどね。煽りでも何でも無く。
>>705 Vはいいとして、
Cが遷移とかWeb関係、
MがWebじゃなくても使いまわせるロジック
乱暴だけど、MにORMだとかDBだとかを単純に対応付けるよりかはマシな説明だと思う。
735 :
676 :2010/11/25(木) 09:57:28 ID:???
>>734 コード晒してみて良いでしょうか。
細かい点はさておいて、MVC的に合ってるのか確認したいのです。
肝心のモジュールの中身が一番いい加減だとは思うのですが・・・
改行数の都合上、色々と端折ります。
use CGI;
use My::Module; # My::Definitionを継承、ret_xxxxメソッドが該当
use My::Session;
my $session = My::Session->new();
my $sess = $session->chk_session; # if session expired, return undef.
if (!$sess) {
$session->loginForm;
} elsif ($sess) {
my $q = CGI->new();
my $param1 = $q->param('param1');
my $mod = My::Module->new();
my $tx = $mod->ret_Xslate;
my $dbh = $mod->ret_DBI;
if (!$param1) {
my $contents = $tx->render( 中略 );
print $contents;
} else {
# 大きく中略。$returnを取得するSQL文を書いてる。
my $contents = $tx->render("hoge.tmpl", {
title => "fuga",
value => $return;
});
print $contents;
}
}
何らかの WebApplicationFramework 使ってみるところからはじめればいいよ。
※ただしCatalystを除く
>>735 ># 大きく中略。$returnを取得するSQL文を書いてる。
例えばこの$returnは仮に foo($param1) という呼び出しで取れるとして、
$param1がフォームからの入力値である必要は無く
コマンドラインから呼び出して foo($ARGV[0]) としても正しく動くわけで、
foo()はコントローラには無くてもいいよね。
#そう切り分けることを>705でモジュールと呼んでたのなら近い認識かも知れない
余計なお世話だけど if(!$param1) だと $param1 に "0" が入った時も真判定されるので
if ($param1 ne "") という意図ならそのように書いた方がいいよ。
ne "" だと、「"param1"というパラメータ名はあるが値は空文字列」という場合に駄目だな。 param('param1') は、param1というパラメータ自体が無かった場合はundefを返し、パラメータはあるが値が無かった場合は空文字列になる。 だから ne "" は正しくなく、「動く」のを優先するなら735のままで実は正しい。ただしたまたま動いているだけなので、ちゃんと書くならdefinedを使う。 if (not defined $param1) あと$param1がundefだった場合に ne を使うとuninitializedのwarnが出る。
本当に余計なお世話になってしまってた。ごめんよ。
741 :
676 :2010/11/26(金) 03:18:48 ID:???
>>738 >>705 はM - モジュールというより、M - モジュール化という方が近かったですね。
ちなみに、今現在$returnを取得するのは、各スクリプト内固有のSQLなので、
スクリプト間でSQLに重複があれば、モジュールに放り込もうとは思っています。
>>738-739 実はここ、
> my $sess = $session->chk_session; # if session expired, return undef.
の、「return undef.」はウソで、実際には1 or 0を返しています。
if ( not defined $sess )とすると、全てのセッションが通る・・・
param1のケースを考えると、
× return 0;
○ return undef; # or return;のみ
とした方が良さそうですね。
色々とありがとうございました。
これってどういう意味でしょうか? >$ua = LWP::UserAgent->new;
743 :
Perl忍者 ◆M5ZWRnXOj6 :2010/11/26(金) 17:17:16 ID:pwS23Ki1
低レベルなスレ
初心者質問スレですから。
教えていただけないでしょうか。
>>742
>>743 自作のショッピングカートプログラムにクレジットカード決済機能をつけたい。
その為には、決済代行業者のプログラムに接続しなきゃならない。
できるか?
my $ua = new LWP::UserAgent; my $ua = LWP::UserAgent->new; って同じなん?
同じだと思う、俺の中ではな。 俺だよオレ俺
結局、同じ内容でもいくつかの方法があるってことか。 必ずしも決まった形ではないようだね。
矢印を使わない書き方は間接オブジェクト記法というんだけど、 曖昧さがあってときどき期待しない解釈をされてわかりにくい バグの元だから矢印だけを使う方がいいとperlobj(1)に書いて あるよ。
->の意味が分からないので、具体例を教えて下さい。
754 :
Perl忍者 ◆M5ZWRnXOj6 :2010/11/26(金) 21:49:28 ID:pwS23Ki1
値の検証などできるよクレジット あと外部プログラムにつないだりできるよ
755 :
Perl忍者 ◆M5ZWRnXOj6 :2010/11/26(金) 21:52:42 ID:pwS23Ki1
なんでもできるよ^o^ オブジェクトの理解でつまってるってほんと終わってるねw
my $ua = new LWP::UserAgent; は my $ua = LWP::UserAgent->new; のシンタックスシュガー、だっけ?
シンタックスシュガーって何?っていう質問が来ると思うよ。
$fh->print print $fh
>>747 SSLだからセキュリティは完璧クンか。
とあるシュガーの統語法〈シンタックス〉
むしろ 「とあるPerlの糖衣構文(シンタックスシュガー)」 思ったよりつまらんな
763 :
なるとくん :2010/11/27(土) 19:43:14 ID:40qrjSo/
宮川達彦=うちはイタチ
たぶんそれだ!
Perlの文中の配列をjavascriptの中でそのまま使いたいのですが上手くいきません @list = (a,b,c,……); $length = @list; <script language="javascript"> for(i = 0; i<$length; i++){ … #このfor文の中で # $list[i] を使うとエラーになり、 # "$list[i]"だと参照できますがインデックスのiがインクリメントせず最初の要素aが繰り返し参照されます。インクリメントしてほしいです … } どうしたらいいでしょうか?
perl の中で JavaScript を print してる部分を晒してもらわな・・・
perlで書いたCGIスクリプト中のJavaScriptで、 perl側の配列を使いたい、ということ? でもperlで作った配列はJavaScriptからは当然見えっこないんだから JavaScript側にもperlの@listと同じデータ列の配列を定義しておいてやらねばいけないんでは ### perlコード my @list = (1, 2, 3); # @list = (a, b, c) は変じゃないか? ("a", "b", "c") ならわかるけど… my $js_array = join ', ', @list; # @listの内容が文字・文字列の場合はこうかなちょっと冗長だけど # my $js_array = join ', ', map "'" . $_ . "'", @list; ### JavaScriptコード print <<EOT; <script type="text/javascript"> list = new Array($js_array); for (i = 0; i < list.length; i++) { document.write(list[i]); } </script> EOT それとも JavaScript のループ内で、JavaScriptの配列の添字 (i) を使って Perl の側の配列 (@list) の要素を取り出したいということ? しかしその場合そもそもJavaScriptのコード側がforループになっている必要あるの? Perl側の段階でforeach等でループ処理するべきなんでは
770 :
767 :2010/11/29(月) 07:16:51 ID:???
>>768 中身も書くべきでしたね
すみません
>>769 joinでまとめて変数に入れれば良かったのですね
配列として使いたかったので助かりました
ありがとうございます
771 :
676 :2010/11/29(月) 13:13:48 ID:???
同一ページへのPOSTでフォームデータを受け取りたいのですが 以下の方法でreadしても、何も入っていません。 if ($ENV{REQUEST_METHOD} eq 'POST') { read(STDIN, $read_data, $ENV{'CONTENT_LENGTH'}); } 別ページへPOSTした場合は、受け取ることができたのですが… CGI.pmが使えない環境で、別に何か方法はありますか?
別の方法を探すより、現在のコードのバグを探す方が先決と思う。
どう考えてもバグかmod_perl動いてるか 何故か強力なキャッシュが働いてるか・・・ なんとも言えん
>>772 とりあえず使ってる変数の内容が想定通りか1個ずつ確認するところから
776 :
772 :2010/12/01(水) 01:26:55 ID:???
my $read_data = <>; ... read(STDIN, $read_data, $ENV{'CONTENT_LENGTH'}); と書いてたのがreadが空だった原因みたいです。 my $read_data;に修正したらreadできるようになりました。 または、readを削って、my $read_data = <>;だけでも読めました。 ダイアモンド演算子を訳もわからず使ってました。
原因が(自力で)解明できてよかったね
>>775 のアドバイスが効いたのかな (775は俺じゃないけど)
MySQL 上ではこんな感じ。 show grant for tester@localhost; GRANT ALL PRIVILEGES ON *.* TO 'tester'@'localhost' IDENTIFIED BY PASSWORD '*****' GRANT ALL PRIVILEGES ON `testdb`.* TO 'tester'@'localhost' perl から connect('DBI:mysql:testdb:localhost' , $username, $password); ってすると、 Can't connect to MySQL server on 'localhost' (10061) ってなる。 むぅ。。。
>>779 MySQL が起動してない or Port3306がファイアーウォールで遮断されてる
Perlの負荷がすごいから一部だけでもPHP化できないかと思ってIf構文だけ挑戦してみたんだけど print <<EOF; <?PHP print "Content-type: text/html\n"; $G='0'; if($G==1){$G3=1;} else if($G==2){$G3=2} ?> EOF こうしてみたらContent-type: text/htmlだけがテキスト出力されるのだけどどうしたらいいのかな?
>>782 これはPerlとPHPのコードが混じってるの?
どういう動きを期待してるのか分からない。
もしPerlスクリプトの一部分を新規のPHPプロセスで呼び出そうとしてるとか
Perlの出力結果をPHPソースコードとして見て改めてPHPで実行する(またはその逆)とか
そういう事なら余計重くなるだろうね。
PHPスクリプトを動的に作ってドキュメントルート以下にphpファイルとして書き出すなら分からなくもないけど。
そもそもPerlでCGIスクリプトを書いてるんなら、 Content-type: text/html\n\n を出力するのはperl(CGIスクリプト)側の仕事だろう。 で、PHPコード中でいじってる$Gや$G3はどこで使ってるの? Perlスクリプトで参照してるんだったら全く意味がない。 あとPHPでelse ifを書く時はの表記は「elseif」。
PerlさんにPHPのソースコードを print させるのが「PHP化」でいいんだろうか。
PHPでは/else ?if/はどっちでもいいんじゃなかったけ まあなんにしても何がやりたいのかまったくわからんわけだが
「Perlが遅い」ってことは、PerlはCGIでPHPはモジュールだってことだよな CGIが走ってる最中にPHP文書いたからってモジュールモードで動くのか? ・・・仮にそうだとしてもifひとつで差が出るとは思えんが というか逆に遅くなりそうだが
そうだよなあCGI(Perl)とPHPが同時に、または続けて処理されることはたぶんない となるとContent-type: text/htmlが表示されたっていうのはどういうことなんだ?
mod_perlでもspeedycgiを使えば解決
require './item.txt'; $w = 0; $h = 0; $t = 0; @we = (); @he = (); @tr = (); for($i = 0;$i <= 6;$i++){ if(${'item'.$i}[1] = 0){ $we[$w] = "@{'item'.$i}"; $w++; } elsif(${'item'.$i}[1] = 1){ $he[$h] = "@{'item'.$i}"; $h++; } else{ $tr[$t] = "@{'item'.$i}"; $t++; } } item.txtには各行に @item(数字) = ("文字列",0〜2の数字,0〜2の数字); の配列が入っています 2つ目の数字の要素で各配列を3つの配列@we,@he,@trに振り分けたいのですが、要素の数字によらず全て@heに入ってしまいます 文字列の要素のせいでif文のイコールがブール値を求めているのか、(${'item'.$i}[1] = 1)の右辺が0以外の時に条件を満たすようです そして何故か右辺のオペランドが${'item'.$i}[1]に代入されています ( (${'item'.$i}[1] = "A")なら@heの各要素が("文字列","A",数字)になります) どうしたらいいでしょうか?
>>790 お前は=と==の違いをもう一度よく復習すべきだと思われ
==はcにしても初歩の間違いだよな。
=が許されるのはシェルスクリプトまでだよねー
いやシェルスクリプトでも == だろ
795 :
790 :2010/12/02(木) 16:56:40 ID:???
if文では==を使うのですね; 失礼しました
昔、BASICは=だった。 今は知らん。
BASICの比較演算子は、==でなくて=、!=でなくて<>だったっけな。
たしかそんな感じ if $cnt <> 0 then else endif だったような 個人的には 「then」 ってなんか好きw
俺の知ってる時代のBASICはif文を複数行にわたって書けなかった。 IF A <> 0 THEN GOSUB 1000 ELSE GOSUB 2000 とかそんな感じだったような。ENDIFはなかった。 完全にスレ違いだな。すまん。
そうだ、思い出した。 endifなんて無かった。
@dataの5番目から9番目までをループさせるときに for文の中で、ループ内容を1項目だけ追加させたい場合はどうしますか? $start=5; $end=9; for ($start..$end) { ##$data[$_]にabcが含まれてたらループを1つ追加 if ($data[$_] =~ /abc/i) { $end++; } ##$data[$_]を書き出し print $data[$_]; } ってやってもダメでした。
until ($now > $end)
なるほど、 for文でなく、until文ですねトライしてみます
質問させてください。
掲示板(CGIのページ)にモバイルアドセンスを表示したいんですけどうまく表示できません・・・
どこをいじったら良いのでしょうか?
下の掲示板を利用してます。PCには表示できますがモバイルにはどうしても
無理です。
http://www.kent-web.com/bbs/epad.html ptel.plにモバイルアドセンス(CGIコード)を書きましたがエラーになります。
携帯からアクセスしたさい、一番上にアドセンスが表示されてれば
問題ないです。
宜しくお願いします。
kent スクリプトに strict を求めるのが酷だw
809 :
gfx :2010/12/03(金) 20:37:49 ID:???
よろしくwww
810 :
gfx :2010/12/03(金) 20:41:32 ID:???
激しく騙り臭がするな。 本人ならハテダに2chデビューしましたって書いてみてくれよ。
ああ、かわいそうに IRCでキチガイに触れてしまったばかりに…
どうやらにせものだったようだ
今どきkentはねえよ。 さっさと捨てろ
今、 utf-8 の文字コードでスクリプトを書いてて、utf-8 のファイルを読み込んで、HTML の META で utf-8 を指定して表示してます。 use utf8; はしてません。 これ自体はちゃんと表示できてるのですが、ファイルを読み込むときに明示的に utf-8 だと指定した方がいいかな?と思い、 ファイルを読み込むときに <:utf8 とすると、読み込んだデータはちゃんと表示されますが、 スクリプトの中に直接書いて表示してる全角文字がすべて文字化けしてます。 '<:utf8' ではなく '<' で読み込めば、文字化けせずすべてちゃんと表示されます。 use utf8; してみましたが状況が変わりません。 binmode STDOUT, ":utf8"; としても駄目でした。 ファイルを読み込むときに <:utf8 を指定しつつ、スクリプトに書いた全角文字が文字化けしない方法ってどうやるんでしょう?
あっ、なんとなく分かった気がする 一箇所でも <:utf8 とか binmode STDOUT, ":utf8" ってやるとスクリプト全体 (use とか require するもの) に影響する。 って感じかな?
use utf8; してフラグを付ける必要性がわからない
utf8フラグをつけて読み込むと、ファイル中の生のutf8コードからperl内部コードのutf8に変換される。 一方use utf8;しないで書いてるからスクリプト中のutf8文字コードは生のutf8コードのまま。 その両者を混ぜてしまうから化ける。 ってことじゃないだろうか。
ってことでしょうね。 perlio > :utf8 > Declares that the stream accepts perl's *internal* encoding of characters.
例えば漢字の「愛」は、 生のUTF-8nコードでは 0xe6、0x84、0x9bの3バイトだが、 Perlの内部コードでは0x611b。 前者を split // すると (0xe6, 0x84, 0x9b) ができる。単なる3バイトのデータ列としての扱い。 後者を split // すると (0x611b) ができる。内部コード0x611bの「愛」という(splitできない)1文字としての扱い。
ありがとう
文字化けする理由が
>>820 でなんとなく分かった。
が、フラグを立てる理由というか使い道が分からない。
フラグを立ててれば半角全角関係なく文字数が簡単に分かる (ですよね?) とか、そうゆう利点だけな気がしてならないもんで・・・
>>821 文字数が簡単にわかるだけでなく、各文字の区切り(境界)を意識しないで文字列処理ができる。
ShiftJISコードでの文字処理・文字列処理は面倒だったなあ…(遠い目)
その代わり場合によっては文字コード変換時に一部記号などが化けることがあったりとか
別の厄介事も若干発生しているけど、まあそのへんは仕方ないかね。
>>821 フラグを立てるというか実質的に変換処理が走ってると思った方が分かりやすいはず
メリットで大きいと思うのは文字列として正しくない並びのバイト列を弾けること
>>821 ?正規表現で余計な事考えなくていい、とか
文字列$html に含まれるメールアドレスの全てをリストに格納したいのですがどうすればいいのですか? while ($html =~ /([-.\w]+@[-.\w])/g) { push(@list, $1); } とやると固まりました。無限ループかもしれません。 どうやったらやりたいことができるでしょうか?
業者にメアドのリストを売るつもりなんかな?
事故解決。本当は別だけど特定されたくないのでメルアドを例にしたのです。
while ($html =~ s/([-.\w]+@[-.\w])//){ push(@list, $1); } $html を後々使うなら my $html_bak = $html; みたいにバックアップを。
ちなみに最初に質問者が出したコードは無限ループしてる 同じ内容をひたすらマッチし続けてる
my @foo = $baa =~ /([-.\w]+@[-.\w])/g; でできなかったっけ
m//g はスカラーコンテキストだとイテレータ的に動作するから無限ループにゃならんと思うんだが
どーせ隠したい()スクリプトがkusoだったんだろう
833 :
826 :2010/12/09(木) 20:03:56 ID:???
ちなみにこれを使った。
@list=($html =~ /([-.\w]+@[-.\w])/g);
>>828 $htmlが$mech->content()だったらどうってことないですよね?
>>829 してたと思います。確実にwhileで止まっていました。
>>831 しかし∞ループしてました。
@list=($html =~ /([-.\w]+@[-.\w])/g);
に入れ替えたとたんうまくいったので。
@list=($html =~ /mailto:([-.\w]+@[-.\w])/g);
としてもメルアドだけのリストができたんだけどどうしてですか?
↑825だった。
>>830 それは真偽値がかえると勘違いしていました。
カッコが必要だと思っていました。正しいのですね。
$baa='abc@abc xyz@xyz 1a2b3c@4d5e';
my @foo = $baa =~ /([-.\w]+@[-.\w]+)/g;
print "@foo\n";
abc@abc xyz@xyz 1a2b3c@4d5e
特定されたくなくてだかなんだか知らないが
実際に動かないコードではない別のコードを捏造して質問するとは駄目な質問者だ。
>>828 は無限ループなどにならずにちゃんと機能したぞ。試してみたら。
ただタイプミスのせいで「メールアドレス」は取得し損なってるけど。
たぶん、元の動かないコードに別のバグがあったんだろう。
結局、真の原因はわからずじまいか。
foreach を使った場合は
>>831 の解釈で OK かと。
while ではマッチしたかどうかの判断になるから無限ループになる。
839 :
831 :2010/12/09(木) 21:07:45 ID:???
>>837 いや、whileの話のつもりだったんだけど。
while ( ここはスカラーコンテキスト ) { } だろ。
>>825 も一応試したが普通に動いたぞ。
/g がなかったら無限ループだけど。
840 :
836 :2010/12/09(木) 21:21:58 ID:???
>>838 そうだった。アンカーミスった。すまん。
>>839 だからたぶん、元のコードにバグがあって (/g のつけ損ねとか)
質問用に捏造した
>>825 のコードではバグのないコードを書いてしまったんだろう。
と推測する次第。そうだとすると最低な質問の仕方だよな、とプチ憤ってしまった。
ほんとだ 思い込みじゃなくてテストしてみたらちゃんと動いた。
842 :
830 :2010/12/09(木) 22:03:45 ID:???
まあ、実際のコードを晒さないのなら質問にくんなと言いたいけれど
特定されたくないというのは、宿題を自力でやらなかったのがバレると困る、とか そんなような理由なんだろうな、たぶん。
844 :
841 :2010/12/10(金) 01:49:22 ID:???
結局は宿題は出来たからいいや でフェードアウト的な? むぅ。。。w while(/〜/g){ 〜 } がちゃんと回ってくれるっていう事を知れたので、 自分的には有用な流れだった。
質問です
TreeBuilderを使っているのですが、文字化けが微妙な頻度で発生しており
原因の検討が付かず困っています
何かアドバイスがありましたらお願いします
環境はWindowsXP Home、ActivePerl最新verです
以下ソースです
###################
use LWP::Simple;
use HTML::TreeBuilder;
use encoding qw(utf-8);
$uri = "
http://blog.esuteru.com/archives/1866797.html ";
$tempfile = "getstore.html";
getstore($uri, $tempfile);
my $tree = HTML::TreeBuilder->new;
$tree->parse_file("getstore.html");
for $attr($tree->look_down("class", "article-outer-3")){
$text = $attr->as_HTML('<>&', "\t");
print $text;
}
###################
続きます
846 :
845 :2010/12/10(金) 08:35:50 ID:???
847 :
845 :2010/12/10(金) 08:46:44 ID:???
848 :
845 :2010/12/10(金) 08:48:47 ID:???
>>847 、2枚目と3枚目のスクリーンショットを逆にしてしまいました…
適時読み替えて下さい…
とりあえずのヒントになるかな。 化けてる行のHTMLソースを見ると、?みたいな数値文字参照があるな。 これが関係していそうだな。
あれ化けちゃった。失敗失敗。 例えば「&#9314;」(←実際には半角)みたいな文字参照のある行で化けちょる。
まったくの勘だけど、とりあえずスクリプトの始めのほうにこれ書き加えてみたらどうなる? use Encode::Alias; define_alias( qr/s(hift.*)?jis$/i => '"cp932"' );
あー全然ちゃんと読んでなかった。
ソースは2chとかじゃなくて元からUTF-8のまとめブログか。じゃあ
>>851 は意味ないわ。
853 :
851 :2010/12/10(金) 17:30:19 ID:???
文字参照のデコード時にutf8フラグあるなしが混ざるせいで化けてるってことなので、 とりあえず結論としては $tree->parse_file のかわりに my $html = do { local $/; open my $fh, "<", $tempfile; <$fh> }; $tree->parse(Encode::decode_utf8($html)); とすればとりあえず期待通りに動く。
<a href="〜"></a><a href="〜"><img src="〜〜〜"></a> っていう部分があって、<img> を囲ってる <a> は残して、<a></a> となってるものだけ削除したいと思って s/<a .*?><\/a>//gi ってやったんだけど、<img> を囲ってる <a></a> まで削除されてしまいます。 s/<a .*?"><\/a>//gi これだと意図する動き (<img> を囲う <a></a> は残す) になります。 EmEditor の正規表現検索で試したところ、Perl と同じ動きになりました。 s/<a .*?><\/a>//gi のどこが駄目なのか分かりません。。。
855 :
845 :2010/12/10(金) 19:53:10 ID:???
>>853 回答の提示ありがとうございます
こちらでもうまく動作しているようです
自分の今のスキルではおそらくたどり着けませんでした…
>>854 0回目 <a href="〜"></a><a href="〜"><img src="〜〜〜"></a>
1回目 <a href="〜"><img src="〜〜〜"></a>
2回目
<a .*?> ってやって最短にするようにしてるのに、なんで最短マッチにならないのかが、今の自分には理解が出来ない。
<a href="〜"><i m{<a .*?></}で失敗するが <a href="〜"><img src="〜〜〜"> m{<a .*?>}はマッチする マッチするものの中で最短
マッチするものの中から最も短いものを選ぶから最短マッチというのであって、
>>856 の「1回目」の場合 .*? にマッチするのは「href="〜"><img src="〜〜〜"」の部分ただ1箇所だけなんだからそこが消えるのは当然。
分かったような分からないような。 じゃぁ、自分がやろうとしてる 「.*?から一番最初に見つかった > まで」 を表現するとすると <a [^>]*></a> が正解ってところ?
間違えた <a から最初に見つかった > まで だった
<a href="
http://... " title="(>_<)"> なんてのが出てきた場合に困るな。もちろん本来は >_< と書くべきところだけど。
こういうのがありえないとわかっている場合や、あっても無視と決め込むなら
>>860 でいいと思う。
もし厳密にやりたいなら正規表現ひとつでやろうとしないでパーザなりを使うべき。
あ〜やった理解できた気がする
> が見つかったんだから、そこで止まれよ
とか思ってたんだけど、そもそも .*? の ></a> がマッチしてるじゃないかと。
ちょっと言葉では表現できないけど、自分の勘違いっていうか、思い込みから来る理解不可能状態に陥ってた。
ありがとん。
>>862 以前 HTML を整形してくれるモジュールがあって、そのモジュールがもの凄いメモリ喰らい (それこそ 数百メガ) で
perl が落ちるってのがあったので (たしかこのスレだったような気がするのだが・・・)、
モジュール使った場合と、自力で書く場合のコード量が少ない場合は自分で書くようにしてたりします。
> そのモジュールがもの凄いメモリ喰らい (それこそ 数百メガ) で こういう話が出てた記憶はあるけどパーサじゃなくて (Win32環境の)LWPがなぜかくそ重いとかそういう相談じゃなかったかな。 暇つぶしにログ探してみる。
いや、たしかにメモリを食いまくってperlが落ちるってゆうのがあった。 p2 で過去ログあさるのめんどくさいなぁww ちょっと探してみる
Win32 ActivePerl 5.12.1 128行のテーブルで試したら 130MB 使って 500 エラー 4年も経つのにw まぁ、テーブルぐらいテメェで出力しろってことで。
863は空白行の多さから察してPerl忍者ですね。 わかります。
870 :
Perl忍者 ◆M5ZWRnXOj6 :2010/12/11(土) 22:36:26 ID:/agSJrih
863みたいにバカじゃないです。 わかります。
えっ
872 :
nobodyさん :2010/12/12(日) 14:47:07 ID:OtPTT+aF
qw{} は便利なのですが リファレンスで欲しい場合はどのようにしたらよいのでしょうか? \qw{a b c} としたらエラーになったので、 [ qw{a b c} ]; としたんですが、あってますか? でもなんかしっくりこなくて。
質問しなくても大丈夫じゃん ってぐらい正解でございますw
874 :
nobodyさん :2010/12/12(日) 15:55:33 ID:OtPTT+aF
そうなんですね。ありがとうございます
875 :
Perl忍者 ◆M5ZWRnXOj6 :2010/12/12(日) 17:11:01 ID:GuB4bd3O
そんねな
TCPで接続して、バイナリデータを受信したいのですが 以下のコードのrecvで失敗します。 while (<$sock>)を使うと文字列は読めるのですが、 バイナリデータが読めてなさそうなので、recvに変更したところ うまくいきません。何か問題がありますか。 my $sock; socket($sock, PF_INET, SOCK_STREAM, getprotobyname('tcp')); my $remote_host = 'localhost'; my $packed_remote_host = inet_aton($remote_host); my $remote_port = 22222; my $sock_addr = sockaddr_in($remote_port, $packed_remote_host); connect($sock, $sock_addr); my $res; print $sock "Hello"; shutdown $sock, 1; recv($sock, $res, 100, 0); close $sock;
なんでshutdownしてんの?
878 :
Perl忍者 ◆M5ZWRnXOj6 :2010/12/14(火) 22:44:39 ID:3UzhxS91
バッファ
recvの戻り値ぐらいは見ろよ
881 :
nobodyさん :2010/12/15(水) 15:16:11 ID:VvPjVUom
1 !== "1" のようなことをperlで行うにはどのようにしたらよいのでしょうか?
できない。 perl処理系のソース読んでスカラーをどう保持してるか 調べてみるといいよ。
883 :
nobodyさん :2010/12/15(水) 16:40:46 ID:VvPjVUom
そうなんですね・・。 文字列か数値かを判断する方法はないでしょうか? Devel::Peek でフラグを見る方法だとちょっと大げさすぎるかなと思うので なにか良い方法はないでしょうか? 最初 +1-1 してチェックできるかなと思ったのですが perl だと意味無いですしね・・
>>883 通常区別する必要がないから組込関数のような形で用意されていないのであって、
必要に感じるのならそれは他の言語の流儀をPerl上でも押し通そうとしているからだ。
どうせ使う前には汚染除去やバリデートをするんだから、単純な整数なら
$num = $num =~ /^([0-9]+)$/ ? $1 + 0 : 0;
のようにチェックのついでに数値化するだけだし、ある文字列が数値として適切に
解釈可能かどうかを調べたいなら Scalar::Util::looks_like_number() がある。
885 :
nobodyさん :2010/12/15(水) 21:17:32 ID:VvPjVUom
他の言語にデータを受け渡す為に出力するので、数値なら数値で、文字列なら文字列で 渡したいのでなんか楽に軽く判別する方法ないかな〜なんて・・・。 YAMLやJSONとかのモジュールの正常性テストとかにも使いたいなとか。
なんで int() 使わないの?
判別させるんじゃなくて渡すときに数値/文字列を決めてやるのではだめなのかな。
文字列を連結させてprintする場合は、下記のAとBどちらを使うべきでしょうか? my $str1 = "あ"; my $str2 = "い"; print "$str1$str2";#・・・A print $str1 . $str2;#・・・B
>>888 実行環境と渡す内容によるし、繋げずに渡してもいい。
print $str1, $str2;
強いて言うなら、特定の条件下でカリカリにチューニングしたいわけでないなら
「読みやすいように」書くといい。
890 :
888 :2010/12/17(金) 17:43:29 ID:???
>>889 ケースバイケースって事ですね。
ありがとうございます。
891 :
nobodyさん :2010/12/18(土) 00:07:20 ID:qL35dvRo
1、入力された数値の数だけフレーム分割した画面を表示したいです。 2、テキストタイプのinputで数字をname="number"で受け取り cgiで<frame>のタグを繰り返すという内容にしたつもりです。 (内容は下記の状態になってます。) 3、しかし、実行結果のページでは何も表示されません。 何がいけないのかご指摘お願いします。 read(STDIN,$str,$ENV{"CONTENT_LENGTH"}); $str=~tr/+/ /; $str=~s/%([0-9A-Fa-f][0-9A-Fa-f])/pack("c",hex($1))/eg; foreach (split(/&/,$str)){ my ($key,$value)=split(/=/,$_); $input{$key}=$value; } $height=100/$input{number}; print "<html>\n"; print "<head><title>first_result</title></head>\n"; print "<frameset rows=\""."$height%,"x($input{number}-1)."$height%\">\n"; for($n=0;$n<$input{howmany};$n++){ print "<frame src=\"second_part.html\" name=\"second\">\n"; } print "</frameset>\n"; print "</html>\n";
$input{howmany}でループを回しているから
そういうつまらんミスで時間を無駄にしないためにも せめて use strict; くらいは使おうぜ
894 :
Perl忍者 ◆M5ZWRnXOj6 :2010/12/18(土) 14:12:29 ID:lZZb3And
perlのスレってネトゲみたい
895 :
nobodyさん :2010/12/18(土) 22:45:42 ID:eFFNyC2E
正規表現について質問です 以下のソースを実行しているのですが… #======== my $text = "10a|10b|10c"; $text =~ /(10.)/g; print $1; print $2; print $3; #======== 「"10"で始まり、その次の1文字まで含めた値」を全て取得したいのですが、 出力されるのは何故か$1だけで、$2以下は「Use of uninitialized value」とエラーが出てしまいます マッチした部分は特殊変数$1、$2、$3…と順次格納されると考えていたのですが… どの部分がおかしいのでしょうか?
>>895 パターン内にあるキャプチャ用のカッコが1つだけだから $2 以降は使われないよ。
my @matches = $text =~ /(10.)/g;
print "@matches\n";
こんな風に配列に入れたらどうかな。
897 :
nobodyさん :2010/12/18(土) 23:12:09 ID:eFFNyC2E
>>896 自分の正規表現の理解が間違っていたようです
配列で取得する必要があったのですね
ありがとうございました
一括取得ではなく順ぐりに1つずつ処理でもいいなら while($text=~/(10.)/g){print $1;} 以上蛇足
i
>>890 速度的には「,」繋ぎが速いらしいね
""でくくると変数の範囲をチェックするし、「.」で繋ぐと変数の中身を判断するんで、その分遅くなるのだそうな
901 :
nobodyさん :2010/12/20(月) 12:51:46 ID:klkFZZbW
perl5.8.8で、use utf8としてutf8でソースを書いています。 その中で文字列を生成→出力と単純な処理を行っているのですが、文字列がある一定の長さを 越えた辺りで、iso-2022-jpで出力するとその長さ前後の数文字だけ\b{xxxx}の形に文字化けします。 eucやutf8で出力すると、化けません。 また、適当な長さのところに改行を入れると、iso-2022-jpでも文字化けしません。 これってどういう現象なのでしょうか..解決先を御存じ、または同じ現象に遭遇した方いらっしゃいますでしょうか。
902 :
nobodyさん :2010/12/20(月) 12:57:22 ID:klkFZZbW
>901 すいません、化け方は\x{xxxxx}の間違いです。やはり直前の改行以降300文字前後で化けます。
903 :
nobodyさん :2010/12/20(月) 13:06:16 ID:klkFZZbW
>901 実験にこんなプログラムを書きましたが、再現しました。340文字で改行するとOKでした。 #!/usr/bin/perl use strict; use Encode; use utf8; binmode STDOUT,":encoding(iso-2022-jp)"; my $x; for(my $i = 0; $i < 1000;$i++){ $x .= "あ"; } print $x . "\n";
>>903 手元のlinux上の5.10.1で動かしてみたが別に変なことはないけどな。
プログラムは特になんの変哲もないから、現象が本当ならなにかの
バグぐらいしかおもいつかない。バージョンや環境は?
905 :
nobodyさん :2010/12/20(月) 14:32:42 ID:klkFZZbW
>904 RedHat ES4 + perl-5.8.5と、FreeBSD 5-STABLE + perl 5.8.8の2つの環境で 確認しました。 perlのバグですかね・・・。うーん。
Encode.pm で落ちてるみたいだけど・・。 does not map to euc-jp at /usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi/Encode.pm line 158. 途中で euc にマッチするコードになるんだろうか? binmode を使わないで、最後の方をこうするしかないみたい。 ------------- utf8::encode($x); Encode::from_to($x, 'utf8', 'iso-2022-jp'); print $x . "\n"; -------------
907 :
nobodyさん :2010/12/20(月) 15:25:33 ID:klkFZZbW
>906 最新のEncode.pm(2.40)でもdoes not map to euc-jpと出ました。 5.10.1でOKということはEncode.pmの問題じゃなくて本体の方の問題ですかね。 >binmode を使わないで、最後の方をこうするしかないみたい。 なるほど、確かにこちらならOKでした。 出力先がフィルターやファイルなのでこのまま書き直してうまく行くか確認が 必要ですが、こちらの方で動くか試してみます。ありがとうございます!
content-type が Shift_JIS とか指定してたりして。。。
再現した v5.8.8 built for i386-linux-thread-multi Encode 2.40
>>910 自分でencode関係のモジュール作るときは気をつけろって話じゃないの?
さすがにちぎれたからって結果がおかしくなるようなものが標準添付なのは
どうかと思うな。
元質問者です。 >910 なるほど・・勉強になりました。
WWW::Mechanize を使ってフラッシュプレイヤーがインストール済み であるかのように振舞うにはどうしたらいいのでしょうか?
>>914 普通のブラウザでアクセスしたときの通信内容をよく観察して
真似すればたいていなんとかなる。
大概Javascriptで判定されてるからあんまり気にしなくてもいいんじゃない
WWW::Mechanize が JavaScript をエミュレートしてくれればねぇ。。。
utf フラグが付いた文字列を LWP に投げるとエラー出るのね 1時間ぐらい悩んだわ
use utf8 すると、 use CGI::Carp qw(fatalsToBrowser); がうまく動かないんですね。 %test ってだけすると Internal Server Error としか出ず。 use utf8 を外すと Global symbol "%test" requires explicit package name at test.cgi line 25. Execution of test.cgi aborted due to compilation errors. ってちゃんと出る。 むぅ。。。
$ perl test.cgi
あらほんとだ。 表示された。。。 逆になんでブラウザだと表示されないのか、それはそれで疑問がw
use utf8;
それは外せない。
924 :
nobodyさん :2010/12/26(日) 16:40:31 ID:0uuAPxVP
925 :
891 :2010/12/28(火) 04:26:30 ID:???
>>892 ,893
遅くなりましたがアドバイスありがとうございました
明けましておめでとうございます AmigoDatabaseを使ってデータベースに興味をもち、CSV形式で 1項目あたり2000個くらいの要素を抱えていて全部で1万項目 くらいのデータベースになりました それぞれの要素は原則文字列なのですが時々数値が混じります この数値を足し算したい場合、個々の数値が連想配列だとしたら どのようにすれば良いのでしょうか 質問の仕方があいまいですみません
abcdefg っていう文字列に対して cdefg を検索し、efg を xyz に置換 っていうのはどうかけばいいんでしょう?
my $s = 'abcdefg'; $s =~ s/efg/xyz/ if($s =~ /cdefg/);#cdefgを検索 こうですか
いつも my $s = 'abcdefg'; $s =~ s/(cd)efg/$1xyz/; みたいな感じでやってる
$s =~ s/cdefg/cdxyz/g; では不満なのか あえて特殊エスケープとかつかうなら $s =~ s/cd\Kefg/xyz/g; または $s =~ s/(?<=cd)efg/xyz/g;
はいw s/abcdefg/abcdxyz/;
スクレイピングで色々やってんだけど、記事を持ってくるサイトが
頻繁に CSS のクラス名を変えたり、順番を変えたりするもんで、
修正漏れに気がつかずにハマったので、一致するけど
置換は行わない部分の指定が出来れば。と思った次第です。
なので、
>>932 さんの方法を試してみます。
935 :
931 :2011/01/03(月) 01:49:54 ID:???
>>932 おぉ。そんな感じにできるんだ。すげぇ。
perldoc perlre見たらちゃんと書いてあった。勉強になった。
For instance
s/(foo)bar/$1/g;
can be rewritten as the much more efficient
s/foo\Kbar//g;
936 :
932 :2011/01/03(月) 02:46:25 ID:???
あーでも\K使えるのはPerl5.9.5以降だから一応注意な。
\Kは*や+といったメタ記号も使えるから便利だね。 否定形は何故作らなかったのだろうか。
否定だと普通にマッチして場所覚えるだけじゃ すまなくなるからじゃないかな。
939 :
Perl忍者 ◆M5ZWRnXOj6 :2011/01/03(月) 16:28:47 ID:jfo7ol9+
gfx君←(笑)
コンソールで Term::Screen 使ったあとに vim を使うと 日本語入力ができなくなっているのですがどうすれば良いでしょう? 何かもとに戻す手続きはあるのでしょうか? $ cat ./ScreenApp.pl #!/usr/bin/perl use Term::Screen; my $scr = new Term::Screen; $ ./ScreenApp.pl 画面描画 $ vi で “あ[Enter]” と入力すると “c^B” と表示されて 「まだテキストが挿入されていません」とエラー
おい、早く質問に答えろ
はい
>>941 は自分ではありません。
よろしくお願いいたします
>>943 偽?やめてくれませんか?
教えてください
>>940 試してみたら手元の環境でもおかしくなった。resetコマンドで
直ったけど端末関係は詳しくないので原因とかはわかんね。
何かの状態を書き換えたまま放置とかしてるんだろうけど。
ご報告ありがとうございます reset コマンドは初耳でしたが有効でした
947 :
926 :2011/01/05(水) 02:24:02 ID:???
>>928 リンク先の
>>1-2 は別として、有用なリンクを教えて頂いてどうもありがとうございます。
Perlをよくご存知の方なら知っていて当然のリンクも分からないのが今の自分なんです。
これから精進します。
my $in = new CGI; ってやった時に $in から ENCTYPE を調べる方法ってありますか? あと GET と POST を同時受け取るのって、CGI からは無理? <form method="POST" action="aaa.cgi?opt=1"> みたいので呼び出したいのですが。。。
query stringじゃないといけないんですか、<input type=hiddenでは駄目なんですか?
作り方が悪いのは承知ですが、処理の振り分けのオプションは GET で渡してて、 機能追加でファイルアップロードを付けようとしてるしだいで、GET で渡す部分は 弄りたくは無いなと・・・
>>948 request_methodとurl_paramでなんとかなるだろ。
詳しくはマニュアル嫁
お〜 url_param がまさに求めてたやつ!! thx!
2chソースくれ
半角記号をパターンマッチさせたいのですが、上手くいきません。 Perlどころか正規表現の扱い方すら覚え始めなので、根本的に間違ってるかも知れませんが if ($value =~ /[@-/]/) if ($value =~ /[\@-\/]/) if ($value =~ [@-/]) どれもエラーが出てしまいます。 模範的な書き方としてはどうすればいいのか、お教え願えませんか
/ はエスケープ @はそのまま -を3文字の中央に配置すると範囲指定になるので、エスケープするか最初に配置
>>956-957 お早いご回答、ありがとうございます。
$valueが
半角記号を含むかどうかを判別したいと思っていましたが
どうやら間違えていたのでしょうか
ttp://jp.layer8.sh/reference/entry/show/id/1121 こちらを見て
[@-/] で @!"#$%&'()*+,-./ をマッチ出来ると思っていました。
それならばとりあえず@は省くとしたら、
if ($value =~ /[!-\/]/)
これで !"#$%&'()*+,-./ を含むかどうか、を判別出来ると思ったのですが、
今度はエラーは出ないものの、マッチしてくれません。
基本的すぎるのか、
perl 半角記号 パターンマッチ 正規表現
あたりのキーワードでググってみても、いまいち解り易いページに辿り付けなくて難儀してます。
ん?どうなって欲しいんだろう。\x21-\x2fの範囲内のが混ざってたら真が返るはずだけど。
$value =~ m{[@-/]}; Invalid [] range "@-/" in regex; marked by <-- HERE in m/[@-/ <-- HERE ]/ at - line 1. エラーになるのか。初めて知った。
[\x21-\x2f] [\x3a-\x40] [\x5b-\x60] [\x7b-\x7e] これが記号かな?
962 :
955 :2011/01/12(水) 00:38:59 ID:???
>>959 申し訳ない、ちゃんと正しい結果が返っていました。
こちらの確認不足でした。
>>961 こう16進数で表記してマッチさせる事も出来るんですか。
より幅広くチェック出来そうなので、色々試してみます。
とりあえず、したかった事はどうにか上手くいきそうです。
皆様ご助言、ありがとうございました。
LWP で $ua->proxy('http', '
http:// ' . $proxy) のように Proxy をセットしたものの、
後々解除したいときってどうすればいいんでしょう?
$ua->proxy('http', '') とかでよかったりします?
ためしてみりゃいいじゃん
965 :
Perl忍者 ◆M5ZWRnXOj6 :2011/01/12(水) 21:33:48 ID:Icf1UA6A
ためしてみりゃいいじゃん
モジュールの命名規則についての質問です。 自分用のモジュールを用意しようと考えています。 オブジェクト指向のものを「Object::○○」に置き、 関数指向のものを「Function::○○」か「Utility::○○」に置こうと考えています。 問題点や、別の考え方、流行などがあればご指摘おねがいします。
ガッチガチですね^^;
>>968 回答ありがとうございます。
公開予定のないモジュールですので、名前に下線を含める方向で検討したいと思います。
while($html =~ s/<br \/><br \/><br \/>/<br \/><br \/>/){ print '.'; } 連続した3つの改行タグを2つの連続した改行タグに置換しようとしてるんだけど、 改行タグが置換されません。
>>970 こういうのじゃだめかしらん?
$html =~ s/<br \/><br \/><br \/>/<br \/><br \/>/gm;
print $html;
セルフ以外の値を得る場合に、アクセサのゲッターメソッドを使うという制約をつけてみようと思いました。 こういったやりかたが一般的かどうかを知りたいので、賛成意見、反対意見などがありましたら、宜しくお願いします。 ファイル操作で例えると以下のような感じです。(※セルフ=blessしたクラス名、括弧内の$は引数の有無を表している) -- FILEクラス -- new() .................セルフを返す set_filename($) ..セルフを返す set_filedata($) ...セルフを返す get_filename() ....値を返す get_filedata() ......値を返す read() .................セルフを返す write() ................セルフを返す -- サンプルコード -- my $file = FILE->new->set_filename("./aaa.txt")->set_filedata("bbb")->write->read; print $file->get_filename . "n" . $file->get_filedata . "n";
メソッドチェーン?
>>973 そそ、メソッドチェーン。
セルフを返すメソッドと返さないメソッドが混在するのがモヤモヤするから質問してみた。
それだったら、アクセサだけで対応しようかなとおもったわけで。
井の中の蛙なので、外の情報が欲しいのです。
この例だとあえてメソッドチェインを使うメリットはない気がするけど、 それは置いといてもset_*でselfが返ってくるのはキモいと思う。
>>971 それでも駄目でした。
ん〜なんだろ。。。
本当に解決したいと思ってんなら$htmlの当該部分を書けよボケ
>>977 my $html =<<"EOM";
aaa<br /><br /><br />aaa<br /><br /><br />aaa
bbb<br /><br /><br /><br /><br /><br />bbb
EOM
テストするなら、$htmlの中身はこんな感じのを入れればいいんじゃね?
while使う理由がわからんけど、while使ったら、改行タグ減りまくりになりそう。
>>978 >>977 が言いたいのは「htmlがおかしいんじゃねぇの?」ってことでしょ
解決するような世紀表現出しても元がおかしくてダメだと解決しないからってことで
>>978 あー、部分的なコードだけみても、対応できないってことか。
>>978 改行タグを減らしまくるのが目的です
$html の中身はブログから持ってきたデータで、<br /> を削除する前に
s/\r|\n|\t//g で改行コードとタブコードを全部削除して1行にしてあります。
で、処理するデータはデバッグとしてファイルに書き出して、目視で削除したい <br /> の連続があるのを確認済みです。
お客様の中にエスパー様はいらっしゃいませんかー
>>981 とりあえず、問題点を予想してみた。
・テキスト側が、<br />ではなく<br>(半角スペースとスラッシュをつけていない)
・テキスト側が、<br />ではなく<br/>(スペースの入れ忘れ)
・質問者のサーバーがMac。を入れるところを\マークにしている。
・エラーコード500である。
・strict宣言をしているのに、変数を初期化していない。
<<982
いや、まさかな
・元になるテキストの、<br />と<br />の間にスペースが入っていたりして。
とりあえず、改行タグを取る前の内容を出力してみてはどうでしょう?
>>981 $html =~ tr/\t\n\r / /s; # 改行、TAB、空白の圧縮
$html =~ s/^ | $//g; # 先頭と末尾に空白があれば削除
$html =~ s/(?<=>) (?=<)//g; # タグ間の空白を削除
$html =~ s|(?:<br\b[^>]*>){3,}|<br /><br />|gi;
>>983 んー。試したら、普通に動いてしまった。気のせいだろうか。
おいらの結論としては、$htmlの中身、ブログのテキストをうまくとりこめてないのかなと。
ファイルが原因だとしたら、デコードやエンコードを失敗してるのではないでしょうか。
そうでなければ、余計な文字列が紛れ込んでいるのかなと。
>そうでなければ、余計な文字列が紛れ込んでいるのかなと。
だから
>>984 は空白を削除したり[^>]*で余計な文字列が紛れ込んでてもマッチするようにしてるんじゃないか
988 :
nobodyさん :2011/01/16(日) 03:20:10 ID:lrCOl2/v
質問させてください perlでCGIを作っているのですが、 アクセスしてきた人が、どんなHTTPヘッダーを送ってきているのか調べたいのですが、 ページにアクセスされた時にHTTPヘッダーの取得する方法はどうすればいいでしょうか?
use cgi my $in = cgi->new $in->str_なんちゃら 関数名失念
$ENV{HTTP_*}
それだけとは限らないw
>
>>990 それは環境変数であって HTTP ヘッダではない
>>988 CGIの仕様としては送られてきたヘッダはHTTP_*という環境変数に入れて渡すという
ことになっているが、必ずしも全て渡さなくていいというよりむしろいらないヘッダは
渡すべきではないということになってるので確実に全てのヘッダを取得することは一般的
にはできないと思った方がいい。(RFC3875の4.1.18)
> サーバは、それが受信した全てのヘッダフィールドについての外部変数を作成する必要はない。
> 特に、例えば 'Authorization' のような、認証情報を転送する任意のヘッダフィールドや、
> あるいは、例えば 'Content-Length' や 'Content-Type' のような、他の変数からスクリプト
> にて利用可能なものは取り除くすべきである。 サーバは、'Connection' のような、クライアント
> 側との通信上の点にのみ関係するようなヘッダフィールドは取り除いてもよい。
特定のヘッダが欲しいのかただなんとなくみたいだけなのかトラブルシューティングで全部
必要なのかよくわからんからこれ以上はなんとも言えんな。
>>989-993 お答えいただきありがとうございました
HTTPヘッダーで値を受け渡しして動作するCGIを作ってみようと思ったのですが、
HTTP_*で取得できるのですね
本当にありがとうございました
次スレ立ててくる。
996 :
nobodyさん :2011/01/16(日) 18:30:17 ID:LLQAziXD
otu
ぺrl ぺrl ぺrl
999
1000
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。