くだすれPerl(超初心者用)3
- 1 :nobodyさん:2009/03/31(火) 22:20:27 ID:???
- このスレッドは、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。
Perl使いが優しくコメントを返しますが、
お礼はPerlの布教と初心者の救済をお願いします。
前スレ
くだすれPerl(超初心者用)2
http://pc11.2ch.net/test/read.cgi/php/1204488452/
関連スレ
Perlについての質問箱 39箱目
http://pc12.2ch.net/test/read.cgi/tech/1234181856/
Perlコーディング初心者質問スレ Part 59
http://pc11.2ch.net/test/read.cgi/php/1234752149/
【Perl上級者コーナーPart01】
http://pc11.2ch.net/test/read.cgi/php/1024741312/
- 2 :nobodyさん:2009/03/31(火) 22:23:20 ID:???
- PERL(笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑)
時代はPHPですよ
化石ども必死だな
- 3 :nobodyさん:2009/04/02(木) 16:40:02 ID:8XnYHneD
- >>1乙
と言っておこう
- 4 :nobodyさん:2009/04/02(木) 16:46:23 ID:???
- ブログではなく、自身のホームページにコメント欄を設置したいのですが、
コメントを送信したら自動的にhtmlに上書きされてページがリロードされるような
プログラムはどのように書けば良いですか?
考え方を教えていただければ自分で勉強しながら作ってみようと思いますので
どうかよろしくお願いします。
- 5 :nobodyさん:2009/04/02(木) 18:30:57 ID:???
- 表示したいHTMLがindex.htmlだとして、例えばindex_source.htmlを別に用意して
中に「#####REPLACE_HERE#####」みたくユニークな文字列を生めておく。
そこをコメントで置換してindex.htmlに上書きする。
- 6 :nobodyさん:2009/04/02(木) 22:09:04 ID:???
- 大昔のCGIのようなperlしか知らなかったので
最近オブジェクト指向を勉強しているのですが、なかなか理解できません。
たとえばタブ区切りテキストの外部ファイルを読み込んで
それぞれのデータを車というオブジェクトにして処理をしたい場合、
use Car;
sub new {
my $class = shift;
....
}
とコンストラクタを作って、テキストから読み込んだデータを引数とした
オブジェクトを作っていくことになると思うのですが、
すべてのデータに対してオブジェクトを作成するには
my @cars;
while (@lines) {
my ($name, $price, ....) = split /¥t/;
my $obj = new Car $name, $price, ...;
push @cars, $obj;
}
といった処理を行うことになるのでしょうか。
解説サイトなどを読むと、なんだか違うような気もするのですが
こういう具体的な使い方に関する記載のあるサイトが見つかりません。
この理解で正しいかどうか、正しくないならどういった用法が正しいのか
ご教示いただければ有り難いです。よろしくお願いします。
- 7 :nobodyさん:2009/04/02(木) 23:03:49 ID:qrjZG7kJ
- 例が所々気になるのは横に置くとして…。
そりゃ「オブジェクト指向側(モジュールね)」のコーディング次第だろ。
呼び出し側は、オブジェクト指向側の説明を読んでその指示通りに
コーディングするしかない。
あなたが使いたいモジュールがあるならその説明を読めば良いし、
オブジェクト指向側のコーディングをしたいなら、どうするか明確に決めて
作成すれば良い。
具体的には、その例で、package Car (だよね)がセル単位で処理する
(=行毎)なら、呼び出し元でも、行単位でオブジェクトを作成して、
行単位で処理せざるを得ない。
- 8 :nobodyさん:2009/04/02(木) 23:05:00 ID:???
- ああ、上げちまったorz...
- 9 :nobodyさん:2009/04/03(金) 02:33:22 ID:???
- 俺もオブジェクト指向は初心者ですが…
まずコンストラクタにはハッシュにして渡すのが一般的だと思う
ブレスするときどーせハッシュにするんだから、渡すときもハッシュのがメモリ的にも都合がいいんじゃないかな
- 10 :6:2009/04/03(金) 03:50:19 ID:???
- >>7
何をやりたいのか書いてませんでしたね、ごめんなさい。
やりたいのは車のデータを各パラメータごとに比較したり
条件に合うものを抽出したりしつつ、
データに変更を加えて保存し直したりといった作業なんです。
なので、読み込んだデータを元に
その分だけのオブジェクトを生成する必要があるのかなと考えました。
既存モジュールの使用は今のところ考えていません。
>>9
確かに、ハッシュにして受け渡すのが一般的ですね。失念していました。
サンプルのコードもぐだぐだです…申し訳ないorz
- 11 :nobodyさん:2009/04/03(金) 11:27:31 ID:???
- >>5
遅くなりましたが、どうもありがとうございます。
試してみます
- 12 :nobodyさん:2009/04/04(土) 05:04:43 ID:???
- >>10
sqlとの連携は考えてないと
じゃあインスタンス変数には車一台一台よりも車のデータ全部と条件を入れるようにした方がいいかも
{
cars => [{一台目のデータ色々}, {二台のデータ色々},…],
condition => {limit => 120, offset => 60…},
}
こんな感じのハッシュ作ってbless
空のハッシュをblessしてから色々付け足してもいい
条件は変更可能なようにセッターを作っておく
読み出し先が決まってるならnew内でハッシュの形に変換してやるだけでいいから引数には条件以外渡す必要はない
こうしてやると比較メソッドも抽出メソッドも車オブジェクトを2つ作って〜ってやるより簡単に実装できると思う
ここではカタログを作る方が絶対に正しい
知らんけどな
- 13 :nobodyさん:2009/04/04(土) 12:46:52 ID:WDYa0L/p
- 全くの初心者です。
とりあえず本に書いてあるとおりに打ち込んでるんですが、
require 'cgi-lib.pl';
と言う文に関してですが、「cgi-lib.pl」というファイルは普通パールをインストールしたときに入っているものなのでしょうか?
どこを探しても見つからないのですが。
パールは5.8.8を使ってます。
- 14 :nobodyさん:2009/04/04(土) 13:07:00 ID:???
- cgi-lib.plでぐぐれば鬼のようにヒットする
- 15 :nobodyさん:2009/04/04(土) 13:08:15 ID:WDYa0L/p
- >>14
そうなんですか;
すみませんでした。
検索してきます。
- 16 :nobodyさん:2009/04/13(月) 12:18:35 ID:HKNZkh73
- すいません。初心者です。
$hoge = ($hoge1, $hoge2)[$hoge3];
という記述が出てきたのですが、よく意味がわかりません。
$hogeにはどういう値が入るのでしょうか。
よろしくお願いします。
- 17 :nobodyさん:2009/04/13(月) 12:26:48 ID:???
- print $hoge;すればわかるよ
- 18 :nobodyさん:2009/04/13(月) 19:01:36 ID:???
- my @list = ('hoge', 'huga');
print $list[0];
これは分かるよな?
my ($foo, $bar) = ('hoge', 'huga');
print $foo;
これも分かるよな?
my $baz = ('hoge', 'huga')[0];
print $baz;
じゃぁ、これも分かるよな?
- 19 :nobodyさん:2009/04/13(月) 22:37:57 ID:4dLnuytP
- 質問です。txt形式の100個以上のデータが一つのフォルダに入っていて、
これを全部開いてその内容を一つのデータにまとめたいです。
yahoo知恵袋を参考にしたところ、コマンドプロンプト上で表記する場合は
while(<*.data>)
{
## $_には、*.DATAなファイル名が格納されている。
open(F,"$_"); ##openする。
while(<F>)
{
##読み出された内容が$_に格納されている。
print $_; ##出力してみる。
}
}
でよい、とされていました。なのでmatome.txtというファイルに展開するとして
open(F1,">matome.txt")
while(<*.txt>)
{
open(F2,"$_");
while(<F2>)
{
print F1 $_;
}
}
としたところ延々と一部を除いたデータだけの書き込みを行ってしまいました。
まず、なぜこの書式では無限ループになるのかがわかりません。
また、なぜファイル内のデータで*.txt形式に当てはまっているものの一部が
省かれてしまったかがわかりません。
長くなってしまい申し訳ありませんがどなたか教えてください。
よろしくお願いします。
- 20 :nobodyさん:2009/04/13(月) 23:59:17 ID:???
- matome.txtから読んでmatome.txtに書いているのか
- 21 :nobodyさん:2009/04/14(火) 02:04:04 ID:rIst05p+
- >20
19ですが
ありがとうございました
やっとわかりました
この場合はmatome.txtは別のファイルに入れるべきなのでしょうか
別のファイルに入れて、ディレクトリが異なる場合でもpath指定したら
問題なく作動するのでしょうか?
何度か別ファイルにあるtxtデータに書き込むと失敗するのですが、
pathに日本語があるとだめなのでしょうか?
ちなみにwindows XPを使用しています。
- 22 :nobodyさん:2009/04/14(火) 05:19:49 ID:???
- openしたら必ずcloseしよう。
while(<*.txt>) { print $_ . "\n"; }
で出力されたファイル名と実在のファイル名を比較してみたら?
俺だったらファイル名を一度リストに入れてから処理する。
use strict;
opendir DIR, "textfiles/";
my @txtfiles = grep { /\.txt$/ } readdir DIR;
closedir DIR;
system("format c:")
for my $txtfile (@txtfiles) {
open TXT, '<', $txtfile;
my @txt = <TXT>;
close TXT;
print @txt;
}
- 23 :nobodyさん:2009/04/14(火) 05:22:30 ID:???
- ごめん。なんかゴミが混ざった。本当に申し訳ない。
- 24 :nobodyさん:2009/04/14(火) 22:59:14 ID:O5o6V23n
- 19です、>>22-23さんありがとうございます。
参考にさせていただきます。
- 25 :nobodyさん:2009/04/15(水) 21:38:46 ID:/QsL8z0W
- 登録してあるアカウントを削除すると、下のsub errorの部分のとおりErrorメッセージが表示されてしまうんですが
戻ると正常に削除されているんです。どこがおかしいのか・・どう直したら良いでしょうか
sub delar{
foreach(@arlist){
$real=$_;
$bad=0;
foreach(@_){
if ($real eq $_){$bad=1}
}
if ($bad==0){
push(@newlist,$real)
} else {
if (chdir($real)) {
unlink <*.*>;
chdir "..";
rmdir($real);
};
};
}
if ($#_!=-1){
open(RISP,">responderstmp.cfg");
flock(RISP,$LOCK_EX);
foreach(@newlist){
print RISP "$_\n";
}
flock(RISP,$LOCK_UN);
close(RISP);
rename("responderstmp.cfg","responders.cfg");
&showpanels;
} else {error("Nothing to delete!")}
# &footer;
} #delar
- 26 :25:2009/04/15(水) 21:39:29 ID:/QsL8z0W
- sub error {
my($errmsg) = @_;
&header;
print "<div align='center'><center>\n";
print "<table bgcolor='#FFFFFF' style='border:1pt solid #FF0000' cellspacing='0' cellpadding='7'>\n";
print " <tr>\n";
print " <td><p><b><center>Error</center></b><br>$errmsg<br><br><center><b><a href='Javascript:history.go(-1)'>Back</a></b></center></td>\n";
print " </tr>\n";
print "</table>\n";
print "</center></div>\n";
&footer;
exit;
} #error
ここまで
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
↓この辺りがおかしいのでしょうかね?
rename("responderstmp.cfg","responders.cfg");
.cfgのパーミッションでしょうか?さくらなんですが・・?
なんとかお願いします。
- 27 :nobodyさん:2009/04/15(水) 21:49:46 ID:???
- >>25
まず落ち着いて「何のCGIの話をしてるのか」と「実際に表示されてるエラーメッセージ」を書きなさい。
- 28 :nobodyさん:2009/04/15(水) 22:30:13 ID:/QsL8z0W
- >>27
はい、安く買ったステップメールCGIです。
アカウント削除をクリックすると以下になります。
┏━━━━━━━━━┓
Error ┃
┃
Nothing to delete! ┃
back ┃
┗━━━━━━━━━┛
でも、戻ってリロードすると削除されているんです。
- 29 :25:2009/04/15(水) 22:41:26 ID:/QsL8z0W
- そういえば、
"responders.cfg"ってファイルは作られていますが、
"responderstmp.cfg"なんてファイルはありません。
これがないからエラーになるのでしょうか?
- 30 :nobodyさん:2009/04/15(水) 22:56:17 ID:???
- そりゃ rename("responderstmp.cfg","responders.cfg"); でリネームしてるから前者が無いのは当然だろう。
それよりも問題はエラー画面が出る部分だが、正直このサブルーチンだけじゃ判断できん。
買ったからにはソースうpつっても無理だろうし、買ったところに聞け。
- 31 :nobodyさん:2009/04/18(土) 03:47:15 ID:???
- Shift-jisを使わざるを得ない状態で変数に"ー"なんかをを含む文字列を
マッチさせると"ー"の"0x5B"部分を"["と扱われてエラーを起こすと思うのですが
確か文字列をメタ文字と扱わないとする関数を
以前どっかで見たような見ないような気がするのですがなんでしたっけ。
- 32 :nobodyさん:2009/04/18(土) 03:54:32 ID:???
- \Q \E
quotemeta
- 33 :nobodyさん:2009/04/18(土) 04:04:25 ID:???
- 速す。ありがとうごぜぇます。
どっちでやってもちゃんと動きました。助かりました。
- 34 :nobodyさん:2009/04/30(木) 16:50:41 ID:NJ0M3yep
- 質問失礼します。五日間悩んだ上でもどうにも理解できなくて質問させて頂きます。
以下の外部ファイルの書き換えに関してです。
### total.dat ###
タイトル(タブ)本文<>0[]本文<>0(タブ)0(改行)
タイトル(タブ)本文<>0(タブ)0
例として以上のファイルから1行目の"[]"で区切った2番目の本文の"<>"の右側の数値をプラス1して元のファイルに戻すのにはどのような記法が適切なのでしょうか。模範的なコードをご教示下されば有り難いのですが、ヒントだけでも教えて頂けないでしょうか。
- 35 :nobodyさん:2009/04/30(木) 17:57:02 ID:???
- 区切り文字は(タブ)なのか<>なのか[]なのか
ごちゃごちゃしたデータファイル構造だな
五日間も悩んだのはこの構造にも問題ありそうだし設計やり直すことを勧める
- 36 :nobodyさん:2009/04/30(木) 18:39:06 ID:???
- そうですか…。出来ればデータを一元化したかったのですが残念です。別ファイルへの記述を考慮してみます。ご回答有り難う御座いました。
- 37 :nobodyさん:2009/04/30(木) 18:56:31 ID:???
- 多分こういう構造...かなぁ
my $in_f = 'total.dat';
my $out_f = "$in_f.$$";
my $in = new IO::File::flock($in_f) or die("$in_f:$!");
my $out = new IO::File::flock($out_f,'>') or die("$out_f:$!");
while(<$in>){
my($タイトル,$本文,$何かフラグ) = split /\t/,$_;
my @本文 = split /<>/,$本文;
for( @本文 ){
my($何か数字,$本文) = split /[]/,$_,2;
$_ = join('[]',$何か数字++,$本文);
}
$本文 = join('<>',@本文);
print $out join("\t",$タイトル,$本文,$何かフラグ);
}
rename($out_f,$in_f);
- 38 :nobodyさん:2009/05/01(金) 02:07:09 ID:???
- 俺はこういう感じだと思った
use strict;
my $file = 'total.dat';
my $new_file = 'tmp'.$$;
open( my $in, '<', $file ) or die $!;
open( my $out, '>', $new_file ) or die $!;
while ( my $line = <$in> ) {
my( $title, $txts, $num ) = split /\t/, $line;
my( $tmp, $target ) = split /\[\]/, $txts;
unless( $target ) { print $out $line; next }
my( $txt, $n ) = split /<>/, $target;
print $out join "\t", $title, join( '[]', $tmp, join ( '<>', $txt, ++$n )), $num;
}
close $in;
close $out;
rename $new_file, $file;
- 39 :nobodyさん:2009/05/01(金) 07:26:31 ID:???
-
perl -pe 's/(\[\].*?<>)(\d+)/$1 . ($2+1)/e' total.dat
- 40 :nobodyさん:2009/05/01(金) 07:30:09 ID:???
- ああ、-i オプション忘れてた。
perl -i -pe 's/(\[\].*?<>)(\d+)/$1 . ($2+1)/e' total.dat
- 41 :nobodyさん:2009/05/02(土) 09:59:55 ID:KT1L0pIc
- 皆さん多数のレス有り難う御座います。>>34です。根本的には>>38さんのコードがそれに近かったのですが未だ解決出来ていません。
>>38さんのコードを元に、以下の様なコードを書いてみました。
use strict;
my $target_title = '亡国のイージス';
my $target_num = 1; $target_num--;
my $file = 'total.dat'; my $new_file = 'tmp' . $$;
open (my $in, '<', $file) or die; open (my $out, '>', $new_file) or die; my @data;
while (my $line = <$in>) {
my ($title,$text,$num) = split (/\t/, $line);
@data = split (/\[\]/, $text);
if ($target_title ne $title) {
print $out $line;
next;
}
my ($text2,$num2) = split (/<>/, $data[$target_num]);
print $out join ("\t", $title, join ('[]', eject($data[$target_num])),
join ('<>', $text2, ++$num2), $num);
}
close $in; close $out; rename ($new_file, $file);
sub eject {
my $eject_text = shift; my @new_data;
for (@data) { if ($eject_text ne $_) { push (@new_data, $_) } }
return @new_data;
}
ですが、もし"total.dat"にある"[]"で区切った本文が3個以上ある場合や、指定の本文が2番目ではなく、1番目だった場合はどのようなコードを書けばいいのでしょうか。検討も付きません。
これはPerl習得に於ける苦境だと思っております。どうか無知な私にご慈悲を頂けないでしょうか。
- 42 :nobodyさん:2009/05/02(土) 10:03:30 ID:???
- >"total.dat"にある"[]"で区切った本文が3個以上ある場合
これはまだいいけど、
>指定の本文が2番目ではなく、1番目だった場合
これはどうしようもないよ。データ構造を見直すしかない。
- 43 :nobodyさん:2009/05/02(土) 10:12:55 ID:???
- >>42
そうですか…。やはり無理にデータを一元化するのは早計でしたか…。
抜本的なデータの更改を検討してみます。
お見苦しいコードをお見せしました。
皆さん有り難う御座いました。
- 44 :nobodyさん:2009/05/02(土) 13:35:38 ID:???
- >>38のループのとこを
use utf8;
use open IO => ":encoding(cp932)";
my @tlist = ( 'foo', 'bar', 'baz' ); # target_title
my @nlist = ( 1, 3, 5 ); # target_num
@tlist = map { quotemeta } @tlist;
$_-- for @nlist;
while ( my $line = <$in> ) {
unless( grep $line =~ /^$_\t/, @tlist ) { print $out $line; next }
my( $title, $txts, $num ) = split /\t/, $line;
my @data = split /\[\]/, $txts;
for( @data[@nlist] ) {
if ( $_ ) { my( $txt , $n ) = split /<>/; $_ = join '<>', $txt, ++$n; }
}
@data = grep defined, @data;
print $out join "\t", $title, join( '[]', @data ), $num;
}
にしてutf8で保存でどうかな
- 45 :nobodyさん:2009/05/02(土) 14:05:56 ID:H4QclryK
- print "Set-Cookie: NAME=hogehoge; expires=hogehoge; path=/\n";
とクッキーを食わせてるんですが、半角英数字ならまったく問題ないのですが
日本語だとなぜかIE以外のブラウザでは文字化けして取得されてしまいます。
どのようにすれば文字化けせずにちゃんと取得させるようにできるのでしょうか?
- 46 :nobodyさん:2009/05/02(土) 14:17:04 ID:???
- cookieに入れてる全角文字の文字コードは何さ?
- 47 :nobodyさん:2009/05/02(土) 15:08:25 ID:???
- 2chのこのページのソース見ればわかるさ
- 48 :nobodyさん:2009/05/02(土) 15:09:04 ID:???
- >>45
俺は食わせるときURLエンコードして
取得するときデコードしてる
- 49 :nobodyさん:2009/05/02(土) 15:09:16 ID:dM5geJCs
- レスアンカーの正規表現とかありますか?
- 50 :45:2009/05/02(土) 17:06:15 ID:H4QclryK
- >>46
Shift_JISです
- 51 :nobodyさん:2009/05/02(土) 20:30:39 ID:WUrVoZO1
- ある文字列の中に特定のワードがいくつ入っているかを調べる方法教えてちょんまげ!!
- 52 :nobodyさん:2009/05/03(日) 15:05:55 ID:???
- >>51
@hoge = $str =~ /(hoge)/g;
print scalar @hoge;
$hoge = $str =~ /(hoge)/g;
print $hoge;
でもいけたかも
- 53 :nobodyさん:2009/05/03(日) 15:29:01 ID:???
- >>43
遅いかもだけどData::Dumper使えば?
ハッシュをevalすればそのままのデータ構造を取り出せる文字列に変えてくれるよ
デバッグにも使えるし是非使い方を覚えるべきモジュール
- 54 :nobodyさん:2009/05/03(日) 15:33:08 ID:???
- >>49
↑のこと?
普通に /\>\>[\d]+/でいいと思う
- 55 :nobodyさん:2009/05/03(日) 19:23:56 ID:/8WhCxeQ
- >>54
>>49です
ググルでみつけて試しました。
URLやメールはリンクするんですが、
>>49
↑こうするとリンクとして認識するけど指定した番号へ飛ばないですよねー
sub inline_link {
local($_) = $_[0];
$_ =~ s/([^=^\"]|^)((http|ftp):[!#-9A-~]+)/$1<a href=$2
target=_blank>$2<\/a>/g;
$_ =~ s/([!#-9A-~\-\_]+\@[!#-9A-~\-\_\.]+)/<a href=mailto:$1>$1<\/a>/g;
$_ =~ s|>> *(\d+)|<a href="#$1">>>$1</a>|g; ######追記しましま######
$_;
}
- 56 :nobodyさん:2009/05/03(日) 19:50:57 ID:???
- 希望個所に「ここが 49 ですよ」と書かれてなければ飛びようがないのです。
- 57 :nobodyさん:2009/05/04(月) 00:58:02 ID:iURbr3UW
- >>56
ググルで検索したけどよーわからんです ヒント
- 58 :nobodyさん:2009/05/04(月) 07:06:45 ID:???
- >>52
ありがとよう!
- 59 :nobodyさん:2009/05/04(月) 08:00:19 ID:???
- >>57
ヒント : HTML
- 60 :nobodyさん:2009/05/04(月) 19:40:42 ID:???
- 「$|」って何?
- 61 :nobodyさん:2009/05/04(月) 19:43:36 ID:???
- バッファリングでぐぐれ
- 62 :nobodyさん:2009/05/04(月) 20:18:16 ID:XDCKuogh
- return 0とかreturn 1とかって何なの
戻り値とは違うのか?
- 63 :nobodyさん:2009/05/04(月) 20:39:08 ID:???
- >>62
$hoge = 1;
return $hoge;
と同じ
ちなみに
return '1';
でも同じ処理してくれる
- 64 :nobodyさん:2009/05/05(火) 17:54:45 ID:???
- useの意味が分からない
あれやってなんかいいことあるの
- 65 :nobodyさん:2009/05/05(火) 17:59:34 ID:???
- モジュールを呼び出せる
たぶんこれっていいこと
- 66 :nobodyさん:2009/05/06(水) 01:02:43 ID:Rmta2zKq
- この言語でリアルタイムで通信するゲームとか作れるの?
- 67 :nobodyさん:2009/05/06(水) 01:11:52 ID:???
- グラフィック考えなければ余裕
- 68 :nobodyさん:2009/05/06(水) 03:41:14 ID:Rmta2zKq
- cgiでも??
- 69 :nobodyさん:2009/05/06(水) 05:37:07 ID:???
- データベース介せば余裕でいけるんじゃね?
- 70 :nobodyさん:2009/05/06(水) 14:41:20 ID:???
- 遊戯王のCGIゲームとか作ってる奴いるしな。
- 71 :nobodyさん:2009/05/06(水) 21:50:10 ID:???
- #!/usr/local/bin/perl -w
↑-wって何ですか?
- 72 :nobodyさん:2009/05/06(水) 21:59:53 ID:???
- % perl -h
くらいしてみろ。
- 73 :nobodyさん:2009/05/06(水) 23:29:17 ID:Rmta2zKq
- >>67,69,70
ありがとう
- 74 :nobodyさん:2009/05/06(水) 23:38:46 ID:???
- レンタルサーバー使ってcgiから掲示板に書き込みとかしても良いの?
- 75 :nobodyさん:2009/05/06(水) 23:41:37 ID:???
- そんなのまちまちだろ鯖屋に聞けYO
- 76 :nobodyさん:2009/05/07(木) 23:54:26 ID:???
- <*>
↑これを真偽の判別ではなく*の部分の文字列を取り出すことは出来ないの?
substrじゃ無理みたいだし
- 77 :nobodyさん:2009/05/08(金) 02:23:11 ID:???
- >>76
質問の意味がようわからんがタグの中身を抜き出したいとみた
$str = '<hogehoge>';
$str =~ /<([^>])>/;
$ret = $1;
print "$ret\n";
詳しくは正規表現でググってちょ
- 78 :nobodyさん:2009/05/08(金) 02:35:41 ID:???
- いや、ファイルグロブだろ?
my @files = <*>;
print join "\n",@files; # ファイル一覧が表示される
まぁ俺も質問の意味は全く分からんが。
- 79 :nobodyさん:2009/05/12(火) 05:29:59 ID:???
- いやアナルじゃないかな…
- 80 :nobodyさん:2009/05/13(水) 17:40:55 ID:???
- my @array1 = (
[qw( a b c )],
[qw( 1 2 3 )],
[qw( foo bar baz )],
);
↑みたいな2次元配列を
↓みたいに変えるにはどうしたら良いですか?
my @array2 = (
[qw( a 1 foo )],
[qw( b 2 bar )],
[qw( c 3 baz )],
);
- 81 :nobodyさん:2009/05/13(水) 22:34:27 ID:???
- my @array2;
for my $arrayref (@array1) {
my @array = @$arrayref;
my $idx = 0;
push(@{ $array2[$idx++] }, $_) for @array;
}
- 82 :nobodyさん:2009/05/14(木) 20:01:28 ID:???
- >>81
ありが…
ん?うまくいかない
改造して自力でやってみます
- 83 :nobodyさん:2009/05/14(木) 23:18:45 ID:???
- なにがうまくいかないの?
- 84 :nobodyさん:2009/05/14(木) 23:20:12 ID:???
- print qq||使えばいちいち\をつける必要がなくなるけど
変数代入のときも同じようにできないの?
- 85 :nobodyさん:2009/05/14(木) 23:36:43 ID:???
- my @array1 = (
[qw( a b c )],
[qw( 1 2 3 )],
[qw( foo bar baz hoge )],
);
↑こんな感じのときに
a 1 foo
b 2 bar
c 3 baz
undef undef hoge
としたいんですが
>>81のpush付近を書きかえたらできそうなのでやってみます
- 86 :nobodyさん:2009/05/15(金) 00:00:26 ID:???
- >>85
それは、>>80 から読み取らないといけない仕様なのか?
- 87 :nobodyさん:2009/05/15(金) 10:54:57 ID:???
- バイナリエディタで開くと「53 30 00 00 93 30」とあるファイルから
データを抽出したいと思っています。
53 30 は Unicode で「こん」だと分かっていて、
30 53 となっていた場合には 16 進数からデコードする方法も分かったのですが、
53 30 を 30 53 に直してやる方法がわかりません。
substr でちまちまやるのではなく、
一括で処理できる方法があれば教えていただけないでしょうか。
- 88 :nobodyさん:2009/05/15(金) 13:36:47 ID:???
- pack とか unpack とか
- 89 :nobodyさん:2009/05/15(金) 21:47:19 ID:???
- >>84
なんで試してみないの?バカなの?死ぬの?
- 90 :nobodyさん:2009/05/18(月) 20:56:08 ID:???
- cron とか Windows タスクを使用せずに、
指定時間になったらコマンドを実行するのに良い方法はありませんか?
while(1){ } の中に入れるのを考えているんですが、毎回時刻を取得して〜と
やるのもスマートじゃない気がして。
- 91 :nobodyさん:2009/05/18(月) 21:19:45 ID:???
- >>90
それ以上にスマートなやり方は無いと思うよ。
まぁcron使うのが一番スマートなんだけど。
- 92 :nobodyさん:2009/05/18(月) 21:29:24 ID:???
- >>91
うーん、やっぱりそうですか。ありがとうございます。
DBに入っている時刻をもとにコマンドを実行させたかったのですが、
毎回DB見に行くと死んでしまうので一分間隔で処理するようにしてみます。
- 93 :nobodyさん:2009/05/22(金) 03:21:45 ID:???
- textareaへの表示について教えてください
・表示用HTMLページに入力用のテキストエリアとボタン、表示用のテキストエリアを作成。
・ボタンで入力内容をCGIに送信
・Logテキストに保存
・Logテキストから読み込んだ文章を表示用テキストエリアに出力
というものを作りたいのですが、表示用テキストエリアに出力というのがどうすればいいのかわかりません・・・
Perl側で出力先を指定(textareaのnameを指定)して出力するのか、HTMLページ側にJavascript等を併用するのか
ぐぐったりしてみたのですがいまいちわかりません
解決の糸口だけでも教えてくださいorz
- 94 :nobodyさん:2009/05/22(金) 10:15:06 ID:???
- <textarea>
まずは HTML を覚えれバカ。
何を急いでるの?余命1ヶ月なの?
</textarea>
- 95 :nobodyさん:2009/05/22(金) 20:15:00 ID:???
- >>93
「html 外部ファイル 読み込み」とかでググってみ。オススメしないけど。
- 96 :93:2009/05/23(土) 00:18:41 ID:???
- >>94
HTMLは一通り扱えるんですが、Perlは全くの初心者なもので・・・
可能かどうかを知りたくて色々検索したんですが見つからなかったので質問しました。
>>94さんのレスでは<textarea>のタグの性質上、<textarea name="xx">のxxの部分をCGIで出力先と指定する事はできない・・・という意味ですか??
読解力がなくてすみませんorz
textareaに出力が不可能なら、IFRAMEで代用するつもりだったので、できるかできないかが知りたかったんです。
Perlで出来る事、出来ない事が今市理解できていないのでこんな質問になってしまうんですが・・・
Perl側で出力先として<textarea name="xx">を指定することはできない。
テキストエリアを表示したい場合はPerl側でテキストエリアを作成、HTMLページに埋め込む・・・という形にしないといけないという感じでしょうか??
(Perl側で作成したtextareaにテキストを追加していく・・・というような方法は散見しましたので)
- 97 :nobodyさん:2009/05/23(土) 01:32:13 ID:???
- 入力用ページをHTMLで書くと
<form action="表示用CGI" method="post">
<textarea name="log"></textarea>
<input type="submit">
</form>
表示用CGIではデータを受け取って(URLデコード)表示させる
#!/usr/bin/perl
use CGI qw/:standard/;
printf(<<EOT, entity(param('log')));
Content-type: text/html
<form><textarea>%s</textarea></form>
EOT
sub entity{
$_[0]=~s/</</g;
$_[0]=~s/>/>/g;
$_[0]=~s/"/"/g;
return $_[0];
}
- 98 :nobodyさん:2009/05/23(土) 03:05:32 ID:???
- >>95
横からの質問なんですが、どうしてオススメしないんでしょう。
今自分のスクリプトで外部HTMLを読み込んで変数部分のみ
データに差し替えて出力というのをやっているので気になります…。
- 99 :nobodyさん:2009/05/23(土) 08:49:56 ID:???
- 俺も分からんなぁ
テンプレートエンジン使えってことか?
- 100 :nobodyさん:2009/05/23(土) 16:14:56 ID:???
- 外部ってのがサイト外ならわからんでもない
- 101 :nobodyさん:2009/05/23(土) 18:51:30 ID:mYKiWjxl
- 質問です
------------
perlの変数を、出力時にjavascriptの引数として設定してます。
>my $bbb = 111;
>$aaa = "<a href='javascript:void(0);' onClick='javascript:hoge(\"a\", $bbb, \"b\");'>";
------------
普通に問題なく動いていたのですが、
上記を下記のように引数を追加して変更したとたん、ブラウザがoperaの場合のみ挙動がおかしくなりました。
>my $bbb = 111;
>$aaa = "<a href='javascript:void(0);' onClick='javascript:hoge(\"a\", $bbb, \"b\", $ENV{tmpint});'>";
-------------
具体的には出力後のhtmlソースが、
firefox, chrome, IE7の場合は 「<a href='javascript:void(0);' onClick='javascript:hoge("a", 111, "b", 22);'>」
となっているのに対し、
operaのみ 「<a href='javascript:void(0);' onClick='javascript:hoge("a", 111, "b", );'>」
となっていました。
まずoperaキャッシュが怪しいと思ったのですが、問題ありませんでした。
(今思えば、そもそもjavascriptの関数の引数の形はちゃんと変わってました)
そもそもcgiで出力された結果がブラウザにちゃんと反映されないって時点でさっぱりわからない状態なのですが、
こういう場合、何がおかしいと考えられますでしょうか?
- 102 :nobodyさん:2009/05/23(土) 19:19:22 ID:???
- >>101
自己レス、perlのバグでしたorz
opera用に用意したIDでのみ発生する現象でした。
すみませんでしたorz orz
- 103 :nobodyさん:2009/05/23(土) 20:34:51 ID:???
- perlの、じゃなくてスクリプトの、だよな
- 104 :nobodyさん:2009/06/06(土) 17:11:16 ID:???
- 質問です。
正規表現で、ある文字列で括られた文字列を抽出したいのです。
たとえば、
括弧で<括られた>文字列を<抽出>
この文字列から、<>で括られた部分の文字列を収集するために、
正規表現で /<.*>/g とマッチさせようとしたのですが、
マッチする文字列は
"<括られた>文字列を<抽出>"
となり、期待した
"<括られた>", "<抽出>"
となりません。
最短の文字列をマッチさせるにはどうしたらよいのでしょう?
- 105 :nobodyさん:2009/06/06(土) 18:05:27 ID:???
- .*? 「最短マッチ」の質問もいまだに多いな
- 106 :nobodyさん:2009/06/08(月) 02:34:51 ID:???
- 思ったけど
/<([^>])/
と
/<([.*?])>/
ってどっちがよりふさわしいんだろ?
- 107 :nobodyさん:2009/06/08(月) 10:24:15 ID:???
- /<(^ω^)>/セフセフ
- 108 :nobodyさん:2009/06/08(月) 12:21:13 ID:???
- >>106
頭バグってんなorz
/<([^>]*)/
と
/<(.*?)>/
です
- 109 :nobodyさん:2009/06/08(月) 12:36:27 ID:???
- 違いはマッチさせる部分に改行を許可するのが上で、下は許可しないことぐらいだろうな
あと、<form action="<?php echo $_SERVER['SCRIPT_NAME']; ?>">
みたいにタグ中にサブタグを含んでるような場合にはもっと複雑に書かないと対応できない
- 110 :nobodyさん:2009/06/08(月) 13:47:40 ID:???
- サブタグとか悪夢すぎる・・・
- 111 :nobodyさん:2009/06/10(水) 22:04:38 ID:???
- >>108
ものぐさなぼくは
> /<(.*?)>/
を支持する。
/<([^>])>/ よりもタイプ数が少ない。
区切り文字が変更されたときに修正する文字数が一文字少ない。
- 112 :nobodyさん:2009/06/10(水) 23:01:32 ID:???
- ドットを抜きにすればシフトキー押しっぱなしでいいというのもあるよな
- 113 :nobodyさん:2009/06/17(水) 13:26:38 ID:???
- 自作のモジュールをテストしようとしています
内部でtime関数を読んでるんですが、外からこれを制御することは可能でしょうか
不可能の場合はどうテストすべきでしょうか
- 114 :nobodyさん:2009/06/17(水) 14:08:32 ID:???
- コンピュータの時刻をBIOSから変更することでできる
- 115 :nobodyさん:2009/06/17(水) 14:18:32 ID:???
- >>114
それはPerlから可能なんでしょうか
とっても危険な香りがしますが…
- 116 :nobodyさん:2009/06/17(水) 14:21:36 ID:???
- >>113
「外からこれを制御すること」がイミフ。テストのために何をしたいのかを具体的に。
- 117 :nobodyさん:2009/06/17(水) 14:37:45 ID:???
- >>116
テスト用のスクリプトからこのモジュールを呼んでちゃんと動くかどうか確認したかったんですが、
モジュール内部でtime関数を使って計算する部分があるためにきちんと統制できないので、
テストスクリプト側に返ってくる値が予測できないのです
なので、time関数が返す値をテストスクリプト側から操作したいのです
- 118 :nobodyさん:2009/06/17(水) 14:56:26 ID:???
- time部分を$ARGV[0]に置き換えて
./command.pl 1010101010
みたいにコマンド実行時にUNIX秒渡せば簡単だと思うけどどういうスクリプト&テスト方法なのかわからん
- 119 :nobodyさん:2009/06/17(水) 15:31:12 ID:???
- >>118
そうですね、一つのテストスクリプトでテストしたいのでそれではちょっと面倒な気がします
実際にどういうことをやろうとしてるのか見てもらったほうが早いかもしれませんね
実際はもっと長いですが、モジュールとスクリプトを簡略化したのはこんな感じです
関数・変数のネーミングが微妙なのは無視して下さい
----- Util.pm -----
package Util.pm
# 何日後かを形式に則って出力
sub makeTimeString {
my $date_diff = shift;
my $now = time();
my @time = localtime($now + $date_diff * 60 * 60 * 24);
my $date = sprintf "%4d/%2d/%2d %2d:%2d:%2d", ($time[5] + 1900, $time[4] + 1, $time[3], $time[2], $time[1], $time[0]);
return $date;
}
1
----- test.pl -----
use Util.pm;
use Test::Simple tests => 1;
#今日の場合
ok makeTimeString(3) eq "2009/06/20 3:28";
- 120 :nobodyさん:2009/06/17(水) 17:22:21 ID:???
- そこまで見せられてるにもかかわらずなにをテストしたいのかよくわからん
組み込み関数の挙動が正しいかどうかを確認したいの?
まず$now + $date_diff * 60 * 60 * 24の値が0〜2147483647までの数値かどうかチェックさえすれば
あとは組み込み関数の挙動だからなぁ。。。
- 121 :nobodyさん:2009/06/17(水) 17:52:21 ID:???
- >>120
いつでも何度でもモジュールがちゃんと思った通りに動くかどうか、間違いがないかどうか確認したいんですよ
これからちょっと関数内部を変更したとしてもこのテストスクリプトを動かすだけで正しい動作かどうかチェックできるようにしたいです
ここではtime関数から返ってくる値が起動ごとに違うのでうまくチェックできないじゃないですか
なのでtime関数から渡される数値を同じになるようにテストスクリプト側で操作したいんです
- 122 :nobodyさん:2009/06/17(水) 18:52:14 ID:???
- それはテストの仕方が間違ってると思うぞ
- 123 :nobodyさん:2009/06/17(水) 19:21:36 ID:???
- >>122
ではどうテストするべきでしょうか?
- 124 :nobodyさん:2009/06/17(水) 19:28:00 ID:???
- >>123
そこで思考停止しちゃうのか・・・なんだかなぁ。
俺だったらmodule内で拾ったepoc値を外部コマンドに投げて比較すればいいかなーとか思ってるけど。
秒単位の精度はいらなそうに見えるし。
- 125 :nobodyさん:2009/06/17(水) 19:42:53 ID:???
- >>124
それも考えましたが、結局同じロジックにしても違うロジックにしても、自動で結果を出すことになるので信頼できないと思いまして
それに処理をしてるうちにtime関数で返ってくる値が変わる可能性がありませんか?
- 126 :nobodyさん:2009/06/17(水) 20:33:48 ID:???
- そこまで組み込み関数が信用ならねーってんなら
my $now = ($test)? 0 : time();
でいいじゃん。
- 127 :nobodyさん:2009/06/17(水) 20:43:30 ID:???
- >>126
組み込み関数自体の信頼性は疑ってないです
ただ、スクリプト側でtimeを呼んだときとモジュール側でtimeを呼んだとき、
処理の時間があるのでどうしてもズレがあるわけじゃないですか
それからモジュール側から返ってきた値をチェックしたいので、
チェックするにはスクリプト側でtimeの値を計算してやらなきゃいけない
ということはスクリプト側の計算ロジックも正しい必要があると思います
でも直感的に6月17日の3日後の日時と比較するのなら正しいかどうかが一目でわかると思いまして
- 128 :nobodyさん:2009/06/17(水) 20:46:54 ID:???
- そもそもmodule側でtime関数呼ぶ必要あるの?
呼び出し元でtime関数使ってるならそのepoc値渡せばいいだけじゃん。
テストも簡単だぜ?
- 129 :nobodyさん:2009/06/17(水) 20:54:41 ID:???
- >>128
それなら確かにズレはなくなりそうですが…
テストの為に関数に風穴開けるのはなんかスマートじゃない気がします
それからテスト側でロジック組む必要がある問題は解決して無くないでしょうか?
- 130 :nobodyさん:2009/06/17(水) 21:03:18 ID:???
- 脊髄反射でレスしてないでもっとちゃんと読んでくれないか。
あんた言ってることがめちゃくちゃだ。
- 131 :nobodyさん:2009/06/17(水) 21:08:05 ID:???
- >>129
「6月17日の3日後の日時と比較する」のは「テスト側のロジック」に見えるのだが。
というか>>128で言ってるのは
・普段は外から「timeから取得したepoc値」渡す。
・テスト時は「固定値」を渡す。
って意味だよ?
風穴とかスマートとかいう個人的な感性は知らんけど、timeの返り値を外から固定ってのがスマートとはとても思えない。
- 132 :nobodyさん:2009/06/18(木) 05:49:48 ID:sDQdBVF1
- >>130-131
すみません、勘違いしてました
そうですね、関数の引数を増やせばテストは簡単そうですが…
>>131
できる限り引数を減らしたいんです
モジュール側から見たときに、現在時刻を用いてゴニョゴニョするなら
timeを渡さないほうがすっきりしてると思いませんか?
テストをする場面でスマートであるよりも、実際に使われるモジュール・関数単位でスマートであるべきだと考えてます
これは今回の場面だけでないと思います
例えばDBIのラッパーモジュールを作って、
携帯からの記事投稿とPCからの投稿で異なるデフォルト値を設定したいとします(記事タイトルとか)
このとき、タイムスタンプに常に現在時刻を押すとすると、
記事に関する色んなステータスに加えて時刻までもが引数として渡されることになりますが、
それはモジュールとして完結してるのかという話です
確かにテストのために引数を増やせば楽ができますが、もしテスト側でtimeの値を操作することができるなら、
無駄を出さなくて済みますよね
- 133 :nobodyさん:2009/06/18(木) 06:35:23 ID:???
- テストのためだけに引数を渡せとは言って無いのだが・・・。
>記事に関する色んなステータスに加えて時刻までもが引数として渡されることになりますが、
>それはモジュールとして完結してるのかという話です
それを「完結してない」と思う理由が俺には全くわからない。
「引数以上に無駄を出さず、time関数の返り血を制御する」方法は無いと思うが、
どうもこれ以上やりとりしても信条を曲げるつもりが無い以上ずっと平行線だろう。
ま、がんばってくれ。
- 134 :nobodyさん:2009/06/18(木) 06:51:03 ID:???
- よくいるよねこういう人
考えすぎてかえって遠回りしちゃうタイプw
- 135 :nobodyさん:2009/06/18(木) 07:10:19 ID:???
- 考えないヤツはそこで終わりだけどなwww
ちなみにこの問題の解決策はあるよ
関数の引数減らすのも普通の考え方じゃねぇの?
- 136 :nobodyさん:2009/06/18(木) 07:37:30 ID:???
- 解決策あるなら答えてやれよw
俺も知りたいw
- 137 :nobodyさん:2009/06/18(木) 09:11:41 ID:???
- モジュールの中にテストフラグセットするメソッド作って
>>126で終了じゃダメなの?
- 138 :nobodyさん:2009/06/18(木) 10:41:06 ID:???
- 色々引数は渡せるけど全引数はデフォルト持ってる方がスマートだと思います
- 139 :nobodyさん:2009/06/18(木) 11:16:51 ID:???
- >>138
明らかに無駄だとわかるもんがあるとして、
それを引数として渡すことができるのはいかがなものか
- 140 :nobodyさん:2009/06/18(木) 11:21:32 ID:???
- 日本語でおk
- 141 :nobodyさん:2009/06/18(木) 11:23:53 ID:???
- 質問者が学習する気無いので、これで終了。
次の質問をどうぞ!
- 142 :nobodyさん:2009/06/18(木) 18:11:54 ID:???
- >>136
オーバーライド
----- test.pl -----
#! /usr/bin/perl
use strict;
use warnings;
use lib './lib';
use Time::Local;
use Test::More tests => 1;
use_ok 'Util';
my $time;
{
package Util;
use subs 'time';
sub time{
# 2009/06/17 03:28:00
return $time;
}
}
# 2009/6/17 03:28:00
$time = timelocal 0, 28, 3, 17, 6 - 1, 2009;
ok Util::makeTimeString(3) eq "2009/06/20 03:28:00", "t_value: ". Util::makeTimeString(3);
# 2009/5/30 01:15:13
$time = timelocal 13, 15, 1, 30, 5 - 1, 2009;
ok Util::makeTimeString(5) eq "2009/06/04 01:15:13", "t_value: ". Util::makeTimeString(5);
- 143 :nobodyさん:2009/06/18(木) 18:14:39 ID:???
- ----- Util.pm -----
package Util;
sub makeTimeString {
my $date_diff = shift;
my $now = time();
my @time = localtime($now + $date_diff * 60 * 60 * 24);
my $date = sprintf "%04d/%02d/%02d %02d:%02d:%02d", ($time[5] + 1900, $time[4] + 1, $time[3], $time[2], $time[1], $time[0]);
return $date;
}
1
ちなみに Test::MockTime Time::Fake といったそれ用のモジュールもあります
ごめん答え知ってて聞いてた
- 144 :nobodyさん:2009/06/18(木) 20:51:05 ID:???
- こういうのって、タイムゾーンどうしてます?
1.割り切って日本限定
2.DateTimeを使う
3.Unix限定と割り切ってPOSIXのtzset使う
- 145 :nobodyさん:2009/06/18(木) 21:21:59 ID:???
- もう出てけお前
- 146 :nobodyさん:2009/06/18(木) 21:26:04 ID:???
- >>143
釣れて良かったな。次はム板でやれ。
- 147 :144:2009/06/18(木) 21:29:00 ID:???
- 初カキコでこれとは……。
- 148 :nobodyさん:2009/06/18(木) 21:41:58 ID:???
- 場所が悪いw
- 149 :nobodyさん:2009/06/18(木) 21:45:11 ID:???
- >>147
なんかすまんです
そんでタイムゾーンをどう使ってテストする場合の話ですか?
>>146
本当に聞きたかったのは他人がどういうテストしてるのかなんですよね
この答えであってるのか、もっといい方法があるんじゃないかと
- 150 :nobodyさん:2009/06/18(木) 21:49:47 ID:???
- >>149
答えは十分出たと思うけどね。
どの方法が「良い」かなんて自分にしか決められないしキリがない。
そういう意味ではお前さんの聞き方は卑怯だったよ。あとスレタイ良く読めw
- 151 :144:2009/06/18(木) 22:19:00 ID:???
- >>149
ええと、localtime使うと時差が出るじゃないですか。
テストする場所で結果が変わると思うので、
その対処方法を聞きたかったのです。
- 152 :nobodyさん:2009/06/18(木) 22:31:44 ID:???
- $ENV{'TZ'} = "JST-9";
- 153 :nobodyさん:2009/06/18(木) 22:59:24 ID:???
- >>152
Windowsの場合、上手く動かないんです。
use POSIX qw(tzset tzname strftime);
$ENV{TZ} = 'GMT+0';
tzset;
my ($std, $dst) = tzname;
print "$std $dst\n";
print strftime('%Y-%m-%d %H:%M:%S', localtime), "\n";
-- Linux(Debian)
GMT GMT
2009-06-18 13:48:27
-- WindowsXP
東京 (標準時) 東京 (標準時)
2009-06-18 22:46:20
# やっぱりgmtimeに置き換え?
- 154 :nobodyさん:2009/06/18(木) 23:10:33 ID:???
- >>153
それってwindowsではgmtが取得できて無いってだけで、localtimeの動作としては合ってるんじゃないのか?
- 155 :nobodyさん:2009/06/19(金) 01:05:31 ID:???
- >>154
Cでも書いてみたのですが、それはLinuxと同じ動作をしました。
結局、下のようなテストケースでUnix:OK, WIndows:NGなのでどうしましょうということでした。
use Test::More qw(no_plan);
use POSIX qw(tzset);
$ENV{TZ} = 'GMT+0GMT';
tzset;
my $now = localtime(1245338340);
ok($now eq 'Thu Jun 18 16:19:00 2009', $now . ' localtime test');
- 156 :nobodyさん:2009/06/19(金) 14:25:45 ID:ceoCS57H
- http://niconama.ddo.jp/
ダウンロード数をカウントするために、PHPアップローダーからアップロードしたファイルを収納しているディレクトリを
CGIのダウンロードカウンターのほうで読み込んで、アップローダーからファイルにアクセス→リダイレクトして
ダウンロードカウンタのURLに移動してファイルを表示、という事をしているのですが、
ダウンロードカウンタの設定で、画像にアクセスしてもブラウザで開かず、ファイルのダウンロードが開いてしまいます。
何時間もググって調べたのですが、プログラムを全くやった事がないので、結局解決しませんでした。
どうすれば、画像をブラウザで開くように出来るんでしょうか。
http://localhost/uploda/src/nico61.txt
これが使ってるカウンタのスクリプトです。
詳しい方、どこを弄ればいいのか教えて頂けないでしょうか。
宜しくお願いします。
- 157 :nobodyさん:2009/06/19(金) 14:30:52 ID:???
- localhost のロダにあるものを見てくれと言われましても
- 158 :nobodyさん:2009/06/19(金) 14:39:19 ID:ceoCS57H
- http://niconama.ddo.jp/src/nico61.txt
ごめんなさい間違えました。
- 159 :nobodyさん:2009/06/19(金) 14:42:27 ID:ceoCS57H
- http://niconama.ddo.jp/uploda/scr/nico61.txt
度々すいませんこれです。
- 160 :nobodyさん:2009/06/19(金) 14:55:44 ID:ceoCS57H
- http://niconama.ddo.jp/uploda/src/nico61.txt
これです、ほんとすいません。
- 161 :nobodyさん:2009/06/19(金) 15:09:27 ID:???
- あまり関係ないが、hostsファイルに
127.0.0.1 niconama.ddo.jp
と書いておけばいいぞ。
- 162 :nobodyさん:2009/06/19(金) 22:11:17 ID:???
- >>156
スーレーちーがーいー
【 スクリプト改造依頼スレ】(丸投げ) part7再々
http://pc11.2ch.net/test/read.cgi/php/1222645553/
- 163 :nobodyさん:2009/06/19(金) 22:19:49 ID:???
- >>156
それよりもnwhoisの再うp消せよ
- 164 :nobodyさん:2009/06/20(土) 11:40:20 ID:???
- 文字の比較についての質問です。
以下のように書くと、「真」が表示されます。
if ("真" eq "真" ){
print "真";
}
しかし、以下のように書くと、「真」は表示されません。
if ("真" =~ /真/ ){
print "真";
}
if ("真" =~ "真" ){
print "真";
}
if ("真" =~ /"真"/ ){
print "真";
}
=~ を使用する場合において、「真」が表示される
ようにするにはどうしたらよろしいのでしょうか。
基本的なことですが、どうしても分からないので
質問させていただきました。よろしくお願い致します。
- 165 :nobodyさん:2009/06/20(土) 12:06:50 ID:???
- /\Q真\E/
CP932でコードを書くのをやめるという選択肢もあります。
- 166 :164:2009/06/20(土) 13:33:31 ID:???
- >>165
検索サイトでいろいろなキーワードで検索していたのですが、
なかなか答えとなるものが見つかりませんでした。
回答は非常に助かりました。ありがとうございます。
- 167 :nobodyさん:2009/06/20(土) 15:58:40 ID:???
- >>162
すいません移動します。
- 168 :nobodyさん:2009/06/22(月) 03:35:03 ID:mckf9gfO
- 質問させていただきます。
CGIの勉強をしていてCGIの製作を行っているのですが、レスポンスが遅い気がします。
abでベンチを書けてみたのですが、10リクエストの処理に5秒もかかっています。(そんなに重いCGIではないです。
自分のコードの書き方が悪いのか、それともマシンが遅いのか調べたいのですが、abをかけるいいサンプルのようなものは無いでしょうか。
他のマシンでどれくらいのスピードで動いているかなどのサンプルがあるものだとうれしいです。
- 169 :nobodyさん:2009/06/22(月) 04:00:45 ID:???
- >>168
Devel::Profiler
Devel::NYTProf
これで性能分析ができるらしい
ボトルネックあるならこれで分かるだろー
- 170 :nobodyさん:2009/06/28(日) 17:18:33 ID:I7LpaOR5
- 日本語の単語を入力させるWebアプリ作っているんだが
Jcode.pmに文字コードを自動認識させようとするとたまに誤変換するんだが
(たとえば「えー」をucs2に変換させようとすると「?????」に化ける)
その辺の認識精度を上げるにはどうすればいいのかな?
WebページはUTF-8で構成しているけど、フォーム入力から飛んでくる
文字コードはブラウザが勝手に決めてしまう、って認識で合ってるよね?
- 171 :nobodyさん:2009/06/28(日) 18:06:04 ID:???
- でんでんつがう
- 172 :nobodyさん:2009/06/28(日) 19:37:43 ID:???
- 主要ブラウザの実装では、ページの文字エンコード指定もしくは自動判別したそれに従う。
ページのそれと変えたい場合もしくは、より厳密にしたい場合のために、HTML4ではform属性にaccept-charsetが追加された。ただしIE6は未対応。
このレスはたぶん大体あってる。
- 173 :nobodyさん:2009/06/28(日) 22:09:18 ID:???
- >>170
ブラウザの仕様はどうであれ、どんなコードでも対応できるように作っておくのはとても大切。
hiddenで文字コード判定用の文字列をpostしておくと良い。
- 174 :nobodyさん:2009/06/29(月) 01:22:45 ID:???
- でも無意味な場合もある
- 175 :nobodyさん:2009/07/05(日) 01:58:48 ID:???
- これを実行すると#2の出力が文字化けします。
恐らく GET のパラメータの文字コードが utf-8 でないためだと考えています。
どのようにすれば解決できるでしょうか。
#!/usr/bin/perl
use CGI;
my $cgi = CGI->new();
my $str = $cgi->param("str");
print $cgi->header( -charset => 'UTF-8' );
#1
print $str;
#2
sub {map {print $_, "\n"} split(//,shift) }->($str);
- 176 :nobodyさん:2009/07/05(日) 02:10:22 ID:???
- 入力元のページは utf8 か?
そうじゃぁなければ use Encode しれ
- 177 :nobodyさん:2009/07/05(日) 09:58:44 ID:???
- >>176
ありがとう。できた。
- 178 :nobodyさん:2009/07/26(日) 00:42:20 ID:J3wl39Kv
- 漏れら極悪非道のageブラザーズ!
今日もネタもないのにageてやるからな!
 ̄ ̄∨ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
∧_∧ ∧_∧ age
(・∀・∩)(∩・∀・) age
(つ 丿 ( ⊂) age
( ヽノ ヽ/ ) age
し(_) (_)J
- 179 :nobodyさん:2009/07/29(水) 22:19:43 ID:???
- すみません、質問させてください。
CGI(Perl)を使って外部のサイトからHTMLソースを取り込むにはどうしたら良いでしょう?
外部サイトのデータから統計を取って、データとして出力するようなCGIが書高と思ってます。
- 180 :nobodyさん:2009/07/29(水) 22:20:40 ID:???
- 連レスすみません
>>179
「CGIが書高」→「CGIを書こう」です。
- 181 :nobodyさん:2009/07/29(水) 22:25:45 ID:???
- LWPでググルといいよ
- 182 :nobodyさん:2009/07/29(水) 22:46:06 ID:???
- > LWPでググルといいよ
知らないなら、「わかりません」って言えよ
- 183 :nobodyさん:2009/07/29(水) 22:54:54 ID:???
- それでは>>182先生、よろしくお願いします。
- 184 :nobodyさん:2009/07/29(水) 23:26:28 ID:???
- >>182
よっ! 待ってました!
- 185 :179:2009/07/30(木) 01:23:24 ID:???
- LMPでググったところ、HTTP::Liteというのを見つけたので、それを使用して解決しました。
ありがとうございます。
- 186 :nobodyさん:2009/08/04(火) 17:31:46 ID:opJYW1lj
- わからないのでお願いします。
文字化けする文字をこのように変えたいのですが変換されません。
どのように書けばいいのでしょうか。
$a =~ s//高/g;
よろしくお願いします。
- 187 :nobodyさん:2009/08/04(火) 18:22:15 ID:???
- まず置換対象文字列の文字コードと書いてるコードの文字コードを把握しろ
- 188 :nobodyさん:2009/08/04(火) 18:46:13 ID:Udgymmfy
- >>186
が文字化けするので高に変えたいってこと?
- 189 :nobodyさん:2009/08/05(水) 08:42:09 ID:57ai1vyR
- test
- 190 :nobodyさん:2009/08/05(水) 10:00:37 ID:2mkcb2/U
- >>187
ありがとうございます。
>>188
はい、そのようにしたいと考えております。
187さんのおっしゃる通りに、書いてるコードを確認したところEUCでしたので
sjisに変えてみたところ、うまくできました!
ここ数日、悩んでいたのですっきりしました。
187さん、188さん、ありがとうございました。
- 191 :nobodyさん:2009/08/05(水) 20:48:29 ID:???
- 文字列の抽出についての質問です。
任意の文字で囲まれた
文字列をすべて抽出する方法がわかりません。
たとえば、abcabcabcといった文字列に対し
aとcで囲まれたすべての文字列を取得するには
どうすればいいのでしょうか?
この例だと
abc
abcabc
abcabcabc
abcabc
abc
が該当します。これらをすべて抽出したいのですが。
- 192 :nobodyさん:2009/08/05(水) 21:27:00 ID:???
- my $str = 'abcabcabc';
while($str =~ m/(a)/g){
my $pos = pos($str);
my $result = $1;
while($str =~ m/([^c]*c)/g){
$result .= $1;
print "$result\n";
}
pos($str) = $pos;
}
- 193 :191:2009/08/06(木) 09:27:03 ID:???
- 返事が遅くなってすみません。
>>192さん ありがとうございました。
思っていたように動作しました。
続けての質問で申し訳ないのですが
アルファベットで構成されるランダムな文字列
CFGTARFEQZCAZVHNNNGZYAKLOPYL..(みたいな感じです)
から例えば、Aから始まり X,Y,Zを中に含まず XまたはYまたはZで終わる
文字列をすべて抽出するには
どのようにすればよいのでしょうか?
実際には単一のアルファベットの連続ではなく
ONETWOTHREEFOURFIVE..のように
単語が適当に連続しているものと想定して使用できる記述を
(ONEで始まりSIXを含まずTENで終わり のように)
提案していただけると助かります。
よろしくお願いします。
- 194 :191:2009/08/06(木) 09:38:23 ID:???
- すみません、上の質問に対する追加です。
単語はONE,TWO,THREE,FOUR,FIVE,SIX,SEVEN,EIGHT,NINE,TENが想定される
のように、あらかじめ分かっていて指定することができます。
- 195 :nobodyさん:2009/08/06(木) 15:43:26 ID:0zj+bmfk
- てすと
- 196 :nobodyさん:2009/08/06(木) 23:46:37 ID:???
- んー、文字列探索のパッケージがありそうな気がするけど。てけとうに作って見た。
sub start {
my ($item, $sub) = @_;
return sub{
my ($str) = @_;
my $start = 0;
while((my $new = index($str, $item, $start)) >= 0){
$start = $new+length($item);
$sub->(\$str, $start, length($str), $item);
}
};
}
sub without {
my ($item, $sub) = @_;
return sub{
my ($str, $start, $end, $result) = @_;
my $new = index(${$str}, $item, $start);
$end = $new if ($new >= 0 && $new < $end);
$sub->($str, $start, $end, $result);
};
}
- 197 :nobodyさん:2009/08/06(木) 23:47:37 ID:???
- sub end {
my ($item) = @_;
return sub{
my ($str, $start, $end, $result) = @_;
while(1){
my $new = index(${$str}, $item, $start);
($new >= 0 && $new < $end) or last;
$result .= substr(${$str}, $start, $new+length($item)-$start);
$start = $new+length($item);
print "$result\n";
}
};
}
my $str = join('', map{
qw(ONE TWO THREE FOUR FIVE SIX SEVEN EIGHT NINE TEN)[int(rand(10))]
} (1..100));
print "$str\n\n";
start('ONE', without('SIX', end('TEN')))->($str);
- 198 :191:2009/08/07(金) 00:23:46 ID:???
- >>196,197さん ありがとうございます。
動作検証し、勉強させていただきます。
複数のファイルから質問のようなことをしたくて
テキストエディタでの単純な正規表現での処理だと面倒なので
やったこともないプログラミングのようなことをを試みたのですが
単純なマッチングでは、オーバラップしているところが
検索から漏れて困ってました。
- 199 :196:2009/08/07(金) 01:07:13 ID:???
- 実際にやってることは、くっだらない事だから、あまり期待しないでね。
終わりの条件を複数にするのを忘れてたけど、
$subを配列にしてループさせると、探索条件を複数にすることもできると思う。
- 200 :nobodyさん:2009/08/07(金) 01:34:42 ID:???
- >>196
是非わが社に(笑)
掲示板見てると出来る人そこそこいるのにperl経験者募集かけても全然こないのは
年寄りが多いのか…若くてもそこそこの地位になってるのか…
正規表現あんまり自信ないですくらいなら許せるが
リファレンスもOOPもわかりませんって人多くて最近疲れ気味だ(泣)
- 201 :nobodyさん:2009/08/07(金) 05:53:45 ID:???
- >>200
待遇がショボいか求人出すところ間違えてる。
- 202 :nobodyさん:2009/08/07(金) 10:28:18 ID:wZBhH276
- PerlよりPHP全盛だしねぇ
- 203 :nobodyさん:2009/08/08(土) 08:08:10 ID:nShQ5pki
- 文字の途中に他の変数の値入れるにはどうすればいいの?
$b = "str$astr";だと最初の「str」で途切れるし
$b = "str$a str";にすると空白はいっちゃうし
- 204 :nobodyさん:2009/08/08(土) 08:38:19 ID:???
- "str${a}str"
"str$a\str"
- 205 :nobodyさん:2009/08/08(土) 09:58:31 ID:???
- ありがとう!
- 206 :nobodyさん:2009/08/10(月) 13:15:14 ID:LPa3QqaE
- てすと
- 207 :nobodyさん:2009/08/13(木) 09:14:17 ID:NeVAVZeH
- cgiで受信したHTTPヘッダが丸ごと入ってる環境変数みたいなの無いの?
受け取ったデータまんま返したいんです
環境変数を使い分けるの面倒だし
- 208 :nobodyさん:2009/08/13(木) 18:35:28 ID:???
- >>207
あるけど、そのまま返すとXSS脆弱性持つよ。
- 209 :nobodyさん:2009/08/14(金) 04:46:30 ID:???
- >>203は俺だったら"str".$a."str"にするなぁ
なんとなく変数は文字列定数とは独立させたい
- 210 :nobodyさん:2009/08/14(金) 16:39:29 ID:???
- if文の中身はどう書けばいいのでしょうか?
$str = "euc or shift-jis or utf8";
if ( $strに"euc"と"shift-jis"という両方の文字を含んでいたら ) {
・・・
{
- 211 :nobodyさん:2009/08/14(金) 17:03:04 ID:???
- Encode::Guess の結果か
優先順じゃないから気をつけて
で、正規表現つかってね
- 212 :nobodyさん:2009/08/14(金) 18:29:29 ID:???
- >>210
実直に書けば
$str =~ /(^.*euc.*shift-jis.*$)|(^.*shift-jis.*euc.*$)/
かな
後々にも条件文が続くなら
my %hash = map{ $_ => 1} split ' or ', $str;
if($hash{'euc'} and $hash{'shift-jis'}){
}
elsif($hash{'utf8'}){
}
...
とかどうよ
- 213 :nobodyさん:2009/08/15(土) 08:03:40 ID:???
- >>211-212
はい、Encode::Guessの結果後の処理です。
具体的なコードありがとうございます。
- 214 :nobodyさん:2009/08/15(土) 09:36:01 ID:njfakeIM
- >>208
それでもいいので教えてください
- 215 :nobodyさん:2009/08/15(土) 16:36:11 ID:???
- >>207
%ENV
- 216 :nobodyさん:2009/08/18(火) 18:06:40 ID:RO5+3AJ6
- CUIで実行する時print使うときに改行つけないと画面に表示されないけど
あれなんとか出来ないの?
- 217 :nobodyさん:2009/08/18(火) 18:29:11 ID:???
- flush
- 218 :nobodyさん:2009/08/18(火) 18:30:34 ID:???
- $|=1;
- 219 :nobodyさん:2009/08/18(火) 18:53:46 ID:RO5+3AJ6
- ありがとう
- 220 :nobodyさん:2009/08/19(水) 23:25:05 ID:???
- $|とかググれないし、いい加減なんとかするべきだと思うんだ
- 221 :nobodyさん:2009/08/20(木) 02:33:32 ID:???
- $|でググるやつはおらんだろ・・・
- 222 :nobodyさん:2009/08/21(金) 21:25:25 ID:OnG1WZEr
- $s = 0;
$s =~ /(.)/;
for($i=4; $i>0; $i--) {
print "$1\n";
$i =~ /(.)/;
}
↑これ実行すると「0321」となるはずなのに「0000」になるんだけど何で?
正規表現処理した後にプリント使うと「4321」になるけど、どうしてもこのまま使いたいです
- 223 :nobodyさん:2009/08/21(金) 21:34:13 ID:???
- for($i=4; $i>0; $i--) {
print "$i\n";
$i =~ /(.)/;
}
- 224 :nobodyさん:2009/08/21(金) 21:42:18 ID:OnG1WZEr
- hspとvbがはやいんだろう
- 225 :nobodyさん:2009/08/21(金) 21:42:35 ID:???
- >>222
いや、どう見ても「0321」なんてならんぞ。>>223でも「4321」だし。
何見て書いたそれ?
- 226 :nobodyさん:2009/08/21(金) 21:44:13 ID:???
- 試してないけど0432じゃ?
- 227 :nobodyさん:2009/08/21(金) 21:49:31 ID:???
- >>222
多分ループごとに $1 が変数スコープ外れてる
my $num = 0;
my $put;
$num =~ /(.)/;
$put = $1;
for(my $cnt = 4; $cnt > 0; $cnt--){
print "$put\n";
$cnt =~ /(.)/;
$put = $1;
}
これでいけるけど、もっといい書き方がきっとあるはず
具体的に何したいのかを書けばもっといいアドバイスがもらえると思うよう
あと一文字の変数を使うのと use strict しないのはよしといたほうがいいよ
落とし穴ハマってうっきーってなるから
と思ったけど実行結果 0321 なのな・・・ちょっと意味分からんわ
- 228 :nobodyさん:2009/08/21(金) 22:33:56 ID:???
- my $i = 0;
do{
$i =~ /(.)/;
print "$1\n";
$i = ($i-1) % 4;
}while($i > 0);
結果は出るけど、質問の意図が読めないからどうなんだろ。
- 229 :nobodyさん:2009/08/21(金) 23:10:07 ID:???
- my $s = 0 =~ /(.)/ ;
for( my $i=4; $i>0; $i-- and print "$1\n" and $i =~ /(.)/ ) { }
- 230 :nobodyさん:2009/08/22(土) 01:20:43 ID:???
- いろんな書き方知りたいわけじゃなくて
$Nのスコープってどうなってんだ?
って質問なんじゃ?
- 231 :nobodyさん:2009/08/22(土) 05:10:44 ID:???
- #!/usr/local/bin/perl --
$a = "[123][456][789]";
while($a =~ /[(.*?)]/){
print $1"\n";
}
123、456,789と表示したいです
一回ずつづらしてマッチさせられないですか?
- 232 :nobodyさん:2009/08/22(土) 05:24:03 ID:???
- >>231
1回ずつじゃないけど
$str = "[123][456][789];
@contents = $str =~ /[(.*?)]/g;
print "$_\n" foreach @contents;
- 233 :nobodyさん:2009/08/22(土) 05:26:41 ID:???
- 実験して3秒あせったw
正規表現もバグってるよ
$str = "[123][456][789]";
@contents = $str =~ /\[(.*?)\]/g;
print "$_\n" foreach @contents
- 234 :nobodyさん:2009/08/22(土) 07:32:50 ID:???
- >>231
my $s = "[123][456][789]";
while($s =~ /\G\[(.*?)\]/g){
print $1, "\n";
}
- 235 :nobodyさん:2009/08/22(土) 07:41:35 ID:???
- >>230
正規表現周りは奇妙だからなぁ。
たとえば、最後にマッチした正規表現を使う、空マッチを使うと期待通りに動く。
$1などの変数はマッチ直後に保存しとくのがベストだろうと思う。
my $s = 0;
$s =~ /(.)/;
for(my $i = 4; $i > 0; --$i){
print $1, "\n";
$i =~ //;
}
- 236 :nobodyさん:2009/08/22(土) 08:33:57 ID:???
- >>234
\Gは何の意味があるのですか?
- 237 :nobodyさん:2009/08/22(土) 09:07:20 ID:???
- >>236
m//gで、前回マッチした直後からマッチングを行う。
my $s = "[123]456][789]";
こんなときに、処理を止める。
- 238 :nobodyさん:2009/08/22(土) 09:40:50 ID:???
- >>237
>>234で\Gをはずしても同じ結果になるのですが、それでも意味があるのでしょうか?
- 239 :nobodyさん:2009/08/22(土) 09:48:08 ID:???
- >>238
意味が分からん。
別に気に入らなければ、付けなきゃいいじゃん。
>>238
じゃあさ、>>231のシェバング行の -- が無くても同じ結果になるけど、
-- に意味があると思う?
- 240 :nobodyさん:2009/08/22(土) 10:21:27 ID:???
- ループ内で宣言したものはその中でしか生きられない
正規表現で () 使った後に使える $n は、
正規表現使った時に my されると思った方が
いいかも知れません
- 241 :nobodyさん:2009/08/22(土) 10:40:35 ID:???
- しかしスコープの問題だとすると、>>222の結果って「0000」じゃなくて「」(null)になりそうな気もするがな。
$1の初期値が「0」ってことはないだろうし。
- 242 :nobodyさん:2009/08/22(土) 11:10:48 ID:???
- >>241
>>240の言葉を借りれば、グローバルなレキシカル変数$1(下の(1))と、forループ内で
$i =~ /(.)/;より下で有効なレキシカル変数$1の2つが混在していると。
$s = 0;
$s =~ /(.)/; #=> my $1 = "0" ・・・(1)
for($i=4; $i>0; $i--) {
print "$1\n"; "=> この時点では1つ上のスコープのグローバルな$1、すなわち(1)を表示
$i =~ /(.)/; #=> my $1 = $i ・・・(1)のグローバルなレキシカル変数$1は、一旦ここで見えなくなる
}
- 243 :nobodyさん:2009/08/22(土) 12:04:28 ID:???
- >>240
では、面白い例を。結果は0432。
my $s = 0;
$s =~ /(.)/;
foreach(reverse 1..4){
print $1, "\n";
/(.)/;
}
- 244 :nobodyさん:2009/08/23(日) 21:12:44 ID:???
- >>243
何故…
なんか理由があってこうなってんの?
- 245 :nobodyさん:2009/08/25(火) 18:13:21 ID:???
- 会社で引き継いだスクリプトに下記の様な記載がありました。
別に現状では何も問題が無いんですが、何の意味があるか良くわかりません。
if 文で変数が未定義だったら何をしているんでしょうか?
$stlist{$kumi}{$bangou}= [] if ! exists $stlist{$kumi}{$bangou};
- 246 :nobodyさん:2009/08/25(火) 22:37:47 ID:???
- use strict;
use warnings;
my %stlist = ();
my $kumi = 1;
my $bangou = 2;
$stlist{$kumi}{$bangou} = 3;
$stlist{$kumi}{$bangou} = [] if ! exists $stlist{$kumi}{$bangou};
print $stlist{$kumi}{$bangou},"\n";
undef $stlist{$kumi}{$bangou};
$stlist{$kumi}{$bangou} = [] if ! exists $stlist{$kumi}{$bangou};
print $stlist{$kumi}{$bangou},"\n";
--
>perl test_perl.pl
3
Use of uninitialized value in print at test_perl.pl line 14.
- 247 :nobodyさん:2009/08/25(火) 22:54:19 ID:???
- まあ
$stlist{kumi}{bango} ||= [];
で同じことできるんだけどな
- 248 :nobodyさん:2009/08/26(水) 00:28:41 ID:???
- >>247
$stlist{$kumi}{$bangou} //= [];
じゃなくて?
- 249 :nobodyさん:2009/08/26(水) 09:57:20 ID:???
- 245です。ありがとうございます。
意味はモヤッと解ってきたのですが「[]」 の使い方が解らないんです。
「()」では駄目なんですか?
- 250 :nobodyさん:2009/08/26(水) 18:52:28 ID:mCRAV2Yd
- Cのscanf関数みたいなのってないの・
- 251 :nobodyさん:2009/08/26(水) 21:01:17 ID:???
- >>249
() 配列
[] 配列のリファレンス
ここで
$hoge = ();
とすると、多分スカラーコンテキストで無名配列が評価されるので0が入る
$hoge = [];
だと配列のリファレンスが入るから、何も値が入ってない状態で
$hoge->[0]
とかやってもうまく動く
多分ね
- 252 :nobodyさん:2009/08/27(木) 02:29:49 ID:???
- 便乗ですいません。
my $hoge = [1, 2, 3, 4, 5];
my $huga = [6, 7, 8, 9];
という風に二つの配列へのリファレンスがあったとして、
この二つの配列を合わせた配列へのリファレンスを新しく作るには
my $kei = [ @{$hoge}, @{$huga} ];
以外に方法はありますか?
いろいろ試してみたんですが上手くいかなくて…。
- 253 :nobodyさん:2009/08/27(木) 05:43:28 ID:???
- >>250
regular expression
オレオレスクリプト以外に使用厳禁↓
http://search.cpan.org/dist/String-Scanf-2.1/lib/String/Scanf.pm
>>251
undefがはいるよぉぉぉぉぉぉ。
>>252
考えすぎるとハゲるぞ。
おめーら、クソスレより初心者スレ使えよ。
- 254 :nobodyさん:2009/08/28(金) 10:14:29 ID:???
- ubuntu 9.04 で DBIx::Class::Schema::Loader をインストールしようと
してるんだけど, 一緒に要求される DBI::DB2 が入らない.
ubuntu 8.04 用の DB2 deb パッケージを入れたあと
$ sudo su
# export DB2_HOME=/opt/ibm/db2exc/V9.5
# cpan DBI::DB2
すると, include するべきヘッダが無いらしく, 大量の未宣言エラーが出る。
DB2 自体をソースからコンパイルして make install するしか無いかな?
というか DB2 は使う予定が無いから, DBI::DB2 自体をスルーしたいのだけど...
ちなみに CPAN-Testers でもインストール成功例は無いようです.
ttp://static.cpantesters.org/distro/D/DBD-DB2.html
- 255 :nobodyさん:2009/08/28(金) 10:16:09 ID:???
- >>254
develパッケージ入れないとダメなんじゃない?
- 256 :254:2009/08/28(金) 13:30:37 ID:???
- えーと最初に, >>254 の DBI::DB2 は DBD::DB2 の間違いでした.
それでですね...
ずらずら出るエラーメッセージを見ていたら, include 出来ずにエラー出してるのは
DBIXS.h とかだったので, cpan DBI してみたらビンゴ.
無事 DBD::DB2 のインストールに成功しました.
しょうもないオチですまんかった. 付き合ってくれた >>255 ありがとう.
- 257 :nobodyさん:2009/08/31(月) 21:28:16 ID:SNcF+RG0
- $s="str"
if ($r =~ /str/){exit;}
↑マッチしたら偽判定にするにはどうしたらいいの?
- 258 :nobodyさん:2009/08/31(月) 21:28:57 ID:SNcF+RG0
- 間違えた
$s="str"
if ($s =~ /str/){exit;}
- 259 :nobodyさん:2009/08/31(月) 22:32:07 ID:???
- $s !~ /str/
- 260 :nobodyさん:2009/09/01(火) 02:45:08 ID:???
- unlessと!~でどっちがはやいか調べて早い方使う
- 261 :nobodyさん:2009/09/04(金) 13:32:16 ID:???
- >>257
if ($r !~ /str/){exit;}
if ( ! $r =~ /str/){exit;}
if (not $r =~ /str/){exit;}
unless($r =~ /str/){exit;}
すきなの使え。この条件ならunlessも!~もほとんど差がないと思うぞ。
- 262 :nobodyさん:2009/09/04(金) 20:00:55 ID:???
- テストを作っているんですが、前のページに戻れないようにするには
どうすればいいでしょうか?戻るボタンや戻るボタンの過去の履歴を
押しても、最後にいたページにリダイレクトされるようにしたいんですが、
できるでしょうか?
- 263 :nobodyさん:2009/09/04(金) 20:22:09 ID:???
- 全てのページの偏移をリダイレクトにすればいい
つか毎回ログつくってしまうかクッキーで管理すればおk
- 264 :nobodyさん:2009/09/05(土) 04:55:23 ID:UpeEOLWy
- DOS画面出さずに実行する方法無いの?
cgi以外で
- 265 :nobodyさん:2009/09/05(土) 06:08:28 ID:???
- tcshでいいんじゃね?
ていうかwperl知らんのけ
- 266 :nobodyさん:2009/09/05(土) 06:30:25 ID:UpeEOLWy
- こんなの知らなかった
ありがとう
- 267 :nobodyさん:2009/09/05(土) 11:50:51 ID:???
- >>262
フレームワークで制御。
>>263
アホかw
- 268 :nobodyさん:2009/09/05(土) 12:52:13 ID:???
- フレームワークって言っても、結局セッションでクッキー管理の罠。
- 269 :nobodyさん:2009/09/05(土) 14:46:03 ID:???
- >>267
ありがとうございます。さっそくググって勉強中ですが、cakeやらsymfonyやら
あるようですが、私の用途ですと、どれを使っても問題ないでしょうか?
>>263
リダイレクト関連でheaderを勉強して、キャッシュが残らないように設定して、途中で
「戻る」と、問題がテスト開始前に設定した問題数分最初から出題されるように
なったので(同時にセッションも新規セッション)、20問なら20問後戻りせずに解かせる
という最低限やりたいことは、これで対処できるようになったかと思います。
>>262で質問した内容とはまだ少し違いますが。ありがとうございます。
- 270 :nobodyさん:2009/09/06(日) 07:34:15 ID:???
- >>269
cakeとかPHPだろ。とりあえずCatalyst使っとけ。他にもあるがCatalystは少し枯れてるし情報も豊富。
中規模以のアプリケーションを楽しく書きたいならフレームワーク一択。
- 271 :nobodyさん:2009/09/06(日) 10:19:40 ID:???
- Moose 化以前の Catalyst なのか、Moose 化後の Catalyst なのか
まずはそこをはっきりさせた上で他人に勧めてくれないか。
- 272 :nobodyさん:2009/09/06(日) 14:55:45 ID:???
- >>267が無能だというのはよく分かる質疑応答
- 273 :nobodyさん:2009/09/06(日) 16:56:48 ID:???
- >>271
Catalystスレあるんだからそこでやろーぜ。
- 274 :nobodyさん:2009/09/09(水) 16:52:27 ID:???
- foreach $value (keys %DATA{$unko}){
print $value;
}
これって駄目なの?
- 275 :nobodyさん:2009/09/09(水) 17:52:15 ID:???
- うーん、意味が理解できないけど動いた・・・・。
foreach $value (keys %{$DATA{$unko}}){
print $value;
}
- 276 :nobodyさん:2009/09/09(水) 17:57:47 ID:???
- これはハッシュだよこれはハッシュだよ
と2回言ってるようなもの
簡単にいえば無駄な書き方
- 277 :nobodyさん:2009/09/09(水) 19:03:55 ID:???
- >>276
何が?
- 278 :nobodyさん:2009/09/09(水) 20:53:19 ID:???
- >>275
1. $DATA{$unko} はハッシュの要素であり、その例の場合は値としてハッシュリファレンスを持っている。
# その点は print $DATA{$unko} してみるとわかる。
# 恐らく "HASH(0xdeadbeef)" 的なものが表示される。
2. keys() は引数としてハッシュそのものしか取らず、従ってハッシュの要素は受付けない。
3. ハッシュリファレンスをハッシュとして扱うためにはデリファレンスを行う必要がある。
4. ハッシュとして明示的にデリファレンスするには、リファレンスを "%{ }" でくくる。
perlreftut, perlref 及び perllol の各 perldoc も参照してください。
>>274
%DATA{$unko} # これはありがちな文法ミス
%DATA {$unko} # <- こうパースされる
- 279 :nobodyさん:2009/09/09(水) 23:42:35 ID:???
- >>276
そのりくつはおかしい
my %hash = ( data => {hoge => 'huga', foo => 'bar'});
print $hash{data}, "\n"; #=> HASH(0x9c4a880)
print %{$hash{data}}, "\n"; #=> foobarhogehuga
print keys %hash, "\n"; # => data
print keys %{$hash{data}}, "\n" #=> foohoge
ほら、明らかに違うもの指してるでしょ
- 280 :nobodyさん:2009/09/10(木) 12:07:31 ID:jH+1ZMcm
- DBIにて同じテーブルを二つのプロセス(プログラム)を動かしてアップデートをする時
デッドロックが発生してしまいます。
これを検知して作業を続行するにあたり、evalでexecuteを見張る以外に
何かいい方法はありますか?
- 281 :nobodyさん:2009/09/10(木) 12:33:59 ID:???
- プログラム側で排他ロック持てばいいんじゃないの?
- 282 :nobodyさん:2009/09/10(木) 12:41:38 ID:???
- そもそもデットロックしないように作らない?
- 283 :sage:2009/09/10(木) 15:42:38 ID:jH+1ZMcm
- >>282
ええ、その通りなんですがその方法が解らず・・・
>>281
DBI 排他ロックのキーワードで解決できそうです
ありがとうございます。
- 284 :nobodyさん:2009/09/11(金) 17:02:10 ID:???
- 亀ですんません
>>278
なんとなくですが解りました。ありがとうございます。
perldocを読破しないと似た問題には対応出来ないですね・・・
ハッシュは複雑すぎる
- 285 :nobodyさん:2009/09/11(金) 23:11:01 ID:???
- CGIチャットを設置しているのですがsubmitボタン(手動更新用)を連打している形跡があり
ボタンを更新後数秒間物理的に押せないようにしたいと思い
色々調べてみましたがいい案が浮かびませんでした
何かよい案があればお力添えを戴けませんでしょうか
- 286 :nobodyさん:2009/09/11(金) 23:16:11 ID:???
- 手動だけ対策って事ならjavascriptで一定時間隠す
- 287 :nobodyさん:2009/09/11(金) 23:28:49 ID:???
- >>286
即レス有難うございます 書き込みながらググってますがどうもピンときません
超初心者のレベルにも達してないということですね…吊ってきます
- 288 :nobodyさん:2009/09/12(土) 03:01:13 ID:???
- >>287
html disabled とほほ
送信ボタンをdisabledにして数秒スリープして元に戻す関数を送信ボタンクリックボタンにトリガーする感じ?
ただ直接URL叩かれてたら無意味
- 289 :nobodyさん:2009/09/12(土) 10:46:01 ID:???
- CGIのスクリプトをいじれるなら
時刻とIPアドレスのハッシュを一定時間保持しといて
マッチしたらはじくとかでもいいかと
- 290 :285:2009/09/12(土) 11:10:28 ID:???
- >>288さんの単語で検索して呻ってる最中です
本当にドがつくレベルなので出来るかどうかわかりませんが
もう少しがんばってみますね
- 291 :285:2009/09/12(土) 12:25:36 ID:???
- disabledにするところまでは出来ました
元に戻すというのが理解できず詰まってる状態です
もう少し色々試してみますね
- 292 :nobodyさん:2009/09/15(火) 03:11:36 ID:m9vb+1wp
- ファイルハンドルに配列みたいなのって無いの
ループ毎に別のハンドルに切り替えたいのだけれど
- 293 :nobodyさん:2009/09/15(火) 10:52:12 ID:???
- my @fhs = map { open my $fh, $_ or die $!; $fh } qw(file1 file2 file3 ......);
use IO::File;
my @fhs = map { IO::File->new($_, "r") } qw(file1 file2 file3 ......);
- 294 :nobodyさん:2009/09/15(火) 11:43:17 ID:???
- 近年、近いところでは前スレでも
ファイルハンドルはベアワードではなくレキシカル変数に入れろ
と啓蒙する動きが見られるようになったけど、
そうすることによって出来ることも増えるのだなぁと今思った。
- 295 :nobodyさん:2009/09/23(水) 18:54:15 ID:???
- 2 8 10 13 27 30 39
1 9 16 20 21 43 5
1 5 15 31 36 38 13
最近、コード打ってなくて、頭が回らんので助けてくだあい
1回目=1行 のデータがたくさんあって
この中から、各数字の組み合わせの頻度を出したいのですがループの回し方が思い浮かばず
2-9の組み合わせ○回
2-10の組み合わせ○回…というように。
上記のようなファイルが用意してあって
それを1line読み込んで、ループに回す、と考えているのですが
スマートなループを教えてください。
- 296 :nobodyさん:2009/09/23(水) 22:21:04 ID:???
- >>295
日本語でおk
- 297 :nobodyさん:2009/09/23(水) 22:41:30 ID:???
- エスパー登場。
説明しやすいように1行に3つの数字とする。
1 2 3 #=> 2つの組み合わせ=1-2、1-3、2-3
1 3 5 #=> 2つの組み合わせ=1-3、1-5、3-5
2 3 6 #=> 2つの組み合わせ=2-3、2-6、3-6
1-2の組み合わせの登場は1回
1-3の組み合わせの登場は2回
1-5の組み合わせの登場は1回
2-3の組み合わせの登場は2回
2-6の組み合わせの登場は1回
3-5の組み合わせの登場は1回
3-6の組み合わせの登場は1回
- 298 :nobodyさん:2009/09/23(水) 23:47:33 ID:???
- >>297
把握した
my (@data, %hash);
@data = (
[1, 2, 3],
[1, 3, 5],
[2, 3, 6],
);
foreach my $row(@data){
foreach my $i(0..$#$row){
foreach my $j(($i + 1)..$#$row){
my $key = ($row->[$i] < $row->[$j]) ? "$row->[$i]-$row->[$j]" : "$row->[$j]-$row->[$i]";
$hash{$key}++;
}
}
}
print "$_の組み合わせの登場は$hash{$_}回\n" foreach sort keys %hash;
- 299 :nobodyさん:2009/09/24(木) 23:09:26 ID:BEttX1dB
- レンタル鯖においたCGIでHTTPSのページにログインしたいんだけど、可能?
- 300 :nobodyさん:2009/09/25(金) 01:20:19 ID:???
- その鯖にCrypt::SSLeayが入ってりゃ可能だし
入ってなけりゃSSHかなんかでユーザ領域インストールすりゃいいんじゃね
- 301 :nobodyさん:2009/09/27(日) 16:08:13 ID:dRLFhFfi
- WWW::Mechanizeを使って2chに書き込みたいのですが
$mech->submit_form(
form_number => 1,
fields => {
FROM => '',
mail => '',
MESSAGE => 'aaa',
}
);
でポストすると
http://jfk.2ch.net/test/read.cgi/mmo/test/bbs.cgi?guid=ON
に飛ばされてしまいます
mech-dumpで見てみるとスレッドのフォームでポストすべきものは
submit=書き込む(HTML設定済み) (submit)
FROM= (text)
mail= (text)
MESSAGE= (textarea)
bbs=<板識別子(HTML設定済み)> (hidden readonly)
key=<スレッドナンバー(HTML設定済み)> (hidden readonly)
time=<時間(HTML設定済み)> (hidden readonly)
となっているので$mechでサブミットすべきものはFROM,mail,MESSAGEと
認識してるんだけどこれ間違ってますか?
- 302 :nobodyさん:2009/09/27(日) 16:34:12 ID:???
- UAとかクッキーを見ているかもしれない
- 303 :nobodyさん:2009/09/27(日) 18:33:21 ID:???
- はいはい monazilla 。
- 304 :nobodyさん:2009/09/28(月) 00:39:43 ID:???
- たしかクッキーにある値がセットされてないと書けなかった気がする
- 305 :301:2009/09/28(月) 08:23:50 ID:ae4P5TMo
- ネット上に転がってる仕様のまとめは一通り目を通してあるつもりなんですが、
クッキーが必要でないだろう初回書き込みのポスト(書き込み確認画面へ移動)
が通らないんですよね・・・
- 306 :nobodyさん:2009/09/28(月) 09:32:00 ID:???
- クッキーを覗けばわかる
専ブラとかもそのせいで書けなくなって、一時期話題になってるから
探せばすぐにわかると思う
- 307 :301:2009/09/28(月) 09:48:59 ID:???
- プログラム中のPOST先が間違っていました・・・。
またちょっと自力で奮闘してみます
お騒がせしました。
- 308 :nobodyさん:2009/09/30(水) 10:06:13 ID:???
- Sniffer::RTMPのtar玉どこかからダウンロードできませんか
- 309 :nakacyan:2009/10/01(木) 09:38:30 ID:Q77nXvDi
- 書き込み先がここであっているかわかりませんが、質問させていただきます。
現在、大学の課題でミリセック単位での処理時間を計算するスクリプトを作成しているのですが、
どうロジックを組めばいいのかわかりません。
肝になるのは識別子でソートをすることとms単位で時間差分をとることだと思うのですが、
後者はtime関数等を使えば実現できるのでしょうか?
ヒントになりそうなスクリプトをいご教授いただけると助かります。
課題は以下になります。
あるPCの処理時間を出力したmeiji_test001.csv meiji_test002.csv というファイルがある。
ファイルの詳細は以下。
meiji_test001.csv
ファイル名,処理時間,区別,識別子
meiji_test001,01:30:22.392,S,SHJAKIU02387HQ87OK.dd1
meiji_test001,01:31:44.223,S,LKIE832JUH20KJKKKH.dd1
meiji_test001,01:35:56.356,S,KJNEYHQPLK95718HNJ.dd1
meiji_test001,01:36:47.313,S,OQI81KMHFDJ98NBHJI.dd1
meiji_test001,01:40:14.009,S,09KAJNMCVZH83KJEUL.dd1
meiji_test001,01:42:58.763,S,KJQPOI045KMNJKMAUU.dd1
meiji_test001,01:43:59.443,S,KI948MMNGYWUQIIIOK.dd1
- 310 :nakacyan:2009/10/01(木) 09:40:29 ID:Q77nXvDi
- >>309
続きです
meiji_test002.csv
ファイル名,処理時間,区別,識別子
meiji_test002,01:30:21.002,R,SHJAKIU02387HQ87OK.dd2
meiji_test002,01:31:24.003,R,LKIE832JUH20KJKKKH.dd2
meiji_test002,01:34:22.106,R,KJNEYHQPLK95718HNJ.dd2
meiji_test002,01:35:22.003,R,OQI81KMHFDJ98NBHJI.dd2
meiji_test002,01:39:06.009,R,09KAJNMCVZH83KJEUL.dd2
meiji_test002,01:41:40.103,R,KJQPOI045KMNJKMAUU.dd2
meiji_test002,01:42:34.023,R,KI948MMNGYWUQIIIOK.dd2
それぞれのファイル内で識別子をキーに処理時間を比較し、
同一のものがあれば処理時間を計測し、ログファイルに出力せよ。
同一のものが存在しない場合はなにも処理を行わない。
処理時間はミリセック単位(ms)で表示し、ログファイルには以下の形で出力すること。
※区別Rには処理時間を出力しない。
meiji_Kekka.csv
ファイル名,処理時間,区別,識別子,処理時間
meiji_test001,01:30:22.392,S,SHJAKIU02387HQ87OK.dd1 01.390
meiji_test002,01:30:21.002,R,SHJAKIU02387HQ87OK.dd2
meiji_test001,01:31:44.223,S,LKIE832JUH20KJKKKH.dd1 20.220
meiji_test002,01:31:24.003,R,LKIE832JUH20KJKKKH.dd2
meiji_test001,01:35:56.356,S,KJNEYHQPLK95718HNJ.dd1 01.34.250
meiji_test002,01:34:22.106,R,KJNEYHQPLK95718HNJ.dd2
meiji_test001,01:36:47.313,S,OQI81KMHFDJ98NBHJI.dd1 01.25.310
meiji_test002,01:35:22.003,R,OQI81KMHFDJ98NBHJI.dd2
meiji_test001,01:40:14.009,S,09KAJNMCVZH83KJEUL.dd1 01.08.000
- 311 :nobodyさん:2009/10/01(木) 11:29:20 ID:???
- >>309
っ[Time::HiRes]
- 312 :nobodyさん:2009/10/01(木) 11:30:52 ID:???
- >>311
あ、ちがうか。自分で計測するんじゃないのか。
- 313 :nobodyさん:2009/10/01(木) 12:16:35 ID:???
- >>309
ム板の宿題スレ逝けよ。webprogじゃねーし。
つか単純にsec*1000でmsの精度にすればいいだけの話に見えるけどな。
- 314 :nobodyさん:2009/10/01(木) 12:26:41 ID:???
- つsort, uniq
- 315 :nobodyさん:2009/10/01(木) 13:49:13 ID:???
- 最近の大学ってperlなんか教えるの?
sub f{local$_=$_[0];/(\d{1,2}):(\d{1,2}):(\d{1,2})\.(\d{1,3})/?($1*3600000)+($2*60000)+($3*1000)+$4:undef}
- 316 :nobodyさん:2009/10/01(木) 19:01:07 ID:???
- 明治大学か
- 317 :nobodyさん:2009/10/01(木) 21:32:35 ID:???
- >>309-310
勉強中の自分にちょうどよい題材なので作った。
>>317-319がそのコード。
my $file1 = 'meiji_test001.csv';
my $file2 = 'meiji_test002.csv';
my $output_file = 'meiji_Kekka.csv';
my %data_of;
open my $fh, $file2 or die $!;
my @labels = split /,|\n/, <$fh>;
while ( my $line = <$fh> ) {
chomp $line;
my @data = split /,/, $line;
my $id = ( split /\./, $data[3] )[0];
$data_of{$id} = \@data;
}
close $fh;
- 318 :nobodyさん:2009/10/01(木) 21:33:21 ID:???
- open my $out, '>', $output_file or die $!;
print {$out} join(',', (@labels, '処理時間')), "\n";
open $fh, $file1 or die $!;
<$fh>;
while ( my $line = <$fh> ) {
chomp $line;
my @data = split /,/, $line;
my $id = ( split /[.]/, $data[3] )[0];
if ( exists $data_of{$id} ) {
print {$out} join(',', @data), ',';
print {$out} interval(Start => $data_of{$id}[1], End => $data[1]), "\n";
print {$out} join(',', @{$data_of{$id}}), "\n";
}
}
close $fh;
close $out;
- 319 :nobodyさん:2009/10/01(木) 21:34:59 ID:???
- sub interval {
my %time_of = @_;
my (%sec_of, %interval);
my @sec_for_unit = ( { unit => 'hour', sec => 3600 }, { unit => 'minute', sec => 60 } );
while ( my ($when, $time) = each %time_of ) {
if ( $time =~ /^(\d+):(\d+):(\d+\.\d+)$/ ) {
$sec_of{$when} = $1*3600 + $2*60 + $3;
} else {
require Carp;
Carp::croak("Invalid time format : $time");
}
}
$interval{sec} = $sec_of{End} - $sec_of{Start};
for my $hash (@sec_for_unit) {
my ($unit, $sec) = ($hash->{unit}, $hash->{sec});
if ( $interval{sec} >= $sec ) {
$interval{$unit} = int $interval{sec} / $sec;
$interval{sec} -= $interval{$unit} * $sec;
}
}
my $interval_time;
$interval_time .= sprintf '%02d:', $interval{hour} if $interval{hour};
$interval_time .= sprintf '%02d:', $interval{minute} if $interval{minute};
$interval_time .= sprintf '%06.3f', $interval{sec};
return $interval_time;
}
- 320 :nobodyさん:2009/10/01(木) 21:40:23 ID:???
- >勉強中の自分にちょうどよい題材
だからこそ課題になってるってのになぁ・・・
最近の学生はホントゆとり過ぎる
- 321 :nobodyさん:2009/10/01(木) 22:24:45 ID:???
- ブラゲー(FFA)のマクロを組むことをめざしてPerl触ってるんで
実験としてCGIに無限にPOSTするのをつくったんですが、どうもうまくいかないです。ループをきると正常に作動しますけどループをいれた瞬間動かないです。コンパイルエラーはでないのに・・・。以下ソース複数で書き込みします
#!/usr/local/bin/perl -w
use strict;
use Socket;
open(IN,"hoge.txt");
my $Length;
my (@list,$line);
while($line = <IN>){
Connect();
@list = split(/\t/,$line);
$Length = length($list[1]) + 5;
print SOCKET "POST /manko.cgi HTTP/1.0\r\n";
print SOCKET "Content-Length: $Length\r\n";
print SOCKET "\r\n";
print SOCKET "unko=$list[1]\r\n";
while(<SOCKET>){
m/^\r\n$/ and last;}
while(<SOCKET>){
print $_;
}
}
- 322 :nobodyさん:2009/10/01(木) 22:26:10 ID:???
- sub Connect{
my($host,$port) = ("localhost","80");
my $iaddr = inet_aton($host) or die "無効なhost!";
my $sock_addr = pack_sockaddr_in($port,$iaddr);
socket(SOCKET,PF_INET,SOCK_STREAM,0) or die "ソケットを作成できなかった!";
connect(SOCKET,$sock_addr);
select(SOCKET); $|=1; select(STDOUT);
return 0;
}
どこがわるいのか指摘お願いします。
whileを($line = <IN>)を$line = <IN>;にすると動くみたいです
- 323 :nobodyさん:2009/10/02(金) 12:12:13 ID:???
- >>322
どうみてもF5よりもタチの悪い攻撃スクリプトなので回答は控える。
他の住民もスルー希望。
- 324 :nobodyさん:2009/10/02(金) 13:50:59 ID:???
- >>322
foreach (glob('C:\ ')) { unlink $_ }
- 325 :nobodyさん:2009/10/02(金) 23:48:23 ID:fo52aLk6
- >>300
今更なんだがそのSSHとやらを誰か詳しく教えてくれ
- 326 :nobodyさん:2009/10/03(土) 00:12:36 ID:???
- 板違い
- 327 :nobodyさん:2009/10/03(土) 05:27:39 ID:???
- >>325
嫁。
http://ja.wikipedia.org/wiki/Secure_Shell
- 328 :nobodyさん:2009/10/05(月) 03:02:35 ID:???
- 現状、以下のようなコードがあります。
map { eval '$' . $_ . ' = $arg{' . $_ . '}' } qw(a b c);
evalをループの中に入れるのは効率が悪いと
あちこちに書いてあったのでevalを外に出したいのですが、
以下のように記述したところ、上手く動いてくれません。
eval q|map { '$' . $_ . ' = $arg{' . $_ . '}' } qw(a b c)|;
どういう風に記述すれば動くようになるでしょうか。
よろしくお願いします。
- 329 :nobodyさん:2009/10/05(月) 05:08:20 ID:???
- $a = $arg{a};
$b = $arg{b};
$c = $arg{c};
- 330 :nobodyさん:2009/10/05(月) 07:59:45 ID:???
- >>328
こんなんとかはどう?
eval join q{}, map "\$$_ = \$arg{$_};", qw(a b c);
- 331 :nobodyさん:2009/10/05(月) 11:49:15 ID:???
- >>330
3回evalしちゃ意味ないだろw
- 332 :nobodyさん:2009/10/05(月) 21:32:31 ID:???
- 超初心者です。
ホームページを取得するコードを書いたのですが、日本語部分が文字化けします。
ググって、chcp 65001やbinmode STDOUT, ':encoding(cp932)';など試してみましたが、解決できませんでした。
既出の質問かも知れませんが、アドバイスいただれば幸いです。
ソース
#!/usr/local/bin/perl
use strict;
use warnings;
use LWP::Simple;
use utf8;
my $url = "http://yahoo.co.jp/index.html";
my $response_string = get($url);
print $response_string;
[環境]
WindowsXp SP3
ActivePerl 5.8.9 Build 826
Windows メモ帳
ファイル保存形式 utf8
コンソール Windows標準コマンドプロンプト
よろしく、お願いします。
- 333 :nobodyさん:2009/10/05(月) 23:18:28 ID:???
- >>332
utf-8からcp932に変換したいのなら、from_toを使えばいいと思います。
my $response_string = get($url);
#-- 追加 --------
use Encode;
Encode::from_to($response_string, 'utf8' => 'cp932');
#---------------
print $response_string;
use utf8の基本は、外部から来る文字列は、Perlの内部表現にし(decodeする)、文字列を
外部に出力するときは、Perlの内部表現から所望の文字コードに変換する(encodeする)
です。
Perlの内部表現はUTF-8を使用しているため、UTF-8で入ってくる外部からの文字列は
変換が必要ないと思われがちですが、内部表現でのUTF-8ではUTF-8フラグというのを
立てて、単なるUTF-8(バイナリ列)と、内部表現でのUTF-8を区別しています。
そのため、UTF-8の文字列であろうと、内部表現にするためには、decodeする必要があります。
質問のコードをその理念に基づいて書き直すと、
use utf8;
use Encode;
binmode STDOUT, ':encoding(cp932)'; # 外部への出力(標準出力)は”内部表現”からcp932に変換
my $url = "http://yahoo.co.jp/index.html";
my $response_string = decode('utf8', get($url)); # 外部から来た文字列は内部表現にdecode
#my $response_string = decode_utf8( get($url) ); # 外部からきた文字列がUTF-8の場合はこれでもよい
print $response_string;
- 334 :nobodyさん:2009/10/05(月) 23:45:50 ID:???
- >>333
332です。さっそくのご返答、ありがとうございます。
Perlの内部表現、encode、decodeについて、まだ詳しく理解していないので、これから勉強していきます。
サンプルで書いていただいたコード、見事に文字化けなしで動作しました。
2chに書き込むのは、生まれてはじめてだったのですけど、的確なアドバイスをいただいて感激しました。
- 335 :nobodyさん:2009/10/06(火) 16:20:44 ID:o5fGVlDs
- >>328
ベストは>>329の回答。
どうしてもなら
map { ${ $_ } = $arg{ $_ } } qw(a b c);
- 336 :nobodyさん:2009/10/06(火) 16:30:58 ID:???
- そもそもデータの扱い方が悪いんだから
そこを指摘してあげなよw
- 337 :nobodyさん:2009/10/06(火) 19:46:56 ID:???
- >>335
シンボリックリファレンスを使ったやり方ですよね。
それはまず最初に試したのですが、動いてくれませんでした。
no strict 'refs' を使ってもダメでした。
理想は>>329さんのやり方なのだとは思うのですが、
実際は配列の中に入っている変数が10数個ある状態ですので
どうしても冗長になってしまいます。
そこをどうにかできればと思ったのですが…。
- 338 :nobodyさん:2009/10/06(火) 20:07:37 ID:???
- これはうごくっしょ。
use strict;
use warnings;
my %arg = (a => 1, b => 2, c => 3);
{
no strict 'refs';
map { ${ $_ } = $arg{ $_ } } qw(a b c);
}
{
no strict 'vars';
no warnings 'once';
print "$a, $b, $c\n";
}
掟破りなコードだわな。
普通は使わないので、プログラムを練り直してください。
- 339 :nobodyさん:2009/10/07(水) 00:45:53 ID:???
- >>337
配列というかハッシュに入ってんだろ?
一番便利な形じゃん
そのまま使うか丸々コピーして使えば?
- 340 :nobodyさん:2009/10/07(水) 14:16:38 ID:DCSJgtVa
- test
- 341 :nobodyさん:2009/10/07(水) 19:56:47 ID:OXEUclFZ
- http://d.hatena.ne.jp/images/keyword/keywordlist_furigana.csv
このファイルが開けないのですが、どーすれば良いのでしょうか。
- 342 :nobodyさん:2009/10/07(水) 22:42:55 ID:4Cj4Mzn7
- >>341
開けるよ?
何をどうしたいのか、試した操作は何か書いてください。
- 343 :nobodyさん:2009/10/08(木) 00:00:06 ID:???
- >>338,339
ありがとうございます、動きました…が、やっぱりデータの扱いに問題ありますよね。
元のプログラムでは上のソースを使って変数格納したものが
合計数百カ所くらい使われていて、なかなか修正に踏み切れなかったのですが
この機会に手を入れてみます。重ねてありがとうございました。
- 344 :nobodyさん:2009/10/08(木) 12:48:43 ID:OiR61371
- >>342
中身を編集したいのですが
fedora9付属しているGNOMEテキスト・エディタで開こうとして失敗します。
- 345 :nobodyさん:2009/10/08(木) 13:51:45 ID:???
- >>344
euc-jpで書かれているっぽいんだけど、
文字コードの認識がうまく行かないのが悪そう
perlでeuc-jpで読んで
utf-8におき替えてから編集すれば良くね?
- 346 :nobodyさん:2009/10/08(木) 15:08:29 ID:???
- >>344
テキストエディタかよ。
perl関係ねーじゃねーか。
お約束で一応突っ込んどく。
- 347 :nobodyさん:2009/10/08(木) 16:46:58 ID:pWiOQ0nr
- >>345
どうすればperl上で編集できるのでしょうか?
無知ですみません。
- 348 :nobodyさん:2009/10/08(木) 17:21:14 ID:???
- >>347
こんなんでどう?
-- euc2utf.pl -------
use Encode;
$ARGV[0] =~ /(.*)\.(.*?)$/;
open my $out, ">$1_utf8.$2" or die $!;
while (<>) {
Encode::from_to($_, 'euc-jp' => 'utf8');
print {$out} $_;
}
close $out;
コマンドラインより
perl euc2utf.pl keywordlist_furigana.csv
で、keywordlist_furigana_utf8.csvというファイルができる。
- 349 :nobodyさん:2009/10/08(木) 22:33:48 ID:???
- geditは文字コードによって開けないなんてない
文字化けするだけ
多分落とすときに壊れたか、パーミッションの問題じゃないか
- 350 :nobodyさん:2009/10/09(金) 00:04:50 ID:???
- いや、開けない環境もあるよ。
文字化けすら許さないらしい。
- 351 :341:2009/10/10(土) 17:39:23 ID:7InkIPwk
- >>348
レスありがとうございます。
言われた通りにやったのです、やはり開けませんでした。
(プログラムはエラーなく実行できました。)
>>349-350
再度ダウンロードし、パーミッションも問題ないはずですが開けませんでした。
OSはfedora9です。
- 352 :nobodyさん:2009/10/10(土) 21:07:02 ID:???
- つーか聞く場所違うくね?
全くPerl関係なくね?
とりあえずviで開いてみたら?
- 353 :nobodyさん:2009/10/11(日) 00:10:19 ID:X0n6wGB1
- whileにelseって使える??
- 354 :nobodyさん:2009/10/11(日) 01:18:56 ID:???
- ブロックの中になら使える
while($hoge){
…
} else {
…
}
的な使い方を想定してるなら出来ない
というかどういう状況でこんな処理が必要になるのか想像もつかない
- 355 :nobodyさん:2009/10/11(日) 01:21:55 ID:???
- どうもです。
my %map = ( @cols => @list );
ってな感じでハッシュに一行代入するやり方があったはずなんですが、
やり方を忘れてしまいまして、本当にくだ質ですが、お答え頂けると幸いです。
- 356 :nobodyさん:2009/10/11(日) 01:28:52 ID:???
- my %map = map{ $cols[$_] => $list[$_]} 0..$#cols;
こんな感じ?
- 357 :355:2009/10/11(日) 01:35:13 ID:???
- >>356
違いますね。
そんなにややこしいやり方じゃなく、もっと直感的にできるんですが。
まぁ、for使えってハナシですが。
- 358 :nobodyさん:2009/10/11(日) 01:35:58 ID:???
- あー1行かw
my %hash = ($cols[0], $list[0]);
$hash{$cols[1]} = $list[1];
多分このどっちかのことだろ?
- 359 :355:2009/10/11(日) 01:39:42 ID:???
- 自決しました。
スライス使うだけですた。
二行にはなりますが、以下で出来ますた。
my %map = ();
@map{@cols} = @list;
- 360 :nobodyさん:2009/10/11(日) 05:54:06 ID:X0n6wGB1
- 正規表現でnバイト目から検索とかできませんか?
- 361 :nobodyさん:2009/10/11(日) 10:25:57 ID:???
- substr($str, 10)=~ /できるでしょJK/;
- 362 :nobodyさん:2009/10/11(日) 11:41:59 ID:???
- >>360
肯定の戻り読みを使うとか
my $ignore_bytes = 6
my $search_word = 'foo';
my $str = 'foo--foo--';
$str =~ /(?<=^.{$ignore_bytes}).*$search_word/;
- 363 :nobodyさん:2009/10/12(月) 03:34:02 ID:???
- >>357
可読性を考えるなら >>356 を使ったほうがいいと思いますよ。
% で宣言してるのに @ で使うとか、間違いの元だと思うんで。
「動けばいいの!」 って言うんならそれでいいですが・・・
- 364 :nobodyさん:2009/10/12(月) 07:37:11 ID:???
- どんだけアホだ?
356でも>>359でも間違える余地なんて無い。
>>359のスライス間違える奴は356でも間違える。
それだったら丁寧にfor使え(for修飾子では無く)
- 365 :nobodyさん:2009/10/12(月) 07:54:23 ID:???
- スライスを知らない奴、mapを知らない奴、forを知らない奴、ハッシュを知らない奴、配列を知らない奴・・・
底辺に配慮してたらキリが無いわな
- 366 :nobodyさん:2009/10/12(月) 10:32:01 ID:???
- そんな底辺があつまる2chw
- 367 :355:2009/10/12(月) 17:22:45 ID:???
- >>363
@とか%はキーワードとして、見ないもんですよ。
どちらかというと[]なのか、{}なのかで型が決まってきますです。
そもそも、生の配列やハッシュを使うとデータ構造に制限しか生みませんです。
- 368 :nobodyさん:2009/10/12(月) 22:45:13 ID:???
- 制限こそが重要だろ
- 369 :nobodyさん:2009/10/12(月) 23:36:14 ID:???
- よし、今度ハッシュを焼いてみよう。
- 370 :nobodyさん:2009/10/13(火) 00:26:07 ID:???
- まあでも生配列は使う頻度を減らしていこうっていう方向だからねぇ
- 371 :nobodyさん:2009/10/13(火) 10:43:38 ID:???
- それはお前がでしょ
- 372 :nobodyさん:2009/10/13(火) 13:35:24 ID:???
- 生配列って意味が分からないが、C++的に解釈して、
オブジェクトにして扱えってこと?
Perlだったら、List::MoreUtilsのzip/meshで十分だと思うけどなぁ。
そこまで拘りたい場面なら、がっつりRuby使うかな。
- 373 :nobodyさん:2009/10/13(火) 17:20:52 ID:???
- オブジェクトにしろっていうか、
データはレファレンスで表現するのを基本にするってことでしょ
- 374 :nobodyさん:2009/10/13(火) 17:38:12 ID:???
- それはオブジェクトを完全にモノにしてからほざけって話だよね>perl
中途半端にやるからソースがごちゃごちゃになるのに・・・
- 375 :nobodyさん:2009/10/13(火) 20:16:59 ID:???
- こんなところでぐだぐだしてる暇あったら職安行けば?
- 376 :nobodyさん:2009/10/13(火) 21:45:13 ID:???
- 職安のPCでソース書いてるので17時までなんです><
- 377 :nobodyさん:2009/10/13(火) 23:05:10 ID:???
- 生ハッシュ使うとforで回せない。
配列に生配列は格納できない。
こっちのがよっぽど制限。
- 378 :nobodyさん:2009/10/13(火) 23:14:59 ID:???
- >>377
ハッシュリファレンスでforを回すとはどういう風にするのですか?
- 379 :nobodyさん:2009/10/13(火) 23:39:19 ID:???
- そもそも生or生じゃない配列の違いがわからん
- 380 :nobodyさん:2009/10/13(火) 23:41:11 ID:???
- >>367
脳内定義の「生の配列」が何を指し示すのか解らんが、
普通のARRAYの事ならば自分がスライス(>>359)で思いっ切り
使ってる。ハッシュにしても。要するに>>363への反論になってない。
何か別物を指すならそれを説明しなきゃ、伝わる訳無い。
「生ハッシュ」ってのも何だそれ?
普通のHASHの事ならforで回せるぞ?望み通りの結果にはならんが。
perl -Mstrict -Mwarnings -le 'my %h = 1..10 ; for ( %h ){ print $_ }'
ついでに、
>>363はこの程度の初期化で「可読性」って単語を持ち出す
のは止めといた方が良い(しかも可読性を損いがちなmapに対して)。
こっちが赤面する。
- 381 :355:2009/10/13(火) 23:54:32 ID:???
- >>380
実際のコードではこうなってますけどね。
@{ $entity_map }{ @$col_list } = @$result_list;
生の配列/ハッシュってのは、『インタプリタが変数展開するもの』ですね。
my @arr1 = (1, 2, 3);
my @arr2 = (4, 5, 6);
my @array = ( @arr1, @arr2 );
的な間違いを仕様で定めて阻止する方が有意義な制限だとは思いませんか?
- 382 :355:2009/10/14(水) 00:07:22 ID:???
- > 「生ハッシュ」ってのも何だそれ?
> 普通のHASHの事ならforで回せるぞ?望み通りの結果にはならんが。
> perl -Mstrict -Mwarnings -le 'my %h = 1..10 ; for ( %h ){ print $_ }'
ハッシュ自体を回すのでなく、
for my %map ( @list ) {}
これが出来ないという意味ですね。
- 383 :372:2009/10/14(水) 00:43:00 ID:???
- >>381-382
なんだこれ。
> 的な間違いを仕様で定めて阻止する方が有意義な制限だとは思いませんか?
フラットにするのはPerlの仕様なんだから、Larryにでも提言しろよ。
アホらし。
- 384 :nobodyさん:2009/10/14(水) 00:55:09 ID:???
- >>383
そのLarryはすでに解決策を提示しているのだが
- 385 :372:2009/10/14(水) 00:56:36 ID:???
- >>384
5.xで、か?
- 386 :nobodyさん:2009/10/14(水) 00:59:59 ID:???
- 生と生じゃない配列/ハッシュの違いをくれよw
ここは超初心者用なんだぜ?
たとえば
not 生 $test = { 'a' => 1, 'b' => 2};
生 %test = ( 'a' => 1, 'b' => 2);
みたいな書き方でお願いします。
- 387 :nobodyさん:2009/10/14(水) 01:02:16 ID:???
- >>367
[] 配列
{} ハッシュ
() これ何?
- 388 :nobodyさん:2009/10/14(水) 01:06:04 ID:???
- Perlのオブジェクトは所詮、blessされたリファレンス
- 389 :nobodyさん:2009/10/14(水) 01:25:13 ID:???
- リファレンスに入れると関数の副作用が働かない場合があるから使えるときは普通のハッシュ使えばいいと思うよ
- 390 :nobodyさん:2009/10/14(水) 01:25:29 ID:???
- 老害かゆとりか知らんが、言葉尻を捕まえて自分の無知晒してるだけだと気づけよ。
- 391 :nobodyさん:2009/10/14(水) 01:59:07 ID:???
- だから本気で知らないから解説をお願いしてるのに
じゃなきゃ 超初心者用スレ に住んでません orz
- 392 :380:2009/10/14(水) 02:09:57 ID:???
- 355氏は、次から脳内用語じゃなくきちんとperlの用語で書いてくれ。
355 perl
「生配列」 => 配列、単次元の配列、etc...
「配列」 => 多次元配列、Array of Hashes、etc...
「生ハッシュ」 => ハッシュ、etc...
「ハッシュ」 => 多次元ハッシュ、Hash of Arrays、etc...
# 355氏の意図とは違うかも知れんが。
少なくとも以下のURLで使われてる言葉の範囲内で説明してくれたら助かる。
ttp://www.kt.rim.or.jp/~kbk/perl5.005/perldsc.html
% perldoc perldsc
そしたら、似た用語を持ち出されて混乱する事も少なくなるでしょうから。
>>381>>382に関しては、、、「超初心者」じゃなさそうだから書く。
アホかと。
後出しもたいがいにしろ。
手前のくだらん妄想に付き合わせんじゃねえよ、ボケ。
- 393 :nobodyさん:2009/10/14(水) 07:58:14 ID:???
- リファレンス使えってことだと思うが。
- 394 :nobodyさん:2009/10/14(水) 09:18:29 ID:???
- Perl5.005って、父さんそんな古いものを。
- 395 :nobodyさん:2009/10/14(水) 10:32:56 ID:???
- >>393
ただそれだけなんですか?
テストプログラム作りたいだけなのに、
仰々しく組みたくないから、今のスタイル
でいいや
- 396 :nobodyさん:2009/10/14(水) 14:16:17 ID:???
- リファレンス使うだけなのに、「仰々しく」とか。
こういう勉強を嫌う怠惰な姿勢が、
保守性の悪いコードを生むんだろうね
- 397 :nobodyさん:2009/10/14(水) 18:46:52 ID:???
- 何自分の妄想に酔ってんの?
- 398 :nobodyさん:2009/10/14(水) 20:27:19 ID:???
- 妄想も何も、>>392のリンク先自体がリファレンスを使ってるだろうが、
そのデータをさらにラップする必要が出てきたら、
結局リファレンスにするんだから最初からやっとけっつぅ話だ。
- 399 :nobodyさん:2009/10/14(水) 20:56:13 ID:???
- >こういう勉強を嫌う怠惰な姿勢が、
>保守性の悪いコードを生むんだろうね
これが妄想だって言ってんだけど…。
当ってるのかも知れんがね。
自分の心の中で思ってりゃ良い事でしょ?
- 400 :nobodyさん:2009/10/14(水) 20:59:03 ID:???
- @{ $entity_map }{ @$col_list } = @$result_list;
これのデータ構造とかを考えた上で保守性万全だと思うなら病院に行け。
適材適所でリファレンスは使えば良いだけだ。
- 401 :nobodyさん:2009/10/15(木) 20:28:53 ID:???
- 適材適所には同意するが、
他人が利用する可能性が少しでもあればリファレンスかな。
正直、規模によるとしか言えんし、普段から使っておいても損でもない。
日曜プログラマや趣味グラマには不要かw
- 402 :nobodyさん:2009/10/15(木) 21:15:52 ID:???
- KY
- 403 :nobodyさん:2009/10/16(金) 22:02:15 ID:???
- >>400
ちなみにお前さんならどう書くのかね。
批判するだけだら、未就学児童にでもできるが。
- 404 :nobodyさん:2009/10/16(金) 22:50:03 ID:???
- こういう能無しにはraw dataとかも通じないんだろうな
- 405 :nobodyさん:2009/10/21(水) 01:54:57 ID:???
- データ不備によるプログラムのエラーに関してですが、
データは TSV で1行あたりタブ3つで、データが4つになるわけですが、
TSV を書くときにタブを2つしか書かずにプログラムを走らせて
my ($tmpZIP, $tmpADDRESS, $tmpTEL, $tmpFAX) = split(/\t/, $line);
の様に split すると、$tmpFAX は undef になってしまうため、
$tmpFAX に対して正規表現つかったり、.= などで文字列を連結させたりすると
Use of uninitialized value というエラーが Apache ログに溜まっていきます。
これを防ぎたいのですが、データ数が足りないまま split したときに undef では無く '' を入れることは出来ないのでしょうか?
今は
my ($tmpZIP, $tmpADDRESS, $tmpTEL, $tmpFAX) = ('', '', '', '');
($tmpZIP, $tmpADDRESS, $tmpTEL, $tmpFAX) = split(/\t/, $line);
とやっています。
- 406 :nobodyさん:2009/10/21(水) 02:01:01 ID:???
- $line .= "\t\t\t";
- 407 :nobodyさん:2009/10/21(水) 05:05:56 ID:???
- >>404
残念!だったな。
俺は、4代前から、東京生まれの東京育ちの、正真正銘の日本人だ。
お前こそ、朝鮮で生まれて、朝鮮で育った、正真正銘のチョンだろうが。
- 408 :nobodyさん:2009/10/21(水) 07:18:11 ID:???
- >>405
こんなんでどうでしょうか?
my ($tmpZIP, $tmpADDRESS, $tmpTEL, $tmpFAX) = ( split(/\t/, $line), (q{})x4 );
- 409 :nobodyさん:2009/10/21(水) 14:00:25 ID:???
- あ〜、空の配列をケツに連結するって方法か
とりあえず、この方法を使わせていただきます m(_ _)m
- 410 :nobodyさん:2009/10/21(水) 14:01:45 ID:???
- @nullarray = split(/\//, '//////////');
(split(/\t/, $line), @nullarray);
もアリかな?
試してないけどw
- 411 :dvKqigko:2009/10/23(金) 01:22:05 ID:???
- Imagine that nobody harbors racial animus or prejudice. ,
- 412 :nobodyさん:2009/10/23(金) 01:31:01 ID:???
- >>405
もう遅いかもしれんけどこんな感じでどうよ
my ($tmpZIP, $tmpADDRESS, $tmpTEL, $tmpFAX) = map{defined $_ ? $_ : ''} (split(/\t/, $line))[0..4];
- 413 :rDiWXwyPC:2009/10/23(金) 22:37:05 ID:???
- The reading from original sources evolved into the reading of glosses on an original and then more generally to lecture notes. ,
- 414 :nobodyさん:2009/10/25(日) 12:37:08 ID:???
- フレームワークというのものを調べているとディスパッチャーという言葉をみかけます。
ディスパッチャーとは何なんでしょうか?
- 415 :nobodyさん:2009/10/25(日) 13:12:15 ID:???
- >>414
主処理の分岐を行うものと考えれば良いかと。
- 416 :nobodyさん:2009/10/25(日) 14:00:01 ID:???
- >>415
なるほど。
とりあえず理解したことにしておきます。
- 417 :nobodyさん:2009/10/25(日) 14:06:46 ID:???
- Q. dispatcher とはなにか。参考書等を見ずに説明しなさい。
- 418 :nobodyさん:2009/10/25(日) 16:54:48 ID:???
- my $setting = {
'a' => 'AAction',
'b' => 'BAction',
};
BEGIN {
require $setting->{ $hoge };
$setting->{ $hoge }->new();
}
※$hogeにはあらかじめ規定した、処理の分岐条件が格納されている。
主な部分はこれだけで実現できる。
new以外で処理を行いたいのであれば、サブルーチン名も設定に格納すれば吉。
フレームワークを作りたいのであれば、設定をYAML等に逃がせばよいかと。
- 419 :nobodyさん:2009/10/26(月) 02:45:50 ID:4VfuwmZ6
- 正規表現なんだけれども。
マッチさせる対象を
テスト1:10点 テスト2:20点 テスト3:25点 テスト4:20点
にした時テスト3の点数を取り出したいんだ。
テストXの値は不定の文字列なので、
m/\D+\d+\D+\d+\D+(\d+)/;
こう書いたのだけれど$1にはテスト3の点数に加えて4の点数もくっ付いてきちゃうんだ。
何かいい書き方ありませんか?
- 420 :nobodyさん:2009/10/26(月) 02:47:28 ID:4VfuwmZ6
- あ、あとテスト4は存在しないレコードもあるという条件です。
- 421 :nobodyさん:2009/10/26(月) 03:18:05 ID:???
- どうやら対象の帳票の仕方がまずかったようです。
m/\D+\d+\D+\d+\D+(\d+)/; で問題なく動きました。
- 422 :nobodyさん:2009/10/26(月) 23:59:44 ID:???
- >>421
それホントに動いてる?
"テスト2" の 2 を取ってきてない?
そのうちどうせ他の点も必要になるだろ?
関数化すれば便利だと思うよ
sub parseTestData($){
my($str, @pairs, %ret);
$str = $_[0];
$delimitor1 = '\s| ';
$delimitor2 = ':|:';
@pairs = split /\s| /, $str;
foreach my $pair(@pairs){
my($key, $value) = split /:|:/, $pair;
$ret{$key} = $value;
}
return \%ret;
}
my $result = parseTestData("テスト1:10点 テスト2:20点 テスト3:25点 テスト4:20点");
print $result->{"テスト3"}, "\n"; #=> 25点
# 数値だけ取り出したい場合
$result->{"テスト3"} =~ /(\d+)/;
print $1, "\n"; #=> 25
- 423 :nobodyさん:2009/10/27(火) 05:25:43 ID:???
- 多分書き直すつもりで忘れたんだろうけど
$delimitor1, $delimitor2 が浮いてるな
- 424 :nobodyさん:2009/10/27(火) 06:07:08 ID:???
- ちょっと簡略化
sub parseTestData2($){
return {split(/:|:|\s/,$_[0])};
}
機能はほぼ一緒のはずだ
- 425 :nobodyさん:2009/11/01(日) 04:30:15 ID:???
- >>424
全角空白が考慮されてなくね?
- 426 :nobodyさん:2009/11/02(月) 17:05:20 ID:???
- またまたフレームワーク関連の言葉なのですが、トランザクション(コンテキスト)オブジェクトとは
どういったものなのでしょうか?
- 427 :nobodyさん:2009/11/03(火) 05:14:37 ID:???
- どこで見たのかくらいは明記してくれよ
質問についてはトランザクションについて調べれば後は分かるだろ
- 428 :nobodyさん:2009/11/05(木) 06:37:41 ID:???
- >>425
use utf8すれば問題ない
- 429 :nobodyさん:2009/11/08(日) 11:29:12 ID:OaYz9VK0
- while(recv()){
↑
recv関数は受信失敗したとき未定義ち返すはずなのに
ループ抜けないのはなぜ?
- 430 :nobodyさん:2009/11/08(日) 11:56:56 ID:???
- エスパーさん出番です。
ていうか本当に未定義値返ってる? 単発で実行したらどうなる?
- 431 :nobodyさん:2009/11/08(日) 14:38:16 ID:???
- 受信なら返らないで待ち状態になる場合あるからタイムアウト処理しないと
- 432 :nobodyさん:2009/11/08(日) 19:36:21 ID:???
- 失敗時はrecvで代入された変数も未定義になってるみたいだ
どうも腑に落ちないがこれで事故解決と
while(recv(S,$r,4089,0) && $r){
- 433 :nobodyさん:2009/11/09(月) 16:34:15 ID:???
- なに言ってるか結局分からなかったけど良かったね。
- 434 :nobodyさん:2009/11/09(月) 22:11:31 ID:???
- ansは異なる一つ以上の素数の和
但し、ans<=100
を満たすansを昇順に並べるというプログラムはどう組めばいいのでしょうか
- 435 :nobodyさん:2009/11/09(月) 22:28:03 ID:???
- 素数の算出のし方がわからんのか?
昇順の並べ方がわからんのか?
perl自体がわからんのか?
- 436 :nobodyさん:2009/11/09(月) 23:09:55 ID:???
- 質問の仕方が悪い。それじゃどこからどう見ても宿題だ。
正しい質問の仕方は
異なる一つ以上の素数の和で成り立ち100以下という条件を満たす整数の求め方なんかお前らに分からんだろ?
悔しかったら明日までに解いてみろよ屑ども。
う〜ん唐突だな
- 437 :436:2009/11/09(月) 23:14:53 ID:???
- ・・・まさか同様の趣旨のスレが存在したとは思いもしなかった436であった
http://pc11.2ch.net/test/read.cgi/php/1158647441/l50
- 438 :nobodyさん:2009/11/10(火) 07:41:59 ID:???
- >>434
1から100までのすべての整数は
異なる素数の和になってるから
答えは
1..100
で良いんじゃないw
- 439 :nobodyさん:2009/11/10(火) 11:02:51 ID:???
- 1を素数に含めてよいものかどうか。
- 440 :nobodyさん:2009/11/10(火) 23:44:02 ID:???
- >>434
組合せで強引に解いてみた。
1、4、6以外は解があるみたい。
use List::Util qw(sum);
my @primes = grep { (1 x $_) !~ /^(11+)\1+$/ } (2..100);
my %ans;
for my $r ( 1..3 ) {
my @result = combination($r, @primes);
for my $combi (@result) {
my $sum = sum @$combi;
push @{ $ans{$sum} }, $combi if $sum <= 100;
}
}
for my $sum ( sort {$a <=> $b} keys %ans ) {
my @breakdown = map join('+', @$_), @{ $ans{$sum} };
print "$sum (". join(q{, }, @breakdown) . ")\n";
}
- 441 :nobodyさん:2009/11/10(火) 23:44:48 ID:???
- 続き
sub combination {
my ($r, @data) = @_;
my $n = @data;
my @result;
combinatorial( $n, $r, 0, [], \@data, \@result );
return @result;
}
sub combinatorial {
my ($n, $r, $pos, $combi, $data, $result) = @_;
if ( $r == 0 ) {
push @$result, [ @$combi ];
return;
}
for my $i ( $pos..$n-$r ) {
push @$combi, $data->[$i];
combinatorial( $n, $r-1, ++$pos, $combi, $data, $result );
pop @$combi;
}
}
- 442 :nobodyさん:2009/11/11(水) 02:32:45 ID:???
- 位置が素数じゃないことを指摘されて恥ずかしかったので、
俺も書いてみた。
素数を探すアルゴリズムを書くのがめんどくさかったので
ウェブからコピペしたのは内緒だ。
(上の人のはよくわかんなかったし)
#!/usr/bin/perl
use strict;
use warnings;
use List::Util q/sum/;
my @primes = (2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97);
@primes = reverse @primes;
my $ncomb = 2**(scalar @primes);
my %outhash = map{$_,0}1..100;
## you don't have to run until $ncomb
## a thousand is enough to get the answer of 1, 4, 6
for (0..1000){
my $bin = sprintf "%025b", $_;
my @comb = split("",$bin);
my @list = map{$comb[$_]*$primes[$_]}0..24;
if (sum @list <=100){$outhash{sum @list}=1};
}
for(sort {$a<=>$b}keys %outhash){print $_,"\n" unless $outhash{$_};}
- 443 :nobodyさん:2009/11/11(水) 12:07:52 ID:???
- ニート趣味プログラマーなんで、さらに改良してみた。
総当りで調べているので、完全な証明にもなっていると思う。
汎用性を持たせて、1つ以上の素数の和だけでなく、2つ、3つ以上とかにもできるようにした。
use List::Util qw(sum first);
# 調べる最大数値(100で質問者の題意)
my $max_num = 100;
# 和にするのに必要な素数の数(1で質問者の題意)
my $num_of_primes = 1;
my @primes = grep { (1 x $_) !~ /^(11+)\1+$/ } (2..$max_num);
my %ans;
for my $num ( $primes[0] .. $max_num ) {
my $max_index = first { $primes[$_] >= $num } 0..$#primes;
if ( not defined $max_index ) { $max_index = $#primes }
my @combi = find_combi( $num, @primes[0..$max_index] );
push @{ $ans{$num} }, @combi if @combi;
}
for my $sum ( sort {$a <=> $b} keys %ans ) {
print "$sum (". join('+', @{ $ans{$sum} }) . ")\n";
}
my @num_excluded = grep { not exists $ans{$_} } 1..$max_num;
print "\n$num_of_primesつ以上の素数の和で表\せない数値\n";
print join q{, }, @num_excluded;
- 444 :nobodyさん:2009/11/11(水) 12:09:50 ID:???
- 続き
sub find_combi {
my ($num, @primes) = @_;
for my $r ( $num_of_primes .. @primes ) {
my @combi_list = combination($r, @primes);
for my $combi (@combi_list) {
return @$combi if $num == sum @$combi;
}
}
return;
}
sub combination と sub combinatorial の中身は、>>441と同じ。
- 445 :nobodyさん:2009/11/12(木) 08:40:06 ID:???
- 宛先メールアドレス(ex. foo@example.com)、件名、メール本文を与えたら、smtpサーバーを介さずに、
MXレコードを引いて、宛先のメールサーバーに直接メールを送るモジュールはないでしょうか?
レンタルサーバーで使いたいので、pure perlでお願いします。
- 446 :nobodyさん:2009/11/13(金) 12:13:36 ID:???
- スパマーは今すぐ死ね
- 447 :nobodyさん:2009/11/13(金) 12:30:24 ID:???
- >>445
Net::Smtp
- 448 :nobodyさん:2009/11/21(土) 23:38:15 ID:twpezRr5
- fedora9に付属しているgeditのプラグインが最近使えませんが、どうすれば良いでしょうか?
プラグイン設定で追加しようとしても灰色になって選択できません。
- 449 :nobodyさん:2009/11/22(日) 05:57:19 ID:???
- >>448
つvi
- 450 :nobodyさん:2009/11/23(月) 22:45:22 ID:g+VEp3/W
- 通常、サブルーチンを使うとき、途中で終了するように
「exit」を入れています。
sub a { }
exit;
sub b { }
これをライブラリとして使用する場合、別のcgiから呼び出すと、
途中で終了してしまいます。
どのように動作を区切っておけばよいのでしょうか?
- 451 :nobodyさん:2009/11/24(火) 01:28:07 ID:???
- >>450
まったく何を言ってるのか分かりませんが、
exit;
の行を消せば良いんじゃないでしょうか
サブルーチンを使うとき、途中で終了する目的はなんでしょうか?
そもそも、exit以降にサブルーチン定義しかなかったら、
exitが有っても無くても動作は変わらないような気がするのですが。
- 452 :nobodyさん:2009/11/24(火) 01:50:27 ID:???
- >>449
geditを使わずviで編集しろという事でしょうか?
- 453 :nobodyさん:2009/11/24(火) 10:33:29 ID:???
- >>451
初心者で済みません、基本が分かってないのだと思います。
サブルーチン一つに変えて質問します。
例えば上から下に流れていって、
コード1・・・・
& a;
コード2・・・・
sub a{ }
コード2の部分で終わりたい場合に、
exit;がなかったら最後まで実行するのではと思うのですが?
- 454 :nobodyさん:2009/11/24(火) 10:54:55 ID:???
- >>453
ライブラリは基本的には関数定義群
自分が何をやっているのか分からなければ、関数化できないような余計な処理をサブルーチンの外に書いてはいけない
関数は定義しただけでは実行されないため、exitはいらない
多分main.plを流用しようとしたから余計な処理が入ってるんだろうが、それなら関数のみ抽出したものを新たに作る必要あり
それから.pl形式のライブラリは時代遅れ
パッケージ(.pm)の作り方&使い方を学ぶべし
- 455 :nobodyさん:2009/11/24(火) 22:33:31 ID:???
- >>453 オブジェクト指向分かってるのか……
- 456 :nobodyさん:2009/11/24(火) 22:40:50 ID:???
- おいおい…
- 457 :nobodyさん:2009/11/25(水) 00:02:19 ID:4vaBixa8
- ヽ('ー`)ノ あー頭が溶けそう
- 458 :nobodyさん:2009/11/25(水) 04:47:50 ID:???
- >>453
sub a{}を"実行する"っていうのはどういう意味ですか?
サブルーチンが定義されると何か困ることでもあるんですか?
なんなんですか?
- 459 :453:2009/11/25(水) 11:53:02 ID:???
- 色々と有り難うございました。
ちょっと勘違いしておりました。
- 460 :nobodyさん:2009/11/25(水) 12:16:55 ID:???
- あんま責めてやんなよ、ここは超初心者スレだぞ
全てはpackage mainのグローバルスコープで命令が動いてしまうperlが悪いんや
でもそのおかげでワンライナー美味しいです
- 461 :nobodyさん:2009/11/25(水) 12:35:19 ID:???
- ライブラリを作る前にオブジェクト指向を理解してね
穴が開くこともあるから
- 462 :453:2009/11/25(水) 12:52:24 ID:???
- すみません、穴が空くとはどういう場合がありますか?
一つでいいですので例をお願いします。
- 463 :nobodyさん:2009/11/25(水) 13:14:26 ID:???
- 例か。
どんなライブラリかは知らないけど、コンストラクタを作っているなら、パッケージ内の変数に外から直接アクセスすることで予期せぬ動作を招くことがある
- 464 :nobodyさん:2009/11/25(水) 14:47:15 ID:???
- 痛いヤツが1人いるな…
- 465 :nobodyさん:2009/11/25(水) 17:11:08 ID:???
- ライブラリって言っても、オブジェクト指向じゃなくて、
Exporterを使う伝統的なライブラリも、
あれはあれでけっこう良いよね。
サザエさん的な良さがある気がする。
のんびり和むっていうか。
- 466 :nobodyさん:2009/11/25(水) 21:40:04 ID:???
- 一人を除いて、オブジェクト指向の話はしてない。
そもそもオブジェクト指向を理解してたら、あんなクソレスは付けられん
- 467 :nobodyさん:2009/11/25(水) 21:50:52 ID:???
- はい次の質問者さんどうぞー
- 468 :nobodyさん:2009/11/26(木) 15:00:47 ID:???
- FFA系のCGIゲーム「MS Tactics」というものがありますが
こういった物を作るにはどの言語を使うのが最適なのでしょうか?
ケースバイケースとか○○ならxxとか自分の知ってる言語が最強とか
よく分からないので、具体的な目的をあげました
もしかすると結論は「何でもいい」のかもしれませんが
□□ならこういった点が良いというのを教えて下さい
制作者
ttp://laggard.maxs.jp/ms_tactics.htm
稼働例
ttp://2ch.guda-guda.net/cgi-bin/mst/
- 469 :nobodyさん:2009/11/26(木) 15:08:24 ID:???
- >>468
スレ違い。
△▲ WebProg 初心者の質問 Part21 ▼▽
http://pc11.2ch.net/test/read.cgi/php/1257701535/
このあたりで聞いてくれ。
- 470 :468:2009/11/26(木) 15:18:47 ID:???
- 失礼しました。移動します
>>469
ご案内ありがとうございます
- 471 :nobodyさん:2009/11/26(木) 18:01:55 ID:???
- print "Content-type: text/html\n";
上記「Content-type」の頭文字は大文字じゃないとダメなんでしょうか?
- 472 :nobodyさん:2009/11/26(木) 18:05:27 ID:???
- HTTPの仕様で決まっているから、大文字じゃないと駄目なんじゃない?
- 473 :471:2009/11/27(金) 10:26:44 ID:???
- >>472大文字に決まってたんですね。ありがとうございました
- 474 :nobodyさん:2009/12/02(水) 13:12:52 ID:???
- C++、Python、PHPが少し書けるレベルの者なのですが、
オライリーの初めてのPerlはレベルが高いでしょうか?
お薦めの入門書があったらお願いします
- 475 :nobodyさん:2009/12/02(水) 13:15:41 ID:???
- >>474
というかそれが読めないと全く話にならない。
- 476 :nobodyさん:2009/12/04(金) 13:50:17 ID:???
- >>474
C++、Python辺りがかけるならいきなりラクダに行って
大丈夫だと思う。perldoc公開されてるから軽く読んでみ。
- 477 :nobodyさん:2009/12/05(土) 00:52:22 ID:B4BYeir+
- >>474
ラクダ本から「すぐ分かるオブジェクト指向Perl」へ進むのが
現状ではベストだと思う
- 478 :nobodyさん:2009/12/06(日) 08:28:13 ID:???
- んで「モダンPerl入門」っつー流れかな。
その間に「入門Git」とかも買ってプロジェクト管理にも
慣れておくといい。
- 479 :nobodyさん:2009/12/06(日) 11:02:28 ID:???
- 牧さん宣伝乙。
- 480 :nobodyさん:2009/12/15(火) 02:38:41 ID:???
- ヒアドキュメント内にhtmlを記す場合には「"」などを\でエスケープしないといけないのでしょうか?
そのまま記してもエラーは出なかったのですが、大丈夫なのか心配に。。。
- 481 :nobodyさん:2009/12/15(火) 02:54:10 ID:???
- ヒアドキュメントは " をそのまま書いても OK
ただ、ヒアドキュメントはソースが汚くなりやすいので、外部の HTML を読み込んで出力させたほうがいいかなと思う。
- 482 :480:2009/12/15(火) 04:07:33 ID:???
- >>481
そのままで大丈夫でしたか
ありがとうございました
外部から読み込むというのは、元ファイルで使用する変数も書いたhmtlを記述したファイルを作成して、
適当に変数に代入して分割、適所に読み込んではめ込む感じで良いんでしょうか?
(配布物をいじるだけという程度ですので的外れなことを言ってそうですが
- 483 :nobodyさん:2009/12/15(火) 08:45:12 ID:???
- そういうことを簡単に行うために、Template-Toolkit, HTML::Template or Tenjinといった
テンプレートエンジンがいくつも開発されてる
- 484 :480:2009/12/16(水) 08:47:58 ID:???
- >>483
検索した所、十分に利用できるまで、私には障害が多そうなので今回は諦めます
ありがとうございました
- 485 :nobodyさん:2009/12/18(金) 22:53:46 ID:kWIKrWct
- すいません。超初心者です。
$hoge[0]->{'age'} = 20;
$hoge[0]->{'tall'} = 165;
$hoge[1]->{'age'} = 18;
$hoge[1]->{'tall'} = 180;
$hoge[2]->{'age'} = 13;
$hoge[2]->{'tall'} = 170;
のとき、
{'tall'}が小さい順に
@hoge の中を$hoge[0],$hoge[2],$hoge[1]と並び替えたいとき、どうすればいいでしょうか。
初心者なので、言っている意味が分からなかったら、すいません。。。orz
よろしくお願いします。
- 486 :nobodyさん:2009/12/18(金) 23:03:48 ID:???
- @hoge = sort { $a->{tall} <=> $b->{tall} } @hoge;
- 487 :nobodyさん:2009/12/18(金) 23:42:19 ID:???
- お早いご解答ありがとうございます!
助かりました。
- 488 :485:2009/12/18(金) 23:43:08 ID:???
- あ、↑は485です。
- 489 :nobodyさん:2009/12/29(火) 07:31:09 ID:???
- >>481
ディスクI/Oは時間を含めいろいろとリソースを食うので、
速度がクリティカルになる場面や頻繁にI/Oがある場面では
ヒアドキュメントの方が良い。
まあこれはHTMLのテンプレートみたいだから外部ファイルの方がいいだろうな。
1アクセス1ディスクアクセスは大した負荷じゃないし、テンプレートはファイルに
分けた方がモダン。
- 490 :nobodyさん:2009/12/29(火) 21:37:25 ID:???
- > ディスクI/Oは時間を含めいろいろとリソースを食うので、
> 速度がクリティカルになる場面や頻繁にI/Oがある場面では
> ヒアドキュメントの方が良い
cache すればよくね
- 491 :nobodyさん:2009/12/30(水) 01:00:40 ID:MRCq7PuI
- 常にキャッシングしてくれてればいいけど・・・
- 492 :nobodyさん:2009/12/31(木) 06:31:42 ID:???
- っmemcached
- 493 :nobodyさん:2009/12/31(木) 08:05:41 ID:???
- ヒアドキュメントを使うのはコードの可読性にも影響するから
短けりゃコード埋め込みでもいいと思うし(ファイルにするとかえって
可読性が落ちることがある)、何百行とかやたら長いのならファイルに
入れてそれこそキャッシュしてやればいいと思う。
- 494 :nobodyさん:2009/12/31(木) 18:54:26 ID:???
- CGI初心者なので、見当違いな事を言っていたらごめんなさい。
CGIで、srandを使用せず(勝手に呼び出される物だけで)にrandを使用していた場合、
srandが呼び出されるのはいつになりますか?
複数ファイルに別れていて、複数のクライアントからアクセスした場合、いつ初期化が行われるかが知りたいのです。
宜しくお願いします。
- 495 :nobodyさん:2009/12/31(木) 22:44:41 ID:???
- perlのverは?
- 496 :nobodyさん:2009/12/31(木) 22:55:44 ID:???
- 5.8.8です。
よろしくおねがいします。
- 497 :nobodyさん:2010/01/01(金) 17:23:01 ID:???
- 組み込み関数だからソースを当たれ
http://www.cpan.org/src/5.0/
まぁここらへんだろうねぇ
pp.c(2717): PP(pp_rand)
embed.h(1985): #define pp_rand Perl_pp_rand
embed.h(4027): #define pp_rand() Perl_pp_rand(aTHX)
opcode.h(858): MEMBER_TO_FPTR(Perl_pp_rand),
pp_proto.h(145): PERL_PPDEF(Perl_pp_rand)
- 498 :nobodyさん:2010/01/01(金) 18:26:27 ID:???
- >>497
ありがとうございます。
とりあえず実際にやってみるのと併せて、頑張ってみます…
- 499 :nobodyさん:2010/01/01(金) 19:12:18 ID:???
- 今頃ソースを見てるんだろうけど
PL_srand_calledをチェックして種を初期化するルーチンが入ってる
つまり最初にrandを呼んだ時点でsrandが呼ばれる
ではrandはいつ呼ばれるのか?
それはあんたにしか分からんよ
- 500 :nobodyさん:2010/01/01(金) 21:35:42 ID:???
- >>499
ありがとうございます。
ソース単位で最初に呼ばれた時に初期化されるようですね。
もう少し勉強してみようと思います。
- 501 :nobodyさん:2010/01/03(日) 08:19:35 ID:???
- >>500
srandは過去の遺物だから、今はrandは何も考えずに純粋に
擬似乱数発生器として使って問題ない。
つーかソースなんか読まなくても普通にperldoc -f randすりゃ
いいだけだと思うが。マニュアル読むよりソース読む方が速いとか
どんだけだよ。
- 502 :nobodyさん:2010/01/03(日) 17:40:19 ID:???
- マニュアルを信用するな
- 503 :nobodyさん:2010/01/04(月) 05:20:30 ID:???
- 厳密な乱数ならともかく擬似乱数が発生してるかどうかなんてマニュアルもソースも不要だろ。
テストスクリプト数回走らせればいいだけの話。
- 504 :nobodyさん:2010/01/04(月) 15:37:53 ID:???
- <form action="CGIのURL" method="postかget">
<input type="text" name="○○">
<input type="submit" value="送信">
</form>
このような形で文字列を違うページに送り、そのページに表示たいのですがどうしたらいいのでしょうか?
CGIとなるファイルの中身(?)と表示させる方法がいまいちわかりません。
- 505 :nobodyさん:2010/01/04(月) 15:40:38 ID:???
- 日本語が下手なので何がやりたいのかさっぱりわからない
- 506 :nobodyさん:2010/01/04(月) 16:03:07 ID:???
- 値の受け取りかたも標準出力に何を吐くのかも全然わからないんだと思う。
- 507 :nobodyさん:2010/01/04(月) 16:07:33 ID:???
- >>504
とりあえず簡単な雛形を書いたので、それから細かい質問を受けるとしよう。
use CGI;
my $q = new CGI;
my $some_str = $q->param("○○");
print $q->header( -type => 'text/html', -charset => q{} );
print "<p>$some_str</p>";
- 508 :nobodyさん:2010/01/04(月) 16:18:11 ID:???
- >>505さん
すみません…
>>506さん
今まで携帯のレンタルスペースを使用していました。
(独自タグでフォームで送信した文字を受けとったりすることはできました。)
勉強する為にレンタルスペースを離れ、昨日サーバーを借りたんです。
借りたのはいいんですが独自タグに甘えていたせいなのかどうやって受け取っていいのかも全然わからない状態です。
- 509 :nobodyさん:2010/01/04(月) 16:59:28 ID:???
- そもそもPerlが関連しているのか?
- 510 :nobodyさん:2010/01/04(月) 17:19:32 ID:???
- すでにHTMLファイルがあって、その中にフォームから受け取ったパラメータを埋め込みたいと予想。
HTMLテンプレートエンジンを紹介すればいいんでないかな?
それよりPHPでしたほうが楽?
- 511 :nobodyさん:2010/01/04(月) 17:24:47 ID:???
- >>510
そりゃCSRFもSQLインジェクションも何も考えない単純フォームなら
PHPの方が楽だろうよ。
- 512 :nobodyさん:2010/01/04(月) 17:37:50 ID:???
- >>508さん
use CGI;
my $q = new CGI;
my $some_str = $q->param("○○");
print $q->header( -type => 'text/html', -charset => q{} );
print "<p>$some_str</p>";
これにformで指定した値(○○)を○○に入れるんでしょうか?
PerlはHello Worldをコマンドプロンプトでできた位で書いてもらったのもほとんど理解できていません…
>>509さん
関係していないのでしょうか?
Perlを勉強したいと思い、レンタルスペースを離れたのもあるんですが…
formで送信するにはレンタルスペースでないとCGIが必要と聞いたのでここで質問させてもらったのですが…
とりあえず今はCGIのURLの部分にあたるCGIを作ってみたいと思っています。
- 513 :nobodyさん:2010/01/04(月) 17:45:19 ID:???
- 勉強するんだったらサーバを借りる前にXAMPPなどを自分のマシンに入れて
ローカル(手元の)マシンでやればいいのよ・・・
- 514 :nobodyさん:2010/01/04(月) 17:59:01 ID:???
- >>512
>formで指定した値(○○)を○○に入れるんでしょうか?
そうです。
name="○○"の、"○○"に相当する部分です。
- 515 :nobodyさん:2010/01/04(月) 17:59:11 ID:???
- >>513さん
XAMPP(?)というのはApache(?)というものと同じで自分のパソコンをサーバー化するみたいなやつですか?
(私はActivePerlをインストールしてあり、Apache(?)はインストールしていない状態です)
サーバーを借りた目的は携帯サイトを作りたいのとPerlの勉強をしたかったからなんです…
- 516 :nobodyさん:2010/01/04(月) 18:01:13 ID:???
- >>504
俺だったらTemplate::ToolkitかClearSilverを使う。
- 517 :nobodyさん:2010/01/04(月) 18:02:24 ID:???
- >>515
ですね。
- 518 :nobodyさん:2010/01/04(月) 18:12:56 ID:???
- >>514さん
ありがとうございます。そこは理解できました。
他のところがどのような意味をしているのか全くわからないのですが
コピーしてメモ帳で拡張子を.cgiで保存してサーバーにアップロードしてもいいのでしょうか?
>>516さん
それは携帯にも対応できますか…?
パソコンは2カ月前に購入したので正直わからないことだらけです…
>>517さん
ありがとうございます。
- 519 :nobodyさん:2010/01/04(月) 18:16:58 ID:???
- >>516
レンタルサーバーでそれ使えるんですか?
- 520 :nobodyさん:2010/01/04(月) 18:20:35 ID:???
- >>518
アップロードしてもいいけど、今後のことも考えて、自分のパソコンにWebサーバーを構築
しておいて、そこで試してうまくいってから本サーバーにアップするようにしたほうがいいよ。
- 521 :nobodyさん:2010/01/04(月) 18:24:04 ID:???
- どうせなら、Mojolicious::Liteを使って欲しいな
- 522 :nobodyさん:2010/01/04(月) 21:07:54 ID:???
- >>520さん
ありがとうございます。
--
use CGI;
my $q = new CGI;
my $some_str = $q->param("○○");
print $q->header( -type => 'text/html', -charset => q{} );
print "<p>$some_str</p>";
--
name="○○"の"○○"を○○にいれてアップロードすれば動く(?)のでしょうか?
アップロードするのが心配です…
また送信した文字を表示するにはどのようにしたらいいのですか…?
送りたいのはURLの違うページなんですが…
- 523 :nobodyさん:2010/01/04(月) 21:17:53 ID:???
- >>522
それは送信した文字を表示するだけのスクリプトですので害はないです。
ただ、できれば自分のパソコンにWebサーバーを構築して試すことをお薦めします。
- 524 :nobodyさん:2010/01/04(月) 21:41:05 ID:???
- >>523さん
ありがとうございます。
ちょっとわからないのですがサーバーはロリポップです
use CGI;
my $q = new CGI;
my $some_str = $q->param("○○");
print $q->header( -type => 'text/html', -charset => q{} );
print "<p>$some_str</p>";
○○以外にいじる必要があるところはあるのでしょうか?
○○の部分をname="○○"と同じにしてtest.cgiで保存、アップロードしてみたところ
test.cgi.txt となってしましました…
from側もCGIのURLというところにURLをいれて文字を入れて送信しても
「※CGI もしくは SSI が正しく動作していません。」とでてしまいます…
- 525 :nobodyさん:2010/01/04(月) 21:43:03 ID:???
- すみません、文字打ち間違えてしまいました。
○ test.cgi.txt となってしまいました…
です
- 526 :nobodyさん:2010/01/04(月) 21:52:38 ID:???
- >>524
後ろの.txtを消してください。
パーミッションを700(rwx------)にしくてください。
パーミッションについて / ホームページ / マニュアル - ロリポップ!
http://lolipop.jp/manual/hp/permission/
- 527 :nobodyさん:2010/01/04(月) 21:55:28 ID:???
- shebang も書いてないだろうし先が長そうだね。
勉強したいんだったら、何か入門用の読み物見ながらゆっくりいろいろ遊んでみたらどう?
今まで使ってた独自タグとかいうのと同じことをしたいだけなら
<?php echo htmlspecialchars($_GET['hoge']) ?> こんな感じのを埋め込むほうが楽だと思う。
- 528 :nobodyさん:2010/01/04(月) 22:01:17 ID:???
- >>524
そうだね。
先頭行に、これを付け加えてください。
#!/usr/bin/perl
use CGI;
my $q = new CGI;
my $some_str = $q->param("○○");
print $q->header( -type => 'text/html', -charset => q{} );
print "<p>$some_str</p>";
- 529 :nobodyさん:2010/01/04(月) 22:01:57 ID:???
- >>526さん
何度も何度も申し訳ないです、本当にありがとうございます。
.txtは消しました。
パーミッションというのはどこにある(?)のでしょうか…?
/usr/local/bin/perl もしくは /usr/bin/perl
これは関係ないのですか?
- 530 :nobodyさん:2010/01/04(月) 22:03:50 ID:???
- ロリポップならPHPが使えるからPHPにしたほうがいいかもね
- 531 :nobodyさん:2010/01/04(月) 22:04:25 ID:???
- >>504の質問だけで何レス伸びるかなー
みんながんばれー
- 532 :nobodyさん:2010/01/04(月) 22:06:27 ID:???
- >>529
>>528のように先頭行に書いてください。
パーミッションの設定方法は、>>526のURLを見てください。
- 533 :nobodyさん:2010/01/04(月) 22:09:00 ID:???
- PHPは別名脆弱性製造言語と呼ばれるくらい、初心者が作ると攻撃に弱いからなぁ
単純なことなら問題ないのだろうけど
- 534 :nobodyさん:2010/01/04(月) 22:24:36 ID:???
- 今のhtmlファイルがこうです。
<html>
<head>
<body>
<form action="http://○○.△△/test.cgi" method="post">
<input type="text" name="id">
<input type="submit" value="送信">
</form>
</body>
</head>
</html>
--
cgiファイルが
#!/usr/bin/perl 700(rwx------)
use CGI;
my $q = new CGI;
my $some_str = $q->param("id");
print $q->header( -type => 'text/html', -charset => q{} );
print "<p>$some_str</p>";
こうなっているんですが、これでいいのでしょうか…?
間違っている場所があれば教えてください。
皆さん本当にありがとうございます。
- 535 :nobodyさん:2010/01/04(月) 22:29:40 ID:???
- >>527さん
明日近くの本屋さんに行ってPerlの本を見てきたいと思います。
Perlを最初にやるとPHPはわかりやすいと聞いたので
Perlから勉強しようと思ったのですがPHPを最初に勉強することも考えてみます。
- 536 :nobodyさん:2010/01/04(月) 22:30:45 ID:???
- 正直、ものすごい初期のレベル(perl以前)から始めないとダメな気がする
- 537 :nobodyさん:2010/01/04(月) 22:32:10 ID:???
- >>534
ここ↓は、
#!/usr/bin/perl 700(rwx------)
こう↓です。
#!/usr/bin/perl
パーミッションは通常、FTPソフトで設定します。
>>526のURLのパーミッションの設定方法を見て設定してください。
- 538 :nobodyさん:2010/01/04(月) 22:59:36 ID:???
- >>537さん
ありがとうございます。
おかげでformで送信したものを.cgiファイルのほうに表示することができました。
- 539 :nobodyさん:2010/01/04(月) 23:02:35 ID:???
- それ以前にPerlの文法を知れ
- 540 :nobodyさん:2010/01/04(月) 23:28:35 ID:???
- >>539
すみません
- 541 :nobodyさん:2010/01/04(月) 23:42:56 ID:???
- 後のCatalystやMooseを超えるものを作るPerl Mongerになろうとはこのときは誰もが思わなかった
- 542 :nobodyさん:2010/01/04(月) 23:46:49 ID:???
- >>541
Perl6の実装が安定するのとどっちが先かな
- 543 :nobodyさん:2010/01/05(火) 17:14:37 ID:???
- >>542
ただの喩えだからPerl6がどうとか関係ないと思うが。
昔はこういう質問で溢れてたよなあ。フォーム作れなくて困ってるとか
久しぶりに見たわ。
XSSとかCSRFとかにも一応気をつけろよ(CSRF対策とかできなさげな気がするが)
- 544 :nobodyさん:2010/01/05(火) 17:25:53 ID:???
- >>543
とりあえずリファラ見ればいいんじゃない?
CSRFは防御が難しいけど
- 545 :nobodyさん:2010/01/05(火) 17:30:49 ID:???
- >>544
まあ、実際にはリファラ見れば大抵のCSRFは防げるわけだが、
http://〜からマッチかけると可搬性がなくなるし、かといってファイル名部分で
マッチをかけると罠サイトも同じにしてくる可能性もある。
リファラに送らないUAに対応しようとすると非直リンでCSRFの穴があく、
などであまり対策にならない。
GET->POSTもしないよりはマシだが、そもそも悪意のサイトだったりXSSされてれば簡単に穴空くしな。
- 546 :nobodyさん:2010/01/05(火) 23:08:06 ID:???
- こんばんは。昨日の者です。
今日、近くにある本屋をいろいろ見てまわってきました。
「10日でおぼえる Perl/CGI 入門教室 第2版」という本しかなかったのでそれを購入しました。
いろいろ読んで勉強してみたいと思います。
昨日は本当にありがとうございました。
- 547 :nobodyさん:2010/01/06(水) 05:58:47 ID:???
- >>546
一番買ってはいけない類の本を買ったな・・・。
普通にらくだ・りゃま本とCatalystのマニュアルでよかったのに。
- 548 :nobodyさん:2010/01/06(水) 06:25:15 ID:???
- 別にいーんじゃね?ド初心者の入口としては。
それで一応ソース読み書きできる程度になって、
その後はネット上なりリャマなりでいろいろ学んだり実践していけば、
そのうち最初に買った本の内容にツッコミ入れながら読めるようになるだろ。
- 549 :nobodyさん:2010/01/06(水) 07:02:49 ID:???
- >>547さん
そうだったのですか…
なんかよくわからないところばかりです…
Apacheではなく借りたサーバーのほうでやっているせいなのか
本の通り書いても動かないんですよね…
今日は少し遠くに行って探してみます。
- 550 :nobodyさん:2010/01/06(水) 07:03:06 ID:???
- アマゾンの書評を見たけど、Perlの文法の説明がなく初心者用ではないって書いてあるけど。。
- 551 :nobodyさん:2010/01/06(水) 07:42:36 ID:???
- あーレン鯖じゃCatalystは動かないか。
俺はあまり関係ないが、早くPlack対応のレン鯖が現れるといいな。
CGIはいいかげんもういーだろ。
- 552 :nobodyさん:2010/01/06(水) 07:43:05 ID:???
- 突っ込まれそうだから一応いっとくけど厳密にはPSGI対応な。
- 553 :nobodyさん:2010/01/06(水) 13:08:53 ID:???
- ド初心者にCatalystを勧める男の人って・・・
- 554 :nobodyさん:2010/01/06(水) 17:26:03 ID:U4hPtr/3
- 〜日で覚える
みたいなシリーズは一番買ってはいけない本だと思うのだが・・・
- 555 :nobodyさん:2010/01/06(水) 17:28:41 ID:???
- 他サイトで教えていただいたPerlのプログラム(?)なんですがわからないので
解説をしていただきたいのですがここに載せても大丈夫なのでしょうか?
教えていただいた方とは連絡がとれなくなってしまいその人に解説していただくのは不可能です。
捨てメールアドレスを作ってここに載せ連絡をくれた方に送り解説していただく、という形のほうがいいでしょうか?…
- 556 :nobodyさん:2010/01/06(水) 17:47:20 ID:???
- 後出しじゃんけんなしで、長くならないように。
あとソースをどこかにアップして、それへのリンクを貼ればよいかと。
- 557 :nobodyさん:2010/01/06(水) 18:26:00 ID:???
- http://www.dotup.org/uploda/www.dotup.org534661.zip.html
pass:2perl です
アップローダーを使ったことないのでちょっと不安ですが…
.txtファイルを一応ALZipで圧縮しています…
- 558 :nobodyさん:2010/01/06(水) 18:35:10 ID:???
- s{qw /:seandard/}{qw/:standard/};
>>557
昨日辺りに「10日でおぼえる Perl/CGI 入門教室 第2版」を買った記憶はない?
- 559 :nobodyさん:2010/01/06(水) 18:49:20 ID:???
- >>558さん
購入しました。
use CGI qw /:seandard/;っていうのが買った本には載っていなく検索してみたら
モジュール(?)みたいなことがでてきてここで戸惑っていました
他の部分は見て、調べてを繰り返していてparamがパラメータを指している(?)
などということがわかってきたって感じです
- 560 :nobodyさん:2010/01/06(水) 23:50:12 ID:???
- 連絡が取れなくなってしまいってこのスレだろwwwwwwww
何モンだあんた
- 561 :nobodyさん:2010/01/07(木) 13:58:16 ID:???
- >>507を書いた自分が来ましたよ
- 562 :nobodyさん:2010/01/07(木) 18:03:26 ID:cG1x4224
- >>560さん
>>557を教えていただいたのはこのスレではなく違うサイトでメールで個人的に教えていただきました。
>>557はまだよく理解できていません…
>>561さん
あれから動かなく(?)なってしまいました
携帯サイトで使いたいです。
また一度に複数送信したいのですが…
- 563 :nobodyさん:2010/01/08(金) 08:56:16 ID:???
- >>562
ご自分のパソコンにWebサーバーの構築はされましたでしょうか?
ご購入された本にWebサーバー構築のことは書かれてはいませんか?
それから、まずコマンドラインから実行して、最低限のバグは取りましょう。
DOSプロンプトから
C:\>perl xxx.cgi
と打てばいいだけです。
>#!/usr/bin/perl
これは必ずファイルの”先頭行”に書かなければいけません。
Perlを実行するプログラムがどこにあるのかを記述しています。
>use CGI qw /:seandard/; → use CGI qw/:standard/;
use文は、モジュール(特定の機能を集めた関数とデータ群)を現ファイルに読み込みます。
この場合、CGIに必要な機能を集めたCGIモジュールをこのファイルに読み込んでいます。
qw/ /で、その機能のどれを(どのように)使うかを指定します。
今回の:standardは、オブジェクト指向形式でなく関数形式でも使うという指定です。
- 564 :nobodyさん:2010/01/08(金) 08:57:47 ID:???
- >my $q = new CGI → my $q = new CGI;
CGIモジュールのオブジェクトを作り、それを$qという変数に入れています。
$qには、各種データが入っています。
以降、この$qを用いて様々な処理をすることができます。
>my $a = $cgi->param('a'); → my $a = $q->param('a');
>my $b = $cgi->param('b'); → my $b = $q->param('b');
フォームで送られてくるデータを取り出します。
name="○"の○を引数にすることで、そこで入力された値が取り出せます。
$q->xxxとは、$qというオブジェクトに関連付けされた関数xxxを呼び出すという記述です。
>print $q->header;
サーバーからブラウザに送られてくるデータ(レスポンス)はヘッダーと本文に分かれますが、
ブラウザに出力されるのは本文のみです。
ヘッダーには、様々な制御命令が記述されています。
この文は、そのヘッダーを出力しています。
>print $q->start_html;
HTMLの冒頭に必要な各種情報を出力します。
>print << "EOF";
>$aはaで受け取る
>$bはbで受け取る
>EOF
ブラウザに実際に書かれるHTML文章です。
>print $q->end_html;
HTMLの最後に必要なタグを出力をします。
>exit;
プログラムを終了する関数です。
- 565 :nobodyさん:2010/01/08(金) 17:40:50 ID:???
- 解説ありがとうございます。
私自身がCGIモジュールというものを作らなければならないのでしょうか?…
サーバーにはよくわからないのでパーミッションを700であげています
外部のサイトには送れるんですが自分のサイトの中でフォームの送受信がいまだにできない状態です…
難しいですね…
- 566 :nobodyさん:2010/01/08(金) 17:42:37 ID:???
- 自分のサイト内ってのがよくわからんのだけど、LAN内にメールサーバー立ててるの?
だとするとDNSも立てないとダメだよ?
- 567 :nobodyさん:2010/01/08(金) 18:01:17 ID:???
- 今の目標がページAで入力した文字列「あいうえお」をページBに送り「あいうえお」と表示させたいのです。
携帯でも使えて、表示する部分は自分で選べる、複数(入力欄1に「あいうえお」、入力欄2に「かきくけこ」)にも対応させたいです。
一番簡単にたとえると、メールフォームで文字を打つ→送信前の確認ページ→送信完了
の「メールフォームで文字を打つ→送信前の確認ページ」ここです。
説明が下手で申し訳ないです。
- 568 :nobodyさん:2010/01/08(金) 18:05:11 ID:???
- いや、そうじゃなくて「自分のサイト」ってどこの話?
LAN内? レン鯖?
- 569 :nobodyさん:2010/01/08(金) 18:46:14 ID:???
- LAN内ってなんでしょうか…?
レンタルサーバーです。
- 570 :nobodyさん:2010/01/08(金) 18:51:46 ID:???
- >>565
CGIモジュールは先駆者が既に作っています。
標準で入っているので、どこからか持ってくる必要はないです。
use CGI;の一文で使えるようになります。
Perlの場合、必要そうなモジュールは大概、誰かが作っていて、様々なモジュールを組み合わせて
プログラミングしていくことになります。
WAF(Web Application Framework)と呼ばれている大きなモジュール群あり、これはページ遷移等
の大枠が既に作られていて、比較的簡単に大規模Webアプリを作ることができます。
- 571 :nobodyさん:2010/01/08(金) 19:27:43 ID:gGxGm+Hx
- sub password{
my @u; open(IN,$guestfile); @u=<IN>; close(IN); chomp(@u);
@u=grep($in{'handle'},@u);
return $u[0];
}
● $guestfile: 文字通りゲストの password, handle, etc. を記録したファイルの path.
● $in{'handle'}: STDIN から受け取ったゲストのハンドル.
読み取った情報からハンドルが一致するパスワードを選び出せるはずだったのに,
ハンドルが一致しなくてもパスワードが返って来るっぽ (`д´)うわぁ〜ん.
ど, どうして ?
- 572 :nobodyさん:2010/01/08(金) 19:31:55 ID:???
- $guestfile: $in{'handle'}: の方のコードも見せてもらえないとなんともいいようがないが
スコープ周りが怪しい
- 573 :nobodyさん:2010/01/08(金) 19:36:42 ID:???
- >>569
レン鯖でperlの勉強してるの!?
つかよく許してるなそのレン鯖屋も
- 574 :nobodyさん:2010/01/08(金) 19:45:07 ID:gGxGm+Hx
- >>572
す, 素早い回答ありがとうございます.
もしかして grep() がダメなら loop でぶん回すしかないかな? とアレコレ...
>$guestfile: $in{'handle'}: の方のコードも
zip 圧縮して後ほど upload します.
(叩きどころ満載かと思いますが...)
- 575 :nobodyさん:2010/01/08(金) 19:52:08 ID:???
- 後怪しそうなのは、引数の型か
- 576 :nobodyさん:2010/01/08(金) 20:06:41 ID:gGxGm+Hx
- >>530
お手数ですが...
ttp://homepage2.nifty.com/alter/bbs.zip
- 577 :nobodyさん:2010/01/08(金) 20:07:39 ID:???
- > @u=grep($in{'handle'},@u);
$in{'handle'}が真であるという条件だけで素通ししてるように見えるんですけど
- 578 :nobodyさん:2010/01/08(金) 20:10:57 ID:gGxGm+Hx
- >>530
母音を省略した subroutin, valiable が ほとんどなので
他人様に解読していただくのは極めて困難を極めるかと orz...
- 579 :nobodyさん:2010/01/08(金) 20:16:04 ID:???
- >>573さん
そうです。携帯サイトを作りながら開いたスペースで練習しています。
なのでフォームの送受信というのでしょうか、それができるようになりたいのですが…
- 580 :nobodyさん:2010/01/08(金) 20:17:54 ID:gGxGm+Hx
- 訂正: valiable -> variable
- 581 :nobodyさん:2010/01/08(金) 20:29:36 ID:???
- じゃあこっちもだな
subroutine
- 582 :nobodyさん:2010/01/08(金) 20:34:14 ID:???
- > sub psw{
> my @u,@v; open(IN,$gst); @u=<IN>; close(IN); chomp(@u);
> my $hdl=$in{'hdl'}; @v=grep($hdl,@u);&dlg(@v);
> @u=split("\t",$u[0]);
> return $u[0];
> }
うーん、変数名の付け方とか詰めすぎは「俺の勝手だ」かもしれないけど
古文書を参考にするのはやめたほうがいいよ。sub decode とか sub tim とか。
>>577の指摘どおりなので perldoc -f grep
- 583 :nobodyさん:2010/01/08(金) 20:52:18 ID:gGxGm+Hx
- >>581
;(;_;);
>>582
自給自足で使うつもりだったので他人様に見せようとは夢にも考えてなかったんれす.
取り敢えずは動いているものの完成にはまだまだ遠い道が...
ところで "古文書" とは どういうことでしょうか ?
正直, 本よりも web で調べて アレコレ試行錯誤中なんですが.
- 584 :nobodyさん:2010/01/08(金) 21:07:53 ID:???
- >>583
旧時代の遺物と化したコードの事
- 585 :nobodyさん:2010/01/08(金) 21:13:55 ID:???
- >>583
古文書って書いたのは>>583の通り。わざわざ昔の手法を覚えてしまってる。
例えば sub decode {} するより CGI.pm を使いましょう、なんだけど
参考にしてるリソースがよろしくないんだろうね。
- 586 :nobodyさん:2010/01/08(金) 21:14:51 ID:???
- アンカーミスった。>>584の通り。
- 587 :nobodyさん:2010/01/08(金) 21:16:25 ID:gGxGm+Hx
- >>584
なるほど. (σ(^_^;)の脳味噌が まさに旧時代の遺物だったりして.)
参考までに新時代のコードってのはあるんすか ?
まさか, OOP ?
perl の OOP って, おいらにはサパ〜リ.
- 588 :nobodyさん:2010/01/08(金) 21:22:27 ID:???
- >>587
その通り
モジュールを使えって話だ
- 589 :nobodyさん:2010/01/08(金) 21:49:30 ID:???
- >>571 です.
アドバイスくださった方々, ありがとうございます.
ご指摘いただいたことを参考に, 調べなおします.
また来る事になるかもしれません, そのときは よろぴく.
- 590 :nobodyさん:2010/01/09(土) 18:37:43 ID:???
- >>571 っす.
結局, loop でぶん回すことにしました. <- ダサいやり方だとは思いますが.
(sub decode と同様なやり方です)
そもそも grep(/〜/,@a) の使い方が理解できていないっす.
(というか JavaScript の new RegExp() みたいな使い方が perl にもあるのかどうか ???)
あと, CGI.pm は nifty では使えない模様っす.
(server 借りて本格的にやるほどのネタの持ち合わせがありません)
(制限多すぎとはいえ, 100MB のスペースを利用しない手はないと考えてます)
- 591 :nobodyさん:2010/01/09(土) 19:17:04 ID:???
- 使えないってことあるの?
入ってないなら、CPANから持ってくるとか。
- 592 :nobodyさん:2010/01/09(土) 19:24:56 ID:???
- パスワードを記述したファイルが
USERNAME \t PASSWORD \n
という仮定で
my $idpass;
open(INFH, '<', $guestfile);
read(INFH, $idpass, (-s INFH));
close(INFH);
$idpass =~ /\n$in{'handle'}\t(.*?)\n/s;
return $1;
- 593 :nobodyさん:2010/01/09(土) 19:32:08 ID:???
- >>591
ttp://homepage.nifty.com/faq/faq_b4.htm#q5
"use/requireで外部関数(モジュール)をコールする場合は、
perlの標準モジュールを@homepageのシステムでは用意しておりませんので
使用することはできません"
"自分で用意したらどうか" と言う問題に付いては
Google でもヒットしますが実際に実験をした人はいない模様っす."
アッシがやれば それなりのネタになるかもですが そもそも .pm を使いこなせないので...
- 594 :nobodyさん:2010/01/09(土) 19:40:36 ID:???
- つーかこういう事は連想配列でやるだろ
- 595 :nobodyさん:2010/01/09(土) 19:43:59 ID:???
- >>592
>パスワードを記述したファイル:
TSV 形式で {cipher, handle,IP} を記録してます.
ついでに書きこみ回数なども記録するのも おもしろいかも ?
で, 仮にハンドルに数字を使われた場合に
IP とマッチングする可能性も考えられるので今のやり方に落ち着きました.
わざわざサンプルを書いてくださり, ありがとうございます.
- 596 :nobodyさん:2010/01/09(土) 19:44:07 ID:???
- strict.pm すらない環境で苦行を重ねなくてもいいと思う。
- 597 :nobodyさん:2010/01/09(土) 19:47:15 ID:???
- >>594
仰せの とおりです!
このケースでは たぶん これがベストのやり方かも ?
- 598 :nobodyさん:2010/01/09(土) 19:58:23 ID:???
- whileで回して見つかり次第returnしたほうが速くねーか?
- 599 :nobodyさん:2010/01/09(土) 20:06:03 ID:???
- >>598
記録するときにもチェックをして重複記録しないようにしてます.
それと, そもそも書きこむのが自分だけだったりして... (;_;)
個人サイトでのゲストの人数なんて問題にならないかと.
- 600 :nobodyさん:2010/01/10(日) 22:35:25 ID:???
- 他のサーバでやることを勧めるが……
後、パスワードはMD5やSHA-2にして保存した方がセキュリティ上いいんじゃない?
- 601 :nobodyさん:2010/01/11(月) 00:25:31 ID:???
- こんにちわ、質問させてください。
今、以下の流れを処理するスクリプトを書いています。
1.ファイルを参照して、区切り文字<>で連結された文字列を取り出す
2.連結解除し、一行分の情報をハッシュにまとめた後、ハッシュの配列を一つ作る
3.ファイルを参照して、テンプレート化されたHTMLを取り出す
4.HTMLに埋め込まれた変数を正規表現で置換する
この4つ目の部分で悩んでいます。
以下が当該箇所のスクリプトです。
foreach $elm (@articles){
undef(@tmp1);
foreach $tmpl (@template){
$tmpl =~ s/\[\% name \%\]/$elm->{name}/g;
$tmpl =~ s/\[\% mail \%\]/$elm->{mail}/g;
push(@tmp1, $tmpl);
}
push(@tmp2, @tmp1);
}
もう一日考えて頭がパンクしそうなので、どなたかお答えいただけないでしょうか?
私の方でもしばらくまた考えてみます。。。
- 602 :nobodyさん:2010/01/11(月) 00:46:48 ID:???
- 何を教えて欲しいのか書けよ
- 603 :nobodyさん:2010/01/11(月) 01:08:19 ID:???
- >>602
すみません、失念していました。
仕様通りに動いてくれないのは、
foreach $tmpl (@template){処理;}
の部分です。
最初の方のループで$elmを回しているにも関わらず、
@tmp2に入っている$elmの値が$elmの最初のもののみとなってしまっている状況です。
以下が処理した結果となります。
name : 1
mail : 1@hoge
name : 1
mail : 1@hoge
これを以下のように回るようにしたいのです。
name : 1
mail : 1@hoge
name : 2
mail : 2@hoge
- 604 :nobodyさん:2010/01/11(月) 01:15:38 ID:???
- push @tmp2は要らないだろ。
で質問は、結果がこうなってしまうってことだよな?
name1 = mail1@microsoft.com
[name1] as [mail1@microsoft.com]
name1 = mail1@microsoft.com
[name1] as [mail1@microsoft.com]
use strict;
use warnings;
my (@articles, @template);
my @data = <DATA>;
for my $d (@data[0..1]) {
chomp $d;
my ($name, $mail) = split(/<>/, $d);
my $element = { name => $name, mail => $mail, };
push @articles, $element;
}
push @template, @data[2..3];
my @output;
for my $elm (@articles) {
for my $tmpl (@template) {
$tmpl =~ s/\[\% name \%\]/$elm->{name}/g;
$tmpl =~ s/\[\% mail \%\]/$elm->{mail}/g;
push @output, $tmpl;
}
}
print @output;
__DATA__
name1<>mail1@example.com
name2<>mail2@example.com
[% name %] = [% mail %]
[[% name %]] as [[% mail %]]
- 605 :nobodyさん:2010/01/11(月) 01:17:04 ID:???
- ちくしょー整形している間に先を越された
- 606 :nobodyさん:2010/01/11(月) 02:36:45 ID:???
- >>604
こんな短時間で…ありがとうございます!
見たところchompしている部分と@tmp2を使わない以外は同じのようですね。
- 607 :604:2010/01/11(月) 02:48:37 ID:???
- いや、同じなんだよ。
答える奴が手元で実行しやすいようにと思ってさ。
for my $tmpl (@template) {
my $t = $tmpl;
$t =~・・・
と一度他のレキシカル変数に代入して、そちらを置換すれば望んだ結果は得られるんだが、
$tmplの置換で@templateの中身も書き換わってしまう理由が俺には分からなくて説明できないんだ。
誰か他の奴頼む。
- 608 :nobodyさん:2010/01/11(月) 03:08:41 ID:???
- perldoc perlsyn
>LIST の要素が左辺値であった場合、ループの中で VAR を変更することにより、
>対応する値を変更することができます。逆に、LIST の要素が左辺値でない場合は、
>この要素を修正しようとしても失敗します。言い換えると、foreach ループの
>帰納変数がループの対象となっているリスト中の個々のアイテムに対するエイリアスになっているからです。
- 609 :601:2010/01/11(月) 03:13:29 ID:???
- >>607
むつかしいですね。
ひとまず他の変数に代入してやると言う方法で、この場はしのいでみようと思います
こんな遅くまでありがとうございます!
>>608
ありがとうございます!
perldocも良く読んでおくべきでしたね。。。
- 610 :nobodyさん:2010/01/14(木) 13:58:55 ID:???
- ユーザー登録、認証などのサンプルコードでオススメありますか?
- 611 :nobodyさん:2010/01/16(土) 21:41:57 ID:???
- subroutin を呼び出すには " &sub " と言った書き方をするもんだと思ってました.
ところが sub() てな感じでも良いらしいことをこの板のスレッドで発見.
だまされたつもりで試して見ると普通に通る模様.
js と同じスタイルになるので こっちの方が良さそう.
ところで, これって perl 使いに取っての常識 ?
(Google でヒットする解説サイトの どこにも書かれてなかったけど)
もしそうだとするのなら, 他にも同様なことが あるのかしらん ?
- 612 :nobodyさん:2010/01/16(土) 22:13:58 ID:???
- &付きの呼び出しはPerl4時代の遺物なので避けるのが常識。
とりあえずここ参照。コメント欄も含めて。
http://blog.livedoor.jp/dankogai/archives/51237271.html
- 613 :nobodyさん:2010/01/16(土) 22:33:59 ID:???
- >>612
ありがとうございます.
掲示板自作に半年 ? いや, かれこれ 5年目かも (゜w゜)
いつになったら完成するのやら.
でも, 最初の頃と比べれば...
- 614 :nobodyさん:2010/01/26(火) 00:22:20 ID:???
- SSIから流れてきた難民です。
というのも、SSIを動かすmodにバグが見つかったからです。
出力する文字コードはUTF-8で、Perlスクリプト文字コードはEUC-JPです。
/foo.shtmlを完全にPerl化して、
/foo/bar.shtmlから読み込めるようにしたいです。
--/foo/bar.shtml--
<!--#set var="pgtitl" value="サーバー環境" -->
<!--#include virtual="/foo.(cgiにしたいなぁ……)" -->
--/foo.shtml--
<!--#if expr="${pgtitl}" -->
<h1><!--#echo var="pgtitl" --></h1>
<!--#endif -->
- 615 :nobodyさん:2010/01/26(火) 00:23:56 ID:???
- 尚、>>614のshtmlコードはあくまでも一部分抜粋です。
- 616 :nobodyさん:2010/01/26(火) 00:35:33 ID:???
- >>615
http://search.cpan.org/~tskirvin/CGI-SHTML-1.29/CGI/SHTML.pm
多分SHTMLのパーサ
- 617 :nobodyさん:2010/01/26(火) 00:39:47 ID:???
- mod_include のバグが見つかったって何だろう。
- 618 :nobodyさん:2010/01/26(火) 01:36:08 ID:???
- >>617
これかな?(検索したら出てきた)
https://forums.ubuntulinux.jp/viewtopic.php?pid=48428
- 619 :nobodyさん:2010/01/26(火) 16:46:15 ID:???
- これかな?(検索したら出てきた)
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1035823010
- 620 :614:2010/01/26(火) 22:09:36 ID:???
- 全部俺です。全然回答が得られずにここに流れてきたというのが実情です。
- 621 :nobodyさん:2010/01/26(火) 23:06:18 ID:???
- >>614, >>620
>#include virtual
おいら, まだヒヨッコだけど,
そして, SSI はまったく調べたことがないけれど,
要はhtml ファイル (template)を読み込んで
部分的に replace するだけじゃないのかな ?
だったら おいらでも なんとか...
(だけど ここの先輩たちの回答がないのはなぜ ?)
- 622 :nobodyさん:2010/01/26(火) 23:24:53 ID:???
- 意味がわからんから答えようがないだろwwwwwwwww
で、「Perlスクリプト文字コードはEUC-JP」とあるけどbar.shtmlにEUC-JPで書いた文字を
Perl/foo.cgiを#includeさせてUTF-8として表示されればいいのか?
#/path/to/perl
use Encode qw/from_to/;
from_to($ENV{pgtitl}, 'shiftjis', 'utf8');
print "<h1>$ENV{pgtitl}</h1>";
こうか?
- 623 :nobodyさん:2010/01/26(火) 23:25:54 ID:???
- 違うか
from_to($ENV{pgtitl}, 'euc-jp', 'utf8');
- 624 :nobodyさん:2010/01/26(火) 23:52:22 ID:???
- >>614のどこにも質問文がないからなぁ
- 625 :614:2010/01/27(水) 05:00:54 ID:???
- すみません、質問書き直します。
呼び出し時に、SSI変数か、CGIの引数で文字列を入力して、
UTF-8で出力するCGIを作ろうとしているわけですが、
print "<h1>$ENV{pgtitl}</h1>";
だと、SSI変数が読めません。
フローチャート
________________
|入力 |
|UTF-8(SSI呼び出し)引数付き |
|<!--#exec cgi="foo.cgi |
| サーバー環境" --> |
|_______________|
▼
________________
|処理 |
|引数が存在するか? |
|はい>>引数をエンorデコード |
|いいえ>>プリントしない |
|_______________|
▼
________________
|出力 |
|UTF--8で |
|引数を<h1>に入れて出力 |
|_______________|
- 626 :614:2010/01/27(水) 05:30:17 ID:???
- #!/usr/bin/perl
use Encode qw/from_to/;
print "Content-type: text/html\n\n";
print "<h1>$ENV{pgtitl}</h1>";
$niti = "FONOの日常";
from_to($niti, 'euc-jp', 'utf8');
print "$niti";
exit;
入力がUTF-8だったので、そのままスルーで良かったんですね。
CGIに書かれている文字がeuc-jpなので、変換しないとだめなようですが。
把握しました。
- 627 :nobodyさん:2010/01/27(水) 07:28:37 ID:???
- >>616に対してなんかリアクションしてくれないか?
全然なにがやりたいかわからんから>>621と同じ解釈してパーサーっぽいの探してきたんだけど
あと前提条件として何があって、結果何がしたいのか言ってもらわんと誰も疑問に答えることはできんと思うが
- 628 :nobodyさん:2010/01/27(水) 08:30:00 ID:???
- >>625-626
SSI もどきの動作を CGI に置き換えたいのかと思いきや, 違うようだねぇ.
というか, 余計, やりたいことが見えなくなったですぜぃ.
どこでも回答を得られなかったそうだけど, 合点が行きますぜ.
固定観念を捨てて すなおにやりたいことを書くようにしないと...
漂流の旅は 延々と...
- 629 :614:2010/01/27(水) 18:18:11 ID:???
- >>616-628
質問文に基礎的な欠陥がありました。すみません。
>>616>>627
パーサーではなくて、完全にPerlに書き換えるということです。
まさか、PerlにSSIのパーサーがあるとは。今後またパーサーにもお世話になると思います。
>>621
各ページの、ヘッダー・フッター・メニューの書き出しをSSIにさせていましたが、Apacheをアップデートしたら、文字化けするようになったので、Perlに文字化けする部分を置換しようかという話になりました。
質問を落ち着いてから要約すると、UTF-8のSHTMLから引数かなんらかの形で文字列を与えて、その文字列を、HTMLにはめ込んで、出力するものです。
たとえば、ああああという文字列を与えられたら
<title>FONOの日常 - ああああ</title></head><body><h1>ああああ</h1>
というふうに同じ文字を沢山のところに挿入して出力します。手軽さや、時間の関係でSSIを使っていて、アップデートしたら、mod_includeのバグで文字化けになって慌てました。
>>622-623
まさにそれです。そのコードを少し編集し>>626になり、それをにはめ込み、文字化けが解決しました。mod_includeのアップデートが来るまで待ちたいと思います。
たくさんの回答ありがとうございました。
今度質問するときはしっかり分かるよう、慌てずに、要所を押さえてから質問します。
- 630 :nobodyさん:2010/02/07(日) 16:21:07 ID:???
- 質問です。
以下の配列
@hoge1 = (
'01,aa,bb',
'02,aa,bb',
'03,cc,dd',
'02,cc,dd'
)
これを
@hoge2 = (
'01,aa,bb',
'02,aa,bb,cc,dd',
'03,cc,dd',
)
というように、最初の数字が一緒なら数字以降のデータを連結したいです。
よろしくお願いします。
- 631 :nobodyさん:2010/02/07(日) 17:07:49 ID:???
- my %foo;
for (@hoge1) {
/\A(\d+)(.*)\z/s;
$foo{$1} = exists $foo{$1} ? "$foo{$1}$2" : "$1$2";
};
my @hoge2 = values %foo;
- 632 :nobodyさん:2010/02/07(日) 17:15:19 ID:???
- 順番が違う
- 633 :nobodyさん:2010/02/07(日) 17:27:28 ID:???
- んじゃこれで
my %foo;
my @sort;
for (@hoge1) {
/\A(\d+)(.*)\z/s;
if (exists $foo{$1}) {
$foo{$1} = "$foo{$1}$2";
} else {
$foo{$1} = "$1$2";
push @sort, "$1";
}
};
my @hoge2 = @foo{@sort};
- 634 :nobodyさん:2010/02/07(日) 17:33:29 ID:???
- うむ、大分よくなった。
次は同じ数値のやつで値が重複してれば取り除くことかな
更に値を昇順に並べる
できればだけど、初心者にできるだけわかり易いコードで書くか、難しいコードにはコメント付けることかな
- 635 :630:2010/02/07(日) 18:32:40 ID:???
- >>633
書式の意味はさっぱり分かりませんが、思い通りに出来ました。
ありがとうございました。
>>634
これは、とあるデータファイルなのですが、現在の仕様では書き込み時に
行頭のデータを見つけて同じなら追加できるようになっています。
また重複しないようにもなっています。
今回、過去のデータが1データ1行という仕様だったものを現在の仕様に
合わせて効率化(読み込み回数の減少)を図りたかったので知恵を
拝借させていただきました。
では、これから数十万ファイルを変換します。。。
ありがとうございました。
- 636 :nobodyさん:2010/02/10(水) 04:24:28 ID:SN+dhl64
- iPhoneをつかっているのですが、ケータイ相手だとメールのヘッダに差出人の名前が含まれておらず後で見返すときに不便です。
ですので、受信メールをemlで書き出して編集をしようと思っています。
今はシェルスクリプトを使って以下のように行っております。
for file in *.eml;
do
sed -e 's/From: yamada@softbank.ne.jp/From: =?ISO-2022-JP?B?GyRCOzNFRBsoQg==?= <yamada@softbank.ne.jp>/' $file > tmp.eml;
mv tmp.eml $file;
以下人数分繰り返し。。
done
ですが、これだと、置換が終わったファイルに関してもアクションが行われたりと非効率的なので、
置換が終わったらループを抜けてつぎのファイルに移動するなどすることは可能でしょうか。
- 637 :nobodyさん:2010/02/10(水) 06:33:49 ID:???
- スレ違い
184 KB
[ 2ちゃんねる 3億PV/日をささえる レンタルサーバー \877/2TB/100Mbps]
取りに行ったけどなかった。次は一時間後に取りに行くです。新着レスの表示
掲示板に戻る
全部
前100
次100
最新50
read.cgi ver 05.0.7.8 2008/11/13 アクチョン仮面 ★
FOX ★ DSO(Dynamic Shared Object)