トップページphp
1001コメント332KB

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

レス数が1000を超えています。これ以上書き込みはできません。
0001nobodyさん2010/06/05(土) 21:11:10ID:???
Perlのコーディングで困ってる人のスレです。

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

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

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

お勧めサイトは >2 以降

前スレ http://pc11.2ch.net/test/read.cgi/php/1251989472/
0002nobodyさん2010/06/05(土) 21:11:34ID:???
[プログラミング自体の経験が無い奴はまずココを読め]
Perlプログラミング講座: ttp://www.site-cooler.com/kwl/perl/

[本]
リャマ: ttp://www.oreilly.co.jp/books/4873111269/
駱駝: ttp://www.oreilly.co.jp/books/4873110963/
Effective Perl: ttp://ascii.asciimw.jp/books/books/detail/4-7561-3057-7.shtml
クックブック: ttp://www.oreilly.co.jp/books/4873112028/
Perl ベストプラクティス: ttp://www.oreilly.co.jp/books/4873113008/
Perl Hacks: ttp://www.oreilly.co.jp/books/9784873113142/

[オンラインマニュアル]
最新のドキュメント: ttp://perldoc.perl.org/
perl5.8.xのドキュメント(一部): ttp://www.kt.rim.or.jp/~kbk/perl-5.8/
perldoc きまぐれ訳: ttp://fleur.hio.jp/perldoc/
perldoc.jp: ttp://www.perldoc.jp/

[モジュール]
CPAN: ttp://search.cpan.org/
河馬屋二千年堂: ttp://homepage3.nifty.com/hippo2000/

[テクニック]
Perlメモ: ttp://www.din.or.jp/~ohzaki/perl.htm
Perlのページ: ttp://homepage1.nifty.com/nomenclator/perl/
Perlの小技: ttp://homepage3.nifty.com/hippo2000/perltips/index.htm

[Perl5.8Unicodeメモ]
ttp://www.namazu.org/~tsuchiya/perl/perl-5.8.html
ttp://www.lr.pi.titech.ac.jp/~abekawa/perl/perl_unicode.html
0003nobodyさん2010/06/05(土) 22:24:44ID:???
>>1
と、前スレ993
>&send_item2() の第1引数で $m を渡してるのに、第3引数で $m の中身の一部分を送ること自体が無駄。
$m と、 %m は別物だ。
第三引数 $m{wea} とかは明かに、ハッシュの値だ。$m と混同すんな。
0004nobodyさん2010/06/05(土) 22:44:10ID:BPQlnKOc
レファレンスがわからなくて疲れてるオイラにどなたか応援の一声をノタム。(;´Д`)
0005nobodyさん2010/06/05(土) 22:53:46ID:???
つ[ユンケル]
0006nobodyさん2010/06/05(土) 23:37:59ID:WMYKbA0D
>>4
わからないのは何がわからないの?
0007nobodyさん2010/06/05(土) 23:43:44ID:???
リファレンス=オブジェクトの理解で乗り切った

あとデリファレンスって言葉がこの先頻出してくると思うが、
これがメンバ変数にアクセスする行為そのもの

実際、この先出てくるであろう、オブジェクトでもリファレンスを使って
実装されてる
0008nobodyさん2010/06/05(土) 23:48:40ID:???
(;><)
0009nobodyさん2010/06/06(日) 00:26:23ID:???
リファレンスとか文字で言われると分からないが、説明を読むと多用してることに気が付いた。
でも改めて説明されても分からない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
0010nobodyさん2010/06/06(日) 08:13:05ID:???
リファンレス=ポインタもどきだろ……
0011nobodyさん2010/06/06(日) 10:59:04ID:???
もどきっつかそのものじゃね
0012nobodyさん2010/06/06(日) 11:11:23ID:???
>>11
もどきだろjk
0013nobodyさん2010/06/06(日) 11:37:51ID:???
女子高生だろ常識的に考えて
0014nobodyさん2010/06/06(日) 11:48:13ID:???
ところで前スレからなんですがNet::DNSが使えないと
やっぱりホスト名の逆引きはできませんか
0015nobodyさん2010/06/06(日) 13:40:08ID:???
なかったら入れればいいじゃん
0016前スレ9212010/06/06(日) 16:41:21ID:+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;
}
}
0017162010/06/06(日) 16:48:18ID:+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
0018142010/06/06(日) 18:04:21ID:???
レンタルサーバなんだけどどうにかなるかな
0019nobodyさん2010/06/06(日) 18:33:08ID:???
local::lib使えば入る
0020nobodyさん2010/06/06(日) 18:42:10ID:???
>>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;
}
0021nobodyさん2010/06/06(日) 20:19:37ID:???
エラー内容もさらしてごらん
さすがにソースだけでは辛い
0022nobodyさん2010/06/06(日) 20:28:17ID:???
前スレ含め、これ以上汚されるの勘弁。
(今回の明かに)typoが原因のエラーとか、そんなん自分で解決すべきだ。
0023nobodyさん2010/06/06(日) 20:31:29ID:???
こんな短い部分さらすだけで、スパゲッティーソースなことが分かるなぁ・・・
0024nobodyさん2010/06/06(日) 20:58:46ID:???
スパゲッティでも芸術的なぐらい短ければ神コードに昇華するのにね
0025nobodyさん2010/06/06(日) 21:05:19ID:???
それはスパゲッティとは言わん。
0026nobodyさん2010/06/06(日) 21:09:11ID:???
じゃあ可読性が著しく低いコードと言い換えようか
0027nobodyさん2010/06/06(日) 22:58:20ID:???
それゴルフ
0028nobodyさん2010/06/06(日) 23:18:35ID:???
>>22
つか、お前なんでこのスレ見にきてんの?
0029nobodyさん2010/06/07(月) 06:28:10ID:???
定数を定義することはできます?

constとかdefineみたいな。
0030nobodyさん2010/06/07(月) 06:50:44ID:???
>>28
勉強と回答しにだが?

普通は「エラーコードを晒せ」ってのに賛成だが、
これ以上、この人の質問が増えて何かメリットあるか?
リライトしてる様なもんだぞ?
ちなみに前スレ985、このスレ>>3>>20は俺だ。
大嘘(perl的に間違った物)答えられるのにも辟易すんだよ、
この手の質問には。

>>29
core module の "CONSTANT"
CPAN module の "Readonly"
を使う。
0031nobodyさん2010/06/07(月) 09:00:06ID:???
サブルーチン呼び出しに&をつける人が今も生き残っているって
すごいな。

&ありとなしは同じじゃないので良い子は真似しないようにね。
0032nobodyさん2010/06/07(月) 09:12:11ID:7ToGpYbm
>>6
『概念』かな。
どうしてこういう概念が必要なの?Perl独特みたいだけど。
リファレンスに代入せずとも今まで通り、変数に代入するんじゃダメなの?
0033nobodyさん2010/06/07(月) 09:12:52ID:???
>>16
weaを扱ってるはずなのにiteを操作してたり、コードが混乱してるように見える。
まず、このサブルーチンで何をやりたいのか文章にしてくれ。

> 1: 自分はこういう事がしたい。
0034nobodyさん2010/06/07(月) 09:31:22ID:???
へ〜、&呼び出しには弊害があったんだね
0035nobodyさん2010/06/07(月) 10:17:21ID:???
へぇ? サブルーチンはsub 名前{ 処理 }で作って、
&名前; で呼ぶものだと思ってたけど、今は違うのですか?
ネットで拾ってきたプログラムをちょこっと改造するぐらいのことしかしてないんですが
KENT Webとかに代表される一般に出回っているものって、殆んど古いものばっかりなんですかね。
使っている鯖の仕様みたらperl5.8.9なので、そんなに古いほうじゃないみたいですが。
0036nobodyさん2010/06/07(月) 10:19:23ID:???
動けば何でも良いよ
perlなんて道具に過ぎないんだからさ
0037nobodyさん2010/06/07(月) 10:33:31ID:???
あと、jcode.plが古いとか前スレにあったけど、
今もあちこちの掲示板とかで、使っているcgiはかなり多い。
むしろ最新の書き方のほうが、使えない鯖もあるので少数派。
ここではバカにする人がいるけど、事実だから。
0038nobodyさん2010/06/07(月) 10:46:01ID:???
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になる)
これ、使えないスクリプトを堂々と載せてるの?ぐぐるとここへリンク張ってるとこもいくつかあるんだけど。
0039nobodyさん2010/06/07(月) 11:27:42ID:???
そりゃそれじゃあ動きませんてば
ちゃんと最後のEOFまでコピペってくださいねー
0040nobodyさん2010/06/07(月) 11:36:32ID:???
EOFのあとの改行までね
0041nobodyさん2010/06/07(月) 11:45:47ID:???
>>39
いやそれだとそのエラーメッセージにはならないと思うよ。
nphスクリプトになってないんじゃないか? ファイル名間違えたとか?
0042nobodyさん2010/06/07(月) 12:34:10ID:???
すまんEOFがないのはコピペミスだ。実際はちゃんと入ってます。
ファイル名もあってます。
さっぱりわからんが、ApacheのVerによってエラーになったりするのだろうか。2.2.15だけど。
0043nobodyさん2010/06/07(月) 12:45:35ID:???
何故かもっかいやったらできた
わけわからんが解決
0044nobodyさん2010/06/07(月) 14:01:12ID:???
>>9
俺もリファレンスワカラン部類なんだけど、それ二次ハッシュとどう違うの?

>>31
ソースくれ。
&の有無関係なくmod_perlだと動かん事しか知らん。
0045nobodyさん2010/06/07(月) 14:14:32ID:???
>>44
&については perlsub 参照。

ttp://perldoc.jp/docs/perl/5.10.0/perlsub.pod の 「サブルーチンは、
明示的な & というプリフィックスを付けて呼び出すことができます。 」
あたりから読んでくれ。

動作の違いは抜きにしてもいまはつけない方が普通だな。
0046nobodyさん2010/06/07(月) 14:38:19ID:e5tZsgVK
>>45
要するに、省略できるようになってるってことかな?
0047nobodyさん2010/06/07(月) 15:04:03ID:???
ちゃんと読めよ...
0048nobodyさん2010/06/07(月) 15:04:19ID:???
配列、スカラ、ハッシュと記号が付いてるし
&付けててもいいじゃんw

とは思うが、配布元が奨めてないなら外しておく方がいいのかねん
0049nobodyさん2010/06/07(月) 15:22:01ID:e5tZsgVK
perlを学ぶ良い書籍ってありますか?
現在、リファレンスとモジュールのところで壁にあたっています。
ネットショップのショッピングカートを作った実績はありますが、これからクレジットカード機能を付加したいと思っていまして、
クレカ代理店への接続をしようと試みています。
0050nobodyさん2010/06/07(月) 15:24:33ID:???
&を付けてサブルーチンを呼ぶコードを書いてると、
鼻で笑われるとか、ロートルとか言われるぐらいのものだろう。
たまに実害が出るかも知れないが、そのときは気合でなんとかすれば問題なし。
自分の生き様を示して行けばいいよ。

私は実害が出たときに面倒だから付けないけどね。
0051nobodyさん2010/06/07(月) 15:27:08ID:???
実害って?
0052nobodyさん2010/06/07(月) 15:34:41ID:???
>>49
リファレンスとモジュールなら「続・初めてのPerl 改訂版」だな。

あと「Perlベストプラクティス」も読んどけ。
0053nobodyさん2010/06/07(月) 15:35:46ID:???
>>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!");
を比べるといいよ。
0054nobodyさん2010/06/07(月) 15:48:32ID:6I7S3VUo
>>52
>続・初めてのPerl 改訂版」
これか。
http://www.amazon.co.jp/gp/reader/4873113059/ref=sib_dp_pt#reader-link
この本は難しいんだよなあ。(;´Д`)

>Perlベストプラクティス
これも。
http://www.amazon.co.jp/gp/reader/4873113008/ref=sib_dp_pt#reader-link

これらのシリーズは難しくて・・・(;´Д`)
0055nobodyさん2010/06/07(月) 16:16:24ID:U/buYqwE
今、ちょっと思い当たることがありました。
リファレンスってひょっとして二次元配列などの縦横座標のあるデータを扱う為の概念ですかね?
こんな感じ。

      商品コード | 商品名 | 価格 | 内容
商品A
商品B
商品C

これを座標指定で呼び出す為の概念ですかね?
そうだとしたらかなり理解が進んだ気がします。
今、そこのところ勉強中です。
0056nobodyさん2010/06/07(月) 16:23:10ID:???
リファンレスはポインタもどきだと何度行ったらわかるんだよ
0057nobodyさん2010/06/07(月) 17:44:27ID:???
ここはレガシーな環境を無視するスレですか?
0058nobodyさん2010/06/07(月) 17:45:09ID:???
>>57
サブルーチンを&つけて呼ぶのは普通だよ。だまされないようにね。
0059nobodyさん2010/06/07(月) 18:02:35ID:ne0ODycT
>>56
ここでのポインタに意味がわからない。

>>57
レガシーってどういう意味?
英和辞書に載っていない。
0060nobodyさん2010/06/07(月) 18:12:18ID:???
>>57
質問するときにPerl4以前の環境であることを明言すればいいんじゃないの?
0061nobodyさん2010/06/07(月) 18:15:09ID:???
しかしいまどきperl4使ってる奴なんているのか?
0062nobodyさん2010/06/07(月) 18:22:17ID:yJ6kU2rx
バージョンなんて気にしてる?
私などはバージョンのことなんかまず考えていない。
いつのまにか変わってるみたいな。
バージョンの特徴を生かせないけどさ。
0063nobodyさん2010/06/07(月) 18:32:22ID:yJ6kU2rx
リファレンスの件、うっすらとわかってきました。
つまり、スカラーや配列やハッシュの指定方法では指定できない場合に使うのがその使用法の一つなのかな?と。
0064nobodyさん2010/06/07(月) 18:32:40ID:???
リファレンスをポインタといわれると、めんどくせーもんとしか思えなくなる
オブジェクトと思え
0065nobodyさん2010/06/07(月) 19:14:43ID:???
リファレンスはリファレンス。
オブジェクトでもないしポインタでもない。
このスレにJAVAとかCに精通してる人が質問しに来るとは
思えんし。

自分の中で理解するのは構わんが、勝手に「~の様なもん」とか
「~と思え」ってーのは無しにしないか?
誰もが貴方達のバックグラウンドを持ってる訳では無い。
0066nobodyさん2010/06/07(月) 19:17:10ID:???
だいたい、perlのオブジェクトはblessされたリファレンス
0067nobodyさん2010/06/07(月) 19:27:14ID:ejsF48jq
プログラマーって個人差すごくありそうだね。
もし仮に一ヶ所に集まって会議したらまとまるんだろうか?
0068nobodyさん2010/06/07(月) 19:31:25ID:???
いちいち上げんなよ。
0069nobodyさん2010/06/07(月) 19:49:00ID:???
age-sageとかどうでもよすぎワロタ
0070nobodyさん2010/06/07(月) 20:01:08ID:???
ttp://amazon.jp/dp/4774135046
リファレンスとかオブジェクト指向とか、これがすごく分かりやすかった
0071nobodyさん2010/06/07(月) 21:03:08ID:fBML121+
オブジェクト指向ってどういう意味なんですかね?
まだ悟れないでいます。
0072nobodyさん2010/06/07(月) 21:17:16ID:???
そうやって、耳慣れない単語が出たら全て質問するつもりか?

素直に参考書の一冊でも読め。
お勧めは既に出てる。
0073nobodyさん2010/06/07(月) 21:19:37ID:fBML121+
翔泳社の10日でおぼえるPerl CGI入門が私の入門書です。
0074162010/06/07(月) 21:35:33ID:Ha23rV7v
ごめんなさい
もうコードが馬鹿な自分でもわかるくらい滅茶苦茶になってるので
もう一回デフォルトのを最初から改造したら解決しましたm(__)m
せっかくレスしてくれた人に申し訳ないです

とりあえず
出直してきます。
「は?何て言ってんのコレ?」っていうのが多すぎました。すみません。
0075nobodyさん2010/06/08(火) 18:08:50ID:e74okk0C
リファレンスとはC言語のポインターのようなもんだって話があるけど、
この言い方はC言語を知らないと理解できない言い方だよね。
0076nobodyさん2010/06/08(火) 18:11:03ID:???
Cもやれってことじゃないかな
0077nobodyさん2010/06/08(火) 18:20:33ID:e74okk0C
このスレってどの時間帯でも誰かいそうですねw
ネット事業者だから常にネットができる環境下にあるからと思うけど、
何人くらいいるのかな?いや、心強いなとおもって。
0078nobodyさん2010/06/08(火) 18:38:27ID:???
変数や配列、ハッシュ、関数への参照を示した文字列と言ってもわけわからんだろ
0079nobodyさん2010/06/08(火) 20:17:58ID:???
前スレからリファレンスなんちゃら言ってる人は
多次元配列もどきのことだけなんとなくわかればいいんでないの?

このへん。
http://perldoc.perl.org/perllol.html
http://perldoc.perl.org/perldsc.html
0080nobodyさん2010/06/10(木) 22:50:37ID:e7/5TejE
perlでメール送信プログラムを作ってます。

Net::SMTPを採用。
どこのサイトもエラーを拾ったりせずに、
$smtp->data();
$smtp->datasend("");
・・
$smtp->dataend();

と、コーディングしていますが。
これって普通はエラーを拾ったりしてやる必要があるんですよね?
メール送信がうまくいかず、各行にor dieを付与してチェックしてみました。

すると$smtp->data()の部分でdieしていました。

・・・が、具体的なエラー内容がわからず。
こういう場合どうしたらいいんでしょうか?

アドバイスをばお願いいたします。
0081nobodyさん2010/06/10(木) 23:11:27ID:???
ifでくくりゃいいんじゃね?
0082nobodyさん2010/06/10(木) 23:33:06ID:???
die $! とか?
0083nobodyさん2010/06/11(金) 00:04:39ID:???
>>80
> こういう場合どうしたらいいんでしょうか?
マニュアルとソースを読む。
http://search.cpan.org/dist/libnet/Net/SMTP.pm
0084802010/06/11(金) 01:15:57ID:HNRsRFk/
皆様ありがとうございます。

>83
マニュアルに明記されてます?(見落としてるだけ?
ソースは・・・すいません見てみます!
0085802010/06/11(金) 02:34:15ID:HNRsRFk/
Net::SMTPをDebug => 1で実行した所、メールアドレスがおかしくなっていたのが原因のようです。

メールアドレスの@がperlに解釈されてしまっていたのが問題でした。

ついで質問なのですが、メールアドレスの受け取りをCGI::Applicationにて
my $mail = $self->query->param('mail');
のような感じで受け取っています。

この部分を
my $mail = 'test@test.co.jp';
とすることで正しくメールが送られることは確認しました。

my $mail = $self->query->param('mail');
の時点で@をperlに解釈させないようにするにはどうしたらいいでしょうか?

受け取ってから@をエスケープすればいいんだとは思いますが、
他にスマートな方法ありましたらアドバイスお願いします。
0086nobodyさん2010/06/11(金) 03:29:52ID:???
エスケープする以外の方法があれば大発見
0087nobodyさん2010/06/11(金) 09:02:50ID:???
そもそも@の解釈なんて文字列に埋め込んだときしか行われないんだから、
CGIに渡ってくるものがそもそもおかしいんじゃねーの?
0088nobodyさん2010/06/14(月) 21:40:31ID:mh5UZ2p/
selectで標準出力の変更は出来ますが、標準エラー(STDERR) を変更する
方法はないでしょうか?


色々テストのスクリプトを書いているのですが、「エラーが出る」確認の
テストを書こうと思ったら、die で死ぬのを eval することは出来ても
STDERR への表示を消すことが出来なくて困っています。

STDERR への出力を一旦抑制して、また元に戻すといったことはできない
でしょうか?
0089nobodyさん2010/06/14(月) 22:26:22ID:???
http://www.google.co.jp/search?q=perl+STDERR+%E5%A4%89%E6%9B%B4&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ja:official&hl=ja&client=firefox-a
0090nobodyさん2010/06/15(火) 12:07:10ID:FKT5DQzr
>>89
ありがとうございます。分かりました。
0091nobodyさん2010/06/15(火) 23:46:20ID:???
どなたかお願い致します。
perlで、FTPSによるファイル送信を行いたいと考えております。
調べたところNet::FTPSSLというモジュールがあるのですが、
現在契約しているホスティングサーバーではインストールされて
おりません。
そこでNet::FTPSSLのモジュールをダウンロードしてみると、FTPSSL.pmという
ファイルがありました。このファイルをrequireするなどして、なんとか
インストールしないで動作させたいと考えておりますが、このような
事は可能なのでしょうか?
0092nobodyさん2010/06/15(火) 23:54:04ID:???
perl use lib
0093nobodyさん2010/06/21(月) 00:35:12ID: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に メソッドを定義したい
場合はどのようにすればよいか教えていただけますか。

宜しくお願いします。
0094nobodyさん2010/06/21(月) 07:15:52ID:???
>>93
カタリーは使ったことないからわからないが。

useし忘れてパッケージ名で呼ぶとそのエラーメッセージがでますよね。
"そのパッケージにそんなメソッドないです"なのでバージョン違いの資料を使ってないか等も疑ってみたらどうでしょう。
0095nobodyさん2010/06/21(月) 17:53:00ID:???
カタリストってカタリーって略すのがPerl使いの正しい姿?
0096942010/06/21(月) 18:33:46ID:???
>>95
いや、5文字がめんどくさい怠け者の略し。

よい子のパーラーは真似しちゃいかんと思う
00971942010/06/21(月) 23:42:36ID:???
>>105
ありがとうございます。
やはりそうですよね。。
そこに追加しているんですが、呼び出せないです。

気になったのはResultSet 云々のエラーメッセージがでてるけど、そこのクラス群はDBIC::Core が親になっている事でした。

モデルは自動生成させているので、手では作っていないです。

何かの手順間違いでおかしな事になってるんですかね。
再確認します。
0098nobodyさん2010/06/22(火) 00:30:08ID:???
分かりました。
load_components に ResultSetManager とメソッドに ResultSet 属性が必要なのですね。
Catalyst というよりはまるまるDBICでした。

ありがとうございました。
0099nobodyさん2010/07/01(木) 11:32:54ID:???
文字列"ABC"が無くて"DEF"が有る場合はどう書けばよいですか?

/(忘ABC)DEF/ or die;

忘の所に何と書くのか教えてください。
0100nobodyさん2010/07/01(木) 11:43:38ID:???
/ABC/ and die;
/DEF/ or die;

じゃだめなん?
0101nobodyさん2010/07/01(木) 11:47:10ID:???
?!
0102nobodyさん2010/07/01(木) 12:28:30ID:???
「直前にABCが無いDEFにマッチする」ということを言ってるんなら /(?<!ABC)DEF/
0103992010/07/01(木) 12:50:10ID:???
>>100
>>101
>>102
みなさんありがとうございます。
やりたいのは>>102さんの言う通りなのですが、説明が下手で
どうとでも取れるような書き方だったと反省しています。
回答ありがとうございました。
0104nobodyさん2010/07/21(水) 09:46:20ID:???
perl 5.8.8 でImageMagick 6.6.1を使って画像変換しようとしているのですが
$image->Distort("virtual-pixel"=>"Transparent"
と指定しても背景が透過になってくれません。
Black, White, Random など別の物を指定すると変更されます。

ImageMagickの問題なのですが、Perlで使用しているのでこちらへ質問させていただきました。
スレ違いでしたら誘導をお願いします。
0105nobodyさん2010/07/30(金) 18:42:05ID:???
>>104
バックグラウンドカラーは設定した?

$image->Set('background' => 'none');
0106nobodyさん2010/08/02(月) 03:12:00ID:???
>>102
正確な知識が無いなら黙っててくれる?
0107nobodyさん2010/08/02(月) 03:40:13ID:FdS+e4Ne
 ひと月も前のレスに噛み付かれても、、、
01081022010/08/02(月) 04:45:31ID:???
なんかごめん
0109nobodyさん2010/08/02(月) 13:10:55ID:???
夏だ
0110Perl神2010/08/02(月) 17:08:54ID:9KfPyaTP
カタリストの語りがうざい まじカタリ!!!!!!
0111nobodyさん2010/08/02(月) 21:04:27ID:fXTYTb4c
愚問でしょうがお許しください。

配布されてるCGIゲームを改造中の初心者です。とほほのPerl入門とか見ながらやってます。参考書とかは持ってません
モンスターの経験値などを設定するのにモンスターの画像名を番号にして
番号が大きければ大きいほど経験値も多くなる・・・という風にしたかったのですがいい方法が思いつきませんでした。
文字列の中の数字("100.gif"とかの100)を数値に変換して扱う方法を教えて欲しいのですが・・・無いですかね
0112nobodyさん2010/08/02(月) 21:10:15ID:28r5QWdl
>>111
my $file = "100.gif";
my $ex = $1 if $file =~ m/^([0-9]+)/;
print $ex; # 100

こういうこと?
0113nobodyさん2010/08/04(水) 16:57:20ID:???
しかも>>102は質問者の疑問をちゃんと解消しているのに
0114nobodyさん2010/08/09(月) 18:03:38ID:K6ZCyo17
use threads + XML::FeedPPでRSSを巡回するCGIを作成しています。
巡回して取得したRSSをブラウザに書き出すだけのプログラムです。

チェック先のRSSが200件程度まではうまく動作していたのですが、
現状250件でHTMLへの書き出しが途中で止まってしまいます。

最初はタイムアウトを疑っていたんですが、
ブラウザのkeep-alive、httpd.confのtimeout値も300になっています。
(プログラム実行時間は30秒程度)

スレッド数に上限とかあるんでしょうか?
なにかヒントを頂けたらありがたいです。

よろしくお願いいたします。
0115nobodyさん2010/08/09(月) 18:18:39ID:???
スレッドを数百発行してないかチェック。
01161142010/08/09(月) 18:25:11ID:K6ZCyo17
>>115

チェック対象のRSS数のスレッドをnewしてthread->joinで終了待ちしてます。
なので、仰るとおり100以上のスレッドを発行している状態です。。。

ありがとうございます。修正してみます。
01171142010/08/09(月) 18:38:49ID:K6ZCyo17
すみません、よくよく考えたらThread::Semaphoreで並列数を50に設定していました。
なのでスレッド数はマックス50件です。
0118nobodyさん2010/08/09(月) 18:41:09ID:???
いったんブラウザではなくコンソールで実行してみて、全ての RSS に対して
  最終実行日時
  実行結果の HTTP レスポンス
  取得に掛かった時間
を記録して、どこが引っかかってるのかチェックしてみては?
01191142010/08/09(月) 18:51:43ID:K6ZCyo17
>>118

特定のRSSが原因かと思い、チェック順序を逆順にしたりして検証しましたが、
やはり数が問題のようです。どのようなRSSをチェックさせても220〜225件程度
チェックしたあたりでHTMLの出力がとまってしまいます。
(コンソールでも同様です)

※追加情報
apacheのエラーログには「Out of memory!」、「Ouf of memory(Needed 8164 bytes)」
と記述されていました。
スタックサイズが足りない???
0120nobodyさん2010/08/12(木) 21:38:33ID:???
perl で thread 使う時点で ng
0121nobodyさん2010/08/14(土) 15:19:13ID:5o00tDGC
my $query = CGI->new;
*in = $query->Vars();
Encode::from_to(*in, 'shiftjis', 'utf8');

でUTF-8にエンコードされません
やりかたが違うんでしょうか?
0122nobodyさん2010/08/14(土) 15:50:24ID:5o00tDGC
でけた事故解決

my $query = CGI->new;
*in = $query->Vars();
foreach (%in) {
Encode::from_to($_, 'shiftjis', 'utf8');
$_ =~ s/</</g;
$_ =~ s/>/>/g;
$_ =~ s/'/&squot;/g;
$_ =~ s/"/"/g;
}
0123nobodyさん2010/08/26(木) 19:02:59ID:???
<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の範疇だったらすみません。判断がつかないのです。
0124nobodyさん2010/08/26(木) 19:27:18ID:???
グラフを出力部分を別ファイルにした方がいいかな?

graph.cgi でグラフ出力

HTML は
print '<img src="graph.cgi">';
で OK

graph.cgi にパラメータを渡す必要があっても、
graph.cgi?x=??&y=??
っていう風にすればいいだけなので解決できる
01251232010/08/26(木) 20:13:27ID:???
やはりその方法か、画像ファイルを出力してそれを表示するしかないですかねー

\@dataとして渡したい内容が、わりと複雑なため(24時間のアクセス統計3〜5種類など)
リファレンスで渡せると楽だったのですが

レスありがとうございました
0126nobodyさん2010/08/26(木) 21:45:13ID:???
getのREQUEST URIは長さ制限があるから、あんまり引数が長くなるなら考えた方が良い
つかそれならHTMLは静的でいいんじゃないか
0127nobodyさん2010/08/31(火) 07:50:54ID:???
$image->gifをbase64でエンコードして
<img src="data:image/gif;base64,ここ">
でいけるかも
01281232010/08/31(火) 14:10:20ID:???
できた!

モジュールの側で return MIME::Base64::encode($image->gif); として、
これを教えていただいた通りデコート指定(?)つきでimgタグに入れたら見事に表示されました

これですっきりしました。どうもありがとうございました

しかしこれ、PerlというよりHTMLの問題だったかもしれませんね
見分けがつかずこちらで質問してしまい、失礼いたしました
0129nobodyさん2010/09/04(土) 16:33:18ID:???
>>128
そんなことしてGD使ってサーバに負荷かけるより

棒グラフなら素直に

$resultW=幅ピクセル;
print '<img src="pink.gif" style="width'.$resultW.'px;height:5px">

とかってやった方が早くね?

円グラフならGD使う意味は分かるが。。
0130nobodyさん2010/09/07(火) 21:05:39ID:KEDp6nh+
よくあるurlの自動リンクですが、urlが長いとレイアウトを
崩してしまうので、ある一定の長さ以上は省略したいです。

正規表現に組み入れてできませんよね?
となると、一旦配列に入れて一行ごとに処理せねばなりませんか?
0131nobodyさん2010/09/07(火) 22:10:00ID:???
>>130
$text =~ s{($yourURLregex)} {
  my($url, $face) = ($1, $1);
  ...; # $face を適当に縮める
  qq|<a href="$url">$face</a>|;
}eg;
0132nobodyさん2010/09/07(火) 23:24:24ID:???
サンクス
テストで
$yourURLregex= "s?https?://[-_.!~*'()a-zA-Z0-9;/?:@&=+$,%#]+";
$face = substr($face,1,30);
でやってみたけど、エラーが出ちゃいます
下の式抜いてもだめです
0133nobodyさん2010/09/08(水) 00:34:07ID:???
結局、置換を2つに分けることにしました
1回目でurlにマーク付けて、2回目でマーク内をsubstrでカット

不格好ですけど
0134nobodyさん2010/09/08(水) 05:08:05ID:???
別にエラーなんて出ないんですが^^;
エラーって出るのは、あなたがエラーしてるからからでは
0135nobodyさん2010/09/08(水) 17:31:08ID:???
全角スペースが原因に一票
0136nobodyさん2010/09/08(水) 17:47:40ID:J/6++5D2
なんででしょうね「" 」をシングルに替えてもだめです。
さくらインターネットですが。
0137nobodyさん2010/09/08(水) 19:15:02ID:???
$yourURLregex=qr/regexp/
してみ?
0138nobodyさん2010/09/08(水) 21:52:41ID:???
>>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/;
0139nobodyさん2010/09/08(水) 23:03:55ID:???
お前ら読解力あるな
0140nobodyさん2010/09/09(木) 21:27:24ID:???
読解力ないと回答なんてやってられんでしょ
0141nobodyさん2010/09/14(火) 10:39:40ID:RoOJ13yO
自作のアクセス解析を制作しているんですが、
検索エンジンからのアクセスでキーワードだけ抽出しているんですが、
エンジン毎に左オペランド?が違うのと、文字コードが違うようです。
やっぱりエンジン毎に処理を分岐するしかないですかね?

文字化けが発生する毎に分岐処理に新処理を付け加えています。
なんとか処理を単純化できないだろうか。
0142nobodyさん2010/09/14(火) 10:54:46ID:???
分岐するしかないだろうね
デコード処理はguessとかでどうにでもなるけれども
0143nobodyさん2010/09/14(火) 11:40:18ID:???
Strategyあたりのデザパタで書けば見通しは良くなるかもね。
でも結局それぞれ違うんだから処理は書かなきゃしょうがない
と思う。
0144nobodyさん2010/09/14(火) 11:47:53ID:RoOJ13yO
うー、guess に strategy と初めて接する関数が出てきた・・・(;´Д`)
手元の逆引き大全の索引をみる限り、両者ともでてこない。
そんなによく使う関数なの?
0145nobodyさん2010/09/14(火) 11:59:48ID:RoOJ13yO
モジュールですたか。(;´Д`)
http://www.ksknet.net/perl/encodeguess.html
0146nobodyさん2010/09/14(火) 12:08:36ID:???
まー検索エンジンごとに分岐するのがいいかな
0147nobodyさん2010/09/14(火) 12:50:04ID:RoOJ13yO
ちなみに、検索エンジンつってもほとんど知られていないエンジンもけっこうあるのね。
google yahoo bing goo exite biglobe nifty ・・・
そのレベルまでかな。まるっきり知られてないっぽいエンジンまで分岐するとなると分岐が増えて増えて・・・

先日の外部テキストに分離した部分は分岐の部分なんですよ。
require して使う話ね。
これなら、分岐の部分だけ増設できるでしょ。
0148nobodyさん2010/09/14(火) 13:36:17ID:???
>>147
perl界隈では有名(なのか?)なアクセス解析スクリプトの AWStats
http://awstats.sourceforge.net/

これのパッケージ内に、検索エンジンごとの定義ファイルみたいなのが含まれてるから、
それを参照するがよろし。

但し基本英語圏のエンジンがほとんどで、日本語圏のサイトは少ない。
あと、各エンジンごとの検索パラメータ、googleならq=,yahooならp=とかもある程度はわかるが、
さすがに文字コードまではわからんから、そこらへんは自前でやる必要があるけど、
かなり参考にはなると思う。
0149nobodyさん2010/09/14(火) 21:57:32ID:???
練習にutf-8で掲示板を作ってみようかと思ってる初心者なんですが、右も左もわからないんで教えてください。

cgiファイル、ログファイル、HTML出力すべてutf-8にしようと思ってるんですが、
use 〜;やbinmode ~;とか一般的に必要とする物ってあるんでしょうか?
自分の環境はwindowsで借りようと思ってる鯖がfreeBSDでperl5.8のようです。

ついでに文字コードがutf-8Nで改行コードはCR+LFでおkですか?
0150nobodyさん2010/09/14(火) 22:42:40ID:???
>>149
> 右も左もわからないんで教えてください。

>>1-2

何から勉強していいのか分からない
http://hibari.2ch.net/test/read.cgi/php/1101491473/
△▲ WebProg 初心者の質問 Part22 ▼▽
http://hibari.2ch.net/test/read.cgi/php/1272872528/
【Perl】掲示板を使ろう!
http://hibari.2ch.net/test/read.cgi/php/988890976/
自分の作ったCGIスクリプトをデバッグするスレ
http://hibari.2ch.net/test/read.cgi/php/1011174442/
自作CGIを評価するスレ
http://hibari.2ch.net/test/read.cgi/php/1049514428/

> 一般的に必要とする物ってあるんでしょうか?
無い。必要な処理を必要なだけ実装しなさいな。

> 文字コードがutf-8Nで改行コードはCR+LFでおkですか?

BOM無しが無難。
http://ja.wikipedia.org/wiki/UTF-8

スクリプトの改行コードは実行環境に、出力の改行コードは
HTTPの仕様や閲覧環境に合わせる。
0151nobodyさん2010/09/15(水) 07:35:37ID:???
本当の初心者なら文字コードより危険な入力を弾く勉強が先だと思うけど

その点英語圏は楽でいいよなー
0152nobodyさん2010/09/15(水) 08:52:32ID:jrRD4zmE
英語圏はいいよなー
0153nobodyさん2010/09/15(水) 10:56:10ID:FawmhmXv
すいませんフォームから送信されたPOSTとGETを取得することはPerlではどのように書くのでしょうか?
PHPだと$_GETと$_POSTで出来るのですがPerlではどのように書くのでしょうか?
0154nobodyさん2010/09/15(水) 11:57:40ID:???
use CGI;
my $m = new CGI;
my $name = $m->param('name');
0155nobodyさん2010/09/15(水) 13:38:01ID:5exFybXu
use strict;
してて$var001、$var002、・・・$var850 くらい変数があります。

スクリプトのはじめに

our $var001;
our $var002;
our $var003;
 ・
 ・
とか
my ($var001,$var002,$var003・・・)

みたいなことを書かないといけないのですが、

これをまとめて一括で定義する方法があれば教えてください。

0156nobodyさん2010/09/15(水) 13:43:17ID:???
配列使え
01571552010/09/15(水) 13:49:49ID:5exFybXu
コードはすでに書いてしまって
あとから、「あ”、しまった!」ってなってます。orz
0158nobodyさん2010/09/15(水) 13:49:52ID:???
my @var
my %var
0159nobodyさん2010/09/15(水) 13:59:12ID:???
printf '$var%03d,', $_ for 1..850;
0160nobodyさん2010/09/15(水) 14:12:01ID:???
今日はにぎやかだなここw
0161nobodyさん2010/09/15(水) 14:21:16ID:q2N7SUAH
みんな難しいことやってんだなあ。
0162nobodyさん2010/09/15(水) 14:30:47ID:???
>>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のような操作はできないしね。
0163nobodyさん2010/09/15(水) 14:32:00ID:???
perl難しすぎる
サニタイズの方法がわからん
0164nobodyさん2010/09/15(水) 14:39:17ID:???
適当

sub sanitize{
$html = shift;

$$html =~ s/&/&/g;
$$html =~ s/</</g;
$$html =~ s/>/>/g;
$$html =~ s/"/"/g;
$$html =~ s/'/#&39;/g;

return 0;
}
0165nobodyさん2010/09/15(水) 14:39:34ID:q2N7SUAH
ねえねえ、配列の初期化って()意外は駄目なんだね。

@hairetu = '';



@hairetu = "";

も、$hairetu[0] に空欄?が入っちゃうのね。
正解は

@hairetu = ();

だた。
配列の初期化(空欄化)って他にどうしてる?
0166nobodyさん2010/09/15(水) 14:42:09ID:???
undef
0167nobodyさん2010/09/15(水) 14:43:14ID:???
そりゃ左辺が配列型なのに、右辺がスカラー型だったらダメだろう


ホントにぎやかだねw
0168nobodyさん2010/09/15(水) 14:46:02ID:???
集合とか考えると初期化はφ=空集合=()を代入するだろJK
0169nobodyさん2010/09/15(水) 14:46:19ID:q2N7SUAH
>>167
そういやそうだなw
しかし、皮肉交じりに人をバカにするその口調は会社でも同じなのか?
だとしたら相当に嫌われてるぞおまえ。
0170nobodyさん2010/09/15(水) 14:48:59ID:???
もう少し勉強した方がいいってことですよ:-)
0171nobodyさん2010/09/15(水) 14:52:23ID:???
一理あるな。
0172nobodyさん2010/09/15(水) 14:54:17ID:???
おれが入門時に読んだ参考書には new が全く使われてなかったんだけど、
これはどういう概念なんだろうか?
これこそ初期化?
0173nobodyさん2010/09/15(水) 15:01:44ID:???
インスタンス作成
0174nobodyさん2010/09/15(水) 15:14:26ID:q2N7SUAH
もそっとわかりやすく。
いよ!色男!
0175nobodyさん2010/09/15(水) 15:18:27ID:???
クラス名(めい)とリファレンスを関連(かんれん)付(づ)けたものを返(かえ)すメソッドだよ
わかったかな
0176nobodyさん2010/09/15(水) 15:35:04ID:???
>>165
$#hairetu = -1;
0177nobodyさん2010/09/15(水) 16:11:27ID:???
perl だとさオブジェクト作成とかよりも、普通に関数作ってくだけで問題無いだろw
0178nobodyさん2010/09/15(水) 16:50:47ID:???
モジュール化すると再利用がきくからな
0179nobodyさん2010/09/15(水) 17:06:18ID:???
ってか、Perlにおいて new は只のサブルーチンだし・・
0180nobodyさん2010/09/15(水) 17:12:15ID:???
コンストラクタとして定義したサブルーチンだろ
ただのサブルーチンという言い方はおかしい
0181nobodyさん2010/09/15(水) 21:27:04ID:st8PUYRk
>>175
すまん。おれカタカナだめなんだよ。
0182nobodyさん2010/09/15(水) 22:56:34ID:???
> コンストラクタとして定義したサブルーチンだろ
> ただのサブルーチンという言い方はおかしい

new という名前だと何か意味あるっけ?
0183nobodyさん2010/09/15(水) 22:58:17ID:???
慣習的にコンストラクタにはnewと名付けるんだが
0184nobodyさん2010/09/15(水) 23:04:45ID:???
名付けたところで、ただのサブルーチンでしょ。
0185nobodyさん2010/09/15(水) 23:10:38ID:???
コンストラクタと定義したサブルーチンだと何度言ったら(ry
0186nobodyさん2010/09/15(水) 23:31:49ID:???
どこにそんな定義があるの?
0187nobodyさん2010/09/15(水) 23:45:34ID:???
はいはい
0188nobodyさん2010/09/16(木) 01:49:39ID:???
Perlでコンストラクタたりえるのは、定義した関数(サブルーチン)内で
blessされたリファレンスを返すからであって、他言語のように"new"自体は
言語構造でもなければ組込みの関数とかでもないでしょう。
0189nobodyさん2010/09/16(木) 09:18:22ID:???
言い方だけの問題だからどうでもいいよ...
0190nobodyさん2010/09/16(木) 10:28:19ID:???
Perlが生き残れるかはこのスレのサポートにかかっている
0191nobodyさん2010/09/16(木) 10:35:40ID:???
Perlって、そんなヤバい状況なんですか?
0192nobodyさん2010/09/16(木) 11:29:04ID:???
perlのバッチ処理で、
回線の負荷を5分間隔で
調べたいのですが、
方法はありますでしょうか?

当方、光でインターネットに
つながっています。
0193nobodyさん2010/09/16(木) 11:36:36ID:???
回線の負荷というのは何を指すの
0194nobodyさん2010/09/16(木) 11:43:36ID:???
5分毎にパケット通信量を取得して前回の通信量と比較する
0195nobodyさん2010/09/16(木) 12:05:16ID:???
問題設定がおおざっぱ過ぎるな。方法はあるよ。

もう少し自分の頭で考えてちゃんと作ってみてどうしてもわからない
ところをピンポイントで聞かないとこういうとこでは役に立つ回答は
つきにくい。

でもそんなのいろいろあるから自前で作ることにこだわらず拾って
きて使えばいいんじゃね? mrtgとかmuninとかcactiとか。
0196nobodyさん2010/09/16(木) 12:12:05ID:???
>>193-195

漠然としすぎていました。
失礼しました。

現在、MRTGのグラフで「回線の負荷」と称して、下記の方法でトレンドを見ています。
・自プロバイダ(@nifty)のHPスペースに1MBのファイルのアップロード・ダウンロードを
 行い、その所要時間をMRTGでグラフ化しています。


で、この方法が正しい考えなのか否か、また、こういう良い方法があるよ
という参考意見がありましたら、レスをお願いします。
0197nobodyさん2010/09/16(木) 12:18:01ID:???
それperlと何の関係もないじゃん。どこが適切かは俺もわからんので
案内はできんけど。

考え方的にはわからんでもないな。量的に許される程度なのかどうかは
個別の事情だし。
0198nobodyさん2010/09/16(木) 16:37:33ID:???
回線の状況を調べようとしてるのに、自らが回線を占有しちゃ意味無いだろ。
mrtg には通信した容量とかも記録されてるから (しかも時間ごとに) そのログを活用したほうがいいかと

とりあえず mrtg のログ漁りから始めた方よいかと


定期的にまわすなら cron (Windows 鯖ならタスク) でチェックするスクリプトを走らせればいいかと思う


どう〜しても何をやっていいのか分からなければ
http://hibari.2ch.net/test/read.cgi/unix/1126361848/l200
0199nobodyさん2010/09/17(金) 00:19:38ID:???
>>198
レスありがとうございます。

そうなんですよね。
前は10Mでトレンドを取っていたのですが、
本末転倒なので、1Mに変えた次第です。
0200nobodyさん2010/09/17(金) 08:57:37ID:???
経路の途中の混み具合を知ろうと思うと実際に取って見るぐらいしか
方法はないんだよな。途中の通信業者からトラフィック測定データを
もらえるようなコネでもない限り。
0201nobodyさん2010/09/17(金) 09:05:32ID:???
traceroute の結果で経路の混み具合は分かるじゃん
02021922010/09/17(金) 13:56:22ID:???
今日からなぜか、put,getコマンドで所要時間が出力されないようになりました。
@niftyさん、なにか変えたのでしょうか。。。
ということで、tracerouteも含め別の方法を考えてみます。
0203nifty2010/09/17(金) 14:19:02ID:???
ぼくのせいにするのやめて
0204perl初心者2010/09/17(金) 14:19:08ID: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
0205nobodyさん2010/09/17(金) 14:37:51ID:???
Perl使える方でRubyかPythonも使える方にお伺いします
今からやる場合、どれがいいですかね?
用途はコマンドラインから動かすのとCGI利用です
0206nobodyさん2010/09/17(金) 15:41:49ID:???
>>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も同じこといえる
どっちもレガシーになりつつあるけどね。
0207perl初心者2010/09/17(金) 15:49:22ID:vsIN50JT
今、httpdのエラーログを見たら、下記の通りでした。

MIME::Body::File->open FileName.jpg: No such file or directory at /usr/lib/perl5/site_perl/5.8.8/MIME/Body.pm line 435.,
referer: http://localhost/******/****/form_mail.html
0208nobodyさん2010/09/17(金) 16:09:32ID:???
>>207
添付ファイルを一旦サーバー上に保存せんとダメ

だから
open FileName.jpg: No such file になる

メール送信後に削除ね。
0209nobodyさん2010/09/17(金) 16:14:59ID:???
>>207
スクリプト2行目に
use CGI::Carp qw(fatalsToBrowser);

の1行かいたら、わざわざエラログ見なくて済む。
0210perl初心者2010/09/17(金) 16:15:05ID:vsIN50JT
ご回答ありがとうございます。
たしかに我ながらアポーンな痛い愚問でした。
0211nobodyさん2010/09/17(金) 17:02:13ID:???
あぽーんて
0212nobodyさん2010/09/17(金) 17:31:13ID:???
まともなプログラム書くならお好みでってとこだけど、
コマンドラインでワンライナー限定だとperl最高だと
思う。慣れもあると思うが。
0213nobodyさん2010/09/17(金) 19:21:26ID:???
perl はサンプルは一杯あるけど、自分で試行錯誤しようとする気持ちがないと
クソサンプルの餌食になってしまうよ

1つのやり方に色んなやり方あって柔軟だとは思うけど、初心者には迷うだけなんだよねw
0214nobodyさん2010/09/17(金) 19:38:09ID:???
>>213
日本語でおk
0215nobodyさん2010/09/17(金) 19:40:23ID:???
Perlが読めればいろんなCGIスクリプトが読めるわけでうらやましい
0216nobodyさん2010/09/17(金) 19:40:52ID:???
もしかしてお前読めないの?
0217nobodyさん2010/09/17(金) 21:52:11ID:???
>>214
ちしょうはチンコでも吸ってろ
って意味
0218nobodyさん2010/09/18(土) 14:29:16ID:???
今では、フォームの受け取りに

my $query = CGI->new;
*in = $query->Vars();

って、たった2行で書くようになってるけど、
昔みたいに、

if ($ENV{'REQUEST_METHOD'} eq "POST") {
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
@pairs = split(/&/,$buffer);
for $pair (@pairs) {
($name, $value) = split(/=/, $pair);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$value =~ s/\t//g;
$in{$name} = $value;
}
} else {
$buffer = $ENV{'QUERY_STRING'};
@pairs = split(/&/,$buffer);
for $pair (@pairs) {
($name, $value) = split(/=/, $pair);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$value =~ s/\t//g;
$in{$name} = $value;
}
}

って書いたほうが、
素人からは何やってるかが書かれている分、良いように思う。
0219nobodyさん2010/09/18(土) 17:41:29ID:???
あっ、そう
0220nobodyさん2010/09/18(土) 17:57:39ID:???
仕組みなんて分からなくていいんだよ
ブラックボックスでおk
0221nobodyさん2010/09/18(土) 23:52:38ID:???
inとか使ってる奴はcgi-lib.pl時代の亡霊
0222nobodyさん2010/09/19(日) 15:20:57ID:???
ライブラリに入ってるコード毎回コピペするのかよw
0223nobodyさん2010/09/19(日) 16:24:14ID:???
写経だよ写経。
悟りが啓けるだろ。
0224nobodyさん2010/09/19(日) 17:09:11ID:???
何かバグってるときライブラリならアップデートが楽なのに、
あらゆるプロジェクトを書き直すのか。ご苦労さんってこった。
0225nobodyさん2010/09/19(日) 23:22:09ID:ND7IF1JX
>>218

my $query = CGI->new;
*in = $query->Vars();

の二行をわかりやすく説明してくれたらどんなに感謝することか。(;´Д`)
0226nobodyさん2010/09/20(月) 01:01:04ID:???
>>225
http://search.cpan.org/dist/CGI.pm/lib/CGI.pm#FETCHING_THE_PARAMETER_LIST_AS_A_HASH:
http://perldoc.jp/docs/modules/CGI-3.49/CGI.pod

二行目は真似せず素直に %in = $query->Vars; とした方がいい。
0227nobodyさん2010/09/20(月) 12:16:11ID:???
おーー!
1行になったw
0228nobodyさん2010/09/20(月) 12:19:01ID:???
( ゚д゚ )
0229nobodyさん2010/09/20(月) 12:30:44ID:???
> の二行をわかりやすく説明してくれたらどんなに感謝することか。(;´Д`)

それこそソース嫁。
0230nobodyさん2010/09/20(月) 12:33:54ID:???
>>224
プロジェクト書き直すのにお金が発生するって前提だと
ある意味、悪いことではないかも

新言語がリリース→新言語でソフト開発→普及する→追加機能のニーズ
→車輪の再開発→開発案ネタ切れ→仕事がなくなる→誰にも見向きされなくなる
→ちょっと使いやすくした新言語をリリース→新言語でソフト開発→普及する
→追加機能のニーズ→車輪の再開発→開発案ネタ切れ→仕事がなくなる
→誰にも見向きされなくなる

プログラミング市場とは、ちょうどウィルスとウィルス対策ソフトの関係のように
イタチゴッコな構造でなければ繁栄しない。
0231nobodyさん2010/09/20(月) 12:41:55ID:???
my @List = WorkA -> WorkB

の「->」の意味ってそもそもどんな意味?

WorkAをWorkBに任せる?

それとも

オブジェクト指向的に
@List.WorkA.WorkB;

ってこと?
0232nobodyさん2010/09/20(月) 13:15:25ID:???
WorkAのWorkBを@listに代入する
0233nobodyさん2010/09/20(月) 16:07:19ID:???
>>230
どこから新言語の話が出てきたの?
0234nobodyさん2010/09/20(月) 22:53:46ID:???
新言語にリプレースしないからといって脅威が発生するわけでもないのに
0235nobodyさん2010/09/21(火) 05:32:11ID:???
workAオブジェクトの属するクラスで呼び出せるworkBを呼び出す。
workBはリストを返すので代入する。
0236nobodyさん2010/09/21(火) 08:10:37ID:???
>>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]
02372312010/09/21(火) 10:22:02ID:???
>>235,>>236
なるほど、ありがと!
ドキュメントあったのね。

グーグルで「perl ->」で検索できなかったら
ドキュメントが探せないってのは痛いなぁ。

googleは、「->」の文字列が無視されてしまう。
0238nobodyさん2010/09/21(火) 18:44:47ID:???
Perl アロー演算子
0239nobodyさん2010/09/21(火) 19:16:06ID:???
検索で困る人が多そうなのはたいてい perlop か perlvar の
どっちかに載ってる傾向があるような気がする。
0240nobodyさん2010/09/22(水) 01:11:34ID: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>
0241nobodyさん2010/09/22(水) 01:12:47ID:AC22vKYS
choice.cgi

#!/usr/bin/perl
$page01 = "http://www.ほげ.jp/a/";
$page02 = "http://www.ほげ.jp/i/";
$page03 = "http://www.ほげ.jp/u/";
$page04 = "http://www.ほげ.jp/e/";
$page05 = "http://www.ほげ.jp/o/";
$page06 = "http://www.ほげ.jp/ka/";
$page07 = "http://www.ほげ.jp/ki/";
$page08 = "http://www.ほげ.jp/ku/";
$page09 = "http://www.ほげ.jp/ke/";
$page10 = "http://www.ほげ.jp/ko/";
<略>
$jump = "http://www.ほげ.jp/";#変な値が入力された時に飛ぶURL

$query = $ENV{"QUERY_STRING"};
($key,$value)= split(/=/,$query);

if($value == 01) {$jump = $page01;}
elsif($value == 02) {$jump = $page02;}
elsif($value == 03) {$jump = $page03;}
elsif($value == 04) {$jump = $page04;}
elsif($value == 05) {$jump = $page05;}
elsif($value == 06) {$jump = $page06;}
elsif($value == 07) {$jump = $page07;}
elsif($value == 08) {$jump = $page08;}
elsif($value == 09) {$jump = $page09;}
elsif($value == 10) {$jump = $page10;}
<略>
print "location: $jump\n\n";
exit;
0242nobodyさん2010/09/22(水) 01:39:35ID:???
世の中には8進数というものがあってだな。
0243nobodyさん2010/09/22(水) 01:39:54ID:???
>>240
> $page08ぐらいまで作ると500 Internal Server Errorを吐き出して停止する。
それは君が書き損なっているからだ。
下のように2行付け加えて、出てくるエラーメッセージを読みなさいな。

#!/usr/bin/perl

#!/usr/bin/perl
use CGI::Carp qw(fatalsToBrowser);
use warnings;

これらの説明は以下。
http://search.cpan.org/dist/CGI.pm/lib/CGI/Carp.pm
http://perldoc.jp/docs/modules/CGI-2.89/CGI/Carp.pod
http://perldoc.perl.org/warnings.html
http://perldoc.jp/docs/perl/5.8.1/warnings.pod
0244nobodyさん2010/09/22(水) 01:45:55ID:???
> elsif($value == 08) {$jump = $page08;}

書き損なうも何もここで Illegal octal digit 出るだろ
0245nobodyさん2010/09/22(水) 02:51:53ID:???
08 は八進数っていう認識になっちゃうから

数字で扱うならアタマに 0 は付けないように。


でも文字列として扱った方が何かと楽なので、
elsif($val eq '08')〜
とした方が良いかと
0246nobodyさん2010/09/22(水) 02:55:05ID:???
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;
0247nobodyさん2010/09/22(水) 03:15:38ID:???
正規表現でカッコにマッチしたのは $1、$2、$3、…に格納されますが、
これらをまとめて取り出すための特殊変数とかありますか。
「perl 特殊変数」でぐぐっていくつかページを読んだのですが、
それらしい特殊変数がみつかりませんでした。
0248nobodyさん2010/09/22(水) 03:34:18ID:???
use strict;
use warnings;

my $str = '今日は暑かったかもしれない。 しかし今日と違って明日は寒いようだ。 今日はお買い物に行った。';
my @test = $str =~ /今日.*?っ/gi;
print join("\n", @test);

0249nobodyさん2010/09/22(水) 03:44:24ID:???
>>248
ありがとうございます。
while文との組み合わせでも動くでしょうか。
ためしたとろ、無限ループになるようです。
my @x;
while (@x = $str =~ /¥w+/g) { print Dumper(¥@x); } # 無限ループ?
0250nobodyさん2010/09/22(水) 04:34:43ID:???
for my $str ( @str ){
if( my @x = $str =~ /\w+/g ){
print Dumper( \@x );
}
}
0251nobodyさん2010/09/22(水) 05:38:12ID:???
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; # バックアップを戻す
0252nobodyさん2010/09/22(水) 05:39:07ID:???
実行結果:
文字列:今日は暑かったかもしれない。 しかし今日と違って明日は寒いようだ。 今日はお買い物に行った。
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
foreach を使う場合の一例
取得したのは : 今日は暑かっ
取得したのは : 今日と違っ
取得したのは : 今日はお買い物に行っ
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
while を使う場合の一例
取得したのは : 今日は暑かっ
取得したのは : 今日と違っ
取得したのは : 今日はお買い物に行っ
02532402010/09/22(水) 19:08:57ID:???
>>242-246
うおーーー、皆さんレスありがとうございます。
やっとこ仕事が終わったので、これから弄ってみます。
02542402010/09/22(水) 20:22:03ID:???
動作確認完了しました。
08に特別な意味があることを勉強できました。
感謝です。
0255nobodyさん2010/09/23(木) 02:39:42ID:???
my $s = "a s,d f";
my @r = split /[\s,]+/, $s;
my @f = split /([\s,]+)/, $s;

@rと@fの結果が一致しないのは何故ですか?m//において()は特殊変数$1,$2...への記憶でしかないのですよね?
0256nobodyさん2010/09/23(木) 02:51:47ID:???
see perlfunc.pod

PATTERN に括弧が含まれていると、デリミタ内の部分文字列にマッチするものも、 リスト要素に含まれるようになります。

split(/([,-])/, "1-10,20", 3);
は、以下のリスト値を生成します。

(1, '-', 10, ',', 20)

0257nobodyさん2010/09/23(木) 10:20:23ID:???
>>256
ありがとうございました
0258nobodyさん2010/09/23(木) 22:06:19ID:???
Shell::* や Term::* のように、CLI環境でシェルのようなものを提供するモジュールで、出力にlessのようなページャを使えるものはないですか?
出力が長い場合、ターミナルのバックログを見ているんですが、lessが使いたいです
0259nobodyさん2010/09/24(金) 04:43:44ID:???
>>258
perl hoge.pl | less

これじゃだめなの?
0260nobodyさん2010/09/27(月) 11:10:54ID:hIL0AOHQ
自作のアクセス解析なんだけど、これ分かる人いないかな?

1秒間に6回のアクセスをし、
アクセスする度に違ったHPのURLをリンク元として記録を残していく同一アクセス者がいるんだよ。

以前から見慣れないリンク元URLが見受けられるようになったんだけど、
見に行くとリンクなんてしてなにわけ。おかしいでしょ?

これは何かあるんじゃないかな。
思うに、SEO業者でリンク元URLを残していくことで、、、
0261nobodyさん2010/09/27(月) 11:55:17ID:???
スレ違い、あと普通
0262nobodyさん2010/09/27(月) 11:56:15ID:???
しかもマルチポストか死ね
0263nobodyさん2010/09/27(月) 14:22:26ID:o+RpwStb
駄目なスレだなあ
何の役にもたたない
0264nobodyさん2010/09/27(月) 14:31:18ID:???
>>263 ID変えて逆キレ カコワルイ(・A・)イクナイ!!
0265nobodyさん2010/09/28(火) 02:16:52ID:???
すんません。宿題下さい、ってとこにも書き込んでしまいました。
真面目に質問です。

トーナメント表を作りたくてPHPの勉強始めました。

ここが目標です。
http://hanamachi.com/tnmt/i212.html

1.ブラウザから参加者登録
2.点数を記入して、勝ち上がりを更新する

参考になる考え方、sampleなどご指導下さい。

よろしくお願いします。
0266nobodyさん2010/09/28(火) 04:11:04ID: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" の場合何がまずいのでしょうか?
0267nobodyさん2010/09/28(火) 04:26:46ID:???
>>265
>>1-2
0268nobodyさん2010/09/28(火) 04:36:14ID:???
>>266
なんかようわからんけど -d "$ENV{HOME}/foo/bar" なら動いたよ
想像だけどPerl自体はチルダを展開しなくて、systemなんかでシェルが処理するときは展開するんじゃないか?
0269nobodyさん2010/09/28(火) 07:01:19ID:???
>>268
ありがとうございます
多分>>268さんのおっしゃる通りなんでしょうね

「初めてのperl」にも chdir の説明のところですが「チルダがホームディレクトリを指すのは
シェルの機能だからOSを直接呼び出すPerlでは使えないよ」と書いてあります
でもなぜ system 関数では使えるの?という疑問が出るのですが
はっきりした事はググっても見つかりませんでした
0270nobodyさん2010/09/28(火) 10:21:28ID:???
>>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 に渡されます。この方がより効率的です。

「スカラの引数が一つだけの場合〜」のところをよく読め。この説明でわからなければ
勉強が足りないのでがんばれ。
0271nobodyさん2010/09/28(火) 16:37:35ID:???
>>270
どうもありがとう
やっぱりちょっと難しい。もうすこし調べてみます
0272nobodyさん2010/09/29(水) 14:40:47ID:LPXumyyo
if(-f "hoge"){}
の否定は

if(!-f "hoge"){}
でしょうか?

if( !(-f "hoge")){}
でしょうか?
0273nobodyさん2010/09/29(水) 15:02:32ID:???
unless(-f "hoge"){}
0274nobodyさん2010/09/29(水) 15:16:31ID:???
>>273
ありがとうございます
ifを使った否定はどちらでしょうか?
0275nobodyさん2010/09/29(水) 15:30:59ID:???
試せばわかると思うけどどっちでもいけるので後は好み
0276nobodyさん2010/09/29(水) 15:55:23ID:???
use CGI;
my $cgi = new CGI;
my $cgi = CGI->new;

上述の二つはどう違うのでしょうか?
0277nobodyさん2010/09/29(水) 16:06:44ID:???
おんなじです。
my $cgi = CGI::new('CGI');
とも書けます。まず使わないけど。
0278nobodyさん2010/09/29(水) 16:21:07ID:???
>>277

結果は同じだけど過程が違わなかったっけ?
記憶が曖昧ですまんが
0279nobodyさん2010/09/29(水) 16:46:42ID:???
>>276の2つはDeparseしたらどっちも 'CGI'->new と解釈されてたよ。
んでもってそれは>>277のシンタックスシュガーであると。
0280nobodyさん2010/09/29(水) 17:11:05ID:???
newに引数使うときにCGI->newとか使う希ガス
0281nobodyさん2010/09/29(水) 17:12:15ID:???
俺が勘違いしてたみたいだね。 横やり失礼
0282nobodyさん2010/09/29(水) 19:18:53ID:???
open( DATA, "<", $logAll);
flock( DATA, 2);
$cnt = <DATA>;
close( DATA);
chomp( $cnt);
$cnt++;
open( DATA, ">", $logAll);
flock( DATA, 2);
print DATA $cnt;
close( DATA);

このように書くと、ログがリセットされてしまうことがあります。
どのようにかけばいいでしょうか?
0283nobodyさん2010/09/29(水) 19:37:55ID:???
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する必要あるの?
0284nobodyさん2010/09/29(水) 19:40:08ID:???
注意する点は、

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);
0285nobodyさん2010/09/29(水) 19:43:15ID:???
セミコロン抜けすぎワロタ>283
02862822010/09/29(水) 21:14:18ID:???
ありがとうございました。
リセットされないようになりました。

教えていただいたコードの中でわからないことがあるので、
もう一度質問させてください。

seekについてしらべてみたのですが、どのような動作をするのでしょうか?
ポインタを移動させるということはわかったのですが、そのポインタが先頭に行くということは
既存の文字の前にインサートすることにはならないのでしょうか?

また、>>283さんのtruncateはファイルサイズを変更しているようですが、
どのようないみがあるのでしょうか?

お手数をおかけしておりますが、宜しくお願いいたします。
0287nobodyさん2010/09/29(水) 21:26:51ID:???
>>286
インサートじゃなくて上書き。

truncateしないと新たに書いた文字列がもとのより短いときに
問題になる。たとえば100を99にしようとしても990になっちゃう
みたいな。今回は1ずつ増やすので桁が減ることがないから
truncateしなくても大丈夫なので284はさぼったんだと思うけど
一般的には必要。
02882822010/09/29(水) 21:31:14ID:LPXumyyo
>>287
ありがとうございます。
ポインタはC言語と同じ動きをするんですね。

0289nobodyさん2010/09/29(水) 22:34:03ID:???
ファイルポインタ移動後に挿入してくれる言語があるなら知りたい
0290nobodyさん2010/09/30(木) 00:16:07ID:???
蝉焜炉
0291nobodyさん2010/10/01(金) 01:36:17ID:qWU05yPj
自作のショッピングカートを使ってきたんだけど、
この度、クレジットカード決済を同CGIに導入することになったんだが、
接続とデータの渡しに更なる知識と技術が必要みたいなんだな。

リファレンスっていうのがよくわからない。
どなたか、分かりやすく説明していただけませんか?
0292nobodyさん2010/10/01(金) 01:45:18ID:???
>>291
さすがにそれは…
頼むから人の金を扱わないでくれないか
0293nobodyさん2010/10/01(金) 01:49:05ID:qWU05yPj
>>292
どうして?
どういうこと?
SSLは導入してるよ?
0294nobodyさん2010/10/01(金) 06:38:46ID:???
リファレンスも理解してないレベルの奴が作ったプログラムに
金を扱わせるのは怖いって話だろ。SSL使ってりゃいいって
もんじゃない。
0295nobodyさん2010/10/01(金) 13:02:48ID:???
リファレンスもわからずに組んでるようなショッピングカートって……
0296nobodyさん2010/10/01(金) 13:52:43ID:???
>>291
perlrefを嫁。
↑に書いてあるようなボリュームのことを1行で聞いて済ますとは大胆な。
0297nobodyさん2010/10/01(金) 14:11:15ID:???
こういう人はクレジット会社に不正データ送りまくって
損害賠償請求でもされないと、自分のやっていることの
問題がわからないタイプの人
0298nobodyさん2010/10/01(金) 16:13:17ID:???
>>293
そもそもクレジットカード決算とリファレンス直接関係ないし

WEBでビジネスやろうと思うなら少なくともCSRF・XSS・SQLインジェクションくらいは理解した上で質問をしろ
熟練して、リスクとコストを見比べてそれでも自作でやろうと思うならそれでもいいが、
どんなリスクがあってそれがどれほどの損害を生むかを理解していないうちから人の金を扱うのは
無責任にもほどがある
0299nobodyさん2010/10/01(金) 16:27:35ID:qvat8ps4
そうすると、CGIで注文を受けるシステムを作るのは無謀だと?
それは全く違うと思うのだが。
クレジットカード決済代行業者の存在は知ってる?
上手く繋げられれば決してありえない話ではないと思うのだが。
0300nobodyさん2010/10/01(金) 16:35:07ID:???
知識もなしに作ろうとするのは無謀だろ
0301nobodyさん2010/10/01(金) 16:37:13ID:???
直接は関係ないけどそういうレベルだと他のスキルもそれなりなんだろうな
ということだよ。

決済代行につなげて出来た出来たじゃすまないんだよね。
0302nobodyさん2010/10/01(金) 16:39:17ID:???
その程度の知識で進むステップじゃないだろう
ってことだよw

>>クレジットカード決済代行業者の存在は知ってる?
たぶんみんな知ってる
あまり、自分だけ知ってるんだぜ?的な発言は敵を増やすだけで良質な回答は増えないと思う。
質問したなら、回答を得るまで下手にかつ積極的に動けないかねぇ



まぁ手数料覚悟で自分のカードでテストするのも手だけど、
とりま paypal つこーとけ
あそこはカード決済がテストで出来たと思った
0303nobodyさん2010/10/01(金) 16:43:40ID:qvat8ps4
>>302
代行業者の利用案内ではCGIからの繋げ方が解説されていて、
努力すれば可能なんだがな。

>自分だけ知ってるんだぜ
回答はありがたいが、どの程度の前提なのかは当然わからないわけで、
技術者は兎角視野が狭まりがち。
プログラマーでも決済代行業者知らないことはあり得るんじゃないか?
0304nobodyさん2010/10/01(金) 16:46:53ID:qvat8ps4
ちなみにじゃあ、実際にCGIプログラムから決済代行業者へ接続させるプログラム作ったことある人いる?
渡すデータってどんなデータだと思う?
カード番号等は代行業者のページに入ってから入力するから、
ショップ側はタッチしないシステムになっている。

なんら問題はないと思うけどな。
0305nobodyさん2010/10/01(金) 17:07:01ID:???
>>304
業者によるぞ
決算代行と単に決済システムを置いてくれてる会社がある

代行で簡単なところはデータ渡すだけでいいけど、決済システムを置いてくれてるだけなら
自分でデータを加工して指定の方法に従って渡さないといけない。

何度も作ったことがあるけど、結構めんどくさい。
業者のシステムの仕様のマニュアルから読まないといけないから。

完全な代行業者ならデータすら渡さずに、代行業者のサイトに遷移させるだけだから、
CGIを導入するって言った時点で前社ではないんじゃないの?

しらんけど
0306nobodyさん2010/10/01(金) 17:17:03ID:qvat8ps4
>>305

>代行で簡単なところはデータ渡すだけでいいけど、決済システムを置いてくれてるだけなら
>自分でデータを加工して指定の方法に従って渡さないといけない。
これです。
つまり、商品メニューの表示と支払い合計額の計算、
個人情報の入力と送信はショップが行い、
支払い手続き等の決済は決済代行業者が行う。
ショップは名前と電話番号と決済額を決済代行業者に渡すだけで、
クレジットカード手続きは代行業者ページで行う。

めんどくさいけどギリギリでできそうなところにきている。
クレジットカード番号等の保管をしなくてもいいし、リスクもショップ側は少ない。
なにが問題だろうか。

ところが、リファレンスがわからないんだな。
配列の配列(の配列?)みたいなデータを扱う場合に必要になるっぽいのはわかりかけてるけど、
おそらくここのところがネックになってるものかと。
0307nobodyさん2010/10/01(金) 17:25:59ID:???
perllol を読めばリファレンスが何なのかわかんないままでもデータの扱いかたはわかると思う。
0308nobodyさん2010/10/01(金) 17:31:09ID:qvat8ps4
>リファレンス
それが、書籍を読むと理解が難しくて。

>配列の配列
つまり、縦列と横列のある表の位置情報の指定ってことですかね。
これはわかるのですが・・・
0309nobodyさん2010/10/01(金) 17:37:41ID:???
俺も昔、リファレンスもOOPも全然わからないときに
似たようなシステム作ったことあるから出来ないって事はないと思う。

でも問題なのは >>298 が言ってるように 動けばいいってだけじゃなくて
『CSRF・XSS・SQLインジェクション』とかの対策をしっかりしないと
みんな不幸になりますよって事だと思う。
0310nobodyさん2010/10/01(金) 17:43:12ID:qvat8ps4
確かに、CGIから決済代行業者のページに接続するシステムの場合、
どんな危険があるのかはあまり知らないのかも知れない。
盗聴はSSL使って避けるとして、
他のリスクについては想定していないかも知れない。

>インジェクション等
今検索して知ったけど、
そういう 攻撃 をされた場合は脆いかも知れない。
けど、全世界から繋がっているweb界で、リスクリスクと言われたらきりがないのでは?
顧客情報をネットサーバー上におかないことしかできないよ。
0311nobodyさん2010/10/01(金) 17:59:48ID:???
>リスクリスクと言われたらきりがないのでは?

上記の対策は最低限のことだからキリがないとかの話ではないよ。
対策不足だとレンタルサーバーの他の契約者に迷惑がかかることだってある。
特にカード決済型ショッピングカートなんていうエンドユーザーのお金に関わることなら
リスクは限りなく少なくしていかないと・・・
下手するとショップ側の信頼ガタ落ちだよ。
0312nobodyさん2010/10/01(金) 18:05:04ID:qvat8ps4
SSL利用の代行業者接続じゃ不足かい?
これ以上、どうしろと?
0313nobodyさん2010/10/01(金) 18:07:21ID:???
いやw

不足だから最低でも上記の対策をしようよw
0314nobodyさん2010/10/01(金) 18:11:22ID:qvat8ps4
SSLにクレジットカード決済代行業者利用。
これで何が不足?他にどういう対策法がある?
0315nobodyさん2010/10/01(金) 18:11:43ID:???
>>306
それ矛盾してるよ

> つまり、商品メニューの表示と支払い合計額の計算、
> 個人情報の入力と送信はショップが行い、
> 支払い手続き等の決済は決済代行業者が行う。
商品の表示とか計算を代行業者がやるのに

> ショップは名前と電話番号と決済額を決済代行業者に渡すだけで、
> クレジットカード手続きは代行業者ページで行う。
なぜ、決済額を渡す必要があるの?

マニュアルを読み直すか、有償でもサポートもとめたほうがいいよ。
もし、決済額を渡す必要があるのであれば、今の知識では計算間違えとかの
リスクが大きいと思う。
0316nobodyさん2010/10/01(金) 18:16:49ID:qvat8ps4
>>315
いやいやw 貴殿の言ってるのはレンタルショッピングカートのことだよ。
私が言ってるのはクレジットカード決済代行業者ね。両者は違う。

前者は、商品とその情報を登録すればあとはお任せ(?)
後者は、諸決済の中のクレジットカード決済(コンビニも)を代行してもらうだけ。

既にカートは自作のCGIでやってまして、
これからコンビニ・クレジットカード決済を導入するんです。
0317nobodyさん2010/10/01(金) 18:20:12ID:???
何をしたいのかさっぱりわからんなこいつ
03183132010/10/01(金) 18:20:47ID:???
>これで何が不足?他にどういう対策法がある?

上記の対策って言うのは、『CSRF・XSS・SQLインジェクション』対策ね。
それ以外にどんなリスクがあるかを、常にアンテナ張って調べるぐらいの探求心が必要だよ。
0319nobodyさん2010/10/01(金) 18:24:01ID:qvat8ps4
>>318
その インジェクション等は検索してざっと読んだけど、
できる対策といったらアクセス制限くらいではなかろうか?それと、顧客データのサーバー非保管。
ネット上に個人情報置かないこと。

通信ではSSL。
決済では代行業者。

このほかにどんな対策がある?
なにかこう・・・
0320nobodyさん2010/10/01(金) 18:25:17ID:???
契約してるならもう交わしたと思うけど、カードの規約はかなり厳しいから
1回でも誤った操作したり(多重私とか)、金額を間違ったりしたら、契約者に
損害賠償があるぞ。

信販会社は誤った請求させられたらおしまいだからな。
0321nobodyさん2010/10/01(金) 18:26:52ID:???
>>319
お前じゃないちゃんとしたプログラマに依頼する

>>320
損害賠償じゃなくて、損害賠償請求な
03223132010/10/01(金) 18:31:51ID:???
> その インジェクション等は検索してざっと読んだけど、

しっかり読め。今の君が数分読んだだけでは1%も理解できてはいない。


> このほかにどんな対策がある?

『このショッピングカートは、リスクに関して無知なプログラマによって制作させているので怖い人は利用しないでください』
っていう文言を入れろ
0323nobodyさん2010/10/01(金) 18:38:05ID:iC/l9piS
>>320
今はまだ本契約はしていない。
実際に利用できるか、動かせるかのテスト期間。
けど、ほぼ間違いないんじゃないかな。

既にクレカ決済無しのネット取引経歴が何年もあるのね。
よって、誤送信の心配はほとんどしていない。
でも、請求額が違ったとしてもそれは代行業者の責任ではないでしょ。基本的に。
もちろん、個別に調べてみないとわからないけど。
それに、クレカ決済が手軽に利用できるようにするのが代行業者の仕事でもある。
ショップが利用しやすいようなサービスを追及してるはず。

>>321
ちょっとわからないね。
なにかこう、あまり知られていない言葉を言って自分の知識の広さ深さをアピールしてるような感触もしている。

SLLと決済代行業者利用のほかにどう対策しろと?
アクセス制限は既にしている。
顧客個人データはサーバー上に残さないのもやっている。

他は?
0324nobodyさん2010/10/01(金) 18:39:43ID:???
もうほっといたらいい
自分の腕に相当自身があるようだし、話を聞こうともしてないんだから

俺みたいに裁判沙汰になって初めて後悔するタイプでしょ
一回そういう目に逢えば、嫌でも身にしみる


そういう俺は、基本的に金銭を扱うコードはトラウマで書けなくなった


0325nobodyさん2010/10/01(金) 18:39:47ID:iC/l9piS
>>322
君はどんだけその リスク とやらを広く深く知っているのかな。
じゃあ、既存の周囲のショップは何をどこまで実際にやっているか。
SSLと決済代行orカートレンタルくらいではないか。
どうしてこれ以上を?
0326nobodyさん2010/10/01(金) 18:45:03ID:???
うむ。
こんなやつのために巻き込まれたくもないし、
こんなやつのシステムを使う被害者を増やしたいとも思わないな。
0327nobodyさん2010/10/01(金) 18:45:46ID:iC/l9piS
あのさ、失礼なこと言うようだけど、
本当にわかってるの?
0328nobodyさん2010/10/01(金) 18:47:33ID:iC/l9piS
CSRF・XSS・SQLインジェクションとかは知ってるようだけど、
単に深い知識があるだけ?いわゆるヲタク?
ちなみに、自分のサイトではどう対策しているの?
0329nobodyさん2010/10/01(金) 18:48:54ID:???
ココは初心者のスレであって、ど素人のスレッドではありません。
出直してください
0330nobodyさん2010/10/01(金) 18:54:18ID:iC/l9piS
説得力がないよw
そのレスでどうして納得できる?
SSL+レンタルカートor決済代行業者 で不足だとか言われたら、
ほとんどのショップがセキュリティー対策不足ってことにならないか?
確かに、それもまたそうっぽいけどね。

対策案が言えないんじゃ単なる因縁付けだよ。
重箱の隅をつつく行為だよ。
そんなのにつきあっていたらいくら経費かかることやら。
その方面の業者を太らせるだけ。違うか?
0331nobodyさん2010/10/01(金) 18:59:27ID:iC/l9piS
SSL+レンタルカートor決済代行 でもし情報漏洩等が起きたら、それはSSLまたはレンタルカートor決済代行の責任だよ。
ショップに非はないでしょ。
これ、わからない?
0332nobodyさん2010/10/01(金) 19:00:26ID:???
ワロタww
親切な俺が一つだけアドバイスを上げるとすると

SSL使ってようが、決済代行使ってようが、
そのSSL通信の中を通って、代行業者に不正な値が流れたらどうする?
不正な値を流す方法は、いっぱいアルファベットが連続したやつ。
今まで連呼してるからわかるでしょ?

今までうまくいってるからって安心してるようだけど、その今までは
代行決済がなかったから誰も相手にしてなかっただけ。
クレジットカードとか扱いだすとそのカード番号を抜くためとか、不
正請求を起こすために狙われる。
だがこれは、お前は被害者じゃなくて加害者になる。リスクがあるの
に、そのリスク対策をしていなかったという責任で加害者。

あと、>>323
「請求額が違ったとしてもそれは代行業者の責任ではないでしょ。」
これは、もちろん代行業者の責任じゃなくてお前の責任。
だからお前に、信用が傷つけられたという賠償請求がある。


まず、技術より過去の裁判とかを調べたほうがいいよ。
自分がやることのリスクが金銭的にいくらかとか、参考になると思う。

自信があるなら、セキュリティ審査会社とかに君のCGIを調査してもらっ
たらいいよ。
法人なら簡単な検査を無料でやってくれるところがある。
0333nobodyさん2010/10/01(金) 19:05:54ID:iC/l9piS
>>332
>SSL使ってようが、決済代行使ってようが、
>そのSSL通信の中を通って、代行業者に不正な値が流れたらどうする?
>不正な値を流す方法は、いっぱいアルファベットが連続したやつ。
>今まで連呼してるからわかるでしょ?
その計算は自作CGIで行うから、そこで間違いがあった場合は責任はショップにあるね。
しかし、計算違いはまず 無い。
よって、不正な値が流れることは 無い。
SSLの意味はわかってる?

>今までうまくいってるからって安心してるようだけど、その今までは
>代行決済がなかったから誰も相手にしてなかっただけ。
意味不明

>クレジットカードとか扱いだすとそのカード番号を抜くためとか、不
>正請求を起こすために狙われる。
SSLの意味や存在意義はわかる?

>だがこれは、お前は被害者じゃなくて加害者になる。リスクがあるの
>に、そのリスク対策をしていなかったという責任で加害者。
SSLの他にどういう対処法がある?と何度も聞いている。
0334nobodyさん2010/10/01(金) 19:07:32ID:???
>>331
親切だからもう一つアドバイス

>SSL+レンタルカートor決済代行 でもし情報漏洩等が起きたら、それはSSLまたはレンタルカートor決済代行の責任だよ。
>ショップに非はないでしょ。
完全にショップ側に非がある。
SSLは通信を暗号化するのであって、通信中以外に漏れた内容には関知
しない。アルファベットのやつは通信中に漏らす行為じゃない。
あと、SSLには契約するときに補償額が決まってるから、裁判で賠償請
求があったとしても、その補償額以外の補償はしてくれない。
安いSSLだったら、1万円以下の補償額。

決済代行業者も流れてきた情報に従って決済をするだけだから、その情
報を流したショップに非がある。

このフローがわかってないようなら、プログラムというものがどう動い
てるかもわかってないから、本気で勉強しなおした方がいいと思うよ。
Perlならオライリーの入門書を3冊買えばいい。
0335nobodyさん2010/10/01(金) 19:07:59ID:iC/l9piS
>>332

>信用が傷つけられたという賠償請求がある。
この点は確認しておくよ。
しかし、(ry

>セキュリティ審査会社
そうなんだ?
この話は有難い。御礼。
0336nobodyさん2010/10/01(金) 19:08:13ID:???
こいつSSLがなにかもわかってねぇwwwww
03373342010/10/01(金) 19:09:08ID:???
ダメだこりゃ。
SSLがどういうものかもわかってないみたい。
0338nobodyさん2010/10/01(金) 19:11:08ID:iC/l9piS
>>334
情報がどこで漏洩したか確定すべきという話は無しでその結論に帰結するのか?
ショップから漏れたならショップの責任だろうが、
代行業者から漏れたなら当然、代行業者の責任。

君はちょっと先走ってるよ。
0339nobodyさん2010/10/01(金) 19:12:54ID:iC/l9piS
>>334
オライリーは難解で無理。
まあ、クレカ代行業者との本契約では今言われた部分の確認は必ずするよ。
0340nobodyさん2010/10/01(金) 19:14:07ID:???
SSLって無敵だったのか
初耳だ
0341nobodyさん2010/10/01(金) 19:14:33ID:iC/l9piS
SSLとは、通信途中での盗聴等から情報を守る為に暗号化して送信する技術。
そんなとこ。

おかしいか?
0342nobodyさん2010/10/01(金) 19:15:10ID:???
でも脆弱性つけば盗めるんだな、これが
0343nobodyさん2010/10/01(金) 19:16:08ID:???
そろそろこの流れも飽きてきたから、ちょっと他の質問を。

シングルトンってみんな当たり前のように使ってるのかな?
この前、自作mvcでちょうどショッピングカート作ったんだけどw
シングルトン意識しながら作ったらほとんどシングルトンなんじゃないかと思って・・・
CだってVだって1つ以上のインスタンスは不要な気がする。
俺の設計がイマイチだったのかな
0344nobodyさん2010/10/01(金) 19:16:18ID:iC/l9piS
>>342
君のかかわるwebサイトではどう対策しているんだい?
03453342010/10/01(金) 19:17:03ID:???
諦めないでこれはマジでアドバイスしておいた方がいいな・・。

>>333
>しかし、計算違いはまず 無い。
君が作ったプログラムが計算間違えをしないでも、XSSなりを使ったら
その計算を狂わすことも、そもそも計算処理を通さないでも決済に流す
ことができるの。(もちろん対策していたら大丈夫。

>SSLの他にどういう対処法がある?と何度も聞いている。
SSLは通信を暗号化するものだから、XSSなりの対策とは無関係。
君が商品を送るときにかぎの付いた箱で送ったとしても、かぎを閉める
前に別の商品に摺りかえられたり、そもそも君じゃない誰かがその箱で
送られたらどうする?
運送(SSL)は安心でも、別の商品が届いたり、自分で送ってないものが
届くでしょ?

何度も言うけど、SSLは通信の暗号かね。
ショッピングしてる最中とか、住所入力したりしてるのは通信じゃない。

>>338
もちろん代行業者で漏れたら、代行業者の責任だよ。
でも、代行業者は君異常の知識を持った人がそろってるよね?
なら、どっちがリスクがあるか考えてみよう。

>>339
オライリーの入門書が難解というレベルなら、今のコードも相当危ないと
思うよ。

0346nobodyさん2010/10/01(金) 19:18:25ID:???
>>344
XSS対策
DB使うならSQLインジェクション対策も
0347nobodyさん2010/10/01(金) 19:22:11ID:???
この板ってこんなに親切だっけ

それほどID:iC/l9piSがあほなのか
0348nobodyさん2010/10/01(金) 19:23:04ID:iC/l9piS
>>345
>今のコードも相当危ないと
どう危ないんだい?
0349nobodyさん2010/10/01(金) 19:26:12ID:???
さすがに釣りに思えてきた。
釣りじゃなかったら相当やばいぞこいつ。
0350nobodyさん2010/10/01(金) 19:26:29ID:iC/l9piS
>>346
これは、入力にタグやスクリプトを許さないことで避けられるかな?
0351nobodyさん2010/10/01(金) 19:28:27ID:???
これだけのアドバイスでも業者に頼めば、数万とか数十万するんだからもう十分でしょ。
これだけ話きかないんなら、審査会社に言われたことも聞かないだろうし。

もうあとは、自分に被害が出て悔い改めるしかない。
0352nobodyさん2010/10/01(金) 19:29:00ID:???
オライリーすらろくに理解できない奴が作ったのなんて誰も使いたくないと思うわ
0353nobodyさん2010/10/01(金) 19:31:40ID:iC/l9piS
>351
そんな、すぐに実感なんてできないよ。
ましてや、姿形も経歴も、文字意外に何もわからないんだから。
どういう前提で話してるのかもわからないんだから。

これはわからん?

>>352
レベル高すぎだよ。
あんな難しい本、読む気になれん。
0354nobodyさん2010/10/01(金) 19:33:45ID:iC/l9piS
じゃあさ、今この2chでXSSやってみてくれないか?
2ちゃんってSSL使ってないでしょ?ならば非常に危険なはず。
XSS対策はできてるの?
君らの話は理屈ではわからなくはないけど、いまいち実感が持てない。
実感の持てない危険を感じろといわれても困る。
0355nobodyさん2010/10/01(金) 19:34:29ID:???
Perlでプログラムを作る時って、どのバージョンをターゲットにしてる?
5.6はさすがにもうターゲットから外していいだろうか。

KENTとか相当古いバージョンもサポートしてるけど、需要あるの?
0356nobodyさん2010/10/01(金) 19:34:31ID:???
2chは丹念に脆弱性対策してるから^^;
0357nobodyさん2010/10/01(金) 19:35:01ID:iC/l9piS
フォームからスクリプト等送って いけない行為 やってみてもらいたい。
0358nobodyさん2010/10/01(金) 19:35:06ID:???
>>355
俺は基本的に5.8以降だな
0359nobodyさん2010/10/01(金) 19:35:12ID:???
>>354
実感しなくてもいいよ。
君には難しいから
0360nobodyさん2010/10/01(金) 19:36:11ID:???
>>355
おれも 5.8以降かな
utf8で書くし
03613552010/10/01(金) 19:36:33ID:???
>>358
ありがとう。
官公庁みたいにパッケージが追加できない環境で、5.6なところって
もうないかな?さすがに5.8に移行してる?

0362nobodyさん2010/10/01(金) 19:37:55ID:iC/l9piS
よしわかた。
じゃあきみらレベルのプログラム作れるようになるよ。
君らはどんな環境下でプルグラムを学習したんだい?
相当、専門的にやったんだろうね。
0363nobodyさん2010/10/01(金) 19:38:04ID:???
>>361
さがせば5.6使ってるところもあるかもしれないが、実際組むとなったら5.8を基準にして組むのが一番やりやすいと思う
0364nobodyさん2010/10/01(金) 19:41:37ID:???
追加パッケージが入れれない環境で、HTML::Templateが入ってないのはつらい
Perlはなんで標準モジュールにテンプレートいれないの?
Templateじゃなくて、HTML::Templateでいいからマジで入れてほしい。
まぁ、いまさら入れたところで遅いか・・。

ところで、追加で入れれないところで作業するとき、自作でテンプレートシステム作ってる?

あ、HTML::Templateってコンパイル必要なかったっけ?
0365nobodyさん2010/10/01(金) 19:42:57ID:???
たぶんコンパイルは必要なかったはず
0366nobodyさん2010/10/01(金) 19:46:12ID:???
>>363
自分も5.8をターゲットにしたいんだけど、他の環境の人は見る機会ないかと思って。
某大手イベンターの自社サーバが5.6だってシステムを作り直したことがあってから、5.6にはトラウマ。
あれから2年たつけどいまだにあそこは、5.6で納品させてるんだろうな・・。

Templateもオプションによってはコンパイル不要じゃなかったでしたっけ。
0367nobodyさん2010/10/01(金) 19:47:22ID:iC/l9piS
ここ、初心者スレなんだがな。
0368nobodyさん2010/10/01(金) 19:49:03ID:???
ttp://blog.nomadscafe.jp/archives/000459.html
ここによるといらんみたいね。
0369nobodyさん2010/10/01(金) 19:50:12ID:iC/l9piS
おかしいと思うわ。
語られてることは初心者レベルではないと思うんだが。
自分らの知識能力の自慢かアピール?
0370nobodyさん2010/10/01(金) 19:50:28ID:???
さすがに6になったら入るでしょ。
でるの10年後くらい?
0371nobodyさん2010/10/01(金) 19:50:33ID:???
smarty並の機能を求める場合は、何を使えばいい?
0372nobodyさん2010/10/01(金) 19:51:50ID:???
>>371
Smartyが機能多いとは思わないのは、使いこなせてないせい?
SmartyレベルならHTML::Templateじゃないの?

Templateはすごいよ。マジで。
一回使うと、HTML::Templateが使えなくなる。
0373nobodyさん2010/10/01(金) 19:53:31ID:iC/l9piS
少なくとも、議論に夢中になると大前提が見えなくなる人物であることは理解できる。
自分らの興味関心に出会うと他が見えなくなる性質が感じられる。

SSL+レンタルカートで駄目では、ネットショップなんてもう無理でしょ。
どうやら、複雑高度なことは理解できても、単純明快なことが理解できなくなっちゃったのかな?
0374nobodyさん2010/10/01(金) 19:55:48ID:???
HTML::TemplateがHTMLに入れられてるのに、Template ToolkitはまんまTemplate。

簡単にはそんな直接的な名前は使わせてくれないのに、
Template ToolkitがTemplateを使えたのはその強力さにある。

HTML::Template使ってた時は、PHPプログラマがすらすら書いててしばいてやろう
と思ってたけど、Template使い始めてからはPHPなんてどうでもよくて、
Pythonプログラマをしばくタイミングをうかがってる。
03753712010/10/01(金) 19:56:57ID:???
>>372
あう・・・ そうなのか
{$hoge|html_entity_decode}
みたいな書き方がhtml::templateで出来ないような気がしたり、その他に何点か不便に感じたからsmarty>>html::templateかと思ってた
templateってのもちょっと調べてみます
0376nobodyさん2010/10/01(金) 19:59:03ID:iC/l9piS
とうとうスルーか
参ったね
0377nobodyさん2010/10/01(金) 20:00:53ID:???
>>375
HTML::Templateは
<TMPL_VAR ESCAPE=HTML NAME="PARAM">
こんな感じ。

Template Toolkitは
http://www.hakoniwa.net/tt/#filter_etc
こんな感じでSmarty的に使えるよ
0378nobodyさん2010/10/01(金) 20:01:32ID:???
TTより軽くてPPでPerlコードも簡単に埋め込めるText::MicroTemplateに一票
0379nobodyさん2010/10/01(金) 20:03:42ID:???
質問させてください。

Perlの勉強を始めたばかりなのですが、
use utf8;
の意味がわかりません。

どのような時に使い、どのようなメリットがあるのでしょうか?
0380nobodyさん2010/10/01(金) 20:04:49ID:???
>>378
あれはプログラマ向きであって、デザイナ向きではないよ。
デザイナ向きはTemplateToolkit一択。

HTML::Templateはどういう風に分業したらいいかわからなかった。
0381nobodyさん2010/10/01(金) 20:05:07ID:???
>>377
あー ごめん言い方が悪かった
{$hoge|html_entity_decode} みたいに テンプレート内にphp関数まぜたり
{$hoge|nl2br} 改行をbrタグに変えてくれたり
{$smarty.const.SCRIPT} 定数にアクセスできたりするのがsmartyは便利だけど
HTML::Templateは出来ないっぽいから不便だなぁと
0382nobodyさん2010/10/01(金) 20:06:59ID:???
>>381
本屋さんにSmartyの本が何冊かあるけど、あれなんなの?
そんなに複雑なの?
TTのマニュアルですら、上のリンクだけなんだが。
0383nobodyさん2010/10/01(金) 20:11:35ID:???
>379
>>1-2
http://perldoc.perl.org/utf8.html
http://perldoc.jp/docs/perl/5.8.1/utf8.pod
0384nobodyさん2010/10/01(金) 20:11:51ID:???
本屋でsmartyの本を手に取ったこと無いからわからないけど
公式サイトのマニュアル見ると上のTTのマニュアルよりは多そうだね。
http://www.smarty.net/manual/ja/

あまり複雑すぎると分業できなくなる気もするけど、smartyはそんなに複雑じゃないと思うよ
0385nobodyさん2010/10/01(金) 20:12:52ID:iC/l9piS
今日、話たことは利用を検討しているクレカ決済代行業者に質問してみるよ。
今、その業者のHPをみてるんだけど、
HPを読む限り、とりあえず心配すべきことはないと思う。

今日のみんなはどうやらいろいろと高度な専門知識を持っているようだけど、
なにかおかしいと思う。ヲタ過ぎるっていうのかな?不必要に知識を持っていたり、警戒してるかのような。

初心者スレで平気で高度?な話してるところも非常識だと思うし。
一度会って人間性を見てみたい気も。
03863792010/10/01(金) 20:14:18ID:???
>>383
そういった記事はある程度読みました。
ですが、どのような利点があるかがいまいちわかりません。

例えばutf8を読み込まなくても、プログラム自身はutf8で書けますし、
utf8の文字列も扱えます。
utf8を読み込めばサブルーチン名にutf8な日本語が使えるなどだけなのでしょうか?
0387nobodyさん2010/10/01(金) 20:16:44ID:???
>>386
utf8フラグ
0388nobodyさん2010/10/01(金) 20:17:40ID:???
途中でutf8プログマを使うと、動かなくなるのはあるある?
0389nobodyさん2010/10/01(金) 20:17:57ID:iC/l9piS
ショップ側では顧客のクレカ情報は保持しないんだから、クレカ情報の漏洩は一切ないとある。
ショップから決済代行業者へ渡すのは金額や商品名や決済方法等の注文情報だけ。
仮に漏れても個人情報は漏れない。

おかしいよ、やっぱり君らは勘違いしているよ。
あるいは、わかっていないよ。
失礼かもしれないけど、気を悪くしないで考えてもらいたい。
0390nobodyさん2010/10/01(金) 20:21:54ID:???
>>389
だから君が思ったようにすればいいじゃん
もうだれも止めてないでしょ
0391nobodyさん2010/10/01(金) 20:25:32ID:???
>>389
SSLと決済サイトだから安全というレベルの認識だと
たとえば改竄とかされたら無力なんだよね。

穴があったら君のサイトの中で決済サイト使わずに
クレカ入力してよって風に改竄されちゃうかもしれない。
あとはわかるよな。

SSLと決済サイトだから安全なんて思考停止をせずに
隅々まで気を使ってちゃんと書けってこった。
0392nobodyさん2010/10/01(金) 20:29:38ID:???
>>386
変数名や関数名に日本語ってあんまり使わないと思うけど、
文字列定数に日本語を書いた場合に、utf8フラグがついた
文字列になるか、ただのバイト列になるかは違うと思うよ。
正規表現とかも。
0393nobodyさん2010/10/01(金) 20:36:52ID:???
掲示板等の投稿を行うシステムを作るときのことなのですが、投稿ログに順次
書き込みを行っていくのではなく、投稿内容に応じてログへの記述位置が違う
場合、
一度ログを全て読み込み、ファイルを閉じ、書き込み位置をスキャンした後に
書き込み用に開いて、当該個所に追記するというのがいいのでしょうか?
それとも、読み込んでスキャンしている最中も開きっぱなしで書き込みが終わっ
てから閉じるものなのでしょうか?

また、検索の際も
検索を行う該当箇所だけ開き、マッチした記事のID等をひろってから、再度開
きなおしてIDから記事全体を取得するのか、開きっぱなしでマッチした記事を
拾ってから閉じるのでしょうか?

前者だと、書き込みや検索が多い際にファイルへアクセスするプロセスが待つ
時間が短くなると思うのですが、2度開くのでファイルを開くのとメモリに読み
込む時間がかかってしまうと考えています。
後者であれば、ファイルを開くのと読み込むのが一度なのでその時間が短く済
みますが、スキャンしている時間もファイルをロックしているので、プロセス
が待つ時間が長くなってしまうと考えています。

私の考えも含めて間違っている個所があれば、ご指摘いただければと思います。

0394nobodyさん2010/10/01(金) 20:42:40ID:???
>>393
> 間違っている個所があれば、ご指摘いただければと思います。
質問するスレを間違えている。

△▲ WebProg 初心者の質問 Part22 ▼▽
http://hibari.2ch.net/test/read.cgi/php/1272872528/

>>1
> Perlのコーディングで困ってる人のスレです。
>
> 【投稿する際の注意】
> 質問するときは内容をよく吟味してから投稿してください。
> 「コマンドの意味がわかんない」とかはマニュアル見ましょう。
> 回答者さんは何でも屋じゃありません。
>
> 1: 自分はこういう事がしたい。
> 2: それでこんな風にやってみたが・・・
> 3: こんなエラーが出て上手く行かなかった。
>
> 最低でも1と3が無いと誰も答えられないよ。
0395nobodyさん2010/10/01(金) 20:44:08ID:???
>>392
そのフラグっていうのもよくわからないんですよね・・
http://blog.livedoor.jp/dankogai/archives/51224106.html
http://blog.livedoor.jp/dankogai/archives/50828019.html
こういうのも読んだのですが・・。
03963932010/10/01(金) 20:46:44ID:???
>>394
ありがとうございます。
現在Perlの勉強をしているのですが、他の言語でも同じ問題があるんですね。

もう少し考えてみて、誘導していただいたスレッドに書き込もうと思います。
0397nobodyさん2010/10/01(金) 20:58:29ID:CSXq1VpS
>>391
顧客やショップの情報が決済代行業者経由で送信される際には暗号化通信が行われるため、情報の漏洩、改ざんなどの心配はないとある。
03983952010/10/01(金) 20:58:30ID:???
うーーーん。
いくら調べても分かんないです・・・

なんとなくは、フラグが付いているのはシステム内部のコードで
フラグが付いてないのは何なのか知りまへん。みたいな感じだっ
てことはわかったのですが・・。


use utf8で、そのフラグを付けることに何のメリットがあるのでしょうか・・。
0399nobodyさん2010/10/01(金) 20:59:58ID:CSXq1VpS
ちょっとね、ここの住人らのレスはおかしいと思う。
広くて深い知識をもちながらどうしてなんだ?嫌がらせ?初心者を却って迷わせてしまっているではないか。
それが熟練先輩のやることなのか?
0400nobodyさん2010/10/01(金) 21:05:36ID:CSXq1VpS
一見、熟練熟知なように思えるけど、
実はあまり実践体験は無いとかじゃないだろうね?
外の世界を知らないプログラムオタクとか。
なんだかなあ
0401nobodyさん2010/10/01(金) 21:11:54ID:5IgqgdH1
自演と来たかwww
0402nobodyさん2010/10/01(金) 21:12:43ID:???
すまん 俺までageちまった。
0403nobodyさん2010/10/01(金) 21:13:35ID:CSXq1VpS
知識と学習と理論武装してるのに限ってそのほとんどが実際の役に立っていなかったりするよくあること。
いい話もあったけど、遣りすぎは却って迷惑だよ。熟練の先輩らには後輩にとって役立つような、力を与えるようなレスを心がけてもらいたい。
そういう人なら尊敬できるんだけどね。
0404nobodyさん2010/10/01(金) 21:15:46ID:CSXq1VpS
>>401
自演と判断したかw
君のものの見方が知れるよ?
人を疑うクセか性質持ってるよね。人間不信?

信じるべきでない人を信じないのは妥当な判断だけど、
なんでもかんでも信じないのは単なるバカの一つ覚えだよ。
後者になるなかれ。
0405nobodyさん2010/10/01(金) 21:17:41ID:???
まずageつづけるのが自演の証拠だろ・・
せめて2ちゃんの使い方ぐらい覚えてこようや・・
0406nobodyさん2010/10/01(金) 21:19:06ID:CSXq1VpS
ここ、あげないとIDつかないじゃんかw
なんでこうなんだ?
04073982010/10/01(金) 21:28:02ID:???
ますますわからんくなってきました

Perlは内部コードとしてUTF-8を使っていて、utf8プラグマをつけるとプログラム内のリテラルは
内部コードのUTF-8として扱われる。んでもって、内部コードに合わせるために外からの入力文字列は
decodeを使って内部コードにする。外に出すときはencodeして好きな文字コードにする。
Perlの内部コードはUTF-8だけど、そとから入ってくるUTF-8とは違う・・。

でも、utf-8プラグマ使わなくてもUTF-8でコードを書いておけば処理は普通にできる。

わからん・・。


教えてけれ
0408nobodyさん2010/10/01(金) 21:38:08ID:CSXq1VpS
思うに、知識ばかりあって実践で役立てた経験の薄いヲタクだったのかな?
そういうのは迷惑だぞ。聞いたことの無い専門用語をたくさん知り使うことで自分の高い専門度に自己満足?みたいな。
けど、嫌がられないか?そういうのは。
他人をぶっちぎって悦に浸る車や単車の走り屋と同じだよ。他人より抜きん出ることで満足するガリベン野郎?みたいな。

一生家と塾の往復してろ。
0409nobodyさん2010/10/01(金) 21:39:59ID:???
IDが見えないからといってあげ続けてるのは、この板でお前くらいだろ。
残念だね
0410nobodyさん2010/10/01(金) 21:41:34ID:???
そか。
じゃさげるよ。

しかし、そういう時は さげてくれないか?と言いなさい。
現代人って他人に頼むってことができないんだよな。
0411nobodyさん2010/10/01(金) 21:42:07ID:???
頼まれないと自分から行動できないの?
残念だね。現代人は。
0412nobodyさん2010/10/01(金) 21:44:17ID:???
>>411
おれはあげてもいいと思ってる。
そういうこと言うならあげで続けるよ?
0413nobodyさん2010/10/01(金) 21:46:43ID:???
人に確認しないと何もできない。
残念だね。現代人君。
0414nobodyさん2010/10/01(金) 21:48:46ID:CSXq1VpS
そうか。それじゃあ自分に素直にあげでいかせてもらうよ。
0415nobodyさん2010/10/01(金) 21:49:48ID:???
なんでもかんでも人に報告しないといられない。
残念だね。現代人って。
0416nobodyさん2010/10/01(金) 21:50:49ID:CSXq1VpS
しかし、専門家じゃなくてヲタって陰湿で執拗だよね。
ちょっと不快な思いをさせると根に持つ
迷惑だね。困ったもんだ。
そのまま一生やってくつもりか?
みんなから迷惑がられて嫌われて死ぬのか?
0417nobodyさん2010/10/01(金) 21:51:28ID:???
>>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バイトのバイト列
みたいなかんじ
0418nobodyさん2010/10/01(金) 21:51:57ID:???
陰湿なのはインターネットで愚痴ってるやつだろ。
自分のことに気がついてないのね。
残念だね。お前。
0419nobodyさん2010/10/01(金) 21:52:04ID:CSXq1VpS
>>415
その調子だと会社じゃ上手くやってけないだろ?
今はフリー?それでも客はつかんだろ?
どの程度のプログラムが組めるんだ?作例は?
0420nobodyさん2010/10/01(金) 21:52:43ID:???
>>416
君は陰湿じゃないんだね。
なら本名とか住所とか書いたら?

自分の情報も出さないで、ぐちぐち言ってるのは陰湿じゃないの?

の?
0421nobodyさん2010/10/01(金) 21:53:38ID:CSXq1VpS
>>418
その人格からするに、最前線で人に接する仕事は無理だろうな。
それ以前に、他人と接するのも無理なのでは?
何年くらい今のその生活してるんだ?
0422nobodyさん2010/10/01(金) 21:54:39ID:???
あの。
ここはPerlスレなんで関係ないことは他でやってください。
0423Perl忍者 ◆M5ZWRnXOj6 2010/10/01(金) 21:55:34ID:OBUOwpHF
たくさんつれましたー!
0424nobodyさん2010/10/01(金) 21:57:19ID:CSXq1VpS
>>420
それは嫌だなあ。
陰湿で嫉妬深いきみのわるいのがいるから。
それに、他人のこといえるの?自分はやらんで。
0425nobodyさん2010/10/01(金) 21:59:10ID:???
荒らしに構うのも荒らし
0426nobodyさん2010/10/01(金) 22:00:57ID:???
>>417
ありがとうございます。
なんとなくその辺は理解できたのですが、そのバイト列と扱われるか文字として扱われるか
の違いはどういったことで表れるのでしょうか?



0427nobodyさん2010/10/01(金) 22:02:07ID:CSXq1VpS
広くて深い知識がありながら人格は幼いよな。
PCしか取り得のない頭でっかちなガリベン中学生みたいな印象だ。
こういうのには少しでも力もってもらいたいくないな。
0428nobodyさん2010/10/01(金) 22:06:23ID:???
>>426
それぞれに
$hoge =~ s/\B/-/g;
とかやって結果をみればわかると思うよ
0429nobodyさん2010/10/01(金) 22:44:18ID:CSXq1VpS
ここの人たちって自作でチャットとか作れる?
0430nobodyさん2010/10/01(金) 22:54:14ID:???
チャットとか難易度低めのほうだろ
0431nobodyさん2010/10/01(金) 22:57:24ID:CSXq1VpS
今一番作りたいCGIってどんなもの?
今まで作った一番難しいものは?
0432Perl忍者 ◆M5ZWRnXOj6 2010/10/01(金) 23:05:33ID:OBUOwpHF
>>431 >>427
話し方が似ててきもいから消えて
0433nobodyさん2010/10/01(金) 23:15:02ID:???
Perl忍者(^∀^)ゲラゲラ
0434nobodyさん2010/10/02(土) 00:05:53ID:???
このスレの推奨はオライリーなのに、
それが読めないバカが紛れ込んでハイレベルだっつっても
おまえがレベル低いだけとしかいえんわな
0435nobodyさん2010/10/02(土) 00:09:51ID:VTsDZ410
あんなでかくてクソぶ厚い本なんて読めるかボケが
少しは書籍側の欠点や反省点を指摘してみろっての。
ここは初心者スレだぞ。わかってんのかカス
0436nobodyさん2010/10/02(土) 00:11:25ID:???
たかだか300ページが分厚いって、普段本読まないのか?
新書でも200ページくらいあるだろ
0437nobodyさん2010/10/02(土) 00:32:53ID:???
いいからSSLで万全にして、サイトのURL貼っとけ。
クラックされなかったらお前の勝ちでいいんじゃね。
0438nobodyさん2010/10/02(土) 02:57:17ID:???
落ち着いたようなので・・・

die したときの出力先は STDERR でいいんですよね?
めんどくさいから常に utf-8 でいこうかなと思ってて・・・
0439nobodyさん2010/10/02(土) 03:52:41ID:???
何か沢山スレが進んだと思ったら
0440nobodyさん2010/10/02(土) 05:17:04ID:???
>>438
よくイマイチつかめないけど
die "fuck!";
ってかいたときにfuck!の出力先はSTDERRですよ
0441nobodyさん2010/10/02(土) 10:40:11ID:???
テンキュー!!
0442nobodyさん2010/10/02(土) 18:32:21ID:???
オライリーが難しいって
学校の授業も難しくてついていけなかったんだろなw
0443nobodyさん2010/10/02(土) 22:09:44ID:???
今まで問題が無かったんじゃなくて
問題があっても、客のせいにしてきただけじゃないのwwwww

くそわろたww
0444nobodyさん2010/10/02(土) 23:55:55ID:YMDWyyqc
そうすると、決済代行業者の言い分がおかしいのか?
危機意識が軽いのか?
0445nobodyさん2010/10/03(日) 00:03:59ID:YMDWyyqc
少なくとも、決済代行業者の説明を読む限り、
君らが言うような心配をする必要は無いと考える。
0446nobodyさん2010/10/03(日) 00:07:58ID:???
再登場wwww

ここはPerlスレッドですwwwwww


日本語も難しい技術ですかwwwwwwww
0447nobodyさん2010/10/03(日) 00:09:44ID:LIDo2XC6
やあ。^^
お迎えご苦労。
0448nobodyさん2010/10/03(日) 00:18:40ID:???
なんかこの人のサイトって法令にも順守してなさそう

そんなもの守ってなくても、逮捕されてませんよ? って開き直って。
0449nobodyさん2010/10/03(日) 01:10:55ID:???
SSLだから安全(キリッ と言いながら顧客情報ファイルをドキュメントルート内に置いて
世界中に公開する人っているよね。
0450nobodyさん2010/10/03(日) 01:59:17ID:???
>>449
許してやれよ……
0451nobodyさん2010/10/03(日) 08:56:17ID:???
perlってもう駄目だな。
質問スレでさえゴミみたいな煽りしかいない。
0452nobodyさん2010/10/03(日) 09:03:15ID:???
2ch がすべてと思ってるお前ってもう駄目だな
質問スレでさえゴミみたいなお前しかいない。
0453nobodyさん2010/10/03(日) 10:21:43ID:???
マジレスするとどんな奴が集まるかはスレタイ見れば猿でも分かるというのに
0454nobodyさん2010/10/03(日) 12:29:15ID:???
まともな質問さえあれば真剣に答えるよ
0455nobodyさん2010/10/03(日) 12:43:29ID:???
先のマジ吉の件も真剣な対応はされていた

質問者次第でしょ
0456nobodyさん2010/10/04(月) 01:01:42ID:???
古いCGIを見ていると、

hoge'foo()
のような書き方がありますが、これは
hoge::foo()
と等価と考えていいのでしょうか?

この書き方ははじめてみたのですが、最近は推奨されていない書き方なのですか?
0457nobodyさん2010/10/04(月) 01:10:03ID:???
perl4 style foo'bar
perl5 style foo::bar
0458nobodyさん2010/10/04(月) 01:20:44ID:???
ありがとうございます
Perl4の書き方なんですね。

シングルクオートはエディタのシンタックスが対応していないみたいなんで、
表示が乱れてあせりました。
0459nobodyさん2010/10/04(月) 10:26:36ID:pE0m1OKq
>>448
遵守すべき法令とはどんなものがあるか挙げてみよ。
0460nobodyさん2010/10/04(月) 10:27:41ID:???
>>459
飽きたからもういいよ
0461nobodyさん2010/10/04(月) 10:43:02ID:5t40Vj5P
なんだ言えないんじゃないかw
実は知らないのかな?あるいは、単に「法令遵守」って言いたかっただけなのかな?

SSL+レンタルカートでも駄目論者は自分の知識の高さをアピールしたいだけで、
法令遵守論者は自分は違法行為はやってないよってアピールしたいだけとみた。

実は関係法令なんて知らないのにね。
すごいすごいw
0462nobodyさん2010/10/04(月) 10:59:00ID:DXgsUZrn
このスレ住人ってひょっとしたら自分の知識自慢したい中学生かな
0463nobodyさん2010/10/04(月) 11:44:11ID:jxefQVkw
スルーに入ったね
0464nobodyさん2010/10/04(月) 13:25:42ID:???
アホはほっとくのが一番でしょ

法令があることも知らないというのは、さすがにやばいな。
誰か通報してくれないかな。
0465nobodyさん2010/10/04(月) 13:34:54ID:MhLBVfU1
して、触れる法令とやらは?
0466nobodyさん2010/10/04(月) 13:38:57ID:???
>>465
わからないのなら自分で調べたら?
法人なら知らないとマジでやばいよ。
弁護士でも、近くのWeb制作会社にでもいいから金払ってチェックしてもらった方がいい。

俺たちが教えても信じないだけだし、自分で行動して確認した方が確実でしょ?
0467nobodyさん2010/10/04(月) 13:57:28ID:???
相手にすんな。図に乗るだけだから。

こういうやつは一度痛い目にあわんとわからん。


以後放置でお願いします。
0468nobodyさん2010/10/04(月) 14:14:40ID:???
自演乙
0469nobodyさん2010/10/04(月) 14:16:28ID:???
なぜばれたし
0470nobodyさん2010/10/04(月) 14:40:44ID:???
なんか荒れてますね。

ところで今日知ったんですが
qw/aaa bbb ccc/に対して、
/.+?\s/でマッチすると、"aaa "にマッチするんですね
てっきり、"a "かと思っていました

どういう理屈なんですか、教えてください
0471nobodyさん2010/10/04(月) 14:42:35ID:???
いちおう補足すると、"aaa "にマッチしたいような場合、
/^.+?\s/と今まではしていたんですが、
^いらなかったんだなぁ、と
0472nobodyさん2010/10/04(月) 14:45:49ID:???
. 任意の1文字(改行除く
+ 直前のパターンの1回以上の繰り返し
0473nobodyさん2010/10/04(月) 15:11:06ID:???
>>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"
0474nobodyさん2010/10/04(月) 15:11:23ID:???
/.+\s/ だと貪欲に "aaa bbb " までを食うのは言うまでもないが、
いわゆる最短マッチ、/.+?\s/ とした場合の .+? は最初に \s(空白文字)見つかるまでという意味での最短であって、
マッチの開始位置が最初にマッチした任意の文字(先頭)であることに変わりはない。
0475nobodyさん2010/10/04(月) 16:51:33ID:qA0vUoH8
>>466
知識もないくせに知ったかぶりをするのはやめなさい。
見苦しいですよ?
0476nobodyさん2010/10/04(月) 16:59:31ID:???
よくわかってない人が間違うもとだから最短と呼ぶのはやめよう。
「貪欲でない」といわれればなんだそりゃと思って調べるけど
最短といわれるとわかった気になっちゃうからな。
0477nobodyさん2010/10/04(月) 17:12:45ID:???
なんでPerlの正規表現がちやほやされてるの?
そんなにすごいの?
0478nobodyさん2010/10/04(月) 17:31:14ID:???
>>473-474
は初心者が分かりやすい説明なのか?
人に説明するなら相手にわかり易い説明をなさい。
あなたは道端で人に道を教える時も難解な説明をするのかね?
0479nobodyさん2010/10/04(月) 18:03:40ID:???
ここは道端だったのか……
0480nobodyさん2010/10/04(月) 18:04:08ID:???
>>478
お前がわからんだけだろ。
0481nobodyさん2010/10/04(月) 18:10:59ID:???
ああわけわからんよ。
初心者なんでね。
いつからここは熟練者スレになったのかね?
0482nobodyさん2010/10/04(月) 18:13:45ID:???
perlってもう駄目だな。
質問スレでさえゴミみたいな煽りしかいない。
0483nobodyさん2010/10/04(月) 18:18:19ID:???
>>481
君が質問者だったらもっと丁寧に質問するが
君は質問者じゃないだろ?

質問があれば質問者のレベルに応じて解答する
今回の場合は質問者は正規表現の書き方を理解しているので、
そのデバッグ手法を説明しているだけ。

君のたとえで言うと、
道端で道を聞かれても、その人を対象にではなく
3歳児を対象に「右」がどっちかっていう説明から始めるのと同じ。


粘着なんてしてないで、XSSについて調べてきたら?
0484nobodyさん2010/10/04(月) 18:35:22ID:???
>>483
おいおい、どうしておれがXSSについて調べる必要があるんだい?
0485nobodyさん2010/10/04(月) 18:46:52ID:???
そうね。
XSSより前に、本を読む練習からしないとね。

のんたん何かどうだ?
0486nobodyさん2010/10/04(月) 18:49:24ID:???
? は ?に続く文字が見つかった時点までマッチ

と思ってりゃいいよ
0487nobodyさん2010/10/04(月) 18:51:11ID:???
バーバーパパの方がオススメだろ
0488nobodyさん2010/10/04(月) 18:51:43ID:???
千秋ディスってんじゃねーぞ子ら
0489nobodyさん2010/10/04(月) 18:53:49ID:???
>>485
どうしておれが本を読む練習をしないといけないんだね?
0490nobodyさん2010/10/04(月) 19:40:20ID:???
スルーしろよ……耐性足りんぞ
0491nobodyさん2010/10/04(月) 22:30:47ID:???
はいはいリファレンスはポインタみたいなもんだよ
ひとりで完璧に安全なプログラム作れる天才さんはこれで理解したろ?
さっさと糞脆弱なショッピングカートでもなんでも作ってなさいってこった
0492nobodyさん2010/10/04(月) 22:56:59ID:???
ちげーよバカw
0493nobodyさん2010/10/04(月) 23:19:29ID:???
いやまあその名の通り参照なんですけどね
0494nobodyさん2010/10/05(火) 00:02:50ID:???
なんかこう...教えてるつもりの奴が馬鹿しかいなくなった。
0495nobodyさん2010/10/05(火) 00:30:28ID:cRXiRLz+
プロの熟練者さんはどのレスとどのレスが同一人物なのかわからなくなってるようで。
さすがですね。プ
04964702010/10/05(火) 01:31:17ID:???
>>473-474
よく分かりました。
なにを勘違いしていたのかわかりました。
(qwとqqを書き間違えたのはご愛嬌で)
0497nobodyさん2010/10/05(火) 03:45:37ID:???
毎晩このスレを見るのが楽しみになりそう

バカな人間を見て、自分はこうならないようにと頑張れる

・知ったかぶりをしない
・わからないことは素直に聞く
・人に言われたことは、疑わずに調べる
・自分の知識を過信しない
・必死にならず冷静に
・日々勉強をする
・分厚い本を読む
・自演はばれないようにする

これは肝に銘じておこう
0498nobodyさん2010/10/05(火) 07:39:14ID:???
出来ればコテつけてほしい
NG出来ない
0499nobodyさん2010/10/05(火) 08:55:44ID:???
読まなきゃいい
0500nobodyさん2010/10/05(火) 12:33:50ID:???
こんなことを言われました

Perl使いが何十億人もいるのに今からPerlを覚える必要はない
やるならPythonかRubyやれ

本当ですか?
0501nobodyさん2010/10/05(火) 12:56:06ID:???
うそです。

> Perl使いが何十億人もいるのに
そんなにいません

> 今からPerlを覚える必要はない
でも、もしそんなにたくさんいたとしても、
だから覚える必要はないということはありません。
「英語を使える人は10億人を超えるのに、今から英語を覚える必要はない」
と言われたらあなたはそれに納得しますか?

> やるならPythonかRubyやれ
この3つはそれぞれ有用です。
職業プログラマーになりたいんだったら全部やりましょう。
趣味でちょっとしたものを工作するならどれか一つでも構いません。
どれをやってもあなたの世界は広がります。

暇だから、gizmodo翻訳風に釣られてみた。
0502nobodyさん2010/10/05(火) 13:03:00ID:???
それぞれの質問スレを覗いてみるのも有用かと。
スレの雰囲気や回答者の質など。
0503nobodyさん2010/10/05(火) 13:03:19ID:???
>>501先生ありがとうございます
Perl,Python,Rubyを覚えるとしたらどの順番で覚えたほうがいいでしょうか?
0504nobodyさん2010/10/05(火) 13:04:56ID:???
N88BASIC
0505nobodyさん2010/10/05(火) 13:37:27ID:tVnNPBxi
その日が祝日だった場合は赤い文字で祝日の名称を表示したいのですが、
祝日ってかならずしも定日ではないんですよね。第二日曜日とか第三とか。
こういう場合はみなさん、どう振り分けていますか?
0506nobodyさん2010/10/05(火) 13:43:00ID:???
春分秋分みたいにかんたんな規則じゃ求まらないのがある以上は
祝日データを持つしかないと思う。
0507nobodyさん2010/10/05(火) 13:44:06ID:tVnNPBxi
つまり、毎年1年分の休日データを手動で更新するってこと?
0508nobodyさん2010/10/05(火) 13:50:36ID:???
そう。気の利いたアプリなら祝日データ配信機能をもたせてどっかkら
配ったりするかも。あるいは自動バージョンアップ機能に含めるとか。

なんしろ勝手に法律かわったり天皇が代替わりしたりするわけで計算
じゃどうにもならんよ。
0509nobodyさん2010/10/05(火) 13:59:52ID:???
第二月曜とか第三月曜とかくらいまでは計算でなんとかならんかな?
0510nobodyさん2010/10/05(火) 14:33:00ID:???
振替休日の判定式も忘れないでね。
去年のシルバーウィークは
まともに休日表示されてないカレンダーが多かった。
0511nobodyさん2010/10/05(火) 14:38:28ID:???
SWはいらないよ。
http://ja.wikipedia.org/wiki/%E3%82%B7%E3%83%AB%E3%83%90%E3%83%BC%E3%82%A6%E3%82%A3%E3%83%BC%E3%82%AF
0512nobodyさん2010/10/05(火) 15:04:31ID:???
Calendar::Japanese::Holiday
0513nobodyさん2010/10/05(火) 16:32:15ID:???
モジュールってやつですか?
use で使えばいいのかな?
ググレカスですかそうですか。
0514nobodyさん2010/10/05(火) 19:15:19ID:???
土日を含まない祝日に挟まれた平日は祝日

だっけ?

めんどくせぇなぁww
0515nobodyさん2010/10/05(火) 19:17:52ID:???
毎年祝日データを載せてるサイトがあればそこから毎年抽出すればいいと思うが
0516nobodyさん2010/10/05(火) 20:08:05ID:???
プログラマに「祝日」という言葉はない!!

「客から電話がかかってこない日」ならある
0517nobodyさん2010/10/05(火) 22:22:50ID:???
それは業務的話ねwwwwwwwwwwwwwwww
0518noboby2010/10/06(水) 02:25:55ID:???
つ holiday.pl
0519nobodyさん2010/10/06(水) 03:11:04ID:???
ENDLESS BATTLEっていう8年前くらいに流行ったCGIゲームの質問なんですが
人を表示させるときの配列を下記のように、DBの格納順で設定しています
while (($Key,$Value) = each %P){
@VS_VALUES = split(/\s/,$Value);
これをランダムにするのはどうすればいいんでしょうか?
どうかお願いいたします。
0520nobodyさん2010/10/06(水) 03:56:29ID:???
>>519
>>1
【 スクリプト改造依頼スレ】(丸投げ) part7再々
http://hibari.2ch.net/test/read.cgi/php/1222645553/
★三 【 スクリプト改造工房 PART 9 】 ★三
http://hibari.2ch.net/test/read.cgi/php/1143834740/
金出すから改造してよvol.3
http://hibari.2ch.net/test/read.cgi/php/1162147035/
0521Perl忍者 ◆M5ZWRnXOj6 2010/10/06(水) 07:41:58ID:2XmazIev
俺の影響うけてPerlうちこみだしたやつがうざい


俺が知ってる中では100人ぐらいが俺の影響うけてPerlとかわめいてやがる
まじうぜえんだが もともとPHPやってるウンコどもも俺の影響でPerlやりだしたし

俺がJPAに献上してるってことあいつらは

だけどあいつらは俺の真似ばっかりしてくんだよ 模倣 アイディアとか発言とか
知ってるプログラマとかも

本当うざくてうざくてたまらねえわほんとに
0522Perl忍者 ◆M5ZWRnXOj6 2010/10/06(水) 07:43:12ID:2XmazIev
もともとドラクエやってるのに

横からFFやってたやつがドラクエやりだして熱弁しだすのがきにくわねえ

本当消えろ!!
0523nobodyさん2010/10/06(水) 10:09:00ID:???
>>519
そういう枕をつけるから相手にしてもらえなくなるわけだな。

一行目のeach %Pをperlが勝手に決めた順番じゃなくてランダムにしたいのか、
二行目の@VS_VALUESの中身の並び順をランダムにしたいのかどっちだか
よくわからんが、とりあえずList::Utilのshuffleでなんとかなるんじゃね?
0524nobodyさん2010/10/06(水) 11:06:02ID:???
やりたいのは%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 );
スクリプトエラーはでてないのですが、実際に入れてみたところ二つともダメでした

0525nobodyさん2010/10/06(水) 11:09:36ID:???
keys %Pをshuffleして使え。
0526nobodyさん2010/10/06(水) 11:41:28ID:???
こんな感じに書き換えればおk

foreach $Key(shuffle keys %P){
$Value = $p{$Key};
@VS_VALUES = split(/\s/,$Value);
0527nobodyさん2010/10/06(水) 12:59:05ID:???
Perl文法エラーがでてしまいますね
sub shuffleを使ってみようかと思ったんですがその場合whileとforeachどっちのほうが良いんですか?
0528nobodyさん2010/10/06(水) 13:15:31ID:???
whileとforeachじゃ全く働きが違うわけだが。そのくらいの
判断もつかないようだともう少しちゃんと勉強して出直した
方がいいレベル
0529nobodyさん2010/10/06(水) 13:40:19ID:???
<?PHP
shuffle($key);
foreach $Key (keys %P){
@VS_VALUES = split(/\s/,$P{"$Key"});
}
?>
0530nobodyさん2010/10/08(金) 00:03:35ID:???
PHPじゃダメだろ

use List::Util;
@key = List::Util::shuffle %P;
%P = @key;
while (($Key,$Value) = each %P){
@VS_VALUES = split(/\s/,$Value);
}


こんなところか
0531nobodyさん2010/10/08(金) 02:02:37ID:???
ハッシュのキーも値も一緒くたにする勢いで shuffle しなくてもいいんじゃないか。
0532nobodyさん2010/10/08(金) 05:36:21ID:???
perl構文です。hashをshuffleして取り出したいのですが・・・ - Yahoo!知恵袋
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1248240982
0533nobodyさん2010/10/08(金) 08:02:19ID:???
>>526
>>529
>>530

Perl勉強し直した方が良いんじゃね?
0534nobodyさん2010/10/08(金) 08:44:20ID:???
>>533
模範解答よろ
0535nobodyさん2010/10/08(金) 14:48:28ID:???
この前の天才CGIショップ運営者はどうなったの?
問い合わせしておんなじコト言われた?

問合せ先の業者がかわいそうだな。ごねてんだろうな。
0536nobodyさん2010/10/08(金) 14:54:36ID:???
>>534
529と530はまるでだめだが526は大筋問題ない。
「}」の省略とpの大文字小文字間違いぐらいは
自分で修正しろw
0537nobodyさん2010/10/08(金) 16:10:19ID:???
foreachにshuffleとか使えないですしおすし
0538nobodyさん2010/10/08(金) 16:17:58ID:???
>>537
使えるよ。List::Utilをuseしてないとか言いたいのかな。
List::Utilのshuffle使おうって話の流れなんだから
そのぐらいは補えよ。
0539nobodyさん2010/10/08(金) 17:16:58ID:???
useが省略されてても

foreach $Key(List::Util::shuffle keys %P){
@VS_VALUES = split(/\s/,$P{"$Key"});

こうだろ
ただVALUESの値が取得できてないな
0540nobodyさん2010/10/08(金) 17:31:48ID:???
requireしなくての使えるの?
0541nobodyさん2010/10/08(金) 18:16:41ID:???
>>1
0542nobodyさん2010/10/08(金) 18:31:51ID:???
>>539
use List::Util 'shuffle'; はナシですか
0543nobodyさん2010/10/08(金) 18:44:08ID:???
ハッシュって初めから乱数でランダム格納されてるんじゃなかったっけ
0544nobodyさん2010/10/08(金) 18:57:03ID:???
>>543
順番は保証されてないけど、同じ環境で実行するとたぶん同じ順番になるから
毎回違う順番にしたいって時にはshuffleしたキーを使わなきゃだめ
0545nobodyさん2010/10/08(金) 19:10:44ID:???
>>544
実行時にランダマイズが必要なのはその通りだが
http://perldoc.perl.org/perl581delta.html#Hash-Randomisation
http://fleur.hio.jp/perldoc/modules/perl/perl-5.8.8/pod/perl581delta.mix.html#Hash_Randomisation
0546nobodyさん2010/10/08(金) 19:13:53ID:???
>>545
うーん読んでるとシャッフルは必要ないように思ったんだけど、どうだろう
5.81以前を使っているのかな
0547nobodyさん2010/10/08(金) 19:46:58ID:???
>>542
多分ダメじゃない?

HASHには最初にランダムに格納されるだけだから、ちゃんと回さんとダメ
05485442010/10/08(金) 20:02:12ID:???
俺の環境だと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
};
0549nobodyさん2010/10/08(金) 23:25:53ID:???
ちゃんとシャッフルしてやらんと
0550nobodyさん2010/10/08(金) 23:33:31ID:???
>>539
ワロタw
0551nobodyさん2010/10/09(土) 02:53:43ID:???
>>535
サポートの姉ちゃんに粘着してんだろ。
察してやれ。
0552Perl忍者 ◆M5ZWRnXOj6 2010/10/09(土) 19:21:18ID:7nxLhNm/
はじめまして

GD::GraphがJcode使っててむかつくので

なんかグラフ表示させるやつ教えてください
javascriptでもいいですか?教えてください
クソコテですが まじめに教えてください
0553nobodyさん2010/10/09(土) 19:23:06ID:???
マルチしね
0554Perl忍者 ◆M5ZWRnXOj6 2010/10/09(土) 21:58:06ID:7nxLhNm/
俺は死なない…たとえ肉体は滅んでも俺の遺志を継ぐものが必ず立ち上がり、そして松本ひろゆき、Rubyたちを倒す!
0555nobodyさん2010/10/09(土) 23:06:01ID:???
de?
0556nobodyさん2010/10/10(日) 02:11:40ID:???
シャッフルは俺の得意分野

use List::Util 'shuffle';
foreach $Key(shuffle keys %P){
@VS_VALUES = split(/\s/,$P{"$Key"});
}

HASHはランダムに納められてるだけでランダムに表示されるわけではない
0557nobodyさん2010/10/10(日) 14:38:29ID:???
>>556

>>526
0558nobodyさん2010/10/10(日) 18:34:10ID:???
list.txt内にユーザーID:名前と記録してるのですが、
この中から名前を検索して、リンクのさいにuser.cgi?=ユーザーIDとしたいのですが、どのように書けば良いのでしょうか?
0559nobodyさん2010/10/10(日) 19:31:01ID:???
>>558
>>1
依頼されたツールを誰かが作るスレ
http://hibari.2ch.net/test/read.cgi/php/1078997682/
金出すからスクリプト作ってよvol.1
http://hibari.2ch.net/test/read.cgi/php/1150508106/
0560nobodyさん2010/10/14(木) 13:38:00ID:???
メールフォームの開発の話。
最初はGETメソッドで開発して、
最後にPOSTに変更するとやり易いなあと。
クエリーがアドレスバーに表示されるので、渡すデータやキーを確認できるから。
これまでは$queryで処理結果ページに表示してた

そう思わない?
みんなどうしてる?

日本語スマソ
0561nobodyさん2010/10/14(木) 14:36:32ID:???
>>560
>>1
【総合】 Webprog板質問雑談スレッド 1
http://hibari.2ch.net/test/read.cgi/php/1131016915/
開発環境おしえて
http://hibari.2ch.net/test/read.cgi/php/1171452901/
スクリプト言語と開発効率について
http://hibari.2ch.net/test/read.cgi/php/1177517787/
生産性、効率性を重視した開発環境
http://hibari.2ch.net/test/read.cgi/php/1005486101/
0562nobodyさん2010/10/15(金) 16:50:22ID:1IbFyG9F
DBIでmysqlのblob型に入ったテキストを取り出したいのですがテスト環境ではうまくいくのですが

本番環境では文字化けしてしまいます。Mysqlのバージョンは5.1.34です。

テキストはUTF8でバイナリデータとしてはきちんと入っていました。

Blob型からデータを取り出すときには何かしないといけないのでしょうか?
0563nobodyさん2010/10/16(土) 10:56:52ID:???
取り出すときにset names utf8とかすれば?
0564nobodyさん2010/10/16(土) 12:03:58ID:???
>>563
接続時はSET NAMES utf8としていますが

SQLの実行直前ですか?

ぐぐるとSET NAMES binaryとしている人もいるようです

0565nobodyさん2010/10/16(土) 12:15:08ID:4m15JmGp
>>563
ナイスヒントでした。

SET NAMES utf8ではだめでしたが直前でSET NAMES binaryを入れたところ化けないようになりました。

blob型を使うときは切り替えないといけないんですね

0566nobodyさん2010/10/17(日) 15:28:24ID:???
>>560
好きな方法使えばいいよ。
0567nobodyさん2010/10/19(火) 10:27:12ID:???
use LWP::UserAgent;



require LWP::UserAgent;

とは同じということでよろしいかな?
0568nobodyさん2010/10/19(火) 10:33:23ID:???
下の方法で呼べるっけ?
0569nobodyさん2010/10/19(火) 10:33:56ID:???
そう書いてあるHPがあるんだ。
意外だた。
0570nobodyさん2010/10/19(火) 10:38:28ID:???
動作が違うけどそれでもよろしければ。
0571nobodyさん2010/10/19(火) 10:40:06ID:???
>>567
違うのはimportの有無と読み込みタイミングだが、LWP::UserAgentは
$ua = LWP::UserAgent->newしたら$uaのメソッド呼ぶだけだから普通の
使い方なら特にimportしなきゃいけないもんないしな。どっちでもいいん
じゃない?
0572nobodyさん2010/10/19(火) 10:41:05ID:???
SYNOPSYSにも

require LWP::UserAgent;

ってなってるしな。
05735672010/10/19(火) 10:42:31ID:???
このスレすごい。(;´∀`)
0574nobodyさん2010/10/19(火) 11:17:20ID:???
は〜わかんね。perlのモジュール。(;´Д`)
0575nobodyさん2010/10/19(火) 11:43:50ID:???
sprintf("%d", 680*1.4)
が951になる理由を教えてくれ
0576nobodyさん2010/10/19(火) 12:10:30ID:???
理由はわからんなぁ。。でもそういう内部処理を解説してるサイトどっかで見た
1.4が少数部持ってるから掛け算した結果も小数部を持つ952
これを%d整数としてはめ込むときにどうにかしてるんだから (680*1.4) . ''で
一旦文字列にすれば952になるだろうね
0577nobodyさん2010/10/19(火) 12:16:23ID:???
掲示板作ってるのですが、なぜ2ちゃんねるはdatファイルでログを作成しているのでしょうか?
textファイルじゃダメなんでしょうか?
2ちゃんねるのログをそのままtextファイルを使用した場合のデメリットなどがあったら教えてください
0578nobodyさん2010/10/19(火) 12:17:24ID:???
>>575
丸め誤差でぐぐれ
0579nobodyさん2010/10/19(火) 12:23:44ID:???
>>577
ただのテキストだと本文に他の記事をコピペされると記事の区切りとか
わかんなくなったりするので、はっきり区別がつくように特別な約束を決めて
あるわけだな。
0580nobodyさん2010/10/19(火) 12:24:07ID:???
2ちゃんねるのログはテキストファイルだよ。
0581nobodyさん2010/10/19(火) 13:11:09ID:???
そういや今ふと思ったんだが2chといい何で今の掲示板には必ずといっていいほど
メール欄[ ]
↑これがあるけど、需要ねぇだろコレ
マジ何でほぼ全ての掲示板に共通してあるんだよ
0582nobodyさん2010/10/19(火) 13:27:15ID:???
事実上sageって書く欄になってしまってるがいきなり名前を変えたら
混乱するからな。
0583nobodyさん2010/10/19(火) 13:42:10ID:???
拡張子なんて飾りです……偉い人にはそれが分からんのですよ
05845752010/10/19(火) 18:46:36ID:???
機械の中は2進数の世界というのが理由か
680*14/10 として小数を使わなければいい
よくよく考えてみたら当たり前の話だな


intで切り捨てとかsprintf使えとか言うてるサイトは死滅してくんねーかな
0585nobodyさん2010/10/19(火) 18:55:35ID:???
自分の知識の無さを放っておいて氏ねですかそうですか
0586nobodyさん2010/10/19(火) 19:08:01ID:???
int も、 sprintf も、POSIX qw(floor) も、「0.5 足せ!」も、
浮動小数点の丸め誤差を理解出来てない奴が、
適当に解説するのは止めてくれ!と心底思うが

584に言われたくは無いだろーなあ。
0587nobodyさん2010/10/19(火) 22:56:38ID:???
みなさん、モジュールについてはどう学習していますか?
書店で関係書籍を見る限り、モジュールについて詳しく書かれている書籍はほとんど無いと思うんですが。
やっぱりCPANを直接読むんですか?英語だと思うんですが・・
0588nobodyさん2010/10/19(火) 22:58:42ID:???
>>581
いやあ、私は時々使いますよ。
運営側としては名前もメール欄も使うべきものなんだと思ってます。
多くの人が使わないようだけど、本来は使ってしかるべき機能かと。

名前も連絡先も明らかにせずにいきなり話に入るなんていうのがリアルで当然にはなって欲しくないです。
0589nobodyさん2010/10/19(火) 23:04:52ID:???
>>587
山程ある
0590nobodyさん2010/10/19(火) 23:10:44ID:???
>>589
モジュールに詳しい書籍はほとんど無いかと。
載っているものはあるにはあるけど。
0591nobodyさん2010/10/19(火) 23:11:55ID:???
そんなに難しい英語でもないだろう…
あとはperldoc.jp
0592nobodyさん2010/10/19(火) 23:12:03ID:???
>>590
いや、だから山程あるっつーに。
0593nobodyさん2010/10/19(火) 23:12:07ID:???
>>587
英語ぐらい読めよ。技術文書はそんなに難しくないぞ。特にコンピュータ系の
専門用語は英語そのままカタカナにしたのが多いから楽だよ。
0594nobodyさん2010/10/19(火) 23:14:58ID:???
今、モジュールについて学んでいるんですが、
何か良い書籍はありませんか?
知りたいのは主に以下のもの

CGI
LWP::UserAgent
HTTP::Request
Jcode
XML::DOM
XML::Parser

0595nobodyさん2010/10/19(火) 23:19:46ID:???
全部ネットで情報が得れる
0596nobodyさん2010/10/19(火) 23:20:48ID:???
>>587-595
>>1
【Perl,CGI】参考書籍 第四版
http://hibari.2ch.net/test/read.cgi/php/1250989562/
参考書籍推薦スレッド
http://hibari.2ch.net/test/read.cgi/php/1014836425/
【総合】 Webprog板質問雑談スレッド 1
http://hibari.2ch.net/test/read.cgi/php/1131016915/
0597nobodyさん2010/10/19(火) 23:31:32ID:???
あれ、以前、検索エンジンからの検索語を取り出す話をした時に、
エンジンによって振り分けて処理するしかないって結論になってなかったっけ?
Jcodeモジュールでできるのでは?
0598Perl忍者 ◆M5ZWRnXOj6 2010/10/19(火) 23:36:59ID:I4QlovXi
検索力がない奴はモジュール使えない
0599nobodyさん2010/10/19(火) 23:40:37ID:???
あららw Jcodeモジュールで文字化けもあった検索語の抽出が一気に直ってしまったw
これって検索エンジン毎に分岐しなくてもいいんじゃないかな?
以前、質問したら自信満々に 「エンジン毎に分けるしかないでしょうね」 とか言われたけど、
そんなことないじゃないか。
0600nobodyさん2010/10/20(水) 00:01:49ID:???
スゴイw
何行にも渡って処理していた日本語変換が2行ほどになってしまったw
モジュールスゴイね。(;´∀`)
0601nobodyさん2010/10/20(水) 01:36:24ID:???
今時Jcode.pmかよwって思ったけどなんでEncode.pmが使われるようになったの?
日本語の変換するならJcode.pmで十分実用に足るんじゃないの?
0602nobodyさん2010/10/20(水) 02:33:30ID:???
え、今時って、Jcodeよりもっといいものがあるってこと?
充分に単純化できてるし、効果も得てるんでこれでいいと思ってる。
2行を1行に出来たところでさしたる差はないから。

Encodeは正直まだどういうものなのかわかってない。
文字コード変換と日本語変換の違いなのかな?って想像してる。
0603nobodyさん2010/10/20(水) 02:58:27ID:???
Perlが5.8.1以降の場合、JcodeはEncodeのラッパーとして振る舞います。
0604nobodyさん2010/10/20(水) 05:24:47ID:???
>>602
初心者だったらJcode.pm使うよりは素直にEncode使ったほうがいいような気も。
Jcode.pmを使ってるサンプルスクリプトは、
pre-modernで参考にしない方がいいものも結構あるし。
0605nobodyさん2010/10/20(水) 07:06:43ID:???
Encodeは文字列をバイトストリームでなく文字(Unicode)として認識させたいときに使うのかな?

$string =~ tr/一二三/壱弐参/;
0606nobodyさん2010/10/20(水) 08:28:58ID:???
それはuse utf8の仕事ではなかろうか
0607nobodyさん2010/10/20(水) 11:33:27ID:???
ちなみに、Jcodeを使っているのは自作のアクセス解析
これまではjcode.plやutftosjisとかを検索エンジン毎に分岐し、更にキーワードが入ったパラメーター名毎に分岐して入手していました。
モジュールJcodeを使ったら何十行にも渡っていたものが短い2行に。
モジュールの威力を知った。
0608nobodyさん2010/10/21(木) 02:33:10ID:???
Emacs使ってる人いる?
すごい高機能なんだって?本で知って興味持ってる。
昨日話したJcode、その後も順調に機能してるよ。以前はどうしても文字化け出てきちゃうのもあったんだけど、
いまやほとんど無し。

ありがたやありがたや。
0609Perl忍者 ◆M5ZWRnXOj6 2010/10/21(木) 07:33:22ID:im6AkfLS
得意気にEmacs使いほざいてても
成果物がクソとかプログラミングもクソなやついるから

あーあーあのubuntu厨見たいなかんじですね(笑)
0610nobodyさん2010/10/22(金) 11:45:08ID:???
そっか
Emacsと言っただけで ほざいてる とか言われるわけか、参ったな。
話に聞いただけでまだこれから試すか否かなんだけどね。
体験者がいたら話聞いてみたいなと。
0611Perl忍者 ◆M5ZWRnXOj6 2010/10/22(金) 16:50:09ID:1atSZw6K
Emacs興味もってるから死ねよ
0612Perl忍者 ◆M5ZWRnXOj6 2010/10/22(金) 16:54:37ID:1atSZw6K
ごめん
0613nobodyさん2010/10/22(金) 18:49:56ID:???
講義で課題が出たのですがわからないので質問していいですか?
よろしければ問題文を張るので協力御願いします。
あと、もし他に相応のスレがあるなら誘導御願いします。

0614nobodyさん2010/10/22(金) 18:54:45ID:???
宿題は自分でやれ
0615nobodyさん2010/10/22(金) 20:01:30ID:???
相応のスレぐらい自分で探せ
0616nobodyさん2010/10/23(土) 02:05:49ID:???
Perlの宿題スレってなくね?
貼ってくれたら俺はやるよ。
なんか宿題とかそういう下らないことしたい気分だし。
0617nobodyさん2010/10/23(土) 07:53:35ID:???
俺もニートだから宿題やるよ
0618nobodyさん2010/10/23(土) 09:58:15ID:???
凝った使い方せずとも、そろそろ db ぐらいは使えたほうがいいのかな?と思い始めた。

MySQL とか PostgreSQL とかのセットアップがめんどくせーw

もっと、ちゃちゃっとセットアップできるの無いのかしら?
0619nobodyさん2010/10/23(土) 10:00:59ID:???
sqlite?
0620nobodyさん2010/10/23(土) 12:42:59ID:???
>>616-617
いろんな言語で宿題 第五編
http://hibari.2ch.net/test/read.cgi/tech/1276873238/
0621nobodyさん2010/10/23(土) 13:52:50ID:???
>>618
慣れの問題だからがんがれ
0622nobodyさん2010/10/23(土) 14:35:31ID:???
>>618
俺もそう思って2年前にDBの勉強をしたけど、結局使うことなく今はさっぱり忘れてしまったw
0623Perl忍者 ◆M5ZWRnXOj6 2010/10/23(土) 16:46:29ID:21A5e235
DBすら使えないとかごみ
0624nobodyさん2010/10/23(土) 17:52:56ID:???
なんだかんだでDB使ってるなあ
自前でデータ保存読み込みのコードを書くより楽だから
0625nobodyさん2010/10/23(土) 19:48:57ID:???
テキストファイルはシステムもクソもないから、ファイルが生きてれば運用可能。
DB はシステムが逝くと使い物にならない。
こうゆう部分で二の足踏んでる。
0626nobodyさん2010/10/23(土) 20:01:46ID:???
DBを使わなくて、トランザクションを保証するシステムできるのか?
0627nobodyさん2010/10/23(土) 20:52:18ID:???
そこまでクリティカルなの作らないし・・・
0628nobodyさん2010/10/23(土) 22:49:15ID:???
webアプリなら用途にもよるがKVSでもいけるな
0629nobodyさん2010/10/23(土) 23:32:08ID:???
>>616 617
ありがとうございます。本当にわからなくて困っていたのでお願いします。

問題:関数のfactorial、area_circle、wrapitを使って出力が得られるよう
主モジュールを作成せよ。(関数と一体になった完全なプログラム)
(テキストp03176.plの青春の詩YOUTHを用いる)
0630nobodyさん2010/10/23(土) 23:33:10ID:???
下記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文字以上の長さの単語の出現状況
------------------------------------------
0631nobodyさん2010/10/23(土) 23:34:34ID:???
総単語数 = $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.
0632nobodyさん2010/10/23(土) 23:46:36ID:???
>>620で誘導されてんだからそっちでやれや。
0633nobodyさん2010/10/25(月) 20:02:17ID:???
>>629-631
検索エンジンも使えないの?
その問題は具体的にfactorial、area_circle、wrapitがどういうルーチンなのかわからないと解けないんだよ。
factorial、area_circle、wrapitがどういうルーチンかはわかっているんでしょ?
だったらそれを書いた後に、名前から勝手に想像するが、
print factorial(5);
とかやってみればいいじゃない。
0634nobodyさん2010/10/26(火) 23:13:25ID:???
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ファイルが出力されるので単に渡される文字列が正しくないことが原因だと思うのですが・・・
どのように修正すればよいのかご教授ください、よろしくお願いします
0635nobodyさん2010/10/28(木) 22:26:44ID:???
my $in = new CGI;
my $param = $in->param('abc');

abc が渡されてなければ、param の結果は undef でいいんですよね?
0636Perl忍者 ◆M5ZWRnXOj6 2010/10/28(木) 22:28:11ID:oSh7LqBC
しってるのにきくんじゃねえよ

老人? 確認するための老人?
0637nobodyさん2010/11/04(木) 14:47:19ID: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
のように各行で最初にマッチした数字しか取り出せません。
どのように修正したらいいか教えてください。お願いします。
0638nobodyさん2010/11/04(木) 15:01:07ID:???
if->while
06396372010/11/04(木) 15:13:27ID:???
>>638さん

できました!ありがとうございます。
0640nobodyさん2010/11/04(木) 15:13:30ID:???
open(IN, '<', 'teigi.txt');
my $text;
read(IN, $text, (-s IN));
close(IN);

my @data = $text =~ /\[ (\d+?) \]/gs;

print join("\n", @data);

exit;

06416372010/11/04(木) 15:19:36ID:???
>>640さんが示してくださった方法でもいけました!

ありがとうございます。
0642nobodyさん2010/11/05(金) 21:30:27ID:???
iniファイルを読み書きするConfig::Simple;を使っていて、質問があります。
$cfg->param(-block=>'hoge', -values=>{'time'=>time()});
とするとブロックを追加でき、
$cfg->param(-block=>'hogel');
でブロックにアクセスできます。
が、
$cfg->delete(-block=>'mysql');
としてもブロックを削除できません。
ブロックごと削除するにはどう記述したらよいですか?
0643nobodyさん2010/11/06(土) 10:03:24ID:???
ini ファイルの場合、ブロックを削除する方法はない。
delete メソッドを拡張するといいよ。
0644nobodyさん2010/11/06(土) 10:05:34ID:???
private なデータにアクセスするので紳士協定に反するが、

delete $cfg->{_DATA}->{mysql};

とやれば消えるか。
0645nobodyさん2010/11/08(月) 00:17:08ID:???
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を使えば構造体を使用できるらしいのですが、例等がないため見当もつかないです。
もしどなたか分かる方がいれば教えて頂いてもよろしいでしょうか?

お願い致します。
0646nobodyさん2010/11/08(月) 06:45:59ID:???
>>645
使い方も使用例もマニュアルに書いてあるから読めよ
0647nobodyさん2010/11/08(月) 18:53:06ID:u2tFSMiG
半角全角 変換で調べてみると以下のような選択肢が見つかったのですが、

 Encode::JP::H2Z
 Lingua::JA::Regular::Unicode
 Unicode::Japanese

何が主流なんでしょうか?

CentOS5.5 perl v5.8.8
0648nobodyさん2010/11/09(火) 04:15:52ID:???
動くの使ったら良い
微妙に機能が違った気がするけど覚えてない
俺はLingua::~~
を使ってる
0649nobodyさん2010/11/10(水) 16:07:10ID:???
入力フォームのHTMLファイルと、入力を処理するCGIファイルの2個をを同じCGIファイル一個に纏めたい。

具体的にはクエリが空っぽなら入力フォームを表示。
表示した入力フォームから入力があればクエリのデータを読み取って出力をするプログラムが走るようにしたい。
空を判定するのにunless( !defined( $a )こうやって見たけどどうやら空でも0でもない何かが入ってるらしくバグる。
0650nobodyさん2010/11/10(水) 16:11:20ID:???
何かがとかいってないで表示させてみればいいじゃない。
0651nobodyさん2010/11/10(水) 16:19:32ID:???
perlfunc defined
0652nobodyさん2010/11/10(水) 16:39:06ID:???
>>650 ありがとうございますほぼ解決しました。
フォームを強制的に表示して次に空で送信すると以下のようにURLに何かくっ付きます
ttp://xxxxxx.jp/idsaves.cgi?t1=&t2=&t3=&t4=
このときは値は空のようです

フォームを表示せずに普通にCGIを呼び出したアドレスはこれです。
ttp://xxxxxx.jp/idsaves.cgi?
このときの値は0のようです

0でもない空でもない幻はこの2パターンに対したまたま組んだプログラムが上の時は0を想定して
下のときは空を想定したプログラムでたまたまテストして両方エラーだった為0でも空白でもないと思い込んだようです。
0653nobodyさん2010/11/10(水) 17:04:29ID:???
>>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
0654nobodyさん2010/11/10(水) 19:03:35ID:???
>>653
なにかコードがPerlとは違うように見えるのですが。
省略か何かの書き方の違いですか?

それとどこかで拾ってきたサンプルソースがdefinedではなく!definedなってて
それでバグったみたいです!definedは単なるミス表記なのか何か意味があるのか教えてください。
0655nobodyさん2010/11/10(水) 19:13:41ID:???
>>654
三項演算子
(条件式)?true処理:false処理

否定演算子
!(条件式)
BOOLEANを反転。
0656nobodyさん2010/11/10(水) 19:40:50ID:???
>>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")の真偽で判定するとか。
0657nobodyさん2010/11/10(水) 20:11:56ID:???
print defined $str ? "true\n" : "false\n"; #=> true

関係ないけど、このほうが気分的にすっきりしてて好き
0658nobodyさん2010/11/10(水) 23:45:12ID:???
print defined $str ? 'true' : 'false', "\n";
0659nobodyさん2010/11/11(木) 00:17:16ID:???
print (defined $str ? 'true' : 'false') . "\n";

ってやりたくなっちゃうw
0660nobodyさん2010/11/11(木) 00:28:20ID:???
Perl って 「やり方は1つじゃない」 が開発者の意図するもんでしたよね?

でもフレームワークって人によるコーディングの揺らぎを制限するもんじゃないっすか?

矛盾してるよね。

開発者の意図を汲むなら、Perl にフレームワークって必要無いんじゃね?
って思えてきた木曜日の深夜。
0661nobodyさん2010/11/11(木) 06:31:03ID:9cAwBIie
>>660
フレームワークの選択肢はあるし、自分でも作れるから矛盾はしてないんじゃない?
0662nobodyさん2010/11/11(木) 21:57:58ID:???
>>643さん
>>644さん
ありがとうございます!
0663nobodyさん2010/11/15(月) 22:57:52ID:rKCqUAEL
質問です。

httpd.confや.htaccessの設定で認証を行うと、セキュリティは高いのですが、ログアウトができません。
そこでクッキーとスクリプトで認証(パスワードからハッシュを求めてパスワードファイルと比較)しようとしたのですが、
Apacheの認証(httpd.confや.htaccess)と併用すると、スクリプトで認証した後でApacheが認証要求を
出して二回ログインする必要がありそうです。

何か良い方法はないでしょうか?
0664nobodyさん2010/11/15(月) 23:23:53ID:???
スレ違いっつーか板違い。webprog行け
0665nobodyさん2010/11/15(月) 23:25:21ID:???
板はあってたorz...
06666632010/11/15(月) 23:28:15ID:???
というわけでみなさん回答お願いします(w
0667nobodyさん2010/11/15(月) 23:32:59ID:???
スレ違い
06686632010/11/15(月) 23:48:34ID:rKCqUAEL
誘導プリーズ
06696632010/11/16(火) 00:01:48ID:???
とりあえずこっちにいくことにした。

△▲ WebProg 初心者の質問 Part22 ▼▽
http://hibari.2ch.net/test/read.cgi/php/1272872528/
0670nobodyさん2010/11/16(火) 03:25:31ID:???
質問です
Webページ内の任意のタグ内のテキストを全て取得する方法を探しています
以下のような処理です

<div class="hoge" id="moge">
<a href="hage">TEST</a>
</div>

↑Webページ内から上記のような部分を探し出し、div、hoge、mogeといったパラメータを指定して
↓以下を出力する

<a href="hage">TEST1</a>

対象ページを全取得し、改行やタブを消去して正規表現で…と最初は考えていたのですが、
もっとスマートな方法があれば知りたいです
参考になるサイトなどありましたら教えて下さい
06716702010/11/16(火) 03:29:36ID:???
補足です
抽出対象は「入れ子」になっていない事が前提です
つまり以下のような存在は考慮する必要はありません

<div class="hoge" id="moge">
<div class="hoge" id="moge"><a href="hage">TEST</a></div>
</div>
0672nobodyさん2010/11/16(火) 03:50:08ID:???
>>670
正規表現でm
0673nobodyさん2010/11/16(火) 05:48:42ID:MILxW7l4
Web::Scraperでいいんじゃないかな
06746702010/11/16(火) 06:45:19ID:???
>>673
ありがとうございます
Web::Scraperで簡易なテストプログラムが動作する所まで進みましたが、
今の所HTMLタグを全て除去した素のテキストしか取得してくれません
>>670で言えば「TEST」しか表示されない状態です
もう少し調べてみます
06756702010/11/16(火) 07:32:25ID:???
さらに調べました

process "mage", "hige" =>"TEXT";

process "mage", "hige" =>"HTML";
に変更してうまくいったようです
0676nobodyさん2010/11/17(水) 12:19:54ID:???
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を
ご存知なら、併せて教えてください。
よろしくお願いします。
0677nobodyさん2010/11/18(木) 21:33:53ID:???
何らかの Web Application Framework 使ってみればいいと思うよ。
その My::Module は singleton にすべきじゃないかな。
0678nobodyさん2010/11/18(木) 22:36:52ID:???
パンくずリスト作成
テンプレート出力
ファイルロック
そのほかモロモロ

など、自作関数がいくつかあり、今までは require してただけなんだけど、
これら関数をモジュールにしてファイルを分けるのって非効率だと思います?


なんか自分がどうやって関数とかまとめていけばいいのか分からなくなってきた orz
0679nobodyさん2010/11/19(金) 09:10:25ID:???
ファイル分けなくても
use myModule qw/function_to_use/;
できるようにすればいいんじゃない。
06806762010/11/19(金) 16:58:32ID:???
既にmod_perlに読み込まれているモジュールへの修正は、
httpdを再起動するまで反映されない事によくやく気づきました
orz

>>677
singleton初めて知りました。
稀に引数受けて挙動を変える事もあるので、
なんとなくデメリットの方が大きい気がします。
(きちんとsingletonを理解できてないだけかもしれませんが)

>>678-679
私の場合、主にメソッドを返すMy::Moduleと、
DBIやら自分の鯖へのログイン状態(WWW::Mechanize)やら、
主に定義を返すMy::Definitionに分けてます。
が、Perlしか知らないし、そのPerl関連の書籍も一冊も持ってない人間なので
参考にはしない方がいいんじゃないかなーと思います。
(参考にすべき人のご登場をお待ちしております)
0681nobodyさん2010/11/19(金) 22:46:32ID:???
perl しってるということにするにはちょっと。
0682nobodyさん2010/11/20(土) 00:34:47ID:???
>>678
捨てずに使うことを前提にすると、自分ならこんな感じ。
テンプレート出力はメールの本文作成にも使えそうだから独立したモジュールに。
ファイルロックはファイルシステム関係でまとめたパッケージに放り込む。
パンくずリストは作り次第でフレームワークのプラグイン的位置づけを考えるか、HTML生成系でまとめとくか、かな。
#デザイナーと共同作業するならできるだけテンプレートに直書きしておくのもアリだと思う
#(例えば「>」を「>」に変える程度ならソース追わなくていいように)

まあ、一部分使いたいのに余計なものが付いてくる嫌悪感の度合いで決めたらいいんじゃないかな。
あとちょこちょこ手入れるだろうからバージョンは書いといた方がいいよ。
0683nobodyさん2010/11/20(土) 00:57:44ID:???
> あとちょこちょこ手入れるだろうからバージョンは書いといた方がいいよ。

そんなつまらんことよりは、機能増やすたびにテスト書くようにして、
git なり svn に入れて一元管理するべき。
0684nobodyさん2010/11/20(土) 01:59:11ID:???
今時modperlなんて使わないでplack使いなよ。書き換える度にmodperl再起動とか面倒くさいでしょう。
ちゃんとしたMVCで書いてれば動作確認をブラウザからじゃないと出来ない、なんてことにはならないけど。
06856822010/11/20(土) 08:29:04ID:???
>>683
説明不足だったけど、
過去に納品したものに改修の依頼が入った時に$VERSION変数があるといいよという程度の話。
svnで言うならリリースごとにタグを付ける感覚かな。
0686nobodyさん2010/11/20(土) 11:53:57ID:???
文字列を置き換えする時に変数の中身を正規表現として扱わないようにしたいのですが、
この場合個別にエスケープしなければいけないのでしょうか?
my $value = "test(test)[test]{test}test";
my $replace = "(test)[test]{test}";
$value =~ s/$replace/test/g;
上のような場合に結果が「testtesttest」になるようにしたいといった感じです。
単純に置き換えしたいだけなのでraplace関数的なものがあればそれで十分なのですが…
初歩的な質問ですみません。よろしくお願いします。
0687nobodyさん2010/11/20(土) 12:21:57ID:???
$value =~ s/\Q$replace\E/test/g;
0688nobodyさん2010/11/20(土) 12:59:38ID:???
>>687
メタ文字で回避できたんですね、
もう一度よく調べて直してみようと思います。
どうもありがとうございました。
0689nobodyさん2010/11/20(土) 13:01:14ID:???
quotemeta もあるよ。
0690nobodyさん2010/11/20(土) 17:35:05ID:???
>>684
> ちゃんとしたMVCで書いてれば動作確認をブラウザからじゃないと出来ない、なんてことにはならないけど。

ちゃんとしたMVCについて詳しく。
0691nobodyさん2010/11/20(土) 20:16:33ID:???
HTML を返すかどうか (テンプレート出力とかパンくずとか)
ファイルロックほかファイル操作全般
汎用 (time で得たのを文字列で返すとか)

の3つに分けてみた。

オブジェクトにしたら便利なのは、ファイルロックとテンプレート出力ぐらいかな。。。


がんばりゅ!
0692nobodyさん2010/11/20(土) 22:47:11ID:???
>>691
github とかで晒すとアドバイスもらえていいと思うよ。
0693nobodyさん2010/11/21(日) 08:41:54ID:???
>>690
684ではないけど、少なくともMに関してはCやVが無くても(ブラウザじゃなくても)テストできるって意味じゃないかな。
#plackは使ったことないから分からないけど、Cも作り次第でテストケース作れないことはないはず
0694nobodyさん2010/11/21(日) 14:17:21ID:???
> Cも作り次第でテストケース作れないことはないはず

C に M 置いちゃう?
0695nobodyさん2010/11/23(火) 03:34:20ID:???
>>690
・Cにビジネスロジックが書かれていない
・Mに書かれたビジネスロジックは全てスクリプトから呼び出せる

大雑把に言うとこんな感じ。用はブラウザを通してしか呼び出せないロジックを生み出さないようにする。

>>693
確かにApache::TestやTest::WWW::MechanizeなどでCのテストも書けると言えば書ける。
でもそれらはLWPなどを使って、ブラウザからのアクセスを模してるだけなんだよね。
0696nobodyさん2010/11/23(火) 14:56:52ID:???
>>684
CGI::Sessionでログイン状態の確認なんかも
ブラウザなしでできる?
0697nobodyさん2010/11/24(水) 03:17:12ID:???
open(IN,"+>> po.txt");
while($_ = <IN>){
chop;
print "$_";
}
close(IN);


ファイルの内容を1行ずつ読み込んで出力したいのですが出力できません
行入力演算子が効かないのか何なのか、原因がよくわかりません
どうしたらいいでしょうか?
0698nobodyさん2010/11/24(水) 04:56:07ID:???
"+>>" を使っているからダヨ
open(IN, "po.txt"); でイイヨ
ていうかなんで "+>>" なんか使ってんだ?
06996972010/11/24(水) 05:07:13ID:???
できました
読み書き両方出来た方がいいと思って+>>付けていました
ありがとうございました
0700nobodyさん2010/11/24(水) 05:36:30ID:???
読み書き可能にするopenの仕方には'+>' '+<' '+>>'の3通りあるけど全部動作が違うダヨ
どう違うのかは参考書を見るなりして自分で調べるダヨ
0701nobodyさん2010/11/24(水) 09:25:00ID:???
読み書きしたくてファイルがなければ作って欲しくてすでにあったら
中身は消さないで欲しくて、でもappendじゃ困るというときに使える
のがないんだよなw 結局sysopenのお世話になるしかないという...
0702nobodyさん2010/11/24(水) 15:21:47ID:???
>>701
どういう状況でそんなオープンの仕方が必要になるのかよくわからんが、たとえば
my $filename = "foobar.txt";
open my $fh, -f $filename ? '+<' : '+>', $filename or die $!;
みたいなのでいいんじゃね?
0703nobodyさん2010/11/24(水) 15:57:56ID:???
>>702
むかしCGIのアクセスカウンターを自作しようとして困ったんだよね。

その方法だと-fとopenがatomicじゃないので運悪いと書いたのが消えちゃう。

結局'+>>'で開いてとじてから'+<'とかやったっけ。なんか無駄っぽいなーと
思ってすごい嫌だった記憶が。



0704nobodyさん2010/11/24(水) 16:56:30ID:???
<, >, >> これしか使った事ないし困った事もないんだけど、+>, +<, +>> ってどういう時に嬉しいの?
0705nobodyさん2010/11/24(水) 17:03:41ID:???
>>684
MVCって
 M − モジュール
 V − テンプレート
 C − スクリプト
って解釈してもおk?
0706nobodyさん2010/11/24(水) 17:13:21ID:???
>>703
排他制御したいんだったら結局flockなり使わないとだめなんでは。
'+<'でも排他的にopenはできないでしょ。
同時に2つ以上のプロセスから'+<'でopenされて書き換えられたら、
内容が消えることはないとしても本来の値と食い違う可能性があると思うが。
そこらへんはsysopenでも同様なんでは。sysopenだと排他的にopenできたりすんのかな。

>>704
あるファイルに対して読んだり書いたりを同時にしたい時に使う。
おいらも使ったことない。
0707nobodyさん2010/11/24(水) 17:43:05ID:???
>>704
更新の必要があるログを開く時

< で読み込んでも、更新しようとする時一々閉じてから開かなきゃいけないでしょ?
+< で開いておけば、seek するだけで書き出しできる。
アクセスが少なくて DISK IO が少ないなら、いったん閉じて開いてもいいとは思うけど・・・
0708nobodyさん2010/11/24(水) 18:11:30ID:???
>>706
当時は +< で開いた後さらににflockしてました。
sysopenというのがあるというのを知ったあとは、

sysopen FH, 'file', O_RDWR|O_CREAT|O_EXLOCK

で一発でできて感動したものです。

今だとDB使っちゃいますけどね。
0709nobodyさん2010/11/24(水) 18:31:11ID:???
なるほど。O_EXLOCKはBSD系だけ有効で、Linuxだと使えないんだ。
0710nobodyさん2010/11/24(水) 18:50:39ID:???

プロセス1、ファイルが存在しないと判別
プロセス2、ファイルが存在しないと判別して作成してflockまで行う
プロセス1、ファイルが存在してなかったから作成(プロセス2によりロック中)してデータ壊れる

これで壊れないか?
0711nobodyさん2010/11/24(水) 18:52:42ID:???
俺もファイルの排他で疑問に思っていたけど、
DBと同様なトランザクションの仕組みって
perlで可能なの?
0712nobodyさん2010/11/24(水) 18:58:55ID:???
perlでDBMS書けば可能。
0713nobodyさん2010/11/24(水) 19:07:57ID:???
>>712
それ、DBを使うってこと?
0714nobodyさん2010/11/24(水) 19:34:51ID:???
>>713
DBを作るってこと。
0715nobodyさん2010/11/24(水) 19:41:34ID:???
>>714
ファイルで可能?
0716nobodyさん2010/11/24(水) 20:03:34ID:???
本格的?な既存のDBと比べたらパフォーマンスは比べものにならんくらい落ちるだろうけど
まあ"DBと同様のトランザクション"は実現できるんじゃないかと。
必要な機能だけに絞って実装すればいいんだし。
インタフェースも別にSQLに準拠しなくても好きなように設計すればいいし。

DBでflockによる排他処理とか面倒なことを考えなくていいのは
DBが単独で一手に集中してそのへんを引き受けてるからで、
片や複数プロセスが素のファイルにアクセスする時にflockとかで排他処理をするのは、
競合しないよう一手に引き受けてくれるまとめ役(交通整理役、管理役)がいないからで、
だったらデータの面倒を集中的に見てくれる、独立して動作するプログラムをperlで書いて、
複数プロセスからのデータのアクセスはそいつを介してやるようにすればいい訳で、
それはつまりperlでDBシステムを書くってことになる訳で。という話。

といっても実際に作ったことがある訳じゃないんで具体的にどう作るかとかは
実際に作ってみないとわかりません。
0717nobodyさん2010/11/24(水) 20:17:47ID:???
自分でフラグ用ファイル作ればいいんじゃないの?
初心者の洞察でスマンが

とあるプロセス
my $flagfile="locked";
while(!do{ open my $fh,">",$flagfile; close $fh; }) {}
# ファイル処理
unlink $locked;

別のプロセス
my $flagfile="locked";
while (-e $flagfile) {}
# ファイル処理
0718nobodyさん2010/11/24(水) 20:25:43ID:???
>>717
残念ながらそれじゃだめだな。
「Perl 排他処理」でググれ。
0719nobodyさん2010/11/24(水) 20:30:06ID:???
>>718
別に俺には同でもいい話なんで、思いつきを書いたまで
どこらへんが残念で、なぜだめなのか、説明できるかい?

さすがにそこまで俺は深入りする気はない、すまんね
0720nobodyさん2010/11/24(水) 20:43:12ID:???
>>719
とりあえず簡単な例として、「別のプロセス」が「ファイル処理」を
開始してから終わるまでの処理中に「とあるプロセス」が動き出したら
2つのプロセスが一緒に処理してぶつかっちゃうだろ。
0721nobodyさん2010/11/24(水) 20:54:11ID:???
>>720
多少の遅延が許されるなら
while(!do{ open my $fh,">",$flagfile; close $fh; }) {}
の直後にsleep関数かませばよくね?
0722nobodyさん2010/11/24(水) 21:13:49ID:???
>>716
書こうとした事を先に書かれた orz

「まとめ役が居ないから」
これに限る。


全てのファイル操作を一手に引き受ける Apache モジュールを作って、
全ての CGI/モジュールは ファイル操作を受け持つ Apache モジュール経由で
操作すれば OK


そうすれば DB を使わないスクリプトとかでも完全なファイルロックが可能。
そのモジュールにバグが無ければだけどw
0723nobodyさん2010/11/24(水) 22:54:58ID:???
>>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: # ファイル処理

(続く)
0724nobodyさん2010/11/24(水) 22:56:39ID:???
(続き)

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かます処理は全く意味がないんだった。
0725nobodyさん2010/11/24(水) 23:50:30ID:???
>>723
Windows用のPerl5.8で確認してみたけどsleep(1)をそれぞれのwhile文の後に
かますとちゃんと動作するようだよ
確認してみた?
0726nobodyさん2010/11/25(木) 00:19:03ID:???
>>725
sleepかまさなくても不都合なく動作する時は動作するし
(ていうかプロセス数が少なく処理のタイミングがまばらなら大抵の場合は問題ないだろう)
sleepかましてもカチ合ってうまくいかない時はうまくいかない。
それだけのことでしょ。
逆になんでsleepかますとうまく動くのか説明してくれ。
0727nobodyさん2010/11/25(木) 00:27:18ID:???
スリープ時間がアクセス権を他のプロセスに譲るのに必要なんじゃないの?
と思ったけど?
0728nobodyさん2010/11/25(木) 00:30:56ID:???
ちなみにスリープ時間なくすと、動作が不安定化してうまくいかなかった
最初たまたまうまくいくことがあるが、すぐにどちらかのプロセスがアクセス権を独占する
0729nobodyさん2010/11/25(木) 00:52:31ID:???
> どちらかのプロセスがアクセス権を独占する
そりゃたぶんどちらかじゃなくて上の方のプロセスがいつも独占するんだろう。
おそらくそれぞれの処理をwaitを置かずに無限ループ内でひたすら繰り返すような検証スクリプトを書いたんじゃないの。
1秒もsleep入ってるんだから、それぞれ処理時間が1秒以内に完了する程度の量なら、
うまく相互の起動のタイミングが合えば延々走り続けるだろうな。
ただループを回る時間に両者で少しでも差があれば、
いつかは上の方のプロセスが処理を独占するようになる。
ループ1回につき1秒ずつ遅延があるから、そうなるまでだいぶ待たないといけんだろうけど。
0730nobodyさん2010/11/25(木) 01:02:48ID:???
>>729
いや、正確に言うとごく短時間のウエイト処理を置いた
その処理時間ではアクセス権を譲渡しきれなかった

というか、要するにウエイト時間を長くしていけばうまくいくという理解でいいのかな?
もう、これ以上この件に関わるの疲れてきたんだけど・・・
0731nobodyさん2010/11/25(木) 01:11:03ID:???
>>730
> というか、要するにウエイト時間を長くしていけばうまくいくという理解でいいのかな?
違う。ちゃんと排他制御をしないと結局のところ解決はしない。
ウェイト(sleep時間)を長くすればするほど、カチ合う確率は低くなるだろうけど、
確率が低くなるだけでカチ合わなくなる訳ではないのだ。
まあ「1秒」ってコンピュータの処理速度からしたらものすごーく長い時間だけどさ。

> もう、これ以上この件に関わるの疲れてきたんだけど・・・
おつかれさま。おやすみ。気が向いたら排他制御の仕組みをきちんと勉強してみてね。
0732nobodyさん2010/11/25(木) 01:14:16ID:???
>>730
追伸。「sleepを入れることでアクセス権の譲渡が間に合うようになる」という解釈は間違っているので、念のため。
0733nobodyさん2010/11/25(木) 01:17:43ID:???
コード晒せよと思ふた>釣り
0734nobodyさん2010/11/25(木) 02:05:15ID:???
Web上にしっかりした解説が山ほどあるんだから、>>718で終わってた話なんだけどね。煽りでも何でも無く。

>>705
Vはいいとして、
Cが遷移とかWeb関係、
MがWebじゃなくても使いまわせるロジック
乱暴だけど、MにORMだとかDBだとかを単純に対応付けるよりかはマシな説明だと思う。
07356762010/11/25(木) 09:57:28ID:???
>>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;
  }
}
0736nobodyさん2010/11/25(木) 21:42:32ID:???
何らかの WebApplicationFramework 使ってみるところからはじめればいいよ。
0737nobodyさん2010/11/25(木) 23:00:23ID:???
※ただしCatalystを除く
0738nobodyさん2010/11/26(金) 00:07:31ID:???
>>735
># 大きく中略。$returnを取得するSQL文を書いてる。
例えばこの$returnは仮に foo($param1) という呼び出しで取れるとして、
$param1がフォームからの入力値である必要は無く
コマンドラインから呼び出して foo($ARGV[0]) としても正しく動くわけで、
foo()はコントローラには無くてもいいよね。
#そう切り分けることを>705でモジュールと呼んでたのなら近い認識かも知れない

余計なお世話だけど if(!$param1) だと $param1 に "0" が入った時も真判定されるので
if ($param1 ne "") という意図ならそのように書いた方がいいよ。
0739nobodyさん2010/11/26(金) 01:03:21ID:???
ne "" だと、「"param1"というパラメータ名はあるが値は空文字列」という場合に駄目だな。
param('param1') は、param1というパラメータ自体が無かった場合はundefを返し、パラメータはあるが値が無かった場合は空文字列になる。
だから ne "" は正しくなく、「動く」のを優先するなら735のままで実は正しい。ただしたまたま動いているだけなので、ちゃんと書くならdefinedを使う。
if (not defined $param1)
あと$param1がundefだった場合に ne を使うとuninitializedのwarnが出る。
0740nobodyさん2010/11/26(金) 02:02:18ID:???
本当に余計なお世話になってしまってた。ごめんよ。
07416762010/11/26(金) 03:18:48ID:???
>>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;のみ
とした方が良さそうですね。

色々とありがとうございました。
0742nobodyさん2010/11/26(金) 16:52:51ID:???
これってどういう意味でしょうか?

>$ua = LWP::UserAgent->new;
0743Perl忍者 ◆M5ZWRnXOj6 2010/11/26(金) 17:17:16ID:pwS23Ki1
低レベルなスレ
0744nobodyさん2010/11/26(金) 17:24:09ID:???
初心者質問スレですから。
教えていただけないでしょうか。>>742
0745nobodyさん2010/11/26(金) 17:37:32ID:???
>>743
やってもらいたいことがあるんだけど。
0746nobodyさん2010/11/26(金) 17:45:18ID:???
>>743
自作のショッピングカートプログラムにクレジットカード決済機能をつけたい。
その為には、決済代行業者のプログラムに接続しなきゃならない。

できるか?
0747nobodyさん2010/11/26(金) 18:07:16ID:???
>>744
忍者はスルー推奨

>>746
またお前か
0748nobodyさん2010/11/26(金) 18:07:45ID:???
>>747
誰だと思う?
0749nobodyさん2010/11/26(金) 18:31:10ID:???
my $ua = new LWP::UserAgent;
my $ua = LWP::UserAgent->new;

って同じなん?
0750nobodyさん2010/11/26(金) 19:50:57ID:???
同じだと思う、俺の中ではな。

俺だよオレ俺
0751nobodyさん2010/11/26(金) 20:12:08ID:???
結局、同じ内容でもいくつかの方法があるってことか。
必ずしも決まった形ではないようだね。
0752nobodyさん2010/11/26(金) 20:35:45ID:???
矢印を使わない書き方は間接オブジェクト記法というんだけど、
曖昧さがあってときどき期待しない解釈をされてわかりにくい
バグの元だから矢印だけを使う方がいいとperlobj(1)に書いて
あるよ。
0753nobodyさん2010/11/26(金) 21:21:45ID:???
->の意味が分からないので、具体例を教えて下さい。
0754Perl忍者 ◆M5ZWRnXOj6 2010/11/26(金) 21:49:28ID:pwS23Ki1
値の検証などできるよクレジット
あと外部プログラムにつないだりできるよ
0755Perl忍者 ◆M5ZWRnXOj6 2010/11/26(金) 21:52:42ID:pwS23Ki1
なんでもできるよ^o^

オブジェクトの理解でつまってるってほんと終わってるねw
0756nobodyさん2010/11/26(金) 22:57:56ID:???
my $ua = new LWP::UserAgent;

my $ua = LWP::UserAgent->new;
のシンタックスシュガー、だっけ?
0757nobodyさん2010/11/26(金) 23:30:39ID:???
シンタックスシュガーって何?っていう質問が来ると思うよ。
0758nobodyさん2010/11/26(金) 23:47:19ID:???
$fh->print
print $fh
0759nobodyさん2010/11/27(土) 00:29:26ID:???
>>747
SSLだからセキュリティは完璧クンか。
0760nobodyさん2010/11/27(土) 03:55:49ID:???
とあるシュガーの統語法〈シンタックス〉
0761nobodyさん2010/11/27(土) 04:38:13ID:???
むしろ

「とあるPerlの糖衣構文(シンタックスシュガー)」

思ったよりつまらんな
0762nobodyさん2010/11/27(土) 11:15:26ID:???
>>759
誰を刺してるんだ?
0763なるとくん2010/11/27(土) 19:43:14ID:40qrjSo/
宮川達彦=うちはイタチ
0764nobodyさん2010/11/27(土) 22:11:23ID:???
>>761
これ?
ttp://item.rakuten.co.jp/koyoproduck/01221/
0765nobodyさん2010/11/28(日) 00:44:24ID:???
たぶんそれだ!
0766nobodyさん2010/11/28(日) 01:05:51ID:???
>>762

> >>746
> またお前か ←
0767nobodyさん2010/11/29(月) 05:53:06ID:???
Perlの文中の配列をjavascriptの中でそのまま使いたいのですが上手くいきません

@list = (a,b,c,……);
$length = @list;

<script language="javascript">
for(i = 0; i<$length; i++){

#このfor文の中で
# $list[i] を使うとエラーになり、
# "$list[i]"だと参照できますがインデックスのiがインクリメントせず最初の要素aが繰り返し参照されます。インクリメントしてほしいです

}

どうしたらいいでしょうか?
0768nobodyさん2010/11/29(月) 06:20:49ID:???
perl の中で JavaScript を print してる部分を晒してもらわな・・・
0769nobodyさん2010/11/29(月) 06:32:34ID:???
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等でループ処理するべきなんでは
07707672010/11/29(月) 07:16:51ID:???
>>768
中身も書くべきでしたね
すみません


>>769
joinでまとめて変数に入れれば良かったのですね
配列として使いたかったので助かりました
ありがとうございます
07716762010/11/29(月) 13:13:48ID:???
スレ違いかもしれませんが、ついでなので脳内MVCを画像にしてみました。
BはCに戻る方が正しいかもしれませんが・・・

http://ichigo-up.com/cgi/up/qqq/nm28196.png
0772nobodyさん2010/11/30(火) 00:10:19ID:???
同一ページへのPOSTでフォームデータを受け取りたいのですが
以下の方法でreadしても、何も入っていません。

if ($ENV{REQUEST_METHOD} eq 'POST') {
read(STDIN, $read_data, $ENV{'CONTENT_LENGTH'});
}

別ページへPOSTした場合は、受け取ることができたのですが…
CGI.pmが使えない環境で、別に何か方法はありますか?

0773nobodyさん2010/11/30(火) 00:20:25ID:???
別の方法を探すより、現在のコードのバグを探す方が先決と思う。
0774nobodyさん2010/11/30(火) 01:23:19ID:???
どう考えてもバグかmod_perl動いてるか
何故か強力なキャッシュが働いてるか・・・
なんとも言えん
0775nobodyさん2010/11/30(火) 08:50:01ID:???
>>772
とりあえず使ってる変数の内容が想定通りか1個ずつ確認するところから
07767722010/12/01(水) 01:26:55ID:???
my $read_data = <>;
...
read(STDIN, $read_data, $ENV{'CONTENT_LENGTH'});
と書いてたのがreadが空だった原因みたいです。

my $read_data;に修正したらreadできるようになりました。
または、readを削って、my $read_data = <>;だけでも読めました。
ダイアモンド演算子を訳もわからず使ってました。
0777nobodyさん2010/12/01(水) 01:29:41ID:???
原因が(自力で)解明できてよかったね
>>775 のアドバイスが効いたのかな (775は俺じゃないけど)
0778nobodyさん2010/12/01(水) 02:23:15ID:???
http://www.atmarkit.co.jp/flinux/rensai/mysql04/mysql04b.html
ここを参考にやってんだけど、データベースに接続できないorz@MySQL 5.1.41


DBD は CPAN じゃなくて ppm で拾ってきたものを使用
0779nobodyさん2010/12/01(水) 02:31:06ID:???
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)
ってなる。

むぅ。。。
0780nobodyさん2010/12/01(水) 13:54:32ID:???
>>779
MySQL が起動してない or Port3306がファイアーウォールで遮断されてる
0781nobodyさん2010/12/01(水) 18:53:40ID:???
>>780
0782nobodyさん2010/12/01(水) 23:41:40ID:???
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だけがテキスト出力されるのだけどどうしたらいいのかな?
0783nobodyさん2010/12/01(水) 23:59:03ID:???
>>782
これはPerlとPHPのコードが混じってるの?
どういう動きを期待してるのか分からない。

もしPerlスクリプトの一部分を新規のPHPプロセスで呼び出そうとしてるとか
Perlの出力結果をPHPソースコードとして見て改めてPHPで実行する(またはその逆)とか
そういう事なら余計重くなるだろうね。

PHPスクリプトを動的に作ってドキュメントルート以下にphpファイルとして書き出すなら分からなくもないけど。
0784nobodyさん2010/12/02(木) 00:38:59ID:???
そもそもPerlでCGIスクリプトを書いてるんなら、
Content-type: text/html\n\n
を出力するのはperl(CGIスクリプト)側の仕事だろう。
で、PHPコード中でいじってる$Gや$G3はどこで使ってるの?
Perlスクリプトで参照してるんだったら全く意味がない。
あとPHPでelse ifを書く時はの表記は「elseif」。
0785nobodyさん2010/12/02(木) 00:56:20ID:???
PerlさんにPHPのソースコードを print させるのが「PHP化」でいいんだろうか。
0786nobodyさん2010/12/02(木) 01:01:43ID:???
PHPでは/else ?if/はどっちでもいいんじゃなかったけ
まあなんにしても何がやりたいのかまったくわからんわけだが
0787nobodyさん2010/12/02(木) 03:03:55ID:???
「Perlが遅い」ってことは、PerlはCGIでPHPはモジュールだってことだよな
CGIが走ってる最中にPHP文書いたからってモジュールモードで動くのか?

・・・仮にそうだとしてもifひとつで差が出るとは思えんが
というか逆に遅くなりそうだが
0788nobodyさん2010/12/02(木) 04:23:37ID:???
そうだよなあCGI(Perl)とPHPが同時に、または続けて処理されることはたぶんない
となるとContent-type: text/htmlが表示されたっていうのはどういうことなんだ?
0789nobodyさん2010/12/02(木) 06:58:59ID:???
mod_perlでもspeedycgiを使えば解決
0790nobodyさん2010/12/02(木) 11:22:29ID:???
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",数字)になります)
どうしたらいいでしょうか?
0791nobodyさん2010/12/02(木) 12:54:26ID:???
>>790
お前は=と==の違いをもう一度よく復習すべきだと思われ
0792nobodyさん2010/12/02(木) 14:15:19ID:???
==はcにしても初歩の間違いだよな。
0793nobodyさん2010/12/02(木) 15:20:54ID:???
=が許されるのはシェルスクリプトまでだよねー
0794nobodyさん2010/12/02(木) 15:33:12ID:???
いやシェルスクリプトでも == だろ
07957902010/12/02(木) 16:56:40ID:???
if文では==を使うのですね;
失礼しました
0796nobodyさん2010/12/02(木) 17:02:54ID:???
>>795
>>791
0797nobodyさん2010/12/02(木) 17:09:49ID:???
昔、BASICは=だった。
今は知らん。
0798nobodyさん2010/12/02(木) 17:10:45ID:???
>>795
ま、よくある初心者の間違いさ。
0799nobodyさん2010/12/02(木) 17:44:16ID:???
BASICの比較演算子は、==でなくて=、!=でなくて<>だったっけな。
0800nobodyさん2010/12/03(金) 00:17:39ID:???
たしかそんな感じ

if $cnt <> 0 then
else
endif

だったような


個人的には 「then」 ってなんか好きw
0801nobodyさん2010/12/03(金) 01:10:22ID:???
俺の知ってる時代のBASICはif文を複数行にわたって書けなかった。
IF A <> 0 THEN GOSUB 1000 ELSE GOSUB 2000
とかそんな感じだったような。ENDIFはなかった。
完全にスレ違いだな。すまん。
0802nobodyさん2010/12/03(金) 07:07:22ID:???
そうだ、思い出した。
endifなんて無かった。
0803nobodyさん2010/12/03(金) 10:37:46ID:???
@dataの5番目から9番目までをループさせるときに
for文の中で、ループ内容を1項目だけ追加させたい場合はどうしますか?

$start=5;
$end=9;

for ($start..$end) {

##$data[$_]にabcが含まれてたらループを1つ追加
if ($data[$_] =~ /abc/i) {
$end++;
}

##$data[$_]を書き出し
print $data[$_];

}

ってやってもダメでした。
0804nobodyさん2010/12/03(金) 10:56:43ID:???
until ($now > $end)
0805nobodyさん2010/12/03(金) 11:07:30ID:???
なるほど、 for文でなく、until文ですねトライしてみます
0806nobodyさん2010/12/03(金) 11:33:54ID:???
質問させてください。
掲示板(CGIのページ)にモバイルアドセンスを表示したいんですけどうまく表示できません・・・
どこをいじったら良いのでしょうか?

下の掲示板を利用してます。PCには表示できますがモバイルにはどうしても
無理です。
http://www.kent-web.com/bbs/epad.html


ptel.plにモバイルアドセンス(CGIコード)を書きましたがエラーになります。
携帯からアクセスしたさい、一番上にアドセンスが表示されてれば
問題ないです。

宜しくお願いします。
0807nobodyさん2010/12/03(金) 11:50:43ID:???
>>806
【 スクリプト改造依頼スレ】(丸投げ) part7再々
http://hibari.2ch.net/test/read.cgi/php/1222645553/
★三 【 スクリプト改造工房 PART 9 】 ★三
http://hibari.2ch.net/test/read.cgi/php/1143834740/
0808nobodyさん2010/12/03(金) 15:45:42ID:???
kent スクリプトに strict を求めるのが酷だw
0809gfx2010/12/03(金) 20:37:49ID:???
よろしくwww
0810gfx2010/12/03(金) 20:41:32ID:???
私のハテダですよろしくw

http://d.hatena.ne.jp/gfx/


Perl忍者君に誘われて2chデビューしましたw
0811nobodyさん2010/12/03(金) 21:04:26ID:???
激しく騙り臭がするな。
本人ならハテダに2chデビューしましたって書いてみてくれよ。
0812nobodyさん2010/12/03(金) 21:04:42ID:???
ああ、かわいそうに
IRCでキチガイに触れてしまったばかりに…
0813nobodyさん2010/12/05(日) 00:07:53ID:???
どうやらにせものだったようだ
0814nobodyさん2010/12/05(日) 17:11:31ID:???
今どきkentはねえよ。
さっさと捨てろ
0815nobodyさん2010/12/08(水) 17:33:34ID:???
今、 utf-8 の文字コードでスクリプトを書いてて、utf-8 のファイルを読み込んで、HTML の META で utf-8 を指定して表示してます。
use utf8; はしてません。

これ自体はちゃんと表示できてるのですが、ファイルを読み込むときに明示的に utf-8 だと指定した方がいいかな?と思い、
ファイルを読み込むときに <:utf8 とすると、読み込んだデータはちゃんと表示されますが、
スクリプトの中に直接書いて表示してる全角文字がすべて文字化けしてます。


'<:utf8' ではなく '<' で読み込めば、文字化けせずすべてちゃんと表示されます。

use utf8; してみましたが状況が変わりません。
binmode STDOUT, ":utf8"; としても駄目でした。


ファイルを読み込むときに <:utf8 を指定しつつ、スクリプトに書いた全角文字が文字化けしない方法ってどうやるんでしょう?
0816nobodyさん2010/12/08(水) 17:51:37ID:???
あっ、なんとなく分かった気がする

一箇所でも <:utf8 とか binmode STDOUT, ":utf8" ってやるとスクリプト全体 (use とか require するもの) に影響する。 って感じかな?
0817nobodyさん2010/12/08(水) 17:59:53ID:???
use utf8; してフラグを付ける必要性がわからない
0818nobodyさん2010/12/08(水) 20:12:49ID:???
utf8フラグをつけて読み込むと、ファイル中の生のutf8コードからperl内部コードのutf8に変換される。
一方use utf8;しないで書いてるからスクリプト中のutf8文字コードは生のutf8コードのまま。
その両者を混ぜてしまうから化ける。
ってことじゃないだろうか。
0819nobodyさん2010/12/08(水) 20:33:41ID:???
ってことでしょうね。

perlio
> :utf8
> Declares that the stream accepts perl's *internal* encoding of characters.
0820nobodyさん2010/12/08(水) 20:49:34ID:???
例えば漢字の「愛」は、
生のUTF-8nコードでは 0xe6、0x84、0x9bの3バイトだが、
Perlの内部コードでは0x611b。
前者を split // すると (0xe6, 0x84, 0x9b) ができる。単なる3バイトのデータ列としての扱い。
後者を split // すると (0x611b) ができる。内部コード0x611bの「愛」という(splitできない)1文字としての扱い。
0821nobodyさん2010/12/08(水) 21:53:27ID:???
ありがとう
文字化けする理由が >>820 でなんとなく分かった。


が、フラグを立てる理由というか使い道が分からない。
フラグを立ててれば半角全角関係なく文字数が簡単に分かる (ですよね?) とか、そうゆう利点だけな気がしてならないもんで・・・
0822nobodyさん2010/12/08(水) 22:05:28ID:???
>>821
文字数が簡単にわかるだけでなく、各文字の区切り(境界)を意識しないで文字列処理ができる。
ShiftJISコードでの文字処理・文字列処理は面倒だったなあ…(遠い目)

その代わり場合によっては文字コード変換時に一部記号などが化けることがあったりとか
別の厄介事も若干発生しているけど、まあそのへんは仕方ないかね。
0823nobodyさん2010/12/08(水) 23:05:01ID:???
>>821
フラグを立てるというか実質的に変換処理が走ってると思った方が分かりやすいはず
メリットで大きいと思うのは文字列として正しくない並びのバイト列を弾けること
0824nobodyさん2010/12/09(木) 09:19:59ID:???
>>821?正規表現で余計な事考えなくていい、とか
0825nobodyさん2010/12/09(木) 18:22:44ID:???
文字列$html に含まれるメールアドレスの全てをリストに格納したいのですがどうすればいいのですか?

while ($html =~ /([-.\w]+@[-.\w])/g)
{ push(@list, $1); }

とやると固まりました。無限ループかもしれません。
どうやったらやりたいことができるでしょうか?
0826nobodyさん2010/12/09(木) 18:27:51ID:???
業者にメアドのリストを売るつもりなんかな?
0827nobodyさん2010/12/09(木) 18:31:53ID:???
事故解決。本当は別だけど特定されたくないのでメルアドを例にしたのです。
0828nobodyさん2010/12/09(木) 18:45:33ID:???
while ($html =~ s/([-.\w]+@[-.\w])//){
push(@list, $1);
}

$html を後々使うなら

my $html_bak = $html;
みたいにバックアップを。
0829nobodyさん2010/12/09(木) 18:47:25ID:???
ちなみに最初に質問者が出したコードは無限ループしてる

同じ内容をひたすらマッチし続けてる
0830nobodyさん2010/12/09(木) 19:20:57ID:???
my @foo = $baa =~ /([-.\w]+@[-.\w])/g;
でできなかったっけ
0831nobodyさん2010/12/09(木) 19:25:05ID:???
m//g はスカラーコンテキストだとイテレータ的に動作するから無限ループにゃならんと思うんだが
0832nobodyさん2010/12/09(木) 19:42:18ID:???
どーせ隠したい()スクリプトがkusoだったんだろう
08338262010/12/09(木) 20:03:56ID:???
ちなみにこれを使った。
@list=($html =~ /([-.\w]+@[-.\w])/g);

>>828
$htmlが$mech->content()だったらどうってことないですよね?

>>829
してたと思います。確実にwhileで止まっていました。

>>831
しかし∞ループしてました。
@list=($html =~ /([-.\w]+@[-.\w])/g);
に入れ替えたとたんうまくいったので。


@list=($html =~ /mailto:([-.\w]+@[-.\w])/g);
としてもメルアドだけのリストができたんだけどどうしてですか?
0834nobodyさん2010/12/09(木) 20:06:16ID:???
↑825だった。
0835nobodyさん2010/12/09(木) 20:13:01ID:???
>>830
それは真偽値がかえると勘違いしていました。
カッコが必要だと思っていました。正しいのですね。

$baa='abc@abc xyz@xyz 1a2b3c@4d5e';
my @foo = $baa =~ /([-.\w]+@[-.\w]+)/g;
print "@foo\n";

abc@abc xyz@xyz 1a2b3c@4d5e
0836nobodyさん2010/12/09(木) 20:40:31ID:???
特定されたくなくてだかなんだか知らないが
実際に動かないコードではない別のコードを捏造して質問するとは駄目な質問者だ。
>>828は無限ループなどにならずにちゃんと機能したぞ。試してみたら。
ただタイプミスのせいで「メールアドレス」は取得し損なってるけど。
たぶん、元の動かないコードに別のバグがあったんだろう。
結局、真の原因はわからずじまいか。
0837nobodyさん2010/12/09(木) 20:51:36ID:???
foreach を使った場合は >>831 の解釈で OK かと。
while ではマッチしたかどうかの判断になるから無限ループになる。
0838nobodyさん2010/12/09(木) 20:54:22ID:???
>>836
>>828 は自分が答えた回答であって、無限ループになってるかもっていう質問者のコードは >>825
08398312010/12/09(木) 21:07:45ID:???
>>837
いや、whileの話のつもりだったんだけど。
while ( ここはスカラーコンテキスト ) { } だろ。
>>825も一応試したが普通に動いたぞ。
/g がなかったら無限ループだけど。
08408362010/12/09(木) 21:21:58ID:???
>>838
そうだった。アンカーミスった。すまん。
>>839
だからたぶん、元のコードにバグがあって (/g のつけ損ねとか)
質問用に捏造した>>825のコードではバグのないコードを書いてしまったんだろう。
と推測する次第。そうだとすると最低な質問の仕方だよな、とプチ憤ってしまった。
0841nobodyさん2010/12/09(木) 21:28:12ID:???
ほんとだ
思い込みじゃなくてテストしてみたらちゃんと動いた。
08428302010/12/09(木) 22:03:45ID:???
まあ、実際のコードを晒さないのなら質問にくんなと言いたいけれど
0843nobodyさん2010/12/09(木) 23:50:50ID:???
特定されたくないというのは、宿題を自力でやらなかったのがバレると困る、とか
そんなような理由なんだろうな、たぶん。
08448412010/12/10(金) 01:49:22ID:???
結局は宿題は出来たからいいや

でフェードアウト的な?
むぅ。。。w



while(/〜/g){ 〜 } がちゃんと回ってくれるっていう事を知れたので、
自分的には有用な流れだった。
0845nobodyさん2010/12/10(金) 08:34:17ID:???
質問です
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;
}
###################
続きます
08468452010/12/10(金) 08:35:50ID:???
>>845の続きです
$uriでアドレス指定した某ブログのとあるエントリを「getstore.html」というファイル名でローカルに保存し、
それをTreeBuilderでエントリ部分だけを抽出して出力する、というものです
上記ソースを「test.cgi」、文字コードUTFで保存し、コマンドライン上で、
>perl test.cgi > test.html
と実行し、出力されたtest.htmlを文字コードUTF前提で開くと一部だけが文字化けしています(下記画像参照)
ttp://www.dotup.org/uploda/www.dotup.org1292408.jpg

当然ですが、元となるページ(ttp://blog.esuteru.com/archives/1866797.html)では該当部分は文字化けしていません
また、この現象は以下に挙げたごく一部にのみ発生し、同ブログ内の他の殆どの記事では何故か発生しません

ttp://blog.esuteru.com/archives/1841660.html
・バグの発生手順の部分2カ所
ttp://blog.esuteru.com/archives/1833321.html
・「(「明日のよいち!」「神のみぞ知るセカイ」他)」の担当者名(「脚本:橋龍也」の部分)
・「◆3DSスパ4」の箇条書きの一部

特定の文字、あるいは複数の文字の組み合わせで発生するような気がするのですが、
当方のスキルではこれが限界でした
思い当たる点ならば何でも結構ですので、アドバイスをお願いいたします
08478452010/12/10(金) 08:46:44ID:???
>>846の補足です
発生状況のスクリーンショットです

> ttp://blog.esuteru.com/archives/1841660.html
> ・バグの発生手順の部分2カ所
ttp://up3.viploader.net/net/src/vlnet004648.jpg

> ttp://blog.esuteru.com/archives/1833321.html
> ・「(「明日のよいち!」「神のみぞ知るセカイ」他)」の担当者名(「脚本:橋龍也」の部分)
ttp://up3.viploader.net/net/src/vlnet004650.jpg

> ・「◆3DSスパ4」の箇条書きの一部
ttp://up3.viploader.net/net/src/vlnet004649.jpg
08488452010/12/10(金) 08:48:47ID:???
>>847、2枚目と3枚目のスクリーンショットを逆にしてしまいました…
適時読み替えて下さい…
0849nobodyさん2010/12/10(金) 10:56:09ID:???
とりあえずのヒントになるかな。
化けてる行のHTMLソースを見ると、?みたいな数値文字参照があるな。
これが関係していそうだな。
0850nobodyさん2010/12/10(金) 10:58:22ID:???
あれ化けちゃった。失敗失敗。
例えば「&#9314;」(←実際には半角)みたいな文字参照のある行で化けちょる。
0851nobodyさん2010/12/10(金) 16:37:59ID:???
まったくの勘だけど、とりあえずスクリプトの始めのほうにこれ書き加えてみたらどうなる?

use Encode::Alias;
define_alias( qr/s(hift.*)?jis$/i => '"cp932"' );
0852nobodyさん2010/12/10(金) 16:52:56ID:???
あー全然ちゃんと読んでなかった。
ソースは2chとかじゃなくて元からUTF-8のまとめブログか。じゃあ>>851は意味ないわ。
08538512010/12/10(金) 17:30:19ID:???
文字参照のデコード時にutf8フラグあるなしが混ざるせいで化けてるってことなので、
とりあえず結論としては $tree->parse_file のかわりに
my $html = do { local $/; open my $fh, "<", $tempfile; <$fh> };
$tree->parse(Encode::decode_utf8($html));
とすればとりあえず期待通りに動く。
0854nobodyさん2010/12/10(金) 19:49:59ID:???
<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 のどこが駄目なのか分かりません。。。
08558452010/12/10(金) 19:53:10ID:???
>>853
回答の提示ありがとうございます
こちらでもうまく動作しているようです

自分の今のスキルではおそらくたどり着けませんでした…
0856nobodyさん2010/12/10(金) 20:11:14ID:???
>>854
0回目 <a href="〜"></a><a href="〜"><img src="〜〜〜"></a>
1回目 <a href="〜"><img src="〜〜〜"></a>
2回目
0857nobodyさん2010/12/10(金) 21:32:40ID:???
<a .*?> ってやって最短にするようにしてるのに、なんで最短マッチにならないのかが、今の自分には理解が出来ない。
0858nobodyさん2010/12/10(金) 21:48:20ID:???
<a href="〜"><i
m{<a .*?></}で失敗するが

<a href="〜"><img src="〜〜〜">
m{<a .*?>}はマッチする

マッチするものの中で最短
0859nobodyさん2010/12/10(金) 21:50:49ID:???
マッチするものの中から最も短いものを選ぶから最短マッチというのであって、
>>856の「1回目」の場合 .*? にマッチするのは「href="〜"><img src="〜〜〜"」の部分ただ1箇所だけなんだからそこが消えるのは当然。
0860nobodyさん2010/12/10(金) 22:15:43ID:???
分かったような分からないような。

じゃぁ、自分がやろうとしてる 「.*?から一番最初に見つかった > まで」 を表現するとすると

<a [^>]*></a>

が正解ってところ?
0861nobodyさん2010/12/10(金) 22:16:56ID:???
間違えた

<a から最初に見つかった > まで

だった
0862nobodyさん2010/12/10(金) 22:52:33ID:???
<a href="http://..." title="(>_<)"> なんてのが出てきた場合に困るな。もちろん本来は &gt;_&lt; と書くべきところだけど。
こういうのがありえないとわかっている場合や、あっても無視と決め込むなら>>860でいいと思う。
もし厳密にやりたいなら正規表現ひとつでやろうとしないでパーザなりを使うべき。
0863nobodyさん2010/12/10(金) 23:15:31ID:???
あ〜やった理解できた気がする

> が見つかったんだから、そこで止まれよ

とか思ってたんだけど、そもそも .*? の ></a> がマッチしてるじゃないかと。

ちょっと言葉では表現できないけど、自分の勘違いっていうか、思い込みから来る理解不可能状態に陥ってた。


ありがとん。


>>862
以前 HTML を整形してくれるモジュールがあって、そのモジュールがもの凄いメモリ喰らい (それこそ 数百メガ) で
perl が落ちるってのがあったので (たしかこのスレだったような気がするのだが・・・)、
モジュール使った場合と、自力で書く場合のコード量が少ない場合は自分で書くようにしてたりします。
0864nobodyさん2010/12/11(土) 16:23:42ID:???
> そのモジュールがもの凄いメモリ喰らい (それこそ 数百メガ) で

こういう話が出てた記憶はあるけどパーサじゃなくて
(Win32環境の)LWPがなぜかくそ重いとかそういう相談じゃなかったかな。
暇つぶしにログ探してみる。
0865nobodyさん2010/12/11(土) 16:33:48ID:???
あまり暇つぶせなかった。この辺からの話じゃないのかな。

Perlコーディング初心者質問スレ Part 57
http://pc11.2ch.net/test/read.cgi/php/1203935151/32
0866nobodyさん2010/12/11(土) 21:07:30ID:???
いや、たしかにメモリを食いまくってperlが落ちるってゆうのがあった。
p2 で過去ログあさるのめんどくさいなぁww


ちょっと探してみる
0867nobodyさん2010/12/11(土) 21:16:11ID:???
みっけた。
CGI::Pretty でテーブルを作成したときにメモリ使いまくって、CPU パワー持って言って 500 エラーを返す。 ってやつだった。
http://hibari.2ch.net/test/read.cgi/php/1149017548/136-



今は直ったのかなぁ?
0868nobodyさん2010/12/11(土) 21:21:38ID:???
Win32 ActivePerl 5.12.1
128行のテーブルで試したら 130MB 使って 500 エラー

4年も経つのにw


まぁ、テーブルぐらいテメェで出力しろってことで。
0869nobodyさん2010/12/11(土) 22:31:24ID:???
863は空白行の多さから察してPerl忍者ですね。
わかります。
0870Perl忍者 ◆M5ZWRnXOj6 2010/12/11(土) 22:36:26ID:/agSJrih
863みたいにバカじゃないです。
わかります。
0871nobodyさん2010/12/11(土) 23:17:59ID:???
えっ
0872nobodyさん2010/12/12(日) 14:47:07ID:OtPTT+aF
qw{} は便利なのですが リファレンスで欲しい場合はどのようにしたらよいのでしょうか?

\qw{a b c}

としたらエラーになったので、

[ qw{a b c} ];

としたんですが、あってますか?
でもなんかしっくりこなくて。
0873nobodyさん2010/12/12(日) 14:58:30ID:???
質問しなくても大丈夫じゃん


ってぐらい正解でございますw
0874nobodyさん2010/12/12(日) 15:55:33ID:OtPTT+aF
そうなんですね。ありがとうございます
0875Perl忍者 ◆M5ZWRnXOj6 2010/12/12(日) 17:11:01ID:GuB4bd3O
そんねな
0876nobodyさん2010/12/14(火) 20:11:41ID:???
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;
0877nobodyさん2010/12/14(火) 21:47:07ID:???
なんでshutdownしてんの?
0878Perl忍者 ◆M5ZWRnXOj6 2010/12/14(火) 22:44:39ID:3UzhxS91
バッファ
0879nobodyさん2010/12/15(水) 12:41:57ID:???
shutdownはこのサイトを参考にしてみた。
http://d.hatena.ne.jp/perlcodesample/20090406/1238902770

shutdownを外したらrecvでブロックするようになった。
wiresharkで見ると何か飛んできてるんだけどなあ。
0880nobodyさん2010/12/15(水) 12:55:00ID:???
recvの戻り値ぐらいは見ろよ
0881nobodyさん2010/12/15(水) 15:16:11ID:VvPjVUom
1 !== "1" のようなことをperlで行うにはどのようにしたらよいのでしょうか?
0882nobodyさん2010/12/15(水) 15:32:33ID:???
できない。

perl処理系のソース読んでスカラーをどう保持してるか
調べてみるといいよ。
0883nobodyさん2010/12/15(水) 16:40:46ID:VvPjVUom
そうなんですね・・。

文字列か数値かを判断する方法はないでしょうか?

Devel::Peek でフラグを見る方法だとちょっと大げさすぎるかなと思うので
なにか良い方法はないでしょうか?

最初 +1-1 してチェックできるかなと思ったのですが perl だと意味無いですしね・・
0884nobodyさん2010/12/15(水) 18:31:17ID:???
>>883
通常区別する必要がないから組込関数のような形で用意されていないのであって、
必要に感じるのならそれは他の言語の流儀をPerl上でも押し通そうとしているからだ。

どうせ使う前には汚染除去やバリデートをするんだから、単純な整数なら
$num = $num =~ /^([0-9]+)$/ ? $1 + 0 : 0;
のようにチェックのついでに数値化するだけだし、ある文字列が数値として適切に
解釈可能かどうかを調べたいなら Scalar::Util::looks_like_number() がある。
0885nobodyさん2010/12/15(水) 21:17:32ID:VvPjVUom
他の言語にデータを受け渡す為に出力するので、数値なら数値で、文字列なら文字列で
渡したいのでなんか楽に軽く判別する方法ないかな〜なんて・・・。

YAMLやJSONとかのモジュールの正常性テストとかにも使いたいなとか。
0886nobodyさん2010/12/15(水) 22:11:31ID:???
なんで int() 使わないの?
0887nobodyさん2010/12/15(水) 23:23:42ID:???
判別させるんじゃなくて渡すときに数値/文字列を決めてやるのではだめなのかな。
0888nobodyさん2010/12/17(金) 16:39:29ID:???
文字列を連結させてprintする場合は、下記のAとBどちらを使うべきでしょうか?

my $str1 = "あ";
my $str2 = "い";

print "$str1$str2";#・・・A
print $str1 . $str2;#・・・B
0889nobodyさん2010/12/17(金) 17:36:30ID:???
>>888
実行環境と渡す内容によるし、繋げずに渡してもいい。
print $str1, $str2;
強いて言うなら、特定の条件下でカリカリにチューニングしたいわけでないなら
「読みやすいように」書くといい。
08908882010/12/17(金) 17:43:29ID:???
>>889
ケースバイケースって事ですね。
ありがとうございます。
0891nobodyさん2010/12/18(土) 00:07:20ID: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";
0892nobodyさん2010/12/18(土) 04:56:26ID:???
$input{howmany}でループを回しているから
0893nobodyさん2010/12/18(土) 05:40:58ID:???
そういうつまらんミスで時間を無駄にしないためにも
せめて use strict; くらいは使おうぜ
0894Perl忍者 ◆M5ZWRnXOj6 2010/12/18(土) 14:12:29ID:lZZb3And
perlのスレってネトゲみたい
0895nobodyさん2010/12/18(土) 22:45:42ID: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…と順次格納されると考えていたのですが…
どの部分がおかしいのでしょうか?
0896nobodyさん2010/12/18(土) 23:05:25ID:???
>>895
パターン内にあるキャプチャ用のカッコが1つだけだから $2 以降は使われないよ。

my @matches = $text =~ /(10.)/g;
print "@matches\n";

こんな風に配列に入れたらどうかな。
0897nobodyさん2010/12/18(土) 23:12:09ID:eFFNyC2E
>>896
自分の正規表現の理解が間違っていたようです
配列で取得する必要があったのですね
ありがとうございました
0898nobodyさん2010/12/19(日) 01:56:11ID:???
一括取得ではなく順ぐりに1つずつ処理でもいいなら
while($text=~/(10.)/g){print $1;}
以上蛇足
0899nobodyさん2010/12/19(日) 17:16:51ID:???
i
0900nobodyさん2010/12/20(月) 04:07:28ID:???
>>890
速度的には「,」繋ぎが速いらしいね
""でくくると変数の範囲をチェックするし、「.」で繋ぐと変数の中身を判断するんで、その分遅くなるのだそうな
0901nobodyさん2010/12/20(月) 12:51:46ID:klkFZZbW
perl5.8.8で、use utf8としてutf8でソースを書いています。
その中で文字列を生成→出力と単純な処理を行っているのですが、文字列がある一定の長さを
越えた辺りで、iso-2022-jpで出力するとその長さ前後の数文字だけ\b{xxxx}の形に文字化けします。
eucやutf8で出力すると、化けません。
また、適当な長さのところに改行を入れると、iso-2022-jpでも文字化けしません。
これってどういう現象なのでしょうか..解決先を御存じ、または同じ現象に遭遇した方いらっしゃいますでしょうか。
0902nobodyさん2010/12/20(月) 12:57:22ID:klkFZZbW
>901
すいません、化け方は\x{xxxxx}の間違いです。やはり直前の改行以降300文字前後で化けます。
0903nobodyさん2010/12/20(月) 13:06:16ID: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";
0904nobodyさん2010/12/20(月) 14:28:44ID:???
>>903
手元のlinux上の5.10.1で動かしてみたが別に変なことはないけどな。
プログラムは特になんの変哲もないから、現象が本当ならなにかの
バグぐらいしかおもいつかない。バージョンや環境は?
0905nobodyさん2010/12/20(月) 14:32:42ID:klkFZZbW
>904
RedHat ES4 + perl-5.8.5と、FreeBSD 5-STABLE + perl 5.8.8の2つの環境で
確認しました。
perlのバグですかね・・・。うーん。
0906nobodyさん2010/12/20(月) 15:19:18ID:???
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";
-------------
0907nobodyさん2010/12/20(月) 15:25:33ID:klkFZZbW
>906
最新のEncode.pm(2.40)でもdoes not map to euc-jpと出ました。
5.10.1でOKということはEncode.pmの問題じゃなくて本体の方の問題ですかね。

>binmode を使わないで、最後の方をこうするしかないみたい。

なるほど、確かにこちらならOKでした。
出力先がフィルターやファイルなのでこのまま書き直してうまく行くか確認が
必要ですが、こちらの方で動くか試してみます。ありがとうございます!
0908nobodyさん2010/12/20(月) 18:35:18ID:???
content-type が Shift_JIS とか指定してたりして。。。
0909nobodyさん2010/12/21(火) 01:22:26ID:???
再現した
v5.8.8 built for i386-linux-thread-multi
Encode 2.40
0910nobodyさん2010/12/21(火) 03:00:18ID:???
それPerlIOの仕様で1024バイト目でぶっちぎれてるんでしょ。
http://blog.livedoor.jp/dankogai/archives/51231739.html

>>906の言うようにbinmodeを使わないのが正解。
utf8::encodeしてfrom_toとかじゃなくて print encode("iso-2022-jp", $x) のほうがいいと思うけど。
0911nobodyさん2010/12/21(火) 06:28:50ID:???
>>910
すごい。勉強になった。
0912nobodyさん2010/12/21(火) 09:05:29ID:???
>>910
自分でencode関係のモジュール作るときは気をつけろって話じゃないの?
さすがにちぎれたからって結果がおかしくなるようなものが標準添付なのは
どうかと思うな。
0913nobodyさん2010/12/21(火) 09:35:50ID:???
元質問者です。
>910
なるほど・・勉強になりました。
0914nobodyさん2010/12/21(火) 17:40:31ID:???
WWW::Mechanize を使ってフラッシュプレイヤーがインストール済み
であるかのように振舞うにはどうしたらいいのでしょうか?
0915nobodyさん2010/12/22(水) 08:58:19ID:???
>>914
普通のブラウザでアクセスしたときの通信内容をよく観察して
真似すればたいていなんとかなる。
0916nobodyさん2010/12/22(水) 09:00:32ID:???
大概Javascriptで判定されてるからあんまり気にしなくてもいいんじゃない
0917nobodyさん2010/12/22(水) 11:08:37ID:???
WWW::Mechanize が JavaScript をエミュレートしてくれればねぇ。。。
0918nobodyさん2010/12/23(木) 10:41:19ID:???
utf フラグが付いた文字列を LWP に投げるとエラー出るのね

1時間ぐらい悩んだわ
0919nobodyさん2010/12/25(土) 00:42:21ID:???
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.

ってちゃんと出る。

むぅ。。。
0920nobodyさん2010/12/25(土) 01:59:19ID:???
$ perl test.cgi
0921nobodyさん2010/12/25(土) 04:32:14ID:???
あらほんとだ。 表示された。。。
逆になんでブラウザだと表示されないのか、それはそれで疑問がw
0922nobodyさん2010/12/25(土) 04:48:35ID:???
use utf8;
0923nobodyさん2010/12/25(土) 04:57:06ID:???
それは外せない。
0924nobodyさん2010/12/26(日) 16:40:31ID:0uuAPxVP
       ■ 2chに韓国猿降臨 ■

 Flash板のスレッドにバカチョンが降臨しました、
スレッドは以下のスレです。

2009年 紅白FLASH合戦 新企画・反省スレッド
http://hibari.2ch.net/test/read.cgi/swf/1262431858/l50

 上記スレッドの281が韓国猿で、
> 来年 12月 11日に全域します. 後でみなさんと共にできますね.
等とほざいています、是非煽って煽りまくって火病らせてあげてください^^
09258912010/12/28(火) 04:26:30ID:???
>>892,893
遅くなりましたがアドバイスありがとうございました
0926nobodyさん2011/01/02(日) 02:18:19ID:???
明けましておめでとうございます
AmigoDatabaseを使ってデータベースに興味をもち、CSV形式で
1項目あたり2000個くらいの要素を抱えていて全部で1万項目
くらいのデータベースになりました
それぞれの要素は原則文字列なのですが時々数値が混じります
この数値を足し算したい場合、個々の数値が連想配列だとしたら
どのようにすれば良いのでしょうか
質問の仕方があいまいですみません
0927!omikuji2011/01/02(日) 07:35:30ID:???

0928nobodyさん2011/01/02(日) 14:45:17ID:???
>>926
>>1-2
http://perldoc.jp/docs/perl/5.10.1/perlfaq.pod
0929nobodyさん2011/01/03(月) 00:07:46ID:???
abcdefg

っていう文字列に対して

cdefg を検索し、efg を xyz に置換

っていうのはどうかけばいいんでしょう?
0930nobodyさん2011/01/03(月) 00:17:22ID:???
my $s = 'abcdefg';
$s =~ s/efg/xyz/
if($s =~ /cdefg/);#cdefgを検索

こうですか
0931nobodyさん2011/01/03(月) 00:22:50ID:???
いつも
my $s = 'abcdefg';
$s =~ s/(cd)efg/$1xyz/;
みたいな感じでやってる
0932nobodyさん2011/01/03(月) 00:27:26ID:???
$s =~ s/cdefg/cdxyz/g;
では不満なのか

あえて特殊エスケープとかつかうなら
$s =~ s/cd\Kefg/xyz/g;
または
$s =~ s/(?<=cd)efg/xyz/g;
0933nobodyさん2011/01/03(月) 00:30:47ID:???
はいw
s/abcdefg/abcdxyz/;
0934nobodyさん2011/01/03(月) 01:31:06ID:???
スクレイピングで色々やってんだけど、記事を持ってくるサイトが
頻繁に CSS のクラス名を変えたり、順番を変えたりするもんで、
修正漏れに気がつかずにハマったので、一致するけど
置換は行わない部分の指定が出来れば。と思った次第です。

なので、>>932 さんの方法を試してみます。
09359312011/01/03(月) 01:49:54ID:???
>>932
おぉ。そんな感じにできるんだ。すげぇ。
perldoc perlre見たらちゃんと書いてあった。勉強になった。
For instance
s/(foo)bar/$1/g;
can be rewritten as the much more efficient
s/foo\Kbar//g;
09369322011/01/03(月) 02:46:25ID:???
あーでも\K使えるのはPerl5.9.5以降だから一応注意な。
0937nobodyさん2011/01/03(月) 08:19:04ID:???
\Kは*や+といったメタ記号も使えるから便利だね。
否定形は何故作らなかったのだろうか。
0938nobodyさん2011/01/03(月) 12:15:50ID:???
否定だと普通にマッチして場所覚えるだけじゃ
すまなくなるからじゃないかな。
0939Perl忍者 ◆M5ZWRnXOj6 2011/01/03(月) 16:28:47ID:jfo7ol9+
gfx君←(笑)
0940nobodyさん2011/01/04(火) 14:59:21ID:???
コンソールで Term::Screen 使ったあとに vim を使うと
日本語入力ができなくなっているのですがどうすれば良いでしょう?
何かもとに戻す手続きはあるのでしょうか?

$ cat ./ScreenApp.pl

#!/usr/bin/perl
use Term::Screen;
my $scr = new Term::Screen;

$ ./ScreenApp.pl

画面描画

$ vi

で “あ[Enter]” と入力すると “c^B” と表示されて
「まだテキストが挿入されていません」とエラー
0941nobodyさん2011/01/04(火) 15:07:36ID:???
おい、早く質問に答えろ
0942nobodyさん2011/01/04(火) 15:25:09ID:???
はい
0943940 ◆GUbG3XWPzc 2011/01/04(火) 15:28:40ID:???
>>941
は自分ではありません。
よろしくお願いいたします
0944940 ◆vx6KgJyjvE 2011/01/04(火) 15:55:48ID:???
>>943
偽?やめてくれませんか?

教えてください
0945nobodyさん2011/01/04(火) 16:03:28ID:???
>>940
試してみたら手元の環境でもおかしくなった。resetコマンドで
直ったけど端末関係は詳しくないので原因とかはわかんね。
何かの状態を書き換えたまま放置とかしてるんだろうけど。

0946 ◆GUbG3XWPzc 2011/01/04(火) 16:31:45ID:???
ご報告ありがとうございます
reset コマンドは初耳でしたが有効でした
09479262011/01/05(水) 02:24:02ID:???
>>928
リンク先の>>1-2は別として、有用なリンクを教えて頂いてどうもありがとうございます。
Perlをよくご存知の方なら知っていて当然のリンクも分からないのが今の自分なんです。
これから精進します。
0948nobodyさん2011/01/06(木) 09:58:08ID:???
my $in = new CGI;
ってやった時に $in から ENCTYPE を調べる方法ってありますか?
あと GET と POST を同時受け取るのって、CGI からは無理?
<form method="POST" action="aaa.cgi?opt=1">
みたいので呼び出したいのですが。。。
0949nobodyさん2011/01/06(木) 11:21:12ID:???
query stringじゃないといけないんですか、<input type=hiddenでは駄目なんですか?
0950nobodyさん2011/01/06(木) 12:07:30ID:???
作り方が悪いのは承知ですが、処理の振り分けのオプションは GET で渡してて、
機能追加でファイルアップロードを付けようとしてるしだいで、GET で渡す部分は
弄りたくは無いなと・・・
0951nobodyさん2011/01/06(木) 12:27:29ID:???
>>948
request_methodとurl_paramでなんとかなるだろ。
詳しくはマニュアル嫁
0952nobodyさん2011/01/06(木) 12:36:05ID:???
お〜 url_param がまさに求めてたやつ!!
thx!
0953nobodyさん2011/01/10(月) 17:44:08ID:???
2chソースくれ
0954nobodyさん2011/01/10(月) 19:35:07ID:???
>>953
【速報】bbs.cgiのソースが流出 ついに来たか・・・
http://hato.2ch.net/test/read.cgi/news/1294647372/

ここからDLできる
0955nobodyさん2011/01/11(火) 22:48:54ID:???
半角記号をパターンマッチさせたいのですが、上手くいきません。
Perlどころか正規表現の扱い方すら覚え始めなので、根本的に間違ってるかも知れませんが

if ($value =~ /[@-/]/)
if ($value =~ /[\@-\/]/)
if ($value =~ [@-/])

どれもエラーが出てしまいます。
模範的な書き方としてはどうすればいいのか、お教え願えませんか
0956nobodyさん2011/01/11(火) 23:17:24ID:???
>>955
どの範囲にマッチさせたいのかわからない。
http://e-words.jp/p/r-ascii.html

^@ で表したりする NUL(\x00) と @(\x40)はちがうよ。
0957nobodyさん2011/01/11(火) 23:23:27ID:???
/ はエスケープ
@はそのまま
-を3文字の中央に配置すると範囲指定になるので、エスケープするか最初に配置
0958nobodyさん2011/01/12(水) 00:04:41ID:???
>>956-957
お早いご回答、ありがとうございます。

$valueが
半角記号を含むかどうかを判別したいと思っていましたが
どうやら間違えていたのでしょうか
ttp://jp.layer8.sh/reference/entry/show/id/1121
こちらを見て
[@-/] で @!"#$%&'()*+,-./ をマッチ出来ると思っていました。



それならばとりあえず@は省くとしたら、

if ($value =~ /[!-\/]/)

これで !"#$%&'()*+,-./ を含むかどうか、を判別出来ると思ったのですが、
今度はエラーは出ないものの、マッチしてくれません。

基本的すぎるのか、
perl 半角記号 パターンマッチ 正規表現
あたりのキーワードでググってみても、いまいち解り易いページに辿り付けなくて難儀してます。
0959nobodyさん2011/01/12(水) 00:14:06ID:???
ん?どうなって欲しいんだろう。\x21-\x2fの範囲内のが混ざってたら真が返るはずだけど。
0960nobodyさん2011/01/12(水) 00:17:44ID:???
$value =~ m{[@-/]};
Invalid [] range "@-/" in regex; marked by <-- HERE in m/[@-/ <-- HERE ]/ at - line 1.

エラーになるのか。初めて知った。
0961nobodyさん2011/01/12(水) 00:18:13ID:???
[\x21-\x2f]
[\x3a-\x40]
[\x5b-\x60]
[\x7b-\x7e]

これが記号かな?
09629552011/01/12(水) 00:38:59ID:???
>>959
申し訳ない、ちゃんと正しい結果が返っていました。
こちらの確認不足でした。

>>961
こう16進数で表記してマッチさせる事も出来るんですか。
より幅広くチェック出来そうなので、色々試してみます。




とりあえず、したかった事はどうにか上手くいきそうです。
皆様ご助言、ありがとうございました。
0963nobodyさん2011/01/12(水) 18:05:54ID:???
LWP で $ua->proxy('http', 'http://' . $proxy) のように Proxy をセットしたものの、
後々解除したいときってどうすればいいんでしょう?

$ua->proxy('http', '') とかでよかったりします?
0964nobodyさん2011/01/12(水) 19:23:23ID:???
ためしてみりゃいいじゃん
0965Perl忍者 ◆M5ZWRnXOj6 2011/01/12(水) 21:33:48ID:Icf1UA6A
ためしてみりゃいいじゃん
0966nobodyさん2011/01/14(金) 00:08:21ID:???
モジュールの命名規則についての質問です。
自分用のモジュールを用意しようと考えています。

オブジェクト指向のものを「Object::○○」に置き、
関数指向のものを「Function::○○」か「Utility::○○」に置こうと考えています。

問題点や、別の考え方、流行などがあればご指摘おねがいします。
0967Perl忍者 ◆M5ZWRnXOj6 2011/01/14(金) 00:29:01ID:???
ガッチガチですね^^;
0968nobodyさん2011/01/14(金) 00:37:38ID:???
>>966
http://perldoc.jp/docs/perl/5.10.0/perlnewmod.pod
>・Choose a name
> (名前を決める)
> CPAN に含まれる Perl モジュールには、命名階層があり、それに合わせる必要があります。
> これがどのように整理されているかの詳細は、perlmodlib を参照してください。
> また、CPAN やモジュールリストを見て回って、どんなものか触れてみてください。

http://search.cpan.org/

http://perldoc.jp/docs/perl/5.10.0/perlmodlib.pod
> ・モジュールのための名前を選択しましょう。

> 関連したモジュール/クラスの一揃えを開発するのであれば、それは名前空間を破壊することを
> 防ぐような一般的なプリフィックスを持つネストしたクラスを使うよい練習になるでしょう。たとえば
> Xyz::Control, Xyz::View, Xyz::Model といったものです。

> もしプライベートな内部やプロジェクト固有の用途のために開発中のモジュールが決して公開
> されることがないなら、将来の公開モジュールと名前が衝突しないことを確実にしてください。
> これは、予約済みの Local::* カテゴリを使うか、 Foo_Corp::* のように名前に下線を含める
> ことで行えます。
0969nobodyさん2011/01/14(金) 01:10:22ID:???
>>968
回答ありがとうございます。
公開予定のないモジュールですので、名前に下線を含める方向で検討したいと思います。
0970nobodyさん2011/01/14(金) 01:34:59ID:???
while($html =~ s/<br \/><br \/><br \/>/<br \/><br \/>/){
print '.';
}

連続した3つの改行タグを2つの連続した改行タグに置換しようとしてるんだけど、
改行タグが置換されません。
0971nobodyさん2011/01/14(金) 02:12:58ID:???
>>970
こういうのじゃだめかしらん?

$html =~ s/<br \/><br \/><br \/>/<br \/><br \/>/gm;
print $html;
0972nobodyさん2011/01/14(金) 03:21:44ID:???
セルフ以外の値を得る場合に、アクセサのゲッターメソッドを使うという制約をつけてみようと思いました。
こういったやりかたが一般的かどうかを知りたいので、賛成意見、反対意見などがありましたら、宜しくお願いします。

ファイル操作で例えると以下のような感じです。(※セルフ=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";
0973nobodyさん2011/01/14(金) 07:35:58ID:???
メソッドチェーン?
0974nobodyさん2011/01/14(金) 17:50:11ID:???
>>973
そそ、メソッドチェーン。
セルフを返すメソッドと返さないメソッドが混在するのがモヤモヤするから質問してみた。
それだったら、アクセサだけで対応しようかなとおもったわけで。
井の中の蛙なので、外の情報が欲しいのです。
0975nobodyさん2011/01/14(金) 18:22:33ID:???
この例だとあえてメソッドチェインを使うメリットはない気がするけど、
それは置いといてもset_*でselfが返ってくるのはキモいと思う。
0976nobodyさん2011/01/14(金) 18:55:04ID:???
>>971
それでも駄目でした。
ん〜なんだろ。。。
0977nobodyさん2011/01/14(金) 19:00:21ID:???
本当に解決したいと思ってんなら$htmlの当該部分を書けよボケ
0978nobodyさん2011/01/14(金) 20:21:04ID:???
>>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使ったら、改行タグ減りまくりになりそう。
0979nobodyさん2011/01/14(金) 20:27:11ID:???
>>978
>>977が言いたいのは「htmlがおかしいんじゃねぇの?」ってことでしょ
解決するような世紀表現出しても元がおかしくてダメだと解決しないからってことで
0980nobodyさん2011/01/14(金) 23:05:32ID:???
>>978
あー、部分的なコードだけみても、対応できないってことか。
0981nobodyさん2011/01/15(土) 01:05:53ID:???
>>978
改行タグを減らしまくるのが目的です

$html の中身はブログから持ってきたデータで、<br /> を削除する前に
s/\r|\n|\t//g で改行コードとタブコードを全部削除して1行にしてあります。

で、処理するデータはデバッグとしてファイルに書き出して、目視で削除したい <br /> の連続があるのを確認済みです。
0982nobodyさん2011/01/15(土) 01:09:23ID:???
お客様の中にエスパー様はいらっしゃいませんかー
0983nobodyさん2011/01/15(土) 01:53:54ID:???
>>981
とりあえず、問題点を予想してみた。

・テキスト側が、<br />ではなく<br>(半角スペースとスラッシュをつけていない)
・テキスト側が、<br />ではなく<br/>(スペースの入れ忘れ)
・質問者のサーバーがMac。を入れるところを\マークにしている。
・エラーコード500である。
・strict宣言をしているのに、変数を初期化していない。

<<982
いや、まさかな
・元になるテキストの、<br />と<br />の間にスペースが入っていたりして。

とりあえず、改行タグを取る前の内容を出力してみてはどうでしょう?
0984nobodyさん2011/01/15(土) 06:05:42ID:???
>>981
$html =~ tr/\t\n\r / /s; # 改行、TAB、空白の圧縮
$html =~ s/^ | $//g; # 先頭と末尾に空白があれば削除
$html =~ s/(?<=>) (?=<)//g; # タグ間の空白を削除
$html =~ s|(?:<br\b[^>]*>){3,}|<br /><br />|gi;
0985nobodyさん2011/01/15(土) 08:03:36ID:???
>>983
んー。試したら、普通に動いてしまった。気のせいだろうか。
おいらの結論としては、$htmlの中身、ブログのテキストをうまくとりこめてないのかなと。
ファイルが原因だとしたら、デコードやエンコードを失敗してるのではないでしょうか。
そうでなければ、余計な文字列が紛れ込んでいるのかなと。

0986nobodyさん2011/01/15(土) 08:05:58ID:???
>>985
安価まちがえた
>>984
0987nobodyさん2011/01/15(土) 09:59:19ID:???
>そうでなければ、余計な文字列が紛れ込んでいるのかなと。
だから >>984 は空白を削除したり[^>]*で余計な文字列が紛れ込んでてもマッチするようにしてるんじゃないか
0988nobodyさん2011/01/16(日) 03:20:10ID:lrCOl2/v
質問させてください
perlでCGIを作っているのですが、
アクセスしてきた人が、どんなHTTPヘッダーを送ってきているのか調べたいのですが、
ページにアクセスされた時にHTTPヘッダーの取得する方法はどうすればいいでしょうか?
0989nobodyさん2011/01/16(日) 03:47:42ID:???
use cgi
my $in = cgi->new
$in->str_なんちゃら


関数名失念
0990nobodyさん2011/01/16(日) 03:54:27ID:???
$ENV{HTTP_*}
0991nobodyさん2011/01/16(日) 04:20:42ID:???
それだけとは限らないw
0992nobodyさん2011/01/16(日) 06:51:02ID:???
>>>990 それは環境変数であって HTTP ヘッダではない
0993nobodyさん2011/01/16(日) 08:32:57ID:???
>>988
CGIの仕様としては送られてきたヘッダはHTTP_*という環境変数に入れて渡すという
ことになっているが、必ずしも全て渡さなくていいというよりむしろいらないヘッダは
渡すべきではないということになってるので確実に全てのヘッダを取得することは一般的
にはできないと思った方がいい。(RFC3875の4.1.18)

> サーバは、それが受信した全てのヘッダフィールドについての外部変数を作成する必要はない。
> 特に、例えば 'Authorization' のような、認証情報を転送する任意のヘッダフィールドや、
> あるいは、例えば 'Content-Length' や 'Content-Type' のような、他の変数からスクリプト
> にて利用可能なものは取り除くすべきである。 サーバは、'Connection' のような、クライアント
> 側との通信上の点にのみ関係するようなヘッダフィールドは取り除いてもよい。

特定のヘッダが欲しいのかただなんとなくみたいだけなのかトラブルシューティングで全部
必要なのかよくわからんからこれ以上はなんとも言えんな。
0994nobodyさん2011/01/16(日) 10:27:12ID:???
>>989-993
お答えいただきありがとうございました
HTTPヘッダーで値を受け渡しして動作するCGIを作ってみようと思ったのですが、
HTTP_*で取得できるのですね
本当にありがとうございました
0995nobodyさん2011/01/16(日) 18:28:35ID:???
次スレ立ててくる。
0996nobodyさん2011/01/16(日) 18:30:17ID:LLQAziXD
はい。

Perlコーディング初心者質問スレ Part 62
http://hibari.2ch.net/test/read.cgi/php/1295170172/
0997nobodyさん2011/01/16(日) 18:36:51ID:???
otu
0998nobodyさん2011/01/16(日) 19:37:25ID:???
ぺrl
ぺrl
ぺrl
0999nobodyさん2011/01/16(日) 22:34:01ID:???
999
1000nobodyさん2011/01/16(日) 22:34:42ID:???
1000
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。