くだすれPerl(超初心者用)3
レス数が950を超えています。1000を超えると書き込みができなくなります。
0001nobodyさん
2009/03/31(火) 22:20:27ID:???もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。
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/
0002nobodyさん
2009/03/31(火) 22:23:20ID:???時代はPHPですよ
化石ども必死だな
0003nobodyさん
2009/04/02(木) 16:40:02ID:8XnYHneDと言っておこう
0004nobodyさん
2009/04/02(木) 16:46:23ID:???コメントを送信したら自動的にhtmlに上書きされてページがリロードされるような
プログラムはどのように書けば良いですか?
考え方を教えていただければ自分で勉強しながら作ってみようと思いますので
どうかよろしくお願いします。
0005nobodyさん
2009/04/02(木) 18:30:57ID:???中に「#####REPLACE_HERE#####」みたくユニークな文字列を生めておく。
そこをコメントで置換してindex.htmlに上書きする。
0006nobodyさん
2009/04/02(木) 22:09:04ID:???最近オブジェクト指向を勉強しているのですが、なかなか理解できません。
たとえばタブ区切りテキストの外部ファイルを読み込んで
それぞれのデータを車というオブジェクトにして処理をしたい場合、
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;
}
といった処理を行うことになるのでしょうか。
解説サイトなどを読むと、なんだか違うような気もするのですが
こういう具体的な使い方に関する記載のあるサイトが見つかりません。
この理解で正しいかどうか、正しくないならどういった用法が正しいのか
ご教示いただければ有り難いです。よろしくお願いします。
0007nobodyさん
2009/04/02(木) 23:03:49ID:qrjZG7kJそりゃ「オブジェクト指向側(モジュールね)」のコーディング次第だろ。
呼び出し側は、オブジェクト指向側の説明を読んでその指示通りに
コーディングするしかない。
あなたが使いたいモジュールがあるならその説明を読めば良いし、
オブジェクト指向側のコーディングをしたいなら、どうするか明確に決めて
作成すれば良い。
具体的には、その例で、package Car (だよね)がセル単位で処理する
(=行毎)なら、呼び出し元でも、行単位でオブジェクトを作成して、
行単位で処理せざるを得ない。
0008nobodyさん
2009/04/02(木) 23:05:00ID:???0009nobodyさん
2009/04/03(金) 02:33:22ID:???まずコンストラクタにはハッシュにして渡すのが一般的だと思う
ブレスするときどーせハッシュにするんだから、渡すときもハッシュのがメモリ的にも都合がいいんじゃないかな
00106
2009/04/03(金) 03:50:19ID:???何をやりたいのか書いてませんでしたね、ごめんなさい。
やりたいのは車のデータを各パラメータごとに比較したり
条件に合うものを抽出したりしつつ、
データに変更を加えて保存し直したりといった作業なんです。
なので、読み込んだデータを元に
その分だけのオブジェクトを生成する必要があるのかなと考えました。
既存モジュールの使用は今のところ考えていません。
>>9
確かに、ハッシュにして受け渡すのが一般的ですね。失念していました。
サンプルのコードもぐだぐだです…申し訳ないorz
0012nobodyさん
2009/04/04(土) 05:04:43ID:???sqlとの連携は考えてないと
じゃあインスタンス変数には車一台一台よりも車のデータ全部と条件を入れるようにした方がいいかも
{
cars => [{一台目のデータ色々}, {二台のデータ色々},…],
condition => {limit => 120, offset => 60…},
}
こんな感じのハッシュ作ってbless
空のハッシュをblessしてから色々付け足してもいい
条件は変更可能なようにセッターを作っておく
読み出し先が決まってるならnew内でハッシュの形に変換してやるだけでいいから引数には条件以外渡す必要はない
こうしてやると比較メソッドも抽出メソッドも車オブジェクトを2つ作って〜ってやるより簡単に実装できると思う
ここではカタログを作る方が絶対に正しい
知らんけどな
0013nobodyさん
2009/04/04(土) 12:46:52ID:WDYa0L/pとりあえず本に書いてあるとおりに打ち込んでるんですが、
require 'cgi-lib.pl';
と言う文に関してですが、「cgi-lib.pl」というファイルは普通パールをインストールしたときに入っているものなのでしょうか?
どこを探しても見つからないのですが。
パールは5.8.8を使ってます。
0014nobodyさん
2009/04/04(土) 13:07:00ID:???0015nobodyさん
2009/04/04(土) 13:08:15ID:WDYa0L/pそうなんですか;
すみませんでした。
検索してきます。
0016nobodyさん
2009/04/13(月) 12:18:35ID:HKNZkh73$hoge = ($hoge1, $hoge2)[$hoge3];
という記述が出てきたのですが、よく意味がわかりません。
$hogeにはどういう値が入るのでしょうか。
よろしくお願いします。
0017nobodyさん
2009/04/13(月) 12:26:48ID:???0018nobodyさん
2009/04/13(月) 19:01:36ID:???print $list[0];
これは分かるよな?
my ($foo, $bar) = ('hoge', 'huga');
print $foo;
これも分かるよな?
my $baz = ('hoge', 'huga')[0];
print $baz;
じゃぁ、これも分かるよな?
0019nobodyさん
2009/04/13(月) 22:37:57ID:4dLnuytPこれを全部開いてその内容を一つのデータにまとめたいです。
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形式に当てはまっているものの一部が
省かれてしまったかがわかりません。
長くなってしまい申し訳ありませんがどなたか教えてください。
よろしくお願いします。
0020nobodyさん
2009/04/13(月) 23:59:17ID:???0021nobodyさん
2009/04/14(火) 02:04:04ID:rIst05p+19ですが
ありがとうございました
やっとわかりました
この場合はmatome.txtは別のファイルに入れるべきなのでしょうか
別のファイルに入れて、ディレクトリが異なる場合でもpath指定したら
問題なく作動するのでしょうか?
何度か別ファイルにあるtxtデータに書き込むと失敗するのですが、
pathに日本語があるとだめなのでしょうか?
ちなみにwindows XPを使用しています。
0022nobodyさん
2009/04/14(火) 05:19:49ID:???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;
}
0023nobodyさん
2009/04/14(火) 05:22:30ID:???0024nobodyさん
2009/04/14(火) 22:59:14ID:O5o6V23n参考にさせていただきます。
0025nobodyさん
2009/04/15(水) 21:38:46ID:/QsL8z0W戻ると正常に削除されているんです。どこがおかしいのか・・どう直したら良いでしょうか
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
002625
2009/04/15(水) 21:39:29ID:/QsL8z0Wmy($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のパーミッションでしょうか?さくらなんですが・・?
なんとかお願いします。
0028nobodyさん
2009/04/15(水) 22:30:13ID:/QsL8z0Wはい、安く買ったステップメールCGIです。
アカウント削除をクリックすると以下になります。
┏━━━━━━━━━┓
Error ┃
┃
Nothing to delete! ┃
back ┃
┗━━━━━━━━━┛
でも、戻ってリロードすると削除されているんです。
002925
2009/04/15(水) 22:41:26ID:/QsL8z0W"responders.cfg"ってファイルは作られていますが、
"responderstmp.cfg"なんてファイルはありません。
これがないからエラーになるのでしょうか?
0030nobodyさん
2009/04/15(水) 22:56:17ID:???それよりも問題はエラー画面が出る部分だが、正直このサブルーチンだけじゃ判断できん。
買ったからにはソースうpつっても無理だろうし、買ったところに聞け。
0031nobodyさん
2009/04/18(土) 03:47:15ID:???マッチさせると"ー"の"0x5B"部分を"["と扱われてエラーを起こすと思うのですが
確か文字列をメタ文字と扱わないとする関数を
以前どっかで見たような見ないような気がするのですがなんでしたっけ。
0032nobodyさん
2009/04/18(土) 03:54:32ID:???quotemeta
0033nobodyさん
2009/04/18(土) 04:04:25ID:???どっちでやってもちゃんと動きました。助かりました。
0034nobodyさん
2009/04/30(木) 16:50:41ID:NJ0M3yep以下の外部ファイルの書き換えに関してです。
### total.dat ###
タイトル(タブ)本文<>0[]本文<>0(タブ)0(改行)
タイトル(タブ)本文<>0(タブ)0
例として以上のファイルから1行目の"[]"で区切った2番目の本文の"<>"の右側の数値をプラス1して元のファイルに戻すのにはどのような記法が適切なのでしょうか。模範的なコードをご教示下されば有り難いのですが、ヒントだけでも教えて頂けないでしょうか。
0035nobodyさん
2009/04/30(木) 17:57:02ID:???ごちゃごちゃしたデータファイル構造だな
五日間も悩んだのはこの構造にも問題ありそうだし設計やり直すことを勧める
0036nobodyさん
2009/04/30(木) 18:39:06ID:???0037nobodyさん
2009/04/30(木) 18:56:31ID:???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);
0038nobodyさん
2009/05/01(金) 02:07:09ID:???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;
0039nobodyさん
2009/05/01(金) 07:26:31ID:???perl -pe 's/(\[\].*?<>)(\d+)/$1 . ($2+1)/e' total.dat
0040nobodyさん
2009/05/01(金) 07:30:09ID:???perl -i -pe 's/(\[\].*?<>)(\d+)/$1 . ($2+1)/e' total.dat
0041nobodyさん
2009/05/02(土) 09:59:55ID:KT1L0pIc>>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習得に於ける苦境だと思っております。どうか無知な私にご慈悲を頂けないでしょうか。
0042nobodyさん
2009/05/02(土) 10:03:30ID:???これはまだいいけど、
>指定の本文が2番目ではなく、1番目だった場合
これはどうしようもないよ。データ構造を見直すしかない。
0043nobodyさん
2009/05/02(土) 10:12:55ID:???そうですか…。やはり無理にデータを一元化するのは早計でしたか…。
抜本的なデータの更改を検討してみます。
お見苦しいコードをお見せしました。
皆さん有り難う御座いました。
0044nobodyさん
2009/05/02(土) 13:35:38ID:???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で保存でどうかな
0045nobodyさん
2009/05/02(土) 14:05:56ID:H4QclryKとクッキーを食わせてるんですが、半角英数字ならまったく問題ないのですが
日本語だとなぜかIE以外のブラウザでは文字化けして取得されてしまいます。
どのようにすれば文字化けせずにちゃんと取得させるようにできるのでしょうか?
0046nobodyさん
2009/05/02(土) 14:17:04ID:???0047nobodyさん
2009/05/02(土) 15:08:25ID:???0049nobodyさん
2009/05/02(土) 15:09:16ID:dM5geJCs005045
2009/05/02(土) 17:06:15ID:H4QclryKShift_JISです
0051nobodyさん
2009/05/02(土) 20:30:39ID:WUrVoZO10052nobodyさん
2009/05/03(日) 15:05:55ID:???@hoge = $str =~ /(hoge)/g;
print scalar @hoge;
$hoge = $str =~ /(hoge)/g;
print $hoge;
でもいけたかも
0053nobodyさん
2009/05/03(日) 15:29:01ID:???遅いかもだけどData::Dumper使えば?
ハッシュをevalすればそのままのデータ構造を取り出せる文字列に変えてくれるよ
デバッグにも使えるし是非使い方を覚えるべきモジュール
0055nobodyさん
2009/05/03(日) 19:23:56ID:/8WhCxeQ>>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; ######追記しましま######
$_;
}
0056nobodyさん
2009/05/03(日) 19:50:57ID:???0057nobodyさん
2009/05/04(月) 00:58:02ID:iURbr3UWググルで検索したけどよーわからんです ヒント
0060nobodyさん
2009/05/04(月) 19:40:42ID:???0061nobodyさん
2009/05/04(月) 19:43:36ID:???0062nobodyさん
2009/05/04(月) 20:18:16ID:XDCKuogh戻り値とは違うのか?
0063nobodyさん
2009/05/04(月) 20:39:08ID:???$hoge = 1;
return $hoge;
と同じ
ちなみに
return '1';
でも同じ処理してくれる
0064nobodyさん
2009/05/05(火) 17:54:45ID:???あれやってなんかいいことあるの
0065nobodyさん
2009/05/05(火) 17:59:34ID:???たぶんこれっていいこと
0066nobodyさん
2009/05/06(水) 01:02:43ID:Rmta2zKq0067nobodyさん
2009/05/06(水) 01:11:52ID:???0068nobodyさん
2009/05/06(水) 03:41:14ID:Rmta2zKq0069nobodyさん
2009/05/06(水) 05:37:07ID:???0070nobodyさん
2009/05/06(水) 14:41:20ID:???0071nobodyさん
2009/05/06(水) 21:50:10ID:???↑-wって何ですか?
0072nobodyさん
2009/05/06(水) 21:59:53ID:???くらいしてみろ。
0073nobodyさん
2009/05/06(水) 23:29:17ID:Rmta2zKqありがとう
0074nobodyさん
2009/05/06(水) 23:38:46ID:???0075nobodyさん
2009/05/06(水) 23:41:37ID:???0076nobodyさん
2009/05/07(木) 23:54:26ID:???↑これを真偽の判別ではなく*の部分の文字列を取り出すことは出来ないの?
substrじゃ無理みたいだし
0077nobodyさん
2009/05/08(金) 02:23:11ID:???質問の意味がようわからんがタグの中身を抜き出したいとみた
$str = '<hogehoge>';
$str =~ /<([^>])>/;
$ret = $1;
print "$ret\n";
詳しくは正規表現でググってちょ
0078nobodyさん
2009/05/08(金) 02:35:41ID:???my @files = <*>;
print join "\n",@files; # ファイル一覧が表示される
まぁ俺も質問の意味は全く分からんが。
0079nobodyさん
2009/05/12(火) 05:29:59ID:???0080nobodyさん
2009/05/13(水) 17:40:55ID:???[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 )],
);
0081nobodyさん
2009/05/13(水) 22:34:27ID:???for my $arrayref (@array1) {
my @array = @$arrayref;
my $idx = 0;
push(@{ $array2[$idx++] }, $_) for @array;
}
0083nobodyさん
2009/05/14(木) 23:18:45ID:???0084nobodyさん
2009/05/14(木) 23:20:12ID:???変数代入のときも同じようにできないの?
0085nobodyさん
2009/05/14(木) 23:36:43ID:???[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付近を書きかえたらできそうなのでやってみます
0087nobodyさん
2009/05/15(金) 10:54:57ID:???データを抽出したいと思っています。
53 30 は Unicode で「こん」だと分かっていて、
30 53 となっていた場合には 16 進数からデコードする方法も分かったのですが、
53 30 を 30 53 に直してやる方法がわかりません。
substr でちまちまやるのではなく、
一括で処理できる方法があれば教えていただけないでしょうか。
0088nobodyさん
2009/05/15(金) 13:36:47ID:???0090nobodyさん
2009/05/18(月) 20:56:08ID:???指定時間になったらコマンドを実行するのに良い方法はありませんか?
while(1){ } の中に入れるのを考えているんですが、毎回時刻を取得して〜と
やるのもスマートじゃない気がして。
0092nobodyさん
2009/05/18(月) 21:29:24ID:???うーん、やっぱりそうですか。ありがとうございます。
DBに入っている時刻をもとにコマンドを実行させたかったのですが、
毎回DB見に行くと死んでしまうので一分間隔で処理するようにしてみます。
0093nobodyさん
2009/05/22(金) 03:21:45ID:???・表示用HTMLページに入力用のテキストエリアとボタン、表示用のテキストエリアを作成。
・ボタンで入力内容をCGIに送信
・Logテキストに保存
・Logテキストから読み込んだ文章を表示用テキストエリアに出力
というものを作りたいのですが、表示用テキストエリアに出力というのがどうすればいいのかわかりません・・・
Perl側で出力先を指定(textareaのnameを指定)して出力するのか、HTMLページ側にJavascript等を併用するのか
ぐぐったりしてみたのですがいまいちわかりません
解決の糸口だけでも教えてくださいorz
0094nobodyさん
2009/05/22(金) 10:15:06ID:???まずは HTML を覚えれバカ。
何を急いでるの?余命1ヶ月なの?
</textarea>
009693
2009/05/23(土) 00:18:41ID:???HTMLは一通り扱えるんですが、Perlは全くの初心者なもので・・・
可能かどうかを知りたくて色々検索したんですが見つからなかったので質問しました。
>>94さんのレスでは<textarea>のタグの性質上、<textarea name="xx">のxxの部分をCGIで出力先と指定する事はできない・・・という意味ですか??
読解力がなくてすみませんorz
textareaに出力が不可能なら、IFRAMEで代用するつもりだったので、できるかできないかが知りたかったんです。
Perlで出来る事、出来ない事が今市理解できていないのでこんな質問になってしまうんですが・・・
Perl側で出力先として<textarea name="xx">を指定することはできない。
テキストエリアを表示したい場合はPerl側でテキストエリアを作成、HTMLページに埋め込む・・・という形にしないといけないという感じでしょうか??
(Perl側で作成したtextareaにテキストを追加していく・・・というような方法は散見しましたので)
0097nobodyさん
2009/05/23(土) 01:32:13ID:???<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];
}
0098nobodyさん
2009/05/23(土) 03:05:32ID:???横からの質問なんですが、どうしてオススメしないんでしょう。
今自分のスクリプトで外部HTMLを読み込んで変数部分のみ
データに差し替えて出力というのをやっているので気になります…。
0099nobodyさん
2009/05/23(土) 08:49:56ID:???テンプレートエンジン使えってことか?
0100nobodyさん
2009/05/23(土) 16:14:56ID:???0101nobodyさん
2009/05/23(土) 18:51:30ID: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で出力された結果がブラウザにちゃんと反映されないって時点でさっぱりわからない状態なのですが、
こういう場合、何がおかしいと考えられますでしょうか?
0102nobodyさん
2009/05/23(土) 19:19:22ID:???自己レス、perlのバグでしたorz
opera用に用意したIDでのみ発生する現象でした。
すみませんでしたorz orz
0103nobodyさん
2009/05/23(土) 20:34:51ID:???0104nobodyさん
2009/06/06(土) 17:11:16ID:???正規表現で、ある文字列で括られた文字列を抽出したいのです。
たとえば、
括弧で<括られた>文字列を<抽出>
この文字列から、<>で括られた部分の文字列を収集するために、
正規表現で /<.*>/g とマッチさせようとしたのですが、
マッチする文字列は
"<括られた>文字列を<抽出>"
となり、期待した
"<括られた>", "<抽出>"
となりません。
最短の文字列をマッチさせるにはどうしたらよいのでしょう?
0105nobodyさん
2009/06/06(土) 18:05:27ID:???0106nobodyさん
2009/06/08(月) 02:34:51ID:???/<([^>])/
と
/<([.*?])>/
ってどっちがよりふさわしいんだろ?
0107nobodyさん
2009/06/08(月) 10:24:15ID:???0109nobodyさん
2009/06/08(月) 12:36:27ID:???あと、<form action="<?php echo $_SERVER['SCRIPT_NAME']; ?>">
みたいにタグ中にサブタグを含んでるような場合にはもっと複雑に書かないと対応できない
0110nobodyさん
2009/06/08(月) 13:47:40ID:???0111nobodyさん
2009/06/10(水) 22:04:38ID:???ものぐさなぼくは
> /<(.*?)>/
を支持する。
/<([^>])>/ よりもタイプ数が少ない。
区切り文字が変更されたときに修正する文字数が一文字少ない。
0112nobodyさん
2009/06/10(水) 23:01:32ID:???0113nobodyさん
2009/06/17(水) 13:26:38ID:???内部でtime関数を読んでるんですが、外からこれを制御することは可能でしょうか
不可能の場合はどうテストすべきでしょうか
0114nobodyさん
2009/06/17(水) 14:08:32ID:???0117nobodyさん
2009/06/17(水) 14:37:45ID:???テスト用のスクリプトからこのモジュールを呼んでちゃんと動くかどうか確認したかったんですが、
モジュール内部でtime関数を使って計算する部分があるためにきちんと統制できないので、
テストスクリプト側に返ってくる値が予測できないのです
なので、time関数が返す値をテストスクリプト側から操作したいのです
0118nobodyさん
2009/06/17(水) 14:56:26ID:???./command.pl 1010101010
みたいにコマンド実行時にUNIX秒渡せば簡単だと思うけどどういうスクリプト&テスト方法なのかわからん
0119nobodyさん
2009/06/17(水) 15:31:12ID:???そうですね、一つのテストスクリプトでテストしたいのでそれではちょっと面倒な気がします
実際にどういうことをやろうとしてるのか見てもらったほうが早いかもしれませんね
実際はもっと長いですが、モジュールとスクリプトを簡略化したのはこんな感じです
関数・変数のネーミングが微妙なのは無視して下さい
----- 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";
0120nobodyさん
2009/06/17(水) 17:22:21ID:???組み込み関数の挙動が正しいかどうかを確認したいの?
まず$now + $date_diff * 60 * 60 * 24の値が0〜2147483647までの数値かどうかチェックさえすれば
あとは組み込み関数の挙動だからなぁ。。。
0121nobodyさん
2009/06/17(水) 17:52:21ID:???いつでも何度でもモジュールがちゃんと思った通りに動くかどうか、間違いがないかどうか確認したいんですよ
これからちょっと関数内部を変更したとしてもこのテストスクリプトを動かすだけで正しい動作かどうかチェックできるようにしたいです
ここではtime関数から返ってくる値が起動ごとに違うのでうまくチェックできないじゃないですか
なのでtime関数から渡される数値を同じになるようにテストスクリプト側で操作したいんです
0122nobodyさん
2009/06/17(水) 18:52:14ID:???0124nobodyさん
2009/06/17(水) 19:28:00ID:???そこで思考停止しちゃうのか・・・なんだかなぁ。
俺だったらmodule内で拾ったepoc値を外部コマンドに投げて比較すればいいかなーとか思ってるけど。
秒単位の精度はいらなそうに見えるし。
0125nobodyさん
2009/06/17(水) 19:42:53ID:???それも考えましたが、結局同じロジックにしても違うロジックにしても、自動で結果を出すことになるので信頼できないと思いまして
それに処理をしてるうちにtime関数で返ってくる値が変わる可能性がありませんか?
0126nobodyさん
2009/06/17(水) 20:33:48ID:???my $now = ($test)? 0 : time();
でいいじゃん。
0127nobodyさん
2009/06/17(水) 20:43:30ID:???組み込み関数自体の信頼性は疑ってないです
ただ、スクリプト側でtimeを呼んだときとモジュール側でtimeを呼んだとき、
処理の時間があるのでどうしてもズレがあるわけじゃないですか
それからモジュール側から返ってきた値をチェックしたいので、
チェックするにはスクリプト側でtimeの値を計算してやらなきゃいけない
ということはスクリプト側の計算ロジックも正しい必要があると思います
でも直感的に6月17日の3日後の日時と比較するのなら正しいかどうかが一目でわかると思いまして
0128nobodyさん
2009/06/17(水) 20:46:54ID:???呼び出し元でtime関数使ってるならそのepoc値渡せばいいだけじゃん。
テストも簡単だぜ?
0129nobodyさん
2009/06/17(水) 20:54:41ID:???それなら確かにズレはなくなりそうですが…
テストの為に関数に風穴開けるのはなんかスマートじゃない気がします
それからテスト側でロジック組む必要がある問題は解決して無くないでしょうか?
0130nobodyさん
2009/06/17(水) 21:03:18ID:???あんた言ってることがめちゃくちゃだ。
0131nobodyさん
2009/06/17(水) 21:08:05ID:???「6月17日の3日後の日時と比較する」のは「テスト側のロジック」に見えるのだが。
というか>>128で言ってるのは
・普段は外から「timeから取得したepoc値」渡す。
・テスト時は「固定値」を渡す。
って意味だよ?
風穴とかスマートとかいう個人的な感性は知らんけど、timeの返り値を外から固定ってのがスマートとはとても思えない。
0132nobodyさん
2009/06/18(木) 05:49:48ID:sDQdBVF1すみません、勘違いしてました
そうですね、関数の引数を増やせばテストは簡単そうですが…
>>131
できる限り引数を減らしたいんです
モジュール側から見たときに、現在時刻を用いてゴニョゴニョするなら
timeを渡さないほうがすっきりしてると思いませんか?
テストをする場面でスマートであるよりも、実際に使われるモジュール・関数単位でスマートであるべきだと考えてます
これは今回の場面だけでないと思います
例えばDBIのラッパーモジュールを作って、
携帯からの記事投稿とPCからの投稿で異なるデフォルト値を設定したいとします(記事タイトルとか)
このとき、タイムスタンプに常に現在時刻を押すとすると、
記事に関する色んなステータスに加えて時刻までもが引数として渡されることになりますが、
それはモジュールとして完結してるのかという話です
確かにテストのために引数を増やせば楽ができますが、もしテスト側でtimeの値を操作することができるなら、
無駄を出さなくて済みますよね
0133nobodyさん
2009/06/18(木) 06:35:23ID:???>記事に関する色んなステータスに加えて時刻までもが引数として渡されることになりますが、
>それはモジュールとして完結してるのかという話です
それを「完結してない」と思う理由が俺には全くわからない。
「引数以上に無駄を出さず、time関数の返り血を制御する」方法は無いと思うが、
どうもこれ以上やりとりしても信条を曲げるつもりが無い以上ずっと平行線だろう。
ま、がんばってくれ。
0134nobodyさん
2009/06/18(木) 06:51:03ID:???考えすぎてかえって遠回りしちゃうタイプw
0135nobodyさん
2009/06/18(木) 07:10:19ID:???ちなみにこの問題の解決策はあるよ
関数の引数減らすのも普通の考え方じゃねぇの?
0136nobodyさん
2009/06/18(木) 07:37:30ID:???俺も知りたいw
0138nobodyさん
2009/06/18(木) 10:41:06ID:???0140nobodyさん
2009/06/18(木) 11:21:32ID:???0141nobodyさん
2009/06/18(木) 11:23:53ID:???次の質問をどうぞ!
0142nobodyさん
2009/06/18(木) 18:11:54ID:???オーバーライド
----- 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);
0143nobodyさん
2009/06/18(木) 18:14:39ID:???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 といったそれ用のモジュールもあります
ごめん答え知ってて聞いてた
0144nobodyさん
2009/06/18(木) 20:51:05ID:???1.割り切って日本限定
2.DateTimeを使う
3.Unix限定と割り切ってPOSIXのtzset使う
0145nobodyさん
2009/06/18(木) 21:21:59ID:???0147144
2009/06/18(木) 21:29:00ID:???0148nobodyさん
2009/06/18(木) 21:41:58ID:???0149nobodyさん
2009/06/18(木) 21:45:11ID:???なんかすまんです
そんでタイムゾーンをどう使ってテストする場合の話ですか?
>>146
本当に聞きたかったのは他人がどういうテストしてるのかなんですよね
この答えであってるのか、もっといい方法があるんじゃないかと
0150nobodyさん
2009/06/18(木) 21:49:47ID:???答えは十分出たと思うけどね。
どの方法が「良い」かなんて自分にしか決められないしキリがない。
そういう意味ではお前さんの聞き方は卑怯だったよ。あとスレタイ良く読めw
0151144
2009/06/18(木) 22:19:00ID:???ええと、localtime使うと時差が出るじゃないですか。
テストする場所で結果が変わると思うので、
その対処方法を聞きたかったのです。
0152nobodyさん
2009/06/18(木) 22:31:44ID:???0153nobodyさん
2009/06/18(木) 22:59:24ID:???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に置き換え?
0154nobodyさん
2009/06/18(木) 23:10:33ID:???それってwindowsではgmtが取得できて無いってだけで、localtimeの動作としては合ってるんじゃないのか?
0155nobodyさん
2009/06/19(金) 01:05:31ID:???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');
0156nobodyさん
2009/06/19(金) 14:25:45ID:ceoCS57Hダウンロード数をカウントするために、PHPアップローダーからアップロードしたファイルを収納しているディレクトリを
CGIのダウンロードカウンターのほうで読み込んで、アップローダーからファイルにアクセス→リダイレクトして
ダウンロードカウンタのURLに移動してファイルを表示、という事をしているのですが、
ダウンロードカウンタの設定で、画像にアクセスしてもブラウザで開かず、ファイルのダウンロードが開いてしまいます。
何時間もググって調べたのですが、プログラムを全くやった事がないので、結局解決しませんでした。
どうすれば、画像をブラウザで開くように出来るんでしょうか。
http://localhost/uploda/src/nico61.txt
これが使ってるカウンタのスクリプトです。
詳しい方、どこを弄ればいいのか教えて頂けないでしょうか。
宜しくお願いします。
0157nobodyさん
2009/06/19(金) 14:30:52ID:???0158nobodyさん
2009/06/19(金) 14:39:19ID:ceoCS57Hごめんなさい間違えました。
0159nobodyさん
2009/06/19(金) 14:42:27ID:ceoCS57H度々すいませんこれです。
0160nobodyさん
2009/06/19(金) 14:55:44ID:ceoCS57Hこれです、ほんとすいません。
0161nobodyさん
2009/06/19(金) 15:09:27ID:???127.0.0.1 niconama.ddo.jp
と書いておけばいいぞ。
0162nobodyさん
2009/06/19(金) 22:11:17ID:???スーレーちーがーいー
【 スクリプト改造依頼スレ】(丸投げ) part7再々
http://pc11.2ch.net/test/read.cgi/php/1222645553/
0164nobodyさん
2009/06/20(土) 11:40:20ID:???以下のように書くと、「真」が表示されます。
if ("真" eq "真" ){
print "真";
}
しかし、以下のように書くと、「真」は表示されません。
if ("真" =~ /真/ ){
print "真";
}
if ("真" =~ "真" ){
print "真";
}
if ("真" =~ /"真"/ ){
print "真";
}
=~ を使用する場合において、「真」が表示される
ようにするにはどうしたらよろしいのでしょうか。
基本的なことですが、どうしても分からないので
質問させていただきました。よろしくお願い致します。
0165nobodyさん
2009/06/20(土) 12:06:50ID:???CP932でコードを書くのをやめるという選択肢もあります。
0166164
2009/06/20(土) 13:33:31ID:???検索サイトでいろいろなキーワードで検索していたのですが、
なかなか答えとなるものが見つかりませんでした。
回答は非常に助かりました。ありがとうございます。
0168nobodyさん
2009/06/22(月) 03:35:03ID:mckf9gfOCGIの勉強をしていてCGIの製作を行っているのですが、レスポンスが遅い気がします。
abでベンチを書けてみたのですが、10リクエストの処理に5秒もかかっています。(そんなに重いCGIではないです。
自分のコードの書き方が悪いのか、それともマシンが遅いのか調べたいのですが、abをかけるいいサンプルのようなものは無いでしょうか。
他のマシンでどれくらいのスピードで動いているかなどのサンプルがあるものだとうれしいです。
0169nobodyさん
2009/06/22(月) 04:00:45ID:???Devel::Profiler
Devel::NYTProf
これで性能分析ができるらしい
ボトルネックあるならこれで分かるだろー
0170nobodyさん
2009/06/28(日) 17:18:33ID:I7LpaOR5Jcode.pmに文字コードを自動認識させようとするとたまに誤変換するんだが
(たとえば「えー」をucs2に変換させようとすると「?????」に化ける)
その辺の認識精度を上げるにはどうすればいいのかな?
WebページはUTF-8で構成しているけど、フォーム入力から飛んでくる
文字コードはブラウザが勝手に決めてしまう、って認識で合ってるよね?
0171nobodyさん
2009/06/28(日) 18:06:04ID:???0172nobodyさん
2009/06/28(日) 19:37:43ID:???ページのそれと変えたい場合もしくは、より厳密にしたい場合のために、HTML4ではform属性にaccept-charsetが追加された。ただしIE6は未対応。
このレスはたぶん大体あってる。
0173nobodyさん
2009/06/28(日) 22:09:18ID:???ブラウザの仕様はどうであれ、どんなコードでも対応できるように作っておくのはとても大切。
hiddenで文字コード判定用の文字列をpostしておくと良い。
0174nobodyさん
2009/06/29(月) 01:22:45ID:???0175nobodyさん
2009/07/05(日) 01:58:48ID:???恐らく 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);
0176nobodyさん
2009/07/05(日) 02:10:22ID:???そうじゃぁなければ use Encode しれ
0178nobodyさん
2009/07/26(日) 00:42:20ID:J3wl39Kv今日もネタもないのにageてやるからな!
 ̄ ̄∨ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
∧_∧ ∧_∧ age
(・∀・∩)(∩・∀・) age
(つ 丿 ( ⊂) age
( ヽノ ヽ/ ) age
し(_) (_)J
0179nobodyさん
2009/07/29(水) 22:19:43ID:???CGI(Perl)を使って外部のサイトからHTMLソースを取り込むにはどうしたら良いでしょう?
外部サイトのデータから統計を取って、データとして出力するようなCGIが書高と思ってます。
0181nobodyさん
2009/07/29(水) 22:25:45ID:???0182nobodyさん
2009/07/29(水) 22:46:06ID:???知らないなら、「わかりません」って言えよ
0185179
2009/07/30(木) 01:23:24ID:???ありがとうございます。
0186nobodyさん
2009/08/04(火) 17:31:46ID:opJYW1lj文字化けする文字をこのように変えたいのですが変換されません。
どのように書けばいいのでしょうか。
$a =~ s//高/g;
よろしくお願いします。
0187nobodyさん
2009/08/04(火) 18:22:15ID:???0188nobodyさん
2009/08/04(火) 18:46:13ID:Udgymmfyが文字化けするので高に変えたいってこと?
0189nobodyさん
2009/08/05(水) 08:42:09ID:57ai1vyR0190nobodyさん
2009/08/05(水) 10:00:37ID:2mkcb2/Uありがとうございます。
>>188
はい、そのようにしたいと考えております。
187さんのおっしゃる通りに、書いてるコードを確認したところEUCでしたので
sjisに変えてみたところ、うまくできました!
ここ数日、悩んでいたのですっきりしました。
187さん、188さん、ありがとうございました。
0191nobodyさん
2009/08/05(水) 20:48:29ID:???任意の文字で囲まれた
文字列をすべて抽出する方法がわかりません。
たとえば、abcabcabcといった文字列に対し
aとcで囲まれたすべての文字列を取得するには
どうすればいいのでしょうか?
この例だと
abc
abcabc
abcabcabc
abcabc
abc
が該当します。これらをすべて抽出したいのですが。
0192nobodyさん
2009/08/05(水) 21:27:00ID:???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;
}
0193191
2009/08/06(木) 09:27:03ID:???>>192さん ありがとうございました。
思っていたように動作しました。
続けての質問で申し訳ないのですが
アルファベットで構成されるランダムな文字列
CFGTARFEQZCAZVHNNNGZYAKLOPYL..(みたいな感じです)
から例えば、Aから始まり X,Y,Zを中に含まず XまたはYまたはZで終わる
文字列をすべて抽出するには
どのようにすればよいのでしょうか?
実際には単一のアルファベットの連続ではなく
ONETWOTHREEFOURFIVE..のように
単語が適当に連続しているものと想定して使用できる記述を
(ONEで始まりSIXを含まずTENで終わり のように)
提案していただけると助かります。
よろしくお願いします。
0194191
2009/08/06(木) 09:38:23ID:???単語はONE,TWO,THREE,FOUR,FIVE,SIX,SEVEN,EIGHT,NINE,TENが想定される
のように、あらかじめ分かっていて指定することができます。
0195nobodyさん
2009/08/06(木) 15:43:26ID:0zj+bmfk0196nobodyさん
2009/08/06(木) 23:46:37ID:???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);
};
}
0197nobodyさん
2009/08/06(木) 23:47:37ID:???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);
0198191
2009/08/07(金) 00:23:46ID:???動作検証し、勉強させていただきます。
複数のファイルから質問のようなことをしたくて
テキストエディタでの単純な正規表現での処理だと面倒なので
やったこともないプログラミングのようなことをを試みたのですが
単純なマッチングでは、オーバラップしているところが
検索から漏れて困ってました。
0199196
2009/08/07(金) 01:07:13ID:???終わりの条件を複数にするのを忘れてたけど、
$subを配列にしてループさせると、探索条件を複数にすることもできると思う。
0200nobodyさん
2009/08/07(金) 01:34:42ID:???是非わが社に(笑)
掲示板見てると出来る人そこそこいるのにperl経験者募集かけても全然こないのは
年寄りが多いのか…若くてもそこそこの地位になってるのか…
正規表現あんまり自信ないですくらいなら許せるが
リファレンスもOOPもわかりませんって人多くて最近疲れ気味だ(泣)
0202nobodyさん
2009/08/07(金) 10:28:18ID:wZBhH2760203nobodyさん
2009/08/08(土) 08:08:10ID:nShQ5pki$b = "str$astr";だと最初の「str」で途切れるし
$b = "str$a str";にすると空白はいっちゃうし
0204nobodyさん
2009/08/08(土) 08:38:19ID:???"str$a\str"
0205nobodyさん
2009/08/08(土) 09:58:31ID:???0206nobodyさん
2009/08/10(月) 13:15:14ID:LPa3QqaE0207nobodyさん
2009/08/13(木) 09:14:17ID:NeVAVZeH受け取ったデータまんま返したいんです
環境変数を使い分けるの面倒だし
0210nobodyさん
2009/08/14(金) 16:39:29ID:???$str = "euc or shift-jis or utf8";
if ( $strに"euc"と"shift-jis"という両方の文字を含んでいたら ) {
・・・
{
0211nobodyさん
2009/08/14(金) 17:03:04ID:???優先順じゃないから気をつけて
で、正規表現つかってね
0212nobodyさん
2009/08/14(金) 18:29:29ID:???実直に書けば
$str =~ /(^.*euc.*shift-jis.*$)|(^.*shift-jis.*euc.*$)/
かな
後々にも条件文が続くなら
my %hash = map{ $_ => 1} split ' or ', $str;
if($hash{'euc'} and $hash{'shift-jis'}){
}
elsif($hash{'utf8'}){
}
...
とかどうよ
0214nobodyさん
2009/08/15(土) 09:36:01ID:njfakeIMそれでもいいので教えてください
0216nobodyさん
2009/08/18(火) 18:06:40ID:RO5+3AJ6あれなんとか出来ないの?
0217nobodyさん
2009/08/18(火) 18:29:11ID:???0218nobodyさん
2009/08/18(火) 18:30:34ID:???0219nobodyさん
2009/08/18(火) 18:53:46ID:RO5+3AJ60220nobodyさん
2009/08/19(水) 23:25:05ID:???0221nobodyさん
2009/08/20(木) 02:33:32ID:???0222nobodyさん
2009/08/21(金) 21:25:25ID:OnG1WZEr$s =~ /(.)/;
for($i=4; $i>0; $i--) {
print "$1\n";
$i =~ /(.)/;
}
↑これ実行すると「0321」となるはずなのに「0000」になるんだけど何で?
正規表現処理した後にプリント使うと「4321」になるけど、どうしてもこのまま使いたいです
0223nobodyさん
2009/08/21(金) 21:34:13ID:???print "$i\n";
$i =~ /(.)/;
}
0224nobodyさん
2009/08/21(金) 21:42:18ID:OnG1WZEr0226nobodyさん
2009/08/21(金) 21:44:13ID:???0227nobodyさん
2009/08/21(金) 21:49:31ID:???多分ループごとに $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 なのな・・・ちょっと意味分からんわ
0228nobodyさん
2009/08/21(金) 22:33:56ID:???do{
$i =~ /(.)/;
print "$1\n";
$i = ($i-1) % 4;
}while($i > 0);
結果は出るけど、質問の意図が読めないからどうなんだろ。
0229nobodyさん
2009/08/21(金) 23:10:07ID:???for( my $i=4; $i>0; $i-- and print "$1\n" and $i =~ /(.)/ ) { }
0230nobodyさん
2009/08/22(土) 01:20:43ID:???$Nのスコープってどうなってんだ?
って質問なんじゃ?
0231nobodyさん
2009/08/22(土) 05:10:44ID:???$a = "[123][456][789]";
while($a =~ /[(.*?)]/){
print $1"\n";
}
123、456,789と表示したいです
一回ずつづらしてマッチさせられないですか?
0232nobodyさん
2009/08/22(土) 05:24:03ID:???1回ずつじゃないけど
$str = "[123][456][789];
@contents = $str =~ /[(.*?)]/g;
print "$_\n" foreach @contents;
0233nobodyさん
2009/08/22(土) 05:26:41ID:???正規表現もバグってるよ
$str = "[123][456][789]";
@contents = $str =~ /\[(.*?)\]/g;
print "$_\n" foreach @contents
0234nobodyさん
2009/08/22(土) 07:32:50ID:???my $s = "[123][456][789]";
while($s =~ /\G\[(.*?)\]/g){
print $1, "\n";
}
0235nobodyさん
2009/08/22(土) 07:41:35ID:???正規表現周りは奇妙だからなぁ。
たとえば、最後にマッチした正規表現を使う、空マッチを使うと期待通りに動く。
$1などの変数はマッチ直後に保存しとくのがベストだろうと思う。
my $s = 0;
$s =~ /(.)/;
for(my $i = 4; $i > 0; --$i){
print $1, "\n";
$i =~ //;
}
0237nobodyさん
2009/08/22(土) 09:07:20ID:???m//gで、前回マッチした直後からマッチングを行う。
my $s = "[123]456][789]";
こんなときに、処理を止める。
0239nobodyさん
2009/08/22(土) 09:48:08ID:???意味が分からん。
別に気に入らなければ、付けなきゃいいじゃん。
>>238
じゃあさ、>>231のシェバング行の -- が無くても同じ結果になるけど、
-- に意味があると思う?
0240nobodyさん
2009/08/22(土) 10:21:27ID:???正規表現で () 使った後に使える $n は、
正規表現使った時に my されると思った方が
いいかも知れません
0241nobodyさん
2009/08/22(土) 10:40:35ID:???$1の初期値が「0」ってことはないだろうし。
0242nobodyさん
2009/08/22(土) 11:10:48ID:???>>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は、一旦ここで見えなくなる
}
0243nobodyさん
2009/08/22(土) 12:04:28ID:???では、面白い例を。結果は0432。
my $s = 0;
$s =~ /(.)/;
foreach(reverse 1..4){
print $1, "\n";
/(.)/;
}
0245nobodyさん
2009/08/25(火) 18:13:21ID:???別に現状では何も問題が無いんですが、何の意味があるか良くわかりません。
if 文で変数が未定義だったら何をしているんでしょうか?
$stlist{$kumi}{$bangou}= [] if ! exists $stlist{$kumi}{$bangou};
0246nobodyさん
2009/08/25(火) 22:37:47ID:???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.
0247nobodyさん
2009/08/25(火) 22:54:19ID:???$stlist{kumi}{bango} ||= [];
で同じことできるんだけどな
0249nobodyさん
2009/08/26(水) 09:57:20ID:???意味はモヤッと解ってきたのですが「[]」 の使い方が解らないんです。
「()」では駄目なんですか?
0250nobodyさん
2009/08/26(水) 18:52:28ID:mCRAV2Yd0251nobodyさん
2009/08/26(水) 21:01:17ID:???() 配列
[] 配列のリファレンス
ここで
$hoge = ();
とすると、多分スカラーコンテキストで無名配列が評価されるので0が入る
$hoge = [];
だと配列のリファレンスが入るから、何も値が入ってない状態で
$hoge->[0]
とかやってもうまく動く
多分ね
0252nobodyさん
2009/08/27(木) 02:29:49ID:???my $hoge = [1, 2, 3, 4, 5];
my $huga = [6, 7, 8, 9];
という風に二つの配列へのリファレンスがあったとして、
この二つの配列を合わせた配列へのリファレンスを新しく作るには
my $kei = [ @{$hoge}, @{$huga} ];
以外に方法はありますか?
いろいろ試してみたんですが上手くいかなくて…。
0253nobodyさん
2009/08/27(木) 05:43:28ID:???regular expression
オレオレスクリプト以外に使用厳禁↓
http://search.cpan.org/dist/String-Scanf-2.1/lib/String/Scanf.pm
>>251
undefがはいるよぉぉぉぉぉぉ。
>>252
考えすぎるとハゲるぞ。
おめーら、クソスレより初心者スレ使えよ。
0254nobodyさん
2009/08/28(金) 10:14:29ID:???してるんだけど, 一緒に要求される 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
0256254
2009/08/28(金) 13:30:37ID:???それでですね...
ずらずら出るエラーメッセージを見ていたら, include 出来ずにエラー出してるのは
DBIXS.h とかだったので, cpan DBI してみたらビンゴ.
無事 DBD::DB2 のインストールに成功しました.
しょうもないオチですまんかった. 付き合ってくれた >>255 ありがとう.
0257nobodyさん
2009/08/31(月) 21:28:16ID:SNcF+RG0if ($r =~ /str/){exit;}
↑マッチしたら偽判定にするにはどうしたらいいの?
0258nobodyさん
2009/08/31(月) 21:28:57ID:SNcF+RG0$s="str"
if ($s =~ /str/){exit;}
0259nobodyさん
2009/08/31(月) 22:32:07ID:???0260nobodyさん
2009/09/01(火) 02:45:08ID:???0261nobodyさん
2009/09/04(金) 13:32:16ID:???if ($r !~ /str/){exit;}
if ( ! $r =~ /str/){exit;}
if (not $r =~ /str/){exit;}
unless($r =~ /str/){exit;}
すきなの使え。この条件ならunlessも!~もほとんど差がないと思うぞ。
0262nobodyさん
2009/09/04(金) 20:00:55ID:???どうすればいいでしょうか?戻るボタンや戻るボタンの過去の履歴を
押しても、最後にいたページにリダイレクトされるようにしたいんですが、
できるでしょうか?
0263nobodyさん
2009/09/04(金) 20:22:09ID:???つか毎回ログつくってしまうかクッキーで管理すればおk
0264nobodyさん
2009/09/05(土) 04:55:23ID:UpeEOLWycgi以外で
0265nobodyさん
2009/09/05(土) 06:08:28ID:???ていうかwperl知らんのけ
0266nobodyさん
2009/09/05(土) 06:30:25ID:UpeEOLWyありがとう
0268nobodyさん
2009/09/05(土) 12:52:13ID:???0269nobodyさん
2009/09/05(土) 14:46:03ID:???ありがとうございます。さっそくググって勉強中ですが、cakeやらsymfonyやら
あるようですが、私の用途ですと、どれを使っても問題ないでしょうか?
>>263
リダイレクト関連でheaderを勉強して、キャッシュが残らないように設定して、途中で
「戻る」と、問題がテスト開始前に設定した問題数分最初から出題されるように
なったので(同時にセッションも新規セッション)、20問なら20問後戻りせずに解かせる
という最低限やりたいことは、これで対処できるようになったかと思います。
>>262で質問した内容とはまだ少し違いますが。ありがとうございます。
0270nobodyさん
2009/09/06(日) 07:34:15ID:???cakeとかPHPだろ。とりあえずCatalyst使っとけ。他にもあるがCatalystは少し枯れてるし情報も豊富。
中規模以のアプリケーションを楽しく書きたいならフレームワーク一択。
0271nobodyさん
2009/09/06(日) 10:19:40ID:???まずはそこをはっきりさせた上で他人に勧めてくれないか。
0274nobodyさん
2009/09/09(水) 16:52:27ID:???print $value;
}
これって駄目なの?
0275nobodyさん
2009/09/09(水) 17:52:15ID:???foreach $value (keys %{$DATA{$unko}}){
print $value;
}
0276nobodyさん
2009/09/09(水) 17:57:47ID:???と2回言ってるようなもの
簡単にいえば無駄な書き方
0278nobodyさん
2009/09/09(水) 20:53:19ID:???1. $DATA{$unko} はハッシュの要素であり、その例の場合は値としてハッシュリファレンスを持っている。
# その点は print $DATA{$unko} してみるとわかる。
# 恐らく "HASH(0xdeadbeef)" 的なものが表示される。
2. keys() は引数としてハッシュそのものしか取らず、従ってハッシュの要素は受付けない。
3. ハッシュリファレンスをハッシュとして扱うためにはデリファレンスを行う必要がある。
4. ハッシュとして明示的にデリファレンスするには、リファレンスを "%{ }" でくくる。
perlreftut, perlref 及び perllol の各 perldoc も参照してください。
>>274
%DATA{$unko} # これはありがちな文法ミス
%DATA {$unko} # <- こうパースされる
0279nobodyさん
2009/09/09(水) 23:42:35ID:???そのりくつはおかしい
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
ほら、明らかに違うもの指してるでしょ
0280nobodyさん
2009/09/10(木) 12:07:31ID:jH+1ZMcmデッドロックが発生してしまいます。
これを検知して作業を続行するにあたり、evalでexecuteを見張る以外に
何かいい方法はありますか?
0281nobodyさん
2009/09/10(木) 12:33:59ID:???0282nobodyさん
2009/09/10(木) 12:41:38ID:???0283sage
2009/09/10(木) 15:42:38ID:jH+1ZMcmええ、その通りなんですがその方法が解らず・・・
>>281
DBI 排他ロックのキーワードで解決できそうです
ありがとうございます。
0284nobodyさん
2009/09/11(金) 17:02:10ID:???>>278
なんとなくですが解りました。ありがとうございます。
perldocを読破しないと似た問題には対応出来ないですね・・・
ハッシュは複雑すぎる
0285nobodyさん
2009/09/11(金) 23:11:01ID:???ボタンを更新後数秒間物理的に押せないようにしたいと思い
色々調べてみましたがいい案が浮かびませんでした
何かよい案があればお力添えを戴けませんでしょうか
0286nobodyさん
2009/09/11(金) 23:16:11ID:???0287nobodyさん
2009/09/11(金) 23:28:49ID:???即レス有難うございます 書き込みながらググってますがどうもピンときません
超初心者のレベルにも達してないということですね…吊ってきます
0288nobodyさん
2009/09/12(土) 03:01:13ID:???html disabled とほほ
送信ボタンをdisabledにして数秒スリープして元に戻す関数を送信ボタンクリックボタンにトリガーする感じ?
ただ直接URL叩かれてたら無意味
0289nobodyさん
2009/09/12(土) 10:46:01ID:???時刻とIPアドレスのハッシュを一定時間保持しといて
マッチしたらはじくとかでもいいかと
0290285
2009/09/12(土) 11:10:28ID:???本当にドがつくレベルなので出来るかどうかわかりませんが
もう少しがんばってみますね
0291285
2009/09/12(土) 12:25:36ID:???元に戻すというのが理解できず詰まってる状態です
もう少し色々試してみますね
0292nobodyさん
2009/09/15(火) 03:11:36ID:m9vb+1wpループ毎に別のハンドルに切り替えたいのだけれど
0293nobodyさん
2009/09/15(火) 10:52:12ID:???use IO::File;
my @fhs = map { IO::File->new($_, "r") } qw(file1 file2 file3 ......);
0294nobodyさん
2009/09/15(火) 11:43:17ID:???ファイルハンドルはベアワードではなくレキシカル変数に入れろ
と啓蒙する動きが見られるようになったけど、
そうすることによって出来ることも増えるのだなぁと今思った。
0295nobodyさん
2009/09/23(水) 18:54:15ID:???1 9 16 20 21 43 5
1 5 15 31 36 38 13
最近、コード打ってなくて、頭が回らんので助けてくだあい
1回目=1行 のデータがたくさんあって
この中から、各数字の組み合わせの頻度を出したいのですがループの回し方が思い浮かばず
2-9の組み合わせ○回
2-10の組み合わせ○回…というように。
上記のようなファイルが用意してあって
それを1line読み込んで、ループに回す、と考えているのですが
スマートなループを教えてください。
0297nobodyさん
2009/09/23(水) 22:41:30ID:???説明しやすいように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回
0298nobodyさん
2009/09/23(水) 23:47:33ID:???把握した
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;
0299nobodyさん
2009/09/24(木) 23:09:26ID:BEttX1dB0300nobodyさん
2009/09/25(金) 01:20:19ID:???入ってなけりゃSSHかなんかでユーザ領域インストールすりゃいいんじゃね
0301nobodyさん
2009/09/27(日) 16:08:13ID:dRLFhFfi$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と
認識してるんだけどこれ間違ってますか?
0302nobodyさん
2009/09/27(日) 16:34:12ID:???0303nobodyさん
2009/09/27(日) 18:33:21ID:???0304nobodyさん
2009/09/28(月) 00:39:43ID:???0305301
2009/09/28(月) 08:23:50ID:ae4P5TMoクッキーが必要でないだろう初回書き込みのポスト(書き込み確認画面へ移動)
が通らないんですよね・・・
0306nobodyさん
2009/09/28(月) 09:32:00ID:???専ブラとかもそのせいで書けなくなって、一時期話題になってるから
探せばすぐにわかると思う
0307301
2009/09/28(月) 09:48:59ID:???またちょっと自力で奮闘してみます
お騒がせしました。
0308nobodyさん
2009/09/30(水) 10:06:13ID:???0309nakacyan
2009/10/01(木) 09:38:30ID: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
0310nakacyan
2009/10/01(木) 09:40:29ID:Q77nXvDi続きです
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
0313nobodyさん
2009/10/01(木) 12:16:35ID:???ム板の宿題スレ逝けよ。webprogじゃねーし。
つか単純にsec*1000でmsの精度にすればいいだけの話に見えるけどな。
0314nobodyさん
2009/10/01(木) 12:26:41ID:???0315nobodyさん
2009/10/01(木) 13:49:13ID:???sub f{local$_=$_[0];/(\d{1,2}):(\d{1,2}):(\d{1,2})\.(\d{1,3})/?($1*3600000)+($2*60000)+($3*1000)+$4:undef}
0316nobodyさん
2009/10/01(木) 19:01:07ID:???0317nobodyさん
2009/10/01(木) 21:32:35ID:???勉強中の自分にちょうどよい題材なので作った。
>>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;
0318nobodyさん
2009/10/01(木) 21:33:21ID:???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;
0319nobodyさん
2009/10/01(木) 21:34:59ID:???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;
}
0320nobodyさん
2009/10/01(木) 21:40:23ID:???だからこそ課題になってるってのになぁ・・・
最近の学生はホントゆとり過ぎる
0321nobodyさん
2009/10/01(木) 22:24:45ID:???実験として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 $_;
}
}
0322nobodyさん
2009/10/01(木) 22:26:10ID:???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>;にすると動くみたいです
0325nobodyさん
2009/10/02(金) 23:48:23ID:fo52aLk6今更なんだがそのSSHとやらを誰か詳しく教えてくれ
0326nobodyさん
2009/10/03(土) 00:12:36ID:???0327nobodyさん
2009/10/03(土) 05:27:39ID:???嫁。
http://ja.wikipedia.org/wiki/Secure_Shell
0328nobodyさん
2009/10/05(月) 03:02:35ID:???map { eval '$' . $_ . ' = $arg{' . $_ . '}' } qw(a b c);
evalをループの中に入れるのは効率が悪いと
あちこちに書いてあったのでevalを外に出したいのですが、
以下のように記述したところ、上手く動いてくれません。
eval q|map { '$' . $_ . ' = $arg{' . $_ . '}' } qw(a b c)|;
どういう風に記述すれば動くようになるでしょうか。
よろしくお願いします。
0329nobodyさん
2009/10/05(月) 05:08:20ID:???$b = $arg{b};
$c = $arg{c};
0330nobodyさん
2009/10/05(月) 07:59:45ID:???こんなんとかはどう?
eval join q{}, map "\$$_ = \$arg{$_};", qw(a b c);
0332nobodyさん
2009/10/05(月) 21:32:31ID:???ホームページを取得するコードを書いたのですが、日本語部分が文字化けします。
ググって、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標準コマンドプロンプト
よろしく、お願いします。
0333nobodyさん
2009/10/05(月) 23:18:28ID:???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;
0334nobodyさん
2009/10/05(月) 23:45:50ID:???332です。さっそくのご返答、ありがとうございます。
Perlの内部表現、encode、decodeについて、まだ詳しく理解していないので、これから勉強していきます。
サンプルで書いていただいたコード、見事に文字化けなしで動作しました。
2chに書き込むのは、生まれてはじめてだったのですけど、的確なアドバイスをいただいて感激しました。
0335nobodyさん
2009/10/06(火) 16:20:44ID:o5fGVlDsベストは>>329の回答。
どうしてもなら
map { ${ $_ } = $arg{ $_ } } qw(a b c);
0336nobodyさん
2009/10/06(火) 16:30:58ID:???そこを指摘してあげなよw
0337nobodyさん
2009/10/06(火) 19:46:56ID:???シンボリックリファレンスを使ったやり方ですよね。
それはまず最初に試したのですが、動いてくれませんでした。
no strict 'refs' を使ってもダメでした。
理想は>>329さんのやり方なのだとは思うのですが、
実際は配列の中に入っている変数が10数個ある状態ですので
どうしても冗長になってしまいます。
そこをどうにかできればと思ったのですが…。
0338nobodyさん
2009/10/06(火) 20:07:37ID:???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";
}
掟破りなコードだわな。
普通は使わないので、プログラムを練り直してください。
0340nobodyさん
2009/10/07(水) 14:16:38ID:DCSJgtVa0341nobodyさん
2009/10/07(水) 19:56:47ID:OXEUclFZこのファイルが開けないのですが、どーすれば良いのでしょうか。
0342nobodyさん
2009/10/07(水) 22:42:55ID:4Cj4Mzn7開けるよ?
何をどうしたいのか、試した操作は何か書いてください。
0343nobodyさん
2009/10/08(木) 00:00:06ID:???ありがとうございます、動きました…が、やっぱりデータの扱いに問題ありますよね。
元のプログラムでは上のソースを使って変数格納したものが
合計数百カ所くらい使われていて、なかなか修正に踏み切れなかったのですが
この機会に手を入れてみます。重ねてありがとうございました。
0344nobodyさん
2009/10/08(木) 12:48:43ID:OiR61371中身を編集したいのですが
fedora9付属しているGNOMEテキスト・エディタで開こうとして失敗します。
0345nobodyさん
2009/10/08(木) 13:51:45ID:???euc-jpで書かれているっぽいんだけど、
文字コードの認識がうまく行かないのが悪そう
perlでeuc-jpで読んで
utf-8におき替えてから編集すれば良くね?
0347nobodyさん
2009/10/08(木) 16:46:58ID:pWiOQ0nrどうすればperl上で編集できるのでしょうか?
無知ですみません。
0348nobodyさん
2009/10/08(木) 17:21:14ID:???こんなんでどう?
-- 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というファイルができる。
0349nobodyさん
2009/10/08(木) 22:33:48ID:???文字化けするだけ
多分落とすときに壊れたか、パーミッションの問題じゃないか
0350nobodyさん
2009/10/09(金) 00:04:50ID:???文字化けすら許さないらしい。
0351341
2009/10/10(土) 17:39:23ID:7InkIPwkレスありがとうございます。
言われた通りにやったのです、やはり開けませんでした。
(プログラムはエラーなく実行できました。)
>>349-350
再度ダウンロードし、パーミッションも問題ないはずですが開けませんでした。
OSはfedora9です。
0352nobodyさん
2009/10/10(土) 21:07:02ID:???全くPerl関係なくね?
とりあえずviで開いてみたら?
0353nobodyさん
2009/10/11(日) 00:10:19ID:X0n6wGB10354nobodyさん
2009/10/11(日) 01:18:56ID:???while($hoge){
…
} else {
…
}
的な使い方を想定してるなら出来ない
というかどういう状況でこんな処理が必要になるのか想像もつかない
0355nobodyさん
2009/10/11(日) 01:21:55ID:???my %map = ( @cols => @list );
ってな感じでハッシュに一行代入するやり方があったはずなんですが、
やり方を忘れてしまいまして、本当にくだ質ですが、お答え頂けると幸いです。
0356nobodyさん
2009/10/11(日) 01:28:52ID:???こんな感じ?
0358nobodyさん
2009/10/11(日) 01:35:58ID:???my %hash = ($cols[0], $list[0]);
$hash{$cols[1]} = $list[1];
多分このどっちかのことだろ?
0359355
2009/10/11(日) 01:39:42ID:???スライス使うだけですた。
二行にはなりますが、以下で出来ますた。
my %map = ();
@map{@cols} = @list;
0360nobodyさん
2009/10/11(日) 05:54:06ID:X0n6wGB10361nobodyさん
2009/10/11(日) 10:25:57ID:???0362nobodyさん
2009/10/11(日) 11:41:59ID:???肯定の戻り読みを使うとか
my $ignore_bytes = 6
my $search_word = 'foo';
my $str = 'foo--foo--';
$str =~ /(?<=^.{$ignore_bytes}).*$search_word/;
0363nobodyさん
2009/10/12(月) 03:34:02ID:???可読性を考えるなら >>356 を使ったほうがいいと思いますよ。
% で宣言してるのに @ で使うとか、間違いの元だと思うんで。
「動けばいいの!」 って言うんならそれでいいですが・・・
0364nobodyさん
2009/10/12(月) 07:37:11ID:???356でも>>359でも間違える余地なんて無い。
>>359のスライス間違える奴は356でも間違える。
それだったら丁寧にfor使え(for修飾子では無く)
0365nobodyさん
2009/10/12(月) 07:54:23ID:???底辺に配慮してたらキリが無いわな
0366nobodyさん
2009/10/12(月) 10:32:01ID:???0367355
2009/10/12(月) 17:22:45ID:???@とか%はキーワードとして、見ないもんですよ。
どちらかというと[]なのか、{}なのかで型が決まってきますです。
そもそも、生の配列やハッシュを使うとデータ構造に制限しか生みませんです。
0368nobodyさん
2009/10/12(月) 22:45:13ID:???0369nobodyさん
2009/10/12(月) 23:36:14ID:???0370nobodyさん
2009/10/13(火) 00:26:07ID:???0371nobodyさん
2009/10/13(火) 10:43:38ID:???0372nobodyさん
2009/10/13(火) 13:35:24ID:???オブジェクトにして扱えってこと?
Perlだったら、List::MoreUtilsのzip/meshで十分だと思うけどなぁ。
そこまで拘りたい場面なら、がっつりRuby使うかな。
0373nobodyさん
2009/10/13(火) 17:20:52ID:???データはレファレンスで表現するのを基本にするってことでしょ
0374nobodyさん
2009/10/13(火) 17:38:12ID:???中途半端にやるからソースがごちゃごちゃになるのに・・・
0375nobodyさん
2009/10/13(火) 20:16:59ID:???0376nobodyさん
2009/10/13(火) 21:45:13ID:???0377nobodyさん
2009/10/13(火) 23:05:10ID:???配列に生配列は格納できない。
こっちのがよっぽど制限。
0379nobodyさん
2009/10/13(火) 23:39:19ID:???0380nobodyさん
2009/10/13(火) 23:41:11ID:???脳内定義の「生の配列」が何を指し示すのか解らんが、
普通のARRAYの事ならば自分がスライス(>>359)で思いっ切り
使ってる。ハッシュにしても。要するに>>363への反論になってない。
何か別物を指すならそれを説明しなきゃ、伝わる訳無い。
「生ハッシュ」ってのも何だそれ?
普通のHASHの事ならforで回せるぞ?望み通りの結果にはならんが。
perl -Mstrict -Mwarnings -le 'my %h = 1..10 ; for ( %h ){ print $_ }'
ついでに、
>>363はこの程度の初期化で「可読性」って単語を持ち出す
のは止めといた方が良い(しかも可読性を損いがちなmapに対して)。
こっちが赤面する。
0381355
2009/10/13(火) 23:54:32ID:???実際のコードではこうなってますけどね。
@{ $entity_map }{ @$col_list } = @$result_list;
生の配列/ハッシュってのは、『インタプリタが変数展開するもの』ですね。
my @arr1 = (1, 2, 3);
my @arr2 = (4, 5, 6);
my @array = ( @arr1, @arr2 );
的な間違いを仕様で定めて阻止する方が有意義な制限だとは思いませんか?
0382355
2009/10/14(水) 00:07:22ID:???> 普通のHASHの事ならforで回せるぞ?望み通りの結果にはならんが。
> perl -Mstrict -Mwarnings -le 'my %h = 1..10 ; for ( %h ){ print $_ }'
ハッシュ自体を回すのでなく、
for my %map ( @list ) {}
これが出来ないという意味ですね。
0383372
2009/10/14(水) 00:43:00ID:???なんだこれ。
> 的な間違いを仕様で定めて阻止する方が有意義な制限だとは思いませんか?
フラットにするのはPerlの仕様なんだから、Larryにでも提言しろよ。
アホらし。
0386nobodyさん
2009/10/14(水) 00:59:59ID:???ここは超初心者用なんだぜ?
たとえば
not 生 $test = { 'a' => 1, 'b' => 2};
生 %test = ( 'a' => 1, 'b' => 2);
みたいな書き方でお願いします。
0388nobodyさん
2009/10/14(水) 01:06:04ID:???0389nobodyさん
2009/10/14(水) 01:25:13ID:???0390nobodyさん
2009/10/14(水) 01:25:29ID:???0391nobodyさん
2009/10/14(水) 01:59:07ID:???じゃなきゃ 超初心者用スレ に住んでません orz
0392380
2009/10/14(水) 02:09:57ID:???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に関しては、、、「超初心者」じゃなさそうだから書く。
アホかと。
後出しもたいがいにしろ。
手前のくだらん妄想に付き合わせんじゃねえよ、ボケ。
0393nobodyさん
2009/10/14(水) 07:58:14ID:???0394nobodyさん
2009/10/14(水) 09:18:29ID:???0395nobodyさん
2009/10/14(水) 10:32:56ID:???ただそれだけなんですか?
テストプログラム作りたいだけなのに、
仰々しく組みたくないから、今のスタイル
でいいや
0396nobodyさん
2009/10/14(水) 14:16:17ID:???こういう勉強を嫌う怠惰な姿勢が、
保守性の悪いコードを生むんだろうね
0397nobodyさん
2009/10/14(水) 18:46:52ID:???0398nobodyさん
2009/10/14(水) 20:27:19ID:???そのデータをさらにラップする必要が出てきたら、
結局リファレンスにするんだから最初からやっとけっつぅ話だ。
0399nobodyさん
2009/10/14(水) 20:56:13ID:???>保守性の悪いコードを生むんだろうね
これが妄想だって言ってんだけど…。
当ってるのかも知れんがね。
自分の心の中で思ってりゃ良い事でしょ?
0400nobodyさん
2009/10/14(水) 20:59:03ID:???これのデータ構造とかを考えた上で保守性万全だと思うなら病院に行け。
適材適所でリファレンスは使えば良いだけだ。
0401nobodyさん
2009/10/15(木) 20:28:53ID:???他人が利用する可能性が少しでもあればリファレンスかな。
正直、規模によるとしか言えんし、普段から使っておいても損でもない。
日曜プログラマや趣味グラマには不要かw
0402nobodyさん
2009/10/15(木) 21:15:52ID:???0404nobodyさん
2009/10/16(金) 22:50:03ID:???0405nobodyさん
2009/10/21(水) 01:54:57ID:???データは 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);
とやっています。
0406nobodyさん
2009/10/21(水) 02:01:01ID:???0407nobodyさん
2009/10/21(水) 05:05:56ID:???残念!だったな。
俺は、4代前から、東京生まれの東京育ちの、正真正銘の日本人だ。
お前こそ、朝鮮で生まれて、朝鮮で育った、正真正銘のチョンだろうが。
0408nobodyさん
2009/10/21(水) 07:18:11ID:???こんなんでどうでしょうか?
my ($tmpZIP, $tmpADDRESS, $tmpTEL, $tmpFAX) = ( split(/\t/, $line), (q{})x4 );
0409nobodyさん
2009/10/21(水) 14:00:25ID:???とりあえず、この方法を使わせていただきます m(_ _)m
0410nobodyさん
2009/10/21(水) 14:01:45ID:???(split(/\t/, $line), @nullarray);
もアリかな?
試してないけどw
0411dvKqigko
2009/10/23(金) 01:22:05ID:???0412nobodyさん
2009/10/23(金) 01:31:01ID:???もう遅いかもしれんけどこんな感じでどうよ
my ($tmpZIP, $tmpADDRESS, $tmpTEL, $tmpFAX) = map{defined $_ ? $_ : ''} (split(/\t/, $line))[0..4];
0413rDiWXwyPC
2009/10/23(金) 22:37:05ID:???0414nobodyさん
2009/10/25(日) 12:37:08ID:???ディスパッチャーとは何なんでしょうか?
0417nobodyさん
2009/10/25(日) 14:06:46ID:???0418nobodyさん
2009/10/25(日) 16:54:48ID:???'a' => 'AAction',
'b' => 'BAction',
};
BEGIN {
require $setting->{ $hoge };
$setting->{ $hoge }->new();
}
※$hogeにはあらかじめ規定した、処理の分岐条件が格納されている。
主な部分はこれだけで実現できる。
new以外で処理を行いたいのであれば、サブルーチン名も設定に格納すれば吉。
フレームワークを作りたいのであれば、設定をYAML等に逃がせばよいかと。
0419nobodyさん
2009/10/26(月) 02:45:50ID:4VfuwmZ6マッチさせる対象を
テスト1:10点 テスト2:20点 テスト3:25点 テスト4:20点
にした時テスト3の点数を取り出したいんだ。
テストXの値は不定の文字列なので、
m/\D+\d+\D+\d+\D+(\d+)/;
こう書いたのだけれど$1にはテスト3の点数に加えて4の点数もくっ付いてきちゃうんだ。
何かいい書き方ありませんか?
0420nobodyさん
2009/10/26(月) 02:47:28ID:4VfuwmZ60421nobodyさん
2009/10/26(月) 03:18:05ID:???m/\D+\d+\D+\d+\D+(\d+)/; で問題なく動きました。
0422nobodyさん
2009/10/26(月) 23:59:44ID:???それホントに動いてる?
"テスト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
0423nobodyさん
2009/10/27(火) 05:25:43ID:???$delimitor1, $delimitor2 が浮いてるな
0424nobodyさん
2009/10/27(火) 06:07:08ID:???sub parseTestData2($){
return {split(/:|:|\s/,$_[0])};
}
機能はほぼ一緒のはずだ
0426nobodyさん
2009/11/02(月) 17:05:20ID:???どういったものなのでしょうか?
0427nobodyさん
2009/11/03(火) 05:14:37ID:???質問についてはトランザクションについて調べれば後は分かるだろ
0429nobodyさん
2009/11/08(日) 11:29:12ID:OaYz9VK0↑
recv関数は受信失敗したとき未定義ち返すはずなのに
ループ抜けないのはなぜ?
0430nobodyさん
2009/11/08(日) 11:56:56ID:???ていうか本当に未定義値返ってる? 単発で実行したらどうなる?
0431nobodyさん
2009/11/08(日) 14:38:16ID:???0432nobodyさん
2009/11/08(日) 19:36:21ID:???どうも腑に落ちないがこれで事故解決と
while(recv(S,$r,4089,0) && $r){
0433nobodyさん
2009/11/09(月) 16:34:15ID:???0434nobodyさん
2009/11/09(月) 22:11:31ID:???但し、ans<=100
を満たすansを昇順に並べるというプログラムはどう組めばいいのでしょうか
0435nobodyさん
2009/11/09(月) 22:28:03ID:???昇順の並べ方がわからんのか?
perl自体がわからんのか?
0436nobodyさん
2009/11/09(月) 23:09:55ID:???正しい質問の仕方は
異なる一つ以上の素数の和で成り立ち100以下という条件を満たす整数の求め方なんかお前らに分からんだろ?
悔しかったら明日までに解いてみろよ屑ども。
う〜ん唐突だな
0437436
2009/11/09(月) 23:14:53ID:???http://pc11.2ch.net/test/read.cgi/php/1158647441/l50
0439nobodyさん
2009/11/10(火) 11:02:51ID:???0440nobodyさん
2009/11/10(火) 23:44:02ID:???組合せで強引に解いてみた。
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";
}
0441nobodyさん
2009/11/10(火) 23:44:48ID:???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;
}
}
0442nobodyさん
2009/11/11(水) 02:32:45ID:???俺も書いてみた。
素数を探すアルゴリズムを書くのがめんどくさかったので
ウェブからコピペしたのは内緒だ。
(上の人のはよくわかんなかったし)
#!/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{$_};}
0443nobodyさん
2009/11/11(水) 12:07:52ID:???総当りで調べているので、完全な証明にもなっていると思う。
汎用性を持たせて、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;
0444nobodyさん
2009/11/11(水) 12:09:50ID:???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と同じ。
0445nobodyさん
2009/11/12(木) 08:40:06ID:???MXレコードを引いて、宛先のメールサーバーに直接メールを送るモジュールはないでしょうか?
レンタルサーバーで使いたいので、pure perlでお願いします。
0446nobodyさん
2009/11/13(金) 12:13:36ID:???0448nobodyさん
2009/11/21(土) 23:38:15ID:twpezRr5プラグイン設定で追加しようとしても灰色になって選択できません。
0450nobodyさん
2009/11/23(月) 22:45:22ID:g+VEp3/W「exit」を入れています。
sub a { }
exit;
sub b { }
これをライブラリとして使用する場合、別のcgiから呼び出すと、
途中で終了してしまいます。
どのように動作を区切っておけばよいのでしょうか?
0451nobodyさん
2009/11/24(火) 01:28:07ID:???まったく何を言ってるのか分かりませんが、
exit;
の行を消せば良いんじゃないでしょうか
サブルーチンを使うとき、途中で終了する目的はなんでしょうか?
そもそも、exit以降にサブルーチン定義しかなかったら、
exitが有っても無くても動作は変わらないような気がするのですが。
0453nobodyさん
2009/11/24(火) 10:33:29ID:???初心者で済みません、基本が分かってないのだと思います。
サブルーチン一つに変えて質問します。
例えば上から下に流れていって、
コード1・・・・
& a;
コード2・・・・
sub a{ }
コード2の部分で終わりたい場合に、
exit;がなかったら最後まで実行するのではと思うのですが?
0454nobodyさん
2009/11/24(火) 10:54:55ID:???ライブラリは基本的には関数定義群
自分が何をやっているのか分からなければ、関数化できないような余計な処理をサブルーチンの外に書いてはいけない
関数は定義しただけでは実行されないため、exitはいらない
多分main.plを流用しようとしたから余計な処理が入ってるんだろうが、それなら関数のみ抽出したものを新たに作る必要あり
それから.pl形式のライブラリは時代遅れ
パッケージ(.pm)の作り方&使い方を学ぶべし
0456nobodyさん
2009/11/24(火) 22:40:50ID:???0457nobodyさん
2009/11/25(水) 00:02:19ID:4vaBixa80458nobodyさん
2009/11/25(水) 04:47:50ID:???sub a{}を"実行する"っていうのはどういう意味ですか?
サブルーチンが定義されると何か困ることでもあるんですか?
なんなんですか?
0459453
2009/11/25(水) 11:53:02ID:???ちょっと勘違いしておりました。
0460nobodyさん
2009/11/25(水) 12:16:55ID:???全てはpackage mainのグローバルスコープで命令が動いてしまうperlが悪いんや
でもそのおかげでワンライナー美味しいです
0461nobodyさん
2009/11/25(水) 12:35:19ID:???穴が開くこともあるから
0462453
2009/11/25(水) 12:52:24ID:???一つでいいですので例をお願いします。
0463nobodyさん
2009/11/25(水) 13:14:26ID:???どんなライブラリかは知らないけど、コンストラクタを作っているなら、パッケージ内の変数に外から直接アクセスすることで予期せぬ動作を招くことがある
0464nobodyさん
2009/11/25(水) 14:47:15ID:???0465nobodyさん
2009/11/25(水) 17:11:08ID:???Exporterを使う伝統的なライブラリも、
あれはあれでけっこう良いよね。
サザエさん的な良さがある気がする。
のんびり和むっていうか。
0466nobodyさん
2009/11/25(水) 21:40:04ID:???そもそもオブジェクト指向を理解してたら、あんなクソレスは付けられん
0467nobodyさん
2009/11/25(水) 21:50:52ID:???0468nobodyさん
2009/11/26(木) 15:00:47ID:???こういった物を作るにはどの言語を使うのが最適なのでしょうか?
ケースバイケースとか○○ならxxとか自分の知ってる言語が最強とか
よく分からないので、具体的な目的をあげました
もしかすると結論は「何でもいい」のかもしれませんが
□□ならこういった点が良いというのを教えて下さい
制作者
ttp://laggard.maxs.jp/ms_tactics.htm
稼働例
ttp://2ch.guda-guda.net/cgi-bin/mst/
0469nobodyさん
2009/11/26(木) 15:08:24ID:???スレ違い。
△▲ WebProg 初心者の質問 Part21 ▼▽
http://pc11.2ch.net/test/read.cgi/php/1257701535/
このあたりで聞いてくれ。
0471nobodyさん
2009/11/26(木) 18:01:55ID:???上記「Content-type」の頭文字は大文字じゃないとダメなんでしょうか?
0472nobodyさん
2009/11/26(木) 18:05:27ID:???0474nobodyさん
2009/12/02(水) 13:12:52ID:???オライリーの初めてのPerlはレベルが高いでしょうか?
お薦めの入門書があったらお願いします
0476nobodyさん
2009/12/04(金) 13:50:17ID:???C++、Python辺りがかけるならいきなりラクダに行って
大丈夫だと思う。perldoc公開されてるから軽く読んでみ。
0477nobodyさん
2009/12/05(土) 00:52:22ID:B4BYeir+ラクダ本から「すぐ分かるオブジェクト指向Perl」へ進むのが
現状ではベストだと思う
0478nobodyさん
2009/12/06(日) 08:28:13ID:???その間に「入門Git」とかも買ってプロジェクト管理にも
慣れておくといい。
0479nobodyさん
2009/12/06(日) 11:02:28ID:???0480nobodyさん
2009/12/15(火) 02:38:41ID:???そのまま記してもエラーは出なかったのですが、大丈夫なのか心配に。。。
0481nobodyさん
2009/12/15(火) 02:54:10ID:???ただ、ヒアドキュメントはソースが汚くなりやすいので、外部の HTML を読み込んで出力させたほうがいいかなと思う。
0482480
2009/12/15(火) 04:07:33ID:???そのままで大丈夫でしたか
ありがとうございました
外部から読み込むというのは、元ファイルで使用する変数も書いたhmtlを記述したファイルを作成して、
適当に変数に代入して分割、適所に読み込んではめ込む感じで良いんでしょうか?
(配布物をいじるだけという程度ですので的外れなことを言ってそうですが
0483nobodyさん
2009/12/15(火) 08:45:12ID:???テンプレートエンジンがいくつも開発されてる
0485nobodyさん
2009/12/18(金) 22:53:46ID: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
よろしくお願いします。
0486nobodyさん
2009/12/18(金) 23:03:48ID:???0487nobodyさん
2009/12/18(金) 23:42:19ID:???助かりました。
0488485
2009/12/18(金) 23:43:08ID:???0489nobodyさん
2009/12/29(火) 07:31:09ID:???ディスクI/Oは時間を含めいろいろとリソースを食うので、
速度がクリティカルになる場面や頻繁にI/Oがある場面では
ヒアドキュメントの方が良い。
まあこれはHTMLのテンプレートみたいだから外部ファイルの方がいいだろうな。
1アクセス1ディスクアクセスは大した負荷じゃないし、テンプレートはファイルに
分けた方がモダン。
0490nobodyさん
2009/12/29(火) 21:37:25ID:???> 速度がクリティカルになる場面や頻繁にI/Oがある場面では
> ヒアドキュメントの方が良い
cache すればよくね
0491nobodyさん
2009/12/30(水) 01:00:40ID:MRCq7PuI0492nobodyさん
2009/12/31(木) 06:31:42ID:???0493nobodyさん
2009/12/31(木) 08:05:41ID:???短けりゃコード埋め込みでもいいと思うし(ファイルにするとかえって
可読性が落ちることがある)、何百行とかやたら長いのならファイルに
入れてそれこそキャッシュしてやればいいと思う。
0494nobodyさん
2009/12/31(木) 18:54:26ID:???CGIで、srandを使用せず(勝手に呼び出される物だけで)にrandを使用していた場合、
srandが呼び出されるのはいつになりますか?
複数ファイルに別れていて、複数のクライアントからアクセスした場合、いつ初期化が行われるかが知りたいのです。
宜しくお願いします。
0495nobodyさん
2009/12/31(木) 22:44:41ID:???0496nobodyさん
2009/12/31(木) 22:55:44ID:???よろしくおねがいします。
0497nobodyさん
2010/01/01(金) 17:23:01ID:???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)
0499nobodyさん
2010/01/01(金) 19:12:18ID:???PL_srand_calledをチェックして種を初期化するルーチンが入ってる
つまり最初にrandを呼んだ時点でsrandが呼ばれる
ではrandはいつ呼ばれるのか?
それはあんたにしか分からんよ
0500nobodyさん
2010/01/01(金) 21:35:42ID:???ありがとうございます。
ソース単位で最初に呼ばれた時に初期化されるようですね。
もう少し勉強してみようと思います。
0501nobodyさん
2010/01/03(日) 08:19:35ID:???srandは過去の遺物だから、今はrandは何も考えずに純粋に
擬似乱数発生器として使って問題ない。
つーかソースなんか読まなくても普通にperldoc -f randすりゃ
いいだけだと思うが。マニュアル読むよりソース読む方が速いとか
どんだけだよ。
0502nobodyさん
2010/01/03(日) 17:40:19ID:???0503nobodyさん
2010/01/04(月) 05:20:30ID:???テストスクリプト数回走らせればいいだけの話。
0504nobodyさん
2010/01/04(月) 15:37:53ID:???<input type="text" name="○○">
<input type="submit" value="送信">
</form>
このような形で文字列を違うページに送り、そのページに表示たいのですがどうしたらいいのでしょうか?
CGIとなるファイルの中身(?)と表示させる方法がいまいちわかりません。
0505nobodyさん
2010/01/04(月) 15:40:38ID:???0506nobodyさん
2010/01/04(月) 16:03:07ID:???0507nobodyさん
2010/01/04(月) 16:07:33ID:???とりあえず簡単な雛形を書いたので、それから細かい質問を受けるとしよう。
use CGI;
my $q = new CGI;
my $some_str = $q->param("○○");
print $q->header( -type => 'text/html', -charset => q{} );
print "<p>$some_str</p>";
0508nobodyさん
2010/01/04(月) 16:18:11ID:???すみません…
>>506さん
今まで携帯のレンタルスペースを使用していました。
(独自タグでフォームで送信した文字を受けとったりすることはできました。)
勉強する為にレンタルスペースを離れ、昨日サーバーを借りたんです。
借りたのはいいんですが独自タグに甘えていたせいなのかどうやって受け取っていいのかも全然わからない状態です。
0509nobodyさん
2010/01/04(月) 16:59:28ID:???0510nobodyさん
2010/01/04(月) 17:19:32ID:???HTMLテンプレートエンジンを紹介すればいいんでないかな?
それよりPHPでしたほうが楽?
0512nobodyさん
2010/01/04(月) 17:37:50ID:???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を作ってみたいと思っています。
0513nobodyさん
2010/01/04(月) 17:45:19ID:???ローカル(手元の)マシンでやればいいのよ・・・
0514nobodyさん
2010/01/04(月) 17:59:01ID:???>formで指定した値(○○)を○○に入れるんでしょうか?
そうです。
name="○○"の、"○○"に相当する部分です。
0515nobodyさん
2010/01/04(月) 17:59:11ID:???XAMPP(?)というのはApache(?)というものと同じで自分のパソコンをサーバー化するみたいなやつですか?
(私はActivePerlをインストールしてあり、Apache(?)はインストールしていない状態です)
サーバーを借りた目的は携帯サイトを作りたいのとPerlの勉強をしたかったからなんです…
0518nobodyさん
2010/01/04(月) 18:12:56ID:???ありがとうございます。そこは理解できました。
他のところがどのような意味をしているのか全くわからないのですが
コピーしてメモ帳で拡張子を.cgiで保存してサーバーにアップロードしてもいいのでしょうか?
>>516さん
それは携帯にも対応できますか…?
パソコンは2カ月前に購入したので正直わからないことだらけです…
>>517さん
ありがとうございます。
0520nobodyさん
2010/01/04(月) 18:20:35ID:???アップロードしてもいいけど、今後のことも考えて、自分のパソコンにWebサーバーを構築
しておいて、そこで試してうまくいってから本サーバーにアップするようにしたほうがいいよ。
0521nobodyさん
2010/01/04(月) 18:24:04ID:???0522nobodyさん
2010/01/04(月) 21:07:54ID:???ありがとうございます。
--
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の違うページなんですが…
0523nobodyさん
2010/01/04(月) 21:17:53ID:???それは送信した文字を表示するだけのスクリプトですので害はないです。
ただ、できれば自分のパソコンにWebサーバーを構築して試すことをお薦めします。
0524nobodyさん
2010/01/04(月) 21:41:05ID:???ありがとうございます。
ちょっとわからないのですがサーバーはロリポップです
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 が正しく動作していません。」とでてしまいます…
0525nobodyさん
2010/01/04(月) 21:43:03ID:???○ test.cgi.txt となってしまいました…
です
0526nobodyさん
2010/01/04(月) 21:52:38ID:???後ろの.txtを消してください。
パーミッションを700(rwx------)にしくてください。
パーミッションについて / ホームページ / マニュアル - ロリポップ!
http://lolipop.jp/manual/hp/permission/
0527nobodyさん
2010/01/04(月) 21:55:28ID:???勉強したいんだったら、何か入門用の読み物見ながらゆっくりいろいろ遊んでみたらどう?
今まで使ってた独自タグとかいうのと同じことをしたいだけなら
<?php echo htmlspecialchars($_GET['hoge']) ?> こんな感じのを埋め込むほうが楽だと思う。
0528nobodyさん
2010/01/04(月) 22:01:17ID:???そうだね。
先頭行に、これを付け加えてください。
#!/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>";
0529nobodyさん
2010/01/04(月) 22:01:57ID:???何度も何度も申し訳ないです、本当にありがとうございます。
.txtは消しました。
パーミッションというのはどこにある(?)のでしょうか…?
/usr/local/bin/perl もしくは /usr/bin/perl
これは関係ないのですか?
0530nobodyさん
2010/01/04(月) 22:03:50ID:???0532nobodyさん
2010/01/04(月) 22:06:27ID:???>>528のように先頭行に書いてください。
パーミッションの設定方法は、>>526のURLを見てください。
0533nobodyさん
2010/01/04(月) 22:09:00ID:???単純なことなら問題ないのだろうけど
0534nobodyさん
2010/01/04(月) 22:24:36ID:???<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>";
こうなっているんですが、これでいいのでしょうか…?
間違っている場所があれば教えてください。
皆さん本当にありがとうございます。
0535nobodyさん
2010/01/04(月) 22:29:40ID:???明日近くの本屋さんに行ってPerlの本を見てきたいと思います。
Perlを最初にやるとPHPはわかりやすいと聞いたので
Perlから勉強しようと思ったのですがPHPを最初に勉強することも考えてみます。
0536nobodyさん
2010/01/04(月) 22:30:45ID:???0537nobodyさん
2010/01/04(月) 22:32:10ID:???ここ↓は、
#!/usr/bin/perl 700(rwx------)
こう↓です。
#!/usr/bin/perl
パーミッションは通常、FTPソフトで設定します。
>>526のURLのパーミッションの設定方法を見て設定してください。
0538nobodyさん
2010/01/04(月) 22:59:36ID:???ありがとうございます。
おかげでformで送信したものを.cgiファイルのほうに表示することができました。
0539nobodyさん
2010/01/04(月) 23:02:35ID:???0541nobodyさん
2010/01/04(月) 23:42:56ID:???0543nobodyさん
2010/01/05(火) 17:14:37ID:???ただの喩えだからPerl6がどうとか関係ないと思うが。
昔はこういう質問で溢れてたよなあ。フォーム作れなくて困ってるとか
久しぶりに見たわ。
XSSとかCSRFとかにも一応気をつけろよ(CSRF対策とかできなさげな気がするが)
0545nobodyさん
2010/01/05(火) 17:30:49ID:???まあ、実際にはリファラ見れば大抵のCSRFは防げるわけだが、
http://〜からマッチかけると可搬性がなくなるし、かといってファイル名部分で
マッチをかけると罠サイトも同じにしてくる可能性もある。
リファラに送らないUAに対応しようとすると非直リンでCSRFの穴があく、
などであまり対策にならない。
GET->POSTもしないよりはマシだが、そもそも悪意のサイトだったりXSSされてれば簡単に穴空くしな。
0546nobodyさん
2010/01/05(火) 23:08:06ID:???今日、近くにある本屋をいろいろ見てまわってきました。
「10日でおぼえる Perl/CGI 入門教室 第2版」という本しかなかったのでそれを購入しました。
いろいろ読んで勉強してみたいと思います。
昨日は本当にありがとうございました。
0547nobodyさん
2010/01/06(水) 05:58:47ID:???一番買ってはいけない類の本を買ったな・・・。
普通にらくだ・りゃま本とCatalystのマニュアルでよかったのに。
0548nobodyさん
2010/01/06(水) 06:25:15ID:???それで一応ソース読み書きできる程度になって、
その後はネット上なりリャマなりでいろいろ学んだり実践していけば、
そのうち最初に買った本の内容にツッコミ入れながら読めるようになるだろ。
0549nobodyさん
2010/01/06(水) 07:02:49ID:???そうだったのですか…
なんかよくわからないところばかりです…
Apacheではなく借りたサーバーのほうでやっているせいなのか
本の通り書いても動かないんですよね…
今日は少し遠くに行って探してみます。
0550nobodyさん
2010/01/06(水) 07:03:06ID:???0551nobodyさん
2010/01/06(水) 07:42:36ID:???俺はあまり関係ないが、早くPlack対応のレン鯖が現れるといいな。
CGIはいいかげんもういーだろ。
0552nobodyさん
2010/01/06(水) 07:43:05ID:???0553nobodyさん
2010/01/06(水) 13:08:53ID:???0554nobodyさん
2010/01/06(水) 17:26:03ID:U4hPtr/3みたいなシリーズは一番買ってはいけない本だと思うのだが・・・
0555nobodyさん
2010/01/06(水) 17:28:41ID:???解説をしていただきたいのですがここに載せても大丈夫なのでしょうか?
教えていただいた方とは連絡がとれなくなってしまいその人に解説していただくのは不可能です。
捨てメールアドレスを作ってここに載せ連絡をくれた方に送り解説していただく、という形のほうがいいでしょうか?…
0556nobodyさん
2010/01/06(水) 17:47:20ID:???あとソースをどこかにアップして、それへのリンクを貼ればよいかと。
0557nobodyさん
2010/01/06(水) 18:26:00ID:???pass:2perl です
アップローダーを使ったことないのでちょっと不安ですが…
.txtファイルを一応ALZipで圧縮しています…
0558nobodyさん
2010/01/06(水) 18:35:10ID:???>>557
昨日辺りに「10日でおぼえる Perl/CGI 入門教室 第2版」を買った記憶はない?
0559nobodyさん
2010/01/06(水) 18:49:20ID:???購入しました。
use CGI qw /:seandard/;っていうのが買った本には載っていなく検索してみたら
モジュール(?)みたいなことがでてきてここで戸惑っていました
他の部分は見て、調べてを繰り返していてparamがパラメータを指している(?)
などということがわかってきたって感じです
0560nobodyさん
2010/01/06(水) 23:50:12ID:???何モンだあんた
0562nobodyさん
2010/01/07(木) 18:03:26ID:cG1x4224>>557を教えていただいたのはこのスレではなく違うサイトでメールで個人的に教えていただきました。
>>557はまだよく理解できていません…
>>561さん
あれから動かなく(?)なってしまいました
携帯サイトで使いたいです。
また一度に複数送信したいのですが…
0563nobodyさん
2010/01/08(金) 08:56:16ID:???ご自分のパソコンにWebサーバーの構築はされましたでしょうか?
ご購入された本にWebサーバー構築のことは書かれてはいませんか?
それから、まずコマンドラインから実行して、最低限のバグは取りましょう。
DOSプロンプトから
C:\>perl xxx.cgi
と打てばいいだけです。
>#!/usr/bin/perl
これは必ずファイルの”先頭行”に書かなければいけません。
Perlを実行するプログラムがどこにあるのかを記述しています。
>use CGI qw /:seandard/; → use CGI qw/:standard/;
use文は、モジュール(特定の機能を集めた関数とデータ群)を現ファイルに読み込みます。
この場合、CGIに必要な機能を集めたCGIモジュールをこのファイルに読み込んでいます。
qw/ /で、その機能のどれを(どのように)使うかを指定します。
今回の:standardは、オブジェクト指向形式でなく関数形式でも使うという指定です。
0564nobodyさん
2010/01/08(金) 08:57:47ID:???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;
プログラムを終了する関数です。
0565nobodyさん
2010/01/08(金) 17:40:50ID:???私自身がCGIモジュールというものを作らなければならないのでしょうか?…
サーバーにはよくわからないのでパーミッションを700であげています
外部のサイトには送れるんですが自分のサイトの中でフォームの送受信がいまだにできない状態です…
難しいですね…
0566nobodyさん
2010/01/08(金) 17:42:37ID:???だとするとDNSも立てないとダメだよ?
0567nobodyさん
2010/01/08(金) 18:01:17ID:???携帯でも使えて、表示する部分は自分で選べる、複数(入力欄1に「あいうえお」、入力欄2に「かきくけこ」)にも対応させたいです。
一番簡単にたとえると、メールフォームで文字を打つ→送信前の確認ページ→送信完了
の「メールフォームで文字を打つ→送信前の確認ページ」ここです。
説明が下手で申し訳ないです。
0568nobodyさん
2010/01/08(金) 18:05:11ID:???LAN内? レン鯖?
0569nobodyさん
2010/01/08(金) 18:46:14ID:???レンタルサーバーです。
0570nobodyさん
2010/01/08(金) 18:51:46ID:???CGIモジュールは先駆者が既に作っています。
標準で入っているので、どこからか持ってくる必要はないです。
use CGI;の一文で使えるようになります。
Perlの場合、必要そうなモジュールは大概、誰かが作っていて、様々なモジュールを組み合わせて
プログラミングしていくことになります。
WAF(Web Application Framework)と呼ばれている大きなモジュール群あり、これはページ遷移等
の大枠が既に作られていて、比較的簡単に大規模Webアプリを作ることができます。
0571nobodyさん
2010/01/08(金) 19:27:43ID:gGxGm+Hxmy @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 から受け取ったゲストのハンドル.
読み取った情報からハンドルが一致するパスワードを選び出せるはずだったのに,
ハンドルが一致しなくてもパスワードが返って来るっぽ (`д´)うわぁ〜ん.
ど, どうして ?
0572nobodyさん
2010/01/08(金) 19:31:55ID:???スコープ周りが怪しい
0574nobodyさん
2010/01/08(金) 19:45:07ID:gGxGm+Hxす, 素早い回答ありがとうございます.
もしかして grep() がダメなら loop でぶん回すしかないかな? とアレコレ...
>$guestfile: $in{'handle'}: の方のコードも
zip 圧縮して後ほど upload します.
(叩きどころ満載かと思いますが...)
0575nobodyさん
2010/01/08(金) 19:52:08ID:???0576nobodyさん
2010/01/08(金) 20:06:41ID:gGxGm+Hxお手数ですが...
ttp://homepage2.nifty.com/alter/bbs.zip
0577nobodyさん
2010/01/08(金) 20:07:39ID:???$in{'handle'}が真であるという条件だけで素通ししてるように見えるんですけど
0578nobodyさん
2010/01/08(金) 20:10:57ID:gGxGm+Hx母音を省略した subroutin, valiable が ほとんどなので
他人様に解読していただくのは極めて困難を極めるかと orz...
0579nobodyさん
2010/01/08(金) 20:16:04ID:???そうです。携帯サイトを作りながら開いたスペースで練習しています。
なのでフォームの送受信というのでしょうか、それができるようになりたいのですが…
0580nobodyさん
2010/01/08(金) 20:17:54ID:gGxGm+Hx0581nobodyさん
2010/01/08(金) 20:29:36ID:???subroutine
0582nobodyさん
2010/01/08(金) 20:34:14ID:???> 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
0583nobodyさん
2010/01/08(金) 20:52:18ID:gGxGm+Hx;(;_;);
>>582
自給自足で使うつもりだったので他人様に見せようとは夢にも考えてなかったんれす.
取り敢えずは動いているものの完成にはまだまだ遠い道が...
ところで "古文書" とは どういうことでしょうか ?
正直, 本よりも web で調べて アレコレ試行錯誤中なんですが.
0585nobodyさん
2010/01/08(金) 21:13:55ID:???古文書って書いたのは>>583の通り。わざわざ昔の手法を覚えてしまってる。
例えば sub decode {} するより CGI.pm を使いましょう、なんだけど
参考にしてるリソースがよろしくないんだろうね。
0587nobodyさん
2010/01/08(金) 21:16:25ID:gGxGm+Hxなるほど. (σ(^_^;)の脳味噌が まさに旧時代の遺物だったりして.)
参考までに新時代のコードってのはあるんすか ?
まさか, OOP ?
perl の OOP って, おいらにはサパ〜リ.
0589nobodyさん
2010/01/08(金) 21:49:30ID:???アドバイスくださった方々, ありがとうございます.
ご指摘いただいたことを参考に, 調べなおします.
また来る事になるかもしれません, そのときは よろぴく.
0590nobodyさん
2010/01/09(土) 18:37:43ID:???結局, loop でぶん回すことにしました. <- ダサいやり方だとは思いますが.
(sub decode と同様なやり方です)
そもそも grep(/〜/,@a) の使い方が理解できていないっす.
(というか JavaScript の new RegExp() みたいな使い方が perl にもあるのかどうか ???)
あと, CGI.pm は nifty では使えない模様っす.
(server 借りて本格的にやるほどのネタの持ち合わせがありません)
(制限多すぎとはいえ, 100MB のスペースを利用しない手はないと考えてます)
0591nobodyさん
2010/01/09(土) 19:17:04ID:???入ってないなら、CPANから持ってくるとか。
0592nobodyさん
2010/01/09(土) 19:24:56ID:???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;
0593nobodyさん
2010/01/09(土) 19:32:08ID:???ttp://homepage.nifty.com/faq/faq_b4.htm#q5
"use/requireで外部関数(モジュール)をコールする場合は、
perlの標準モジュールを@homepageのシステムでは用意しておりませんので
使用することはできません"
"自分で用意したらどうか" と言う問題に付いては
Google でもヒットしますが実際に実験をした人はいない模様っす."
アッシがやれば それなりのネタになるかもですが そもそも .pm を使いこなせないので...
0594nobodyさん
2010/01/09(土) 19:40:36ID:???0595nobodyさん
2010/01/09(土) 19:43:59ID:???>パスワードを記述したファイル:
TSV 形式で {cipher, handle,IP} を記録してます.
ついでに書きこみ回数なども記録するのも おもしろいかも ?
で, 仮にハンドルに数字を使われた場合に
IP とマッチングする可能性も考えられるので今のやり方に落ち着きました.
わざわざサンプルを書いてくださり, ありがとうございます.
0596nobodyさん
2010/01/09(土) 19:44:07ID:???0598nobodyさん
2010/01/09(土) 19:58:23ID:???0599nobodyさん
2010/01/09(土) 20:06:03ID:???記録するときにもチェックをして重複記録しないようにしてます.
それと, そもそも書きこむのが自分だけだったりして... (;_;)
個人サイトでのゲストの人数なんて問題にならないかと.
0600nobodyさん
2010/01/10(日) 22:35:25ID:???後、パスワードはMD5やSHA-2にして保存した方がセキュリティ上いいんじゃない?
0601nobodyさん
2010/01/11(月) 00:25:31ID:???今、以下の流れを処理するスクリプトを書いています。
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);
}
もう一日考えて頭がパンクしそうなので、どなたかお答えいただけないでしょうか?
私の方でもしばらくまた考えてみます。。。
0602nobodyさん
2010/01/11(月) 00:46:48ID:???0603nobodyさん
2010/01/11(月) 01:08:19ID:???すみません、失念していました。
仕様通りに動いてくれないのは、
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
0604nobodyさん
2010/01/11(月) 01:15:38ID:???で質問は、結果がこうなってしまうってことだよな?
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 %]]
0605nobodyさん
2010/01/11(月) 01:17:04ID:???0606nobodyさん
2010/01/11(月) 02:36:45ID:???こんな短時間で…ありがとうございます!
見たところchompしている部分と@tmp2を使わない以外は同じのようですね。
0607604
2010/01/11(月) 02:48:37ID:???答える奴が手元で実行しやすいようにと思ってさ。
for my $tmpl (@template) {
my $t = $tmpl;
$t =~・・・
と一度他のレキシカル変数に代入して、そちらを置換すれば望んだ結果は得られるんだが、
$tmplの置換で@templateの中身も書き換わってしまう理由が俺には分からなくて説明できないんだ。
誰か他の奴頼む。
0608nobodyさん
2010/01/11(月) 03:08:41ID:???>LIST の要素が左辺値であった場合、ループの中で VAR を変更することにより、
>対応する値を変更することができます。逆に、LIST の要素が左辺値でない場合は、
>この要素を修正しようとしても失敗します。言い換えると、foreach ループの
>帰納変数がループの対象となっているリスト中の個々のアイテムに対するエイリアスになっているからです。
0609601
2010/01/11(月) 03:13:29ID:???むつかしいですね。
ひとまず他の変数に代入してやると言う方法で、この場はしのいでみようと思います
こんな遅くまでありがとうございます!
>>608
ありがとうございます!
perldocも良く読んでおくべきでしたね。。。
0610nobodyさん
2010/01/14(木) 13:58:55ID:???0611nobodyさん
2010/01/16(土) 21:41:57ID:???ところが sub() てな感じでも良いらしいことをこの板のスレッドで発見.
だまされたつもりで試して見ると普通に通る模様.
js と同じスタイルになるので こっちの方が良さそう.
ところで, これって perl 使いに取っての常識 ?
(Google でヒットする解説サイトの どこにも書かれてなかったけど)
もしそうだとするのなら, 他にも同様なことが あるのかしらん ?
0612nobodyさん
2010/01/16(土) 22:13:58ID:???とりあえずここ参照。コメント欄も含めて。
http://blog.livedoor.jp/dankogai/archives/51237271.html
0613nobodyさん
2010/01/16(土) 22:33:59ID:???ありがとうございます.
掲示板自作に半年 ? いや, かれこれ 5年目かも (゜w゜)
いつになったら完成するのやら.
でも, 最初の頃と比べれば...
0614nobodyさん
2010/01/26(火) 00:22:20ID:???というのも、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 -->
0616nobodyさん
2010/01/26(火) 00:35:33ID:???http://search.cpan.org/~tskirvin/CGI-SHTML-1.29/CGI/SHTML.pm
多分SHTMLのパーサ
0617nobodyさん
2010/01/26(火) 00:39:47ID:???0618nobodyさん
2010/01/26(火) 01:36:08ID:???これかな?(検索したら出てきた)
https://forums.ubuntulinux.jp/viewtopic.php?pid=48428
0619nobodyさん
2010/01/26(火) 16:46:15ID:???http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1035823010
0620614
2010/01/26(火) 22:09:36ID:???0621nobodyさん
2010/01/26(火) 23:06:18ID:???>#include virtual
おいら, まだヒヨッコだけど,
そして, SSI はまったく調べたことがないけれど,
要はhtml ファイル (template)を読み込んで
部分的に replace するだけじゃないのかな ?
だったら おいらでも なんとか...
(だけど ここの先輩たちの回答がないのはなぜ ?)
0622nobodyさん
2010/01/26(火) 23:24:53ID:???で、「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>";
こうか?
0623nobodyさん
2010/01/26(火) 23:25:54ID:???from_to($ENV{pgtitl}, 'euc-jp', 'utf8');
0625614
2010/01/27(水) 05:00:54ID:???呼び出し時に、SSI変数か、CGIの引数で文字列を入力して、
UTF-8で出力するCGIを作ろうとしているわけですが、
print "<h1>$ENV{pgtitl}</h1>";
だと、SSI変数が読めません。
フローチャート
________________
|入力 |
|UTF-8(SSI呼び出し)引数付き |
|<!--#exec cgi="foo.cgi |
| サーバー環境" --> |
|_______________|
▼
________________
|処理 |
|引数が存在するか? |
|はい>>引数をエンorデコード |
|いいえ>>プリントしない |
|_______________|
▼
________________
|出力 |
|UTF--8で |
|引数を<h1>に入れて出力 |
|_______________|
0626614
2010/01/27(水) 05:30:17ID:???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なので、変換しないとだめなようですが。
把握しました。
0627nobodyさん
2010/01/27(水) 07:28:37ID:???全然なにがやりたいかわからんから>>621と同じ解釈してパーサーっぽいの探してきたんだけど
あと前提条件として何があって、結果何がしたいのか言ってもらわんと誰も疑問に答えることはできんと思うが
0628nobodyさん
2010/01/27(水) 08:30:00ID:???SSI もどきの動作を CGI に置き換えたいのかと思いきや, 違うようだねぇ.
というか, 余計, やりたいことが見えなくなったですぜぃ.
どこでも回答を得られなかったそうだけど, 合点が行きますぜ.
固定観念を捨てて すなおにやりたいことを書くようにしないと...
漂流の旅は 延々と...
0629614
2010/01/27(水) 18:18:11ID:???質問文に基礎的な欠陥がありました。すみません。
>>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のアップデートが来るまで待ちたいと思います。
たくさんの回答ありがとうございました。
今度質問するときはしっかり分かるよう、慌てずに、要所を押さえてから質問します。
0630nobodyさん
2010/02/07(日) 16:21:07ID:???以下の配列
@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',
)
というように、最初の数字が一緒なら数字以降のデータを連結したいです。
よろしくお願いします。
0631nobodyさん
2010/02/07(日) 17:07:49ID:???for (@hoge1) {
/\A(\d+)(.*)\z/s;
$foo{$1} = exists $foo{$1} ? "$foo{$1}$2" : "$1$2";
};
my @hoge2 = values %foo;
0632nobodyさん
2010/02/07(日) 17:15:19ID:???0633nobodyさん
2010/02/07(日) 17:27:28ID:???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};
0634nobodyさん
2010/02/07(日) 17:33:29ID:???次は同じ数値のやつで値が重複してれば取り除くことかな
更に値を昇順に並べる
できればだけど、初心者にできるだけわかり易いコードで書くか、難しいコードにはコメント付けることかな
0635630
2010/02/07(日) 18:32:40ID:???書式の意味はさっぱり分かりませんが、思い通りに出来ました。
ありがとうございました。
>>634
これは、とあるデータファイルなのですが、現在の仕様では書き込み時に
行頭のデータを見つけて同じなら追加できるようになっています。
また重複しないようにもなっています。
今回、過去のデータが1データ1行という仕様だったものを現在の仕様に
合わせて効率化(読み込み回数の減少)を図りたかったので知恵を
拝借させていただきました。
では、これから数十万ファイルを変換します。。。
ありがとうございました。
0636nobodyさん
2010/02/10(水) 04:24:28ID:SN+dhl64ですので、受信メールを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
ですが、これだと、置換が終わったファイルに関してもアクションが行われたりと非効率的なので、
置換が終わったらループを抜けてつぎのファイルに移動するなどすることは可能でしょうか。
0637nobodyさん
2010/02/10(水) 06:33:49ID:???0638636
2010/02/11(木) 20:43:34ID:???0639614
2010/02/12(金) 07:09:14ID:0arSSMW8質問はこうです。
print "<td id=\"menu\" colspan=\"2\"><a href=\"/tsubuyaki.shtml\">呟き</a>$menu[0]\n";
print "<a href=\"/music.shtml\">演奏活動$menu[1]</a>\n";
print "<a href=\"/NNB\">NicoNicoBrowser$menu[2]</a>\n";
print "<a href=\"/live.shtml\">ネットワーク機器監視カメラ$menu[3]</a>\n";
print "<a href=\"/uploader\">アップローダー$menu[4]</a>\n";
print "<a href=\"/ntp.shtml\">公開NTP$menu[5]</a>\n";
print "<a href=\"/manage.shtml\">管理・障害情報$menu[6]</a>\n";
print "<a href=\"/info.shtml\">サーバー情報$menu[7]</a>\n";
print "<a href=\"/contact.shtml\">管理人へ連絡$menu[8]</a></td>\n";
リンク先のshtmlファイルのLastModifiedを取得して、1日以上新しい場合、リンクにNewラベルを追加したい
(つまりmenu[n]の部分に<img src="/main.files/new.png">をprintしたい)
のですが、どのようにすればいいでしょうか?
なおかつ、ここのメニュー生成はパターン化してしまっているので、
リンク先,リンクテキスト,更新フラグ(立ってたら<img src="/main.files/new.png">[newラベル]をプリント)
のように配列にまとめてfor文で一気にprintしまいたいところです。
多分、データ配列化でfor文によるプリントと、更新フラグでリンク画像追加を一気にやってしまえば一番すっきりしていいのですが、
サンプルを2、3件回って、打ち込んでみないと理解できない質なので、急にfor文を使うのは技術力が追いつかず無理です。
賢者の皆さん回答お願いします。
0640nobodyさん
2010/02/12(金) 08:34:28ID:???まずfor文で書いてみろよ。添削はしてやるから。そうじゃないと身に付かない。
0641nobodyさん
2010/02/12(金) 09:42:53ID:/dEp/DAw気晴らしに >>639 の翻訳に挑戦:
サパ〜リわからん!!!
判らない点:
1. "メニュー生成はパターン化してしまっているので"
・ その "パターン化メニュー生成" とは ?
2. "のように配列にまとめて"
・ "のような配列"とは ?
・ 仮に "$menu[n]" が 指し示すものだとしても その中身は "new.png" なのでは ?
3. "データ配列化で"
・ では "配列化" したデータのサンプルを...
(データ構造がきちんと決まっていないのでは ?)
(loop で ぶん回すこと以前の問題にしか思えない)
0642nobodyさん
2010/02/12(金) 10:16:43ID:???0643nobodyさん
2010/02/12(金) 10:48:22ID:???use strict;
use warnings;
use Perl6::Say;
my @entries = (
{ url=> '/tsubuyaki.shtml', title=>'呟き', },
{ url=> '/music.shtml', title=>'演奏活動', },
{ url=> '/NNB', title=>'NicoNicoBrowser', },
{ url=> '/live.shtml', title=>'ネットワーク機器監視カメラ', },
{ url=> '/uploader', title=>'アップローダー', },
{ url=> '/ntp.shtml', title=>'公開NTP', },
{ url=> '/manage.shtml', title=>'管理・障害情報', },
{ url=> '/info.shtml', title=>'サーバー情報', },
{ url=> '/contact.shtml', title=>'管理人へ連絡', },
);
for my $entry (@entries) {
my $mtime = (stat($entry->{title}))[9];
say $entry->{title}, ' (', $mtime, ') : ', $entry->{url};
}
0644nobodyさん
2010/02/12(金) 10:49:19ID:???まぁいいか
0645614
2010/02/12(金) 17:12:40ID:0arSSMW8>>640
ですね。やってみたんですがエラーx20over
根気がなくてなおかつ焦っているのが見え見え。
もうちょうっと根気良くやってみます
>>641
配列に入れるのは
リンク先相対URL,リンクテキスト,更新フラグ
を一列にして入れていきます。
更新フラグが立つ(1になる)条件は、LastModifiedが1日以内であることです。
それでできたデータをfor文で1行ずつ書いていくということです。
>>642
もしかしたらページのテンプレート化は全部これで解決かと思い、別ディレクトリ作って仮導入してみたところ
アップローダーのCGIがHTML書き出し型で謎の二重呼び出し、エラーを返すかと思いきやApacheが落ちてしまいました。
>>643
がんばって雛形に従って書いてみます。
0647nobodyさん
2010/02/12(金) 17:30:03ID:???リアル中学生だっけ。親御さんは気の毒になぁ。
0648nobodyさん
2010/02/12(金) 17:40:13ID:???http://pc11.2ch.net/test/read.cgi/php/1222645553/
0649614
2010/02/12(金) 18:00:22ID:0arSSMW8なぜ落ちるのか原因が解析できないのが技術力の足りなさでしょうかorz
>>643 >>647
動かしてみましたところ。
Error message:
Premature end of script headers: test.cgi
改行コードとパーミッションを確認すること5回。何故だあああああ!?
print "Content-type: text/html\n\n";
を加えてヘッダーを出すようにしてみたり、
モジュールの存在を確認したけれど動かず。
これもまた原因不明o....rz
>>648
丸投げですか。選択肢としては有r(ry……甘えだと思うんだ。
また0から自分で打ってきますので添削お願いします。
0650nobodyさん
2010/02/12(金) 18:15:07ID:???基準がようわからん
0651nobodyさん
2010/02/12(金) 18:20:51ID:???こんな感じで要求仕様だけ細かいけど何も考えてくれないから添削にもなってないよ。
CLIで叩くもんをCGIで動かして
> 改行コードとパーミッションを確認すること5回。何故だあああああ!?
ってやかましいわ。
0653nobodyさん
2010/02/12(金) 18:48:15ID:???コマンドラインからperl test.plで試せ
つーか>>643に2,3行足して軽く変更するだけで要求されてるものはバッチリ完成するんだが
まぁそこまでやる義理も無いしな
おまけでヒント
http://www.ksknet.net/cat41/stat_1.html
0655614
2010/02/12(金) 19:00:45ID:0arSSMW8とりあえず手前なんとかなっても
自分で構造を読めないスクリプトだと
仕様変更した時にサーバー障害の原因になってしまっていても気づかないので
自分で構造を読めないスクリプトの導入は控えています。
>>650 >>651
#!/usr/bin/perl
@menu=( "/music.shtml<>演奏活動",
"/NNB<>NicoNicoBrowser",
"/live.shtml<>ネットワーク機器監視カメラ",
"/uploader<>アップローダー",
"/ntp.shtml<>公開NTP",
"/manage.shtml<>管理・障害情報",
"/info.shtml<>サーバー情報",
"/contact.shtml<>管理人へ連絡",
);
print "Content-type: text/html\n\n";
foreach $i (@menu){
@ancker = split(/<>/, $i);
print "<a href=\"$ancker[0]\">$ancker[1]</a>\n";
}
exit;
書いてきました。
CLIだったんですか。ActivePerlを使って叩くんですか……o....rz
それじゃあ動くわけがなかった。
サーセン。いつも自宅鯖管しててCGIで動かすのが基本になってました。
LastModifiedを使った日時計算をどうすればいいのでしょうか。
ヒントがあればorz
0656nobodyさん
2010/02/12(金) 19:13:04ID:???0657nobodyさん
2010/02/12(金) 19:13:44ID:???0658nobodyさん
2010/02/12(金) 19:16:54ID:???>とりあえず手前なんとかなっても
>自分で構造を読めないスクリプトだと
>仕様変更した時にサーバー障害の原因になってしまっていても気づかないので
>自分で構造を読めないスクリプトの導入は控えています。
んじゃ、導入自体あきらめろ。
この程度のスクリプトを自力で書けない奴が偉そうな口を叩くな。
0659nobodyさん
2010/02/12(金) 19:18:52ID:???ちょっとガキをからかってやるかくらいの心持ちでいいんですよ
0660nobodyさん
2010/02/12(金) 19:24:31ID:???スクリプトの先頭には↓を絶対入れるべき
use strict;
use warnings;
0662614
2010/02/12(金) 19:55:57ID:0arSSMW8SSIばっかりやっていてPerl移行になったので。
SSI時代にまだ自分で適度に構造が分かるスクリプトを持ってきていた程度です。
Perl打ち込みを始めてからまだ15日しかたってません。勘弁してください。
>>660 >>651
挿入しました。指摘ありがとうございます。
>>654
入ってました。
>>653 >>656 >>657
先ほどCGIをローカルにもってきてActivePerl入れました。ご指摘ありがとうございます。
ActivePerlでは最終更新時間取得までいったので今度はサーバーに置いて練りこんでいけばできそうな
兆しが見えてきました。
本当に回答ありがとうございます。
最近アップローダーが閑散としていて帯域制限忘れたのが祟ったorz
アップローダーが混み合ってきてまともにファイル変更もできなくなったのでまた明日。
0664614
2010/02/12(金) 20:33:45ID:0arSSMW8はい。すぐ把握できました。1日の秒数です。
0665614
2010/02/12(金) 23:25:55ID:0arSSMW80666nobodyさん
2010/02/12(金) 23:35:23ID:???そんなことまでいちいち書かなくていいんだよ
0667614
2010/02/13(土) 00:01:25ID:fcRfq/Wtサーセン。深夜ボケして妙にハイテンションになって、注意欠陥状態です。
最後にサーバーにCIFSで送って、
相対パスを展開しないstatの実装に七転八倒するかと思いきやchdirであっさり・すっきりでした。
chdir("/var/www");
@menu=( "/music.shtml<>演奏活動",
"/NNB<>NicoNicoBrowser",
"/live.shtml<>ネットワーク機器監視カメラ",
"/uploader<>アップローダー",
"/ntp.shtml<>公開NTP",
"/manage.shtml<>管理・障害情報",
"/info.shtml<>サーバー情報",
"/contact.shtml<>管理人へ連絡",
);
foreach $i (@menu){
@ancker = split(/<>/, $i);
$mtime = (stat".$ancker[0]")[9];
$new =1 if(time <= ($mtime+86400));
print "<a href=\"$ancker[0]\">$ancker[1]";
if($new==1){
print "<img src=\"/main.files/new.png\">";
}
print "</a>\n";
}
また質問段階からgdgdでしたが、
レスを頂き、Perl打ち初め〜15日の初心者が助かりました。
本当にありがとうございました。
0668614
2010/02/13(土) 00:12:40ID:fcRfq/Wt#/usr/bin/perl
use strict;
use warings;
chdir("/var/www");
@menu=( "/tsubuyaki.shtml<>呟き",
"/music.shtml<>演奏活動",
"/NNB<>NicoNicoBrowser",
"/live.shtml<>ネットワーク機器監視カメラ",
"/uploader<>アップローダー",
"/ntp.shtml<>公開NTP",
"/manage.shtml<>管理・障害情報",
"/info.shtml<>サーバー情報",
"/contact.shtml<>管理人へ連絡",
);
foreach $i (@menu){
@ancker = split(/<>/, $i);
$mtime = (stat".$ancker[0]")[9];
if(time <= ($mtime+86400)){
$new = 1;
}else{
$new = 0;
}
print "<a href=\"$ancker[0]\">$ancker[1]";
if($new==1){
print "<img src=\"/main.files/new.png\">";
}
print "</a>\n";
}
exit;
無事動きました。
0670nobodyさん
2010/02/13(土) 09:57:02ID:???0671nobodyさん
2010/02/14(日) 17:46:27ID:???それにしても ここの話題が 易しくないと感じる あっしって,
ミジンコ ? ゾウリムシ ? (はぁ)
0672nobodyさん
2010/02/14(日) 18:03:55ID:???opendir(DIR,$logs);
@u=readdir(DIR);
closedir(DIR);
とやると
$u[0]='.', $u[1]='..', $u[2]='log0.tsv', ...
"." で始まるファイルは不可視ファイルなのだとか...
他のサーバーでも同様なのかしらん ?
0673nobodyさん
2010/02/15(月) 01:23:48ID:???$u[1]='..' 一つ上
ファイルだけの一覧が返って来るわけじゃないよ。ドットファイルの話はまた別。
0674nobodyさん
2010/02/15(月) 07:33:04ID:???お返事ありがとうございます.
つまり, 返って来るリストに {'.', '..'} は必ず含まれると解釈して良いのでしょうか ?
言い換えるとサーバーが異なるなどの条件の変化には左右されないと...
(これらが含まれることを前提することが bug の発生源になりうるか どうかが気掛かりなのです)
0675nobodyさん
2010/02/15(月) 09:36:38ID:???「.」はカレント(今いる)ディレクトリへのリンクファイルで
「..」はその親ディレクトリへのリンクファイル
含まれていようがなかろうがif文使えば条件の変化に左右されない書き方ができる
0676nobodyさん
2010/02/15(月) 17:55:20ID:???回答ありがとうございます.
>if文使えば
log0.tsv, ... , logN.tsv は 10 record (10行) ごとのデータファイル.
末尾のファイルが 10 rec 埋まるまでは追加記録の対象となります.
さらに この directory には他のファイルを追加することはありません.
したがって $n=@u とやって logN.tsv の個数だけ求まれば良いのです.
ところが予想と反した結果となったので調べて見ると "未知のファイル" がぁ〜.
UNIX では必ず存在するのなら 一安心です.
0677nobodyさん
2010/02/15(月) 18:09:17ID:???$n= grep(/^log\d+\.tsv$/, readdir(DIR));
0678nobodyさん
2010/02/15(月) 18:46:35ID:???なるほど, 勉強になります !
(そう言えば以前 grep() で迷ったことが...)
(/ / が " " と同様に展開解釈することを知ったのは最近のことです)
(思い違いかもしれませんが js では ' ' と同等かと...)
お蔭様で基本的な機能は ほぼ装備できたかと...
あとは bug-fix... (password check が おかしい w )
0679nobodyさん
2010/02/15(月) 19:57:40ID:???この場合 // は正規表現であって、 "" の展開解釈とは全く別物。
677 氏のを丁寧に書くと、
grep( $_ =~ /^log\d+\.tsv$/, readdir(DIR));
ついでに grep { ! /^\./ } readdir DIR ; は、ほぼお約束。
0680nobodyさん
2010/02/15(月) 21:12:43ID:???>"" の展開解釈とは全く別物
たとえば
$str='RegExps'; $re='RegExp';
と言う条件で
1. $x=~s/$re//;
2. $x=~s/RegExp//;
の両者は
perl では等価とみなされるけれど,
js では /$re/ 内の $re は単なる文字列と見なされる (思い違いかも ?)
と言いたかっただけで...
" " と / / とが同等な意味を持つとは思ってません.
それはさて置き, わざわざありがとうございます.
0681nobodyさん
2010/02/15(月) 21:14:44ID:???0682nobodyさん
2010/02/18(木) 07:19:57ID:???けど、いきなり専門用語ばかりで結構厳しい。
もう少し優しいところから解説してくれるPerlの参考書って無いですかね。
0683nobodyさん
2010/02/18(木) 11:11:39ID:???0684nobodyさん
2010/02/18(木) 18:34:01ID:???>いきなり専門用語ばかりで
取り合えず例を上げて見て.
他の言語の経験が全くないのなら
js などの client side script から始めた方がの方がお手軽.
(server side script に いきなり飛び付くのは無謀だと思う)
0685nobodyさん
2010/02/18(木) 18:43:20ID:???読み終えたらこの本に感謝しつつすぐに初めてのPerlを読み直せばよい
0686614
2010/02/19(金) 20:19:59ID:h5oXbvl5完全コピペではなく手打ちで部分を写していたので変数宣言を忘れていました。
本体スクリプトではしっかり宣言されています。
0687nobodyさん
2010/02/19(金) 23:15:33ID:???Windowsで、ActivePerl使っています。バージョンは、5.10.1です。
モジュールをダウンロードしようとしているのですが、
PPM(?)がうまくいきません。
該当箇所をクリックしても、直接コマンドを叩いても、再インストールしても無理でした。
どうか助けてください。
0688nobodyさん
2010/02/19(金) 23:24:24ID:???0689687
2010/02/19(金) 23:26:32ID:???0690687
2010/02/19(金) 23:28:21ID:???直接コマンドを叩いた場合は、
ppm gui failed: DBI connect(' ……みたいなエラー表示が出ます。
0691nobodyさん
2010/02/19(金) 23:44:05ID:???0692687
2010/02/19(金) 23:45:46ID:???どうしたら改善しますか?
0693nobodyさん
2010/02/19(金) 23:53:01ID:???0694nobodyさん
2010/02/20(土) 03:43:43ID:???名前を変えれば
0695nobodyさん
2010/02/21(日) 02:09:28ID:JUU8in1a実行あるいはバージョン確認しようとすると以下のようなエラーが出ます。
原因が分かる方いらっしゃいますでしょうか?
ちなみにインストールしたImageMagickは、ImageMagick-6.3.8-0-Q16-windows-dll.exe
インストールしたPerlMagickは、上記に付属しているPPD経由です。
[エラー内容]
C:\>perl -MImage::Magick -e 'print $Image::Magick::VERSION'
Can't load 'C:/usr/site/lib/auto/Image/Magick/Magick.dll' for module Image::Magick: load_file:再帰が深すぎます。スタックがオーバーフローしました。 at C:/usr/lib/DynaLoader.pm line 229. at -e line 0 Compilation failed in require.
BEGIN failed--compilation aborted.
0696nobodyさん
2010/02/21(日) 11:20:54ID:???こうじゃない?
0697nobodyさん
2010/02/22(月) 04:19:02ID:???前スレで build822 の挙動はどうもあやしくないかという話があったし
別の build に変えてみたらどうだろ。
0698nobodyさん
2010/02/22(月) 07:37:17ID:cIJ/BQEI今、cgiファイルの何行目を読んでいるかというのを表示させたいのですが、
そういう関数とか方法があれば教えてもらえないでしょうか。
よろしくお願いします。
0699nobodyさん
2010/02/22(月) 10:05:05ID:dMBZdRpEttp://search.cpan.org/dist/Mail-Sendmail/Sendmail.pmここの右にあるDownloadからとってきて
test.plを試してみたんですが、
Result: 250 OK id=******-******-AS
ok 2
と表示されるにもかかわらず。メールが届きません。
$mail{From} = 'Sendmail Test <********@provider.ne.jp>';
$mail{To} = 'Sendmail Test<********@hotmail.com>';
$server = 'localhost';
中身は↑のような感じで書き換えてます。
ちなみにmailtoのアドレスを全然存在しないものにしても同じResult:250 OKが表示されます。。
どこがおかしいんでしょうか。。。
0700nobodyさん
2010/02/22(月) 10:34:57ID:???素のlocalhostじゃ届かないと思う。
0701nobodyさん
2010/02/22(月) 10:36:42ID:???0702699
2010/02/22(月) 10:59:18ID:???>>700
sendmailのインストールはperl -MCPAN -e shellからinstall Mail::Sendmaiでいれてます。
ていうか、SMTPサーバなしでもいけるのかと思ってました。。
プロバイダのsmtpサーバ設定したら認証エラーが帰ってきました。
たぶん、これで認証情報セットしてやればいけますよね。
>>701
/var/log/ mail.err、mail.info、mail.log、mail.warnにはびっくりしするぐらい一切なにもでてませんでした。
もしかしてperlのsendmailから出るログって他のとこだったりするんですか?
0703nobodyさん
2010/02/22(月) 11:20:59ID:???>>699 さんが書いてるように、SMTP を直接叩くって書いてるんだから、localhost のメール関連のログには一切残らないよ。
ローカルにメールのログを残したいなら、ローカルにメールサーバー立てて
そこから転送させるしか無いかと。
0704nobodyさん
2010/02/22(月) 11:25:40ID:???何の関連性もない。
0705nobodyさん
2010/02/22(月) 11:29:38ID:???Net::SMTP使うのが幸せの近道な気がする。
0706nobodyさん
2010/02/22(月) 11:37:04ID:???あのログファイルはsendmailが残してるわけじゃなくてSMTPサーバが吐くってことですか?
>>704
よくわからないですが、.cpan/buildのなかにあるtest.plで試してみてます。
ですが認証?でつまづいてるっぽくて
RCPT TO: error (554 5.7.1 <************@hotmail.com>: Recipient address rejected: Access denied)が消えません。
$server = 'smtpauth.eonet.ne.jp:587';
$mail{auth} = {user=>"アカウントID", password=>"パスワード", method=>"CRAM-MD5" };
をいれてやってみましたが、ずっと554です。
methodはPLAIN LOGIN CRAM-MD5も試してみましたがおなじでした。。
アカウントIDとパスワードに関しては別のメーラに設定してるものと同じ何で間違ってはいないと思います。
smtpサーバのEHLO localhostの結果は↓です。
250-ae0000-mailauth13.eo.k-opti.ad.jp
250-PIPELINING
250-SIZE 20000000
250-ETRN
250-AUTH PLAIN LOGIN CRAM-MD5
250-AUTH=PLAIN LOGIN CRAM-MD5
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
0707nobodyさん
2010/02/22(月) 11:39:08ID:???自分ではさっぱりです。。ブログツール(MT)からメールとばそうして今にいたります。
Net::SMTP一度調べてみます。
0708nobodyさん
2010/02/22(月) 11:43:44ID:???0709nobodyさん
2010/02/22(月) 12:30:01ID:???0710nobodyさん
2010/02/22(月) 13:03:27ID:???0711nobodyさん
2010/02/22(月) 20:01:01ID:???遅くなって申し訳ないです。
参考になりました。とりあえずもうちょっとコンピュータの初歩的な知識を入れるところから始めます。
0712nobodyさん
2010/02/26(金) 13:28:32ID:???とりあえず動かしてみようとしたのですが、Undefined subroutineが返ってきました
ttp://www.stackasterisk.jp/tech/program/perl03_03.jsp
エラーメッセージは以下です
> Undefined subroutine &main::myCreateTextFunction called at test4.pl line 9.
おそらく「$attach_data = &myCreateTextFunction;」でサブルーチンが見つからないという事だと思いますが
ソースを追っても何が原因なのかよく分かりませんでした
こちらの環境は以下の通りです
WindowsXP Home
ActivePerl v5.10.1
sendmailの代わりに以下を導入しています
ttp://homepage1.nifty.com/yito/anhttpd/faq/sendmane.html
このプログラムの設定自体は正常です(コマンドラインからのテスト実行でメールは正しく受信出来ました)
ソース内のsendmailの記述(42行目あたり)も上記プログラムのパスに置き換えています
mimew.plとjcode.plはどちらもスクリプトと同じディレクトリに格納しています
何かヒントだけでも結構ですのでお願いします
0713nobodyさん
2010/02/26(金) 16:35:26ID:???sub myCreateTextFunction {} が本当にないからそのエラーが出るのは仕方ないね。
$attach_data に入れる値の用意ぐらい自分でしろということなんでしょう。
そこのサンプルは古風すぎるし Net::SMTP を使ってるサンプルで覚えるほうがいいよ。
0714nobodyさん
2010/02/26(金) 18:46:59ID:???後、2004年にその書き方をしてるってーのはどーよ…
http://www.stackasterisk.jp/tech/program/index.jsp;jsessionid=aPeJyFylGm44
0715712
2010/02/26(金) 19:28:45ID:???回答感謝です
とりあえず自分の学習用にいじくるつもりだったのですが、
Net::SMTPにも注目したいと思います
0716nobodyさん
2010/03/06(土) 17:25:20ID:???そのファイルを、作成されるのとほぼ同時に任意のメールアドレスへ送りたいです
メールへの送信はON/OFFを任意に切り替えられるようにしたいです
ちなみに、作成される日時などは完全にランダムで、全く作られない日が数日続く事もあれば
数分おきに作られ続ける事もあります
また、作成されたファイルが上書きされたりすることはありません
一度作られたらずっとそのままです
しかし、一度作られたファイルは後から削除されたりすることもあります
そういう事はPerlでは可能でしょうか?
ご意見をお願いします
0717nobodyさん
2010/03/06(土) 17:27:58ID:???ファイルを作るプログラムから呼び出せば別だが
0718nobodyさん
2010/03/06(土) 20:58:00ID:???もっと短い間隔だったらTime::HiResでミリ秒単位のウェイトをかけてループで監視。
くらいかな。
同時にしたけりゃファイルシステムにフックかける必要があるね。やりかたは知らん。
0719716
2010/03/07(日) 00:17:02ID:???「ほぼ同時」は、「数分以内」と読み替えてください
あと、あれから検索してみたのですが、
File::Monitorというモジュールが目的に近そうだという事まで分かりました
ttp://search.cpan.org/~andya/File-Monitor-0.10/lib/File/Monitor.pm
どうやら、新規作成、削除、変更されたファイルやフォルダを検知できるようです
とりあえずこれをしばらくいじってみようと思います
0720nobodyさん
2010/03/07(日) 14:03:50ID:???それが発火するタイミングにひっかければいいんじゃないか?
0721nobodyさん
2010/03/07(日) 14:17:12ID:???0722nobodyさん
2010/03/07(日) 16:23:25ID:???添削してやってください。
use strict;
use warnings;
open (INFILE, $ARGV[0]) or die "file open error: $!";
binmode INFILE;
while( <INFILE> ){
chomp;
print "$_\n";
}
close INFILE;
0723722
2010/03/07(日) 16:51:32ID:???0724nobodyさん
2010/03/08(月) 00:24:49ID:???AAA
BBB
CCC
↑こんなファイルを読み込んで、以下のように出力したいのです
XXXAAA
XXXBBB
XXXCCC
単純に、whileなりforeachなりループの中のprintの部分を以下のような感じに変更するだけで良いかと思ったのですが、
print "XXX".$_;
しかし結果は以下のようになってしまいます
XXXAAA
BBB
CCC
これは何が原因でしょうか?
0725nobodyさん
2010/03/08(月) 01:14:56ID:???0726nobodyさん
2010/03/08(月) 01:33:22ID:???$_に全行入っちゃってるだけじゃないでしょうか。
ループのところ、特にファイルハンドルから取得してるところのコード書いてみてください。
0727724
2010/03/08(月) 01:47:54ID:???分かりました
#----
open FH, "< (ファイル名)";
my @list = <FH>;
foreach(@list){
chomp;
print "XXX".$_;
}
close(FH);
#----
主要部分はこんな感じです
ループ部分を、一行読み込み→出力→次の行へ…というイメージでとらえていたのですが…
0728nobodyさん
2010/03/08(月) 01:59:03ID:???コードそのものには特に問題はありません。(closeの位置とか気にはなりますが)
読み込ませてるファイルの改行コードは何ですか?
0729nobodyさん
2010/03/08(月) 02:03:49ID:???XXXAAAXXXBBBXXXCCC にならんか?
0731724
2010/03/08(月) 02:52:04ID:???実は、>>727の前には色々と前処理が入っていました
そこで試しに、>>727の部分だけを抜き出して別ファイルで保存し実行した所
期待通りの動作(全ての行にXXXが追加される)をしてくれました
原因はこの前段階にありそうですので、もうしばらくこちらで調べてみます
ありがとうございました
0732nobodyさん
2010/03/08(月) 02:55:51ID:???0733nobodyさん
2010/03/08(月) 16:09:12ID:???0735nobodyさん
2010/03/09(火) 00:36:00ID:???0736nobodyさん
2010/03/09(火) 11:48:41ID:???PerlでSOAP通信でデータを相手サーバーに送った後、
その処理結果をSOAP通信でこちらのサーバー(エンドポイントURL)に投げてくれる
サービスを使おうとしているのですが、送信は下記ページで紹介されているものを
応用してできると思うのですが、どうやって処理結果を受け取るのかがまったくわかりません。
ちなみに、WSDLは公開されていて、受け取りたいmethod名、key名はわかっている状況です。
参考文献、サンプルソースなど頂ければとても助かります。
よろしくお願いいたします。
(送信サンプルにしたものです↓)
ttp://www.thinkit.co.jp/cert/article/0609/8/3/2.htm
0737nobodyさん
2010/03/09(火) 12:56:45ID:???オラなんだかワクワクしてきたっゾ
0738736
2010/03/09(火) 16:28:23ID:???下記のコードをコマンドプロンプトから試してみましたが、
なにも出力されません。。エラーすら吐かれません。。SOAP::Liteはインスト済みです。
添削お願いできますでしょうか。。
--------------server.cgi
#!/usr/bin/perl
use strict;
use SOAP::Transport::HTTP;
SOAP::Transport::HTTP::CGI
->dispatch_to('Call')
->handle;
package Call;
sub testMes($$){return join(', ', @_);}
--------------
--------------client.cgi
#!/usr/bin/perl
use strict;
use SOAP::Lite;
print SOAP::Lite
->uri("http://localhost/Call")
->proxy("http://localhost/server.cgi")
->testMes('TEST')
->result;
--------------
0739nobodyさん
2010/03/09(火) 16:57:24ID:???0741nobodyさん
2010/03/09(火) 21:03:56ID:???0742736
2010/03/09(火) 21:21:32ID:???server.cgi,client.cgiどちらも消してみましたが同じでした。。
0743nobodyさん
2010/03/09(火) 21:28:59ID:???0744nobodyさん
2010/03/09(火) 22:18:43ID:???0745nobodyさん
2010/03/10(水) 01:27:55ID:???0746nobodyさん
2010/03/11(木) 12:44:28ID:???それとWindowsならshebangは関係ないよ
0747nobodyさん
2010/03/11(木) 17:34:09ID:???スペック:OSはXPのホームエディションsp3
でActivePerl 5.8.0 Build 806 Windows MSI 11.5MB を落とせるサイトを探してます
自分で探しているのですが見つからず・・・
もうないのでしょうか・・・
0748nobodyさん
2010/03/11(木) 18:26:22ID:???ググれ
0749nobodyさん
2010/03/11(木) 20:17:58ID:???ありがとうございます
またまた質問で申し訳ないです
インストールしてpc再起動後コマンドプロプトでC:\Documents and Setting\○▽■>perl-vを入力したのですが、
『perl-vは内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルと
して認識されていません。』と出ます。
何が原因として考えられるのでしょう?
0752nobodyさん
2010/03/12(金) 13:17:35ID:???ソース
$que=$db->prepare(<<"EOF");
insert into chara values(NULL,"$name",$sex,$age,$color,$icon,$rank,$tatiba,"$mail","$uri","あいうえお")
今は"あいうえお"実際はフォームからうけとった"$prof" それでselect文で表示させたら、 ?????†???? と文字化け
SQL側の設定もclient mysqldの文字セットはutf-8、GUI版のSQLクライアントから日本語を入れたらちゃんと表示されるんですが。
フォームからやっても、perlから直接"あいうえお"とやっても文字化けしてしまいます。
解決策を教えてください。
フォームの場合
add.cgi?prof=あいうえお
直接の場合は
"あいうえお"
0753nobodyさん
2010/03/12(金) 14:05:24ID:???$dbh->do("SET NAMES utf8");
が必要だったみたいです。
0754nobodyさん
2010/03/12(金) 23:26:14ID:???0755nobodyさん
2010/03/12(金) 23:54:33ID:???http://d.hatena.ne.jp/a666666/20090826/1251270979
0756nobodyさん
2010/03/13(土) 07:29:42ID:???>>752はutf8フラグとかわかってなさそうだけど
0757nobodyさん
2010/03/13(土) 16:02:02ID:???#!/usr/bin/perl
@data=(
["array","code"],
["point","test"]
);
print "$data[0][0]\n";
print "$data[0][1]\n";
この場合array codeと出力されますが、コード1行でarray codeと出力する事は出来ないのでしょうか?
C言語みたいに$data[0]でarray codeが出力されるかと思ったらうまくいきませんでした。
どなたか教えてください。
0758nobodyさん
2010/03/13(土) 17:32:00ID:???一行だよ
えっ、違う?
0759nobodyさん
2010/03/13(土) 17:51:31ID:???0760nobodyさん
2010/03/13(土) 17:55:05ID:???これのこと?
0761760
2010/03/13(土) 17:56:01ID:???0762nobodyさん
2010/03/13(土) 18:54:32ID:???print "@{$data[0]}\n";
これでできたとは、文法が複雑ですね。
perlは覚える事がおおすぎる。
0763nobodyさん
2010/03/13(土) 19:53:49ID:???0764nobodyさん
2010/03/13(土) 19:59:10ID:???"@array" は配列を $" の中身(デフォルトは半角スペース)で区切られた文字列に展開すること
これがわかってりゃなんてことない話なんだけどな
0765nobodyさん
2010/03/14(日) 09:26:53ID:???いっそ全てリファレンスだったらと思うことがある
0766nobodyさん
2010/03/18(木) 21:32:34ID:???環境はWindows7、ActivePerl最新版です
一時的にユーザ名をAdminなどに変更してみたのですがUsers直下のユーザ名フォルダは変更されませんでした
何か良い対策はありますでしょうか?
0767nobodyさん
2010/03/18(木) 21:42:36ID:???Admin でログインして、権限の強い perl っていうユーザーを作ります。
で、ppm のショートカットの設定にあると思うんだけど、指定したユーザーで
実行するようにする。
こうすれば PPM 実行できる。
ハズ
0769766
2010/03/18(木) 22:13:32ID:???あれからさらに検索した所、以下のような情報を見つけ、且つ成功したので報告します
ttp://blog.mukairiku.net/.m/2008/01/activeperl-%E3%81%AE-ppm-%E3%81%8C%E8%B5%B7%E5%8B%95%E3%81%97%E3%81%AA%E3%81%84%E3%81%AE%E3%81%A7%E3%81%99.html
PPMを叩く前に、環境変数ACTIVEPERL_PPM_HOMEをPPMフォルダパスにSETしてやる事で起動しました
0770nobodyさん
2010/03/20(土) 14:30:28ID:???何故わざわざjcode.plをjcode.pmに作り直すのか教えてください
0771nobodyさん
2010/03/20(土) 15:18:45ID:???後者についてはJcode.pmの実体について調べればすぐわかる。
0772nobodyさん
2010/03/20(土) 15:55:08ID:???0773nobodyさん
2010/03/20(土) 16:07:23ID:???0774nobodyさん
2010/03/20(土) 18:01:10ID:???無駄にがんばってる気がするけどしょうがない。
0775nobodyさん
2010/03/20(土) 18:32:43ID:???なんでもeggにするPython
なんか問題あるのか
0776nobodyさん
2010/03/20(土) 19:10:35ID:???eggおいしい
pm食えない
0777nobodyさん
2010/03/20(土) 22:25:30ID:/W705D6D「オブジェクト指向だと使いやすいから。」と考える人は作り直す
と思います。でもその反対にわざわざオブジェクト指向を導入する
必要がないと考える人もいるでしょう。だから jacode.pl が作られ
たのだと思います。
0778nobodyさん
2010/03/21(日) 00:13:01ID:???0779nobodyさん
2010/03/21(日) 02:16:04ID:???0780nobodyさん
2010/03/24(水) 01:03:23ID:N7x4Tlpb0781nobodyさん
2010/03/24(水) 01:31:29ID:???0782nobodyさん
2010/03/24(水) 02:07:39ID:???Perl5.8.8なのにMIME::Parserが入ってないレン鯖に手動コピーでは無理だったのと、
他のレン鯖ではJParserがうまく動かず、執着するのもなんなのでいっそのこと他にあればなぁと思いまして。
さきほどEmail::MIME::Attachment::Stripperを見つけて試していますが、タコなのでいいサンプルがないと使いこなせない^^;
0783nobody
2010/03/25(木) 00:21:12ID:???被害範囲はEncode内にとどまらずperlそのものが使いにくくなった。
perlはCGIで爆発的に普及したものの、WWWに対応しようと試みて
ユニコード化し、残念ながら失敗した。
もしEncodeがなかったらPHPもRubyも必要なかったのに。
0784nobodyさん
2010/03/25(木) 00:29:49ID:???0785nobodyさん
2010/03/25(木) 01:06:49ID:bcbloiJgまだ問題があるにしても、入りと出で変換しましょうってポリシーはわかりやすいと思う。
0786nobodyさん
2010/03/26(金) 17:33:17ID:Tt84M8Ngができません。
use Encode qw/ from_to /;
from_to($str, "utf8", "sjis");
で変換しようとしているのですが、太陽の絵文字を使うと16進でee98be→3f
となってしまいます。f89fに変換するにはどうしたらよいのでしょうか?
よろしくお願いします。
0787nobodyさん
2010/03/26(金) 18:00:24ID:???変換テーブル用意するとかしないと
0788nobodyさん
2010/03/26(金) 18:01:01ID:???0789nobodyさん
2010/03/28(日) 01:54:04ID:???そのポリシーが本当に分かりやすいのなら Unicode は生まれなかっ
たはず。
すでにあった ISO 2022 はそういった考えで世界中の文字を同時に
扱うことを考えていたのだけれど、現実は理想通りにはならなかっ
た。オクテット列が今、何の符号化なのか状態をもつようになるの
で検索や置換がとてもやりずらくて使い物にならない。
そこでエスケープシーケンスのないコードとして Unicode が開発
されたのでござる。
でも Encode は "フラグ" を再発明してしまって、同じ失敗を繰り
返してしまった。
これはきっとバベルの呪いだと思う。
0790nobodyさん
2010/03/28(日) 03:13:58ID:???00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
先頭の 1bit が右から読むのか左から読むのか
2 〜 16 bit が言語コード
残りが文字コード
ほら簡単
0792nobodyさん
2010/03/28(日) 08:56:47ID:???0793nobodyさん
2010/03/28(日) 11:17:51ID:Rvgpa/pp>モジュールによってはフラグのあるなしで挙動が変わるのも多いし、どっちで渡すべきなのかPODに書いてなかったりするから困る。
あぁ、これは確かにそうだね
POD内でまずutf8とか検索したりする
0794nobodyさん
2010/03/28(日) 20:17:39ID:???0796nobodyさん
2010/04/01(木) 19:06:37ID:???0797nobodyさん
2010/04/02(金) 10:24:03ID:???kawaisosu
ttp://www.value-domain.com/xreaip.php
0798nobodyさん
2010/04/02(金) 11:31:49ID:???新規に借りて5.6なんてのは某大手のあそこくらいだな
0799nobodyさん
2010/04/02(金) 11:41:29ID:???ネット上のPerlの解説サイトって未だに結構多かったりする。
そういうサイトで独学している人ってそれなりの数がいると思うのね。
本気だして新刊を買わずにブックオフとかで入門書の古本を購入して独学する人もいるのではないかなと。
そういう目でネット上の解説サイトを眺めると2003年くらいの情報が意外に多かったりする。言わば最新バージョンに合わせて更新をしていないわけ。
今も昔も解説書に共通しているのはPerl ScriptやCGIを自作したらサーバーの負荷が多くならないように自前のサーバを立てて練習しようよねとも書かれてる。
Windowsに限って言えばダウンロードするPerlは5.6や5.8、中には5.10もあったりする。でも書籍は古いまま。
意外にバージョンの確認を怠った結果、動かないってことがあるのでは?と思った。
0800nobodyさん
2010/04/02(金) 11:49:30ID:???http://anchorage.2ch.net/test/read.cgi/gamenews/1270138389/
0801nobodyさん
2010/04/02(金) 13:09:21ID:???他の言語でもよくある話だけど、そういうサイトを参考にするなって話だよね
情報が溢れちゃってて探しにくいってのがperlの良くないところということか
0802nobodyさん
2010/04/02(金) 13:18:05ID:???参考にしてはいけないサイトをGoogleさんに教えてあげてくださいw
マルチポストではないと思うのだけど、
"Perlを勉強しているのですが正規表現についてよくわからないので教えてください。"
でググると情報が溢れていて且つ重複しているのが目につくよね。
0803nobodyさん
2010/04/02(金) 13:27:48ID:???まぁ重複してるといえばそうだけど、マルチポストではないはずだよ
0804nobodyさん
2010/04/02(金) 14:04:15ID:???検索エンジンの中の人も大変そう。
ところでダンプリストからキーワードAとキーワードBの区間を抽出して
元に戻すのは次のどちらがより良いんでしょう。
$_=~ s/([a-fA-F0-9]{2})/pack("C", hex($1))/ego;
$_=~ s/([a-fA-F0-9]{2})/chr(hex $1)/eg;
0805nobodyさん
2010/04/02(金) 16:17:20ID:???ファイル名にそのファイルが作成された日時(YYYYMMDDhhmmss.拡張子)が含まれているファイルがあります
ファイル名のフォーマットはそれで全て統一されています
一つディレクトリにそんなファイルが数百〜数千は存在しています
何年何月何日にいくつのファイルが作られたのかをCSVなりTSVなりで一覧化して出力したいです
例:YYYYMMDD,n(その日作られたファイルの総数)
このような処理で、何か一般的なアプローチの仕方はありますでしょうか?
キーワードだけでも何でも良いのでご教示をお願いします
0806nobodyさん
2010/04/02(金) 16:24:00ID:???$list{'2010-04-02'}++;
みたいにカウントしていけばいいのでは
0807nobodyさん
2010/04/06(火) 21:47:39ID:???perlでNet::Ping;を使いping監視をしてるのですが
ping(ホスト先, タイムアウト数)でping送信させてるのですがこれにpingサイズを指定して送るにはどうすればよいのでしょうか?
0808nobodyさん
2010/04/09(金) 23:18:29ID:???0809nobodyさん
2010/04/11(日) 02:01:29ID:???諸先輩方はPerlの各種変数をどのように体得したのですか?
0810nobodyさん
2010/04/11(日) 02:25:58ID:???0811nobodyさん
2010/04/11(日) 13:08:05ID:???0812nobodyさん
2010/04/11(日) 15:56:17ID:???0813nobodyさん
2010/04/11(日) 16:25:03ID:???ふむふむ。やはりくりかえしですよね。
ところで、どのくらいの期間、
そして、何回くらい「これどうやるんだっけ→perldoc→繰り返し」を
やりつづけてなんとなくつかめてきましたか?
なんと申しますか、個人差もあるのでしょうが、自分の言葉で理解できるまで
どのくらいかかるものなのか知りたくなりました。
0814nobodyさん
2010/04/11(日) 16:38:34ID:???特殊変数なんて覚えるだけ時間の無駄
0815nobodyさん
2010/04/11(日) 17:01:07ID:???他人に物事を教えたことのない奴ほど横道にそれたレスが格好いいと
思い込むようだ。
喩えれば>>811のようにやったこともない妄想をさもやってきたかのようにな。
0816nobodyさん
2010/04/11(日) 17:01:53ID:???w
0817nobodyさん
2010/04/11(日) 17:50:30ID:???これから頑張って覚えるぞ。
0818nobodyさん
2010/04/11(日) 17:55:01ID:???0819nobodyさん
2010/04/11(日) 22:46:17ID:???一緒に初めてのJavaScript第二版買っていたから混同しちゃった。
0820nobodyさん
2010/04/12(月) 01:11:54ID:???釣りなのは分かっているが...
$ は $calar(Scalar)
@ は @rray(array)
% は key/value(%)
特殊変数は実際には何個かしか使わないのですぐ覚えられる。
0821nobodyさん
2010/04/12(月) 02:20:48ID:u6Su4USy0823nobodyさん
2010/04/13(火) 02:56:07ID:???釣りではなくて真面目に入信したいのですよ。
すっごく分かりやすくて助かりました。
ありがとうございます。
>>822
氏ね〜〜〜
0824nobodyさん
2010/04/13(火) 03:16:21ID:???0825nobodyさん
2010/04/13(火) 13:27:56ID:???0826nobodyさん
2010/04/17(土) 09:49:46ID:???0827nobodyさん
2010/04/18(日) 11:40:17ID:???ここのdiff.cgiを入手できるところはありませんか?
0828nobodyさん
2010/04/18(日) 15:51:45ID:???そのdiff.cgiが欲しいならそれを作ったその人に言うしかないと思うけど、
やりたいことがただのdiffならString::Diffでできるよ
http://search.cpan.org/~yappo/String-Diff-0.04/lib/String/Diff.pm
0829nobodyさん
2010/04/19(月) 02:56:46ID:???ほう。面白いものがありますな。
できるものなら、これ[1]を応用して、このくらい[2]ことをやってほしいね。
[1]ttp://www.hyuki.com/aozora/diff.cgi
[2]ttp://www.cric.or.jp/db/article/taisyo.html
0830nobodyさん
2010/04/19(月) 04:27:27ID:???0831nobodyさん
2010/04/19(月) 17:12:59ID:???mixiかなりデザイン変わってるみたいだけど
0832nobodyさん
2010/04/19(月) 19:15:13ID:???0833nobodyさん
2010/04/20(火) 11:55:49ID:???だいぶいろいろ変わってるみたいだけど、なんかいい参考書ない?
0834仕様書無しさん
2010/04/20(火) 14:40:38ID:???俺よりレベル低い
0836仕様書無しさん
2010/04/22(木) 08:32:48ID:???ここはバカすぎてかわいそうだからperlやめて
0839仕様書無しさん
2010/04/23(金) 08:11:31ID:???獣の奏者エリンの闘蛇(トーダ)だろ?
シネ
0840nobodyさん
2010/04/23(金) 22:15:45ID:???それよりも超初心者を脱却したなら質問に答えてあげなよ。
0843nobodyさん
2010/04/23(金) 22:51:16ID:???WWW::Mixiも使えるんじゃね?
0848nobodyさん
2010/04/26(月) 21:53:59ID:???友人や愛の維持にはある程度のお金はかかるものだが
普通は友人や愛をお金で買うことはできない。
もし>>844さんが買えてるとしたら相手はゲイじゃねえの。
0849nobodyさん
2010/04/26(月) 21:57:06ID:???0850nobodyさん
2010/04/27(火) 01:26:44ID:???0851nobodyさん
2010/05/07(金) 22:36:42ID:gfyxirvM$reiに0が入る時の結果は0〜4
1〜5が入る時には0〜3
6〜10が入る時には0〜2
であっているでしょうか?
0853851
2010/05/08(土) 00:48:20ID:???$reiに0、5、10以外の数値が入って割り切れない数値の時には
3.8や3.6などの数値がINTによって小数点以下が切り捨てられるので
前記のようになるかと思ったのですが、思い違いでしょうか
0854nobodyさん
2010/05/08(土) 02:11:23ID:???5−1÷5=rand(4.8)=0〜4.79→int→0〜4
5−2÷5=rand(4.6)=0〜4.59→int→0〜4
5−3÷5=rand(4.4)=0〜4.39→int→0〜4
5−4÷5=rand(4.2)=0〜4.19→int→0〜4
5−5÷5=rand(4.0)=0〜3.99→int→0〜3
5−6÷5=rand(3.8)=0〜3.79→int→0〜3
・・・
0855nobodyさん
2010/05/08(土) 03:10:16ID:???知ったはずの順序を無視して脳内で妙な処理をしてました
ご丁寧にありがとうございました
0856nobodyさん
2010/05/08(土) 05:29:33ID:???問題はそれだけじゃないよ
数値が変わると返ってくる数値の期待値も変わるし
多分意図してない動作だと思うから忠告しとく
perl -e 'for(0..100000){ $tmp{int rand(5 - 4 / 5 )}++; } print "$_: $tmp{$_}\n" for sort keys %tmp'
0: 23773
1: 23960
2: 23832
3: 23657
4: 4779
0857nobodyさん
2010/05/08(土) 07:04:06ID:???0858nobodyさん
2010/05/08(土) 14:53:25ID:???0859nobodyさん
2010/05/08(土) 23:40:53ID:???ttp://****/hoge.cgi?uho.jpeg
hoge.cgiではなくuho.jpegに直接アクセスするというものを見かけますが、
これはどういう仕組みなのでしょうか?
サンプルを公開しているサイトなど教えていただければ幸いです
0860nobodyさん
2010/05/08(土) 23:42:53ID:???0861nobodyさん
2010/05/08(土) 23:55:29ID:???直接アクセス? uho.jp を表示しようと hoge.cgi を通してる時点で直接ではないよ?
もっと落ち着いて言葉を選んで質問を書いてみてはいかがだろうか?
0862nobodyさん
2010/05/08(土) 23:55:48ID:???0863nobodyさん
2010/05/09(日) 00:22:07ID:???0864nobodyさん
2010/05/09(日) 00:46:41ID:???ロケーションヘッダーでググれ
0865nobodyさん
2010/05/09(日) 01:30:14ID:???mod_rewrite (サーバーの設定確認が必要)
単なるリダイレクト
jpg を読んで print
html を出力して img で表示してるだけ
どれか好きな方法で良いかと
0866nobodyさん
2010/05/09(日) 01:50:15ID:???0867nobodyさん
2010/05/09(日) 04:21:34ID:???0868nobodyさん
2010/05/27(木) 00:59:35ID:???現在日本語を含むURLの場合、リンクが自動で貼ることができなく困っています。
例:http://hoge.com/~foo/にほん語.txt ←http://hoge.com/~foo/までしかリンクがされません。
パーセントエンコード?をすればリンクされるようですが、そうすると表示が↓
http://hoge.com/~foo/%82%c9%82%d9%82%f1%8c%ea.txt
のようになってしまい、見た目で何がリンクされているのかが分からなくなります。
これを何とか自動でできるようにしたいのですがどうすればいいでしょうか?
$string =~ s/([^=^\"]|^)((http|ftp):[!#-9\?=A-~]+)/$1<a href=$2 target=_blank>$2<\/a>/g;
または、ヒントがあるHPがあれば教えて下さい。
よろしくお願いします。
0869nobodyさん
2010/05/27(木) 01:03:07ID:???0870nobodyさん
2010/05/27(木) 01:24:27ID:???0871nobodyさん
2010/05/27(木) 22:38:08ID:???ttp://ja.wikipedia.org/wiki/%E3%83%AA%E3%83%92%E3%83%A3%E3%83%AB%E3%83%88%E3%83%BB%E3%83%AF%E3%83%BC%E3%82%B0%E3%83%8A%E3%83%BC
# @UTF8環境
0872nobodyさん
2010/05/28(金) 19:54:25ID:BUacjjtF常に最初に文字列が出力される様にするには
どうすればよいのでしょうか?
-------------
あいうえお
-------------
という内容のファイルがあるとしたら
-------------
さしすせそ
かきくけこ
あいうえお
-------------
のように、逆順で書き込むには
どうすればいいんでしょうか?
0873nobodyさん
2010/05/28(金) 20:54:39ID:???0874nobodyさん
2010/05/28(金) 21:21:29ID:???print FH reverse @foo;
でいいでしょう。
0875nobodyさん
2010/05/28(金) 21:25:57ID:YjM9qGIs$i の数値が0.1でも小さいほど真になる確率が上がるという認識で合っているでしょうか?
0876nobodyさん
2010/05/28(金) 21:30:07ID:???つまり$iが0.1だとこの条件式は常に真
0877nobodyさん
2010/05/28(金) 21:36:29ID:YjM9qGIs3よりも2.9や2.8、4よりも3.9や3.8である時の方が0(真)になる確率が上がるのでしょうか?という質問でした
0878nobodyさん
2010/05/28(金) 21:46:28ID:???0879nobodyさん
2010/05/28(金) 21:49:12ID:???普通はこう書くけどね
まあ確率は上がるんじゃないかな
0880nobodyさん
2010/05/28(金) 21:56:22ID:???for (2.9, 2.7, 2.5, 2.3, 2.1) {
my $i = $_;
for (0..100000) { $result{$i}++ if !int(rand($i)) }
printf "%.1f: %d\n", $i, $result{$i};
}
割りとはっきり変わるね。
0882nobodyさん
2010/05/29(土) 14:20:04ID:???ありがとうございました!!完璧でした!
心からお礼を言いたいです。
>>873さんもありがとうございました!
0883nobodyさん
2010/06/07(月) 09:42:41ID:???そのあとマスタリングへ進む予定なのだけれど、初めて5版(2009)と続初めて改訂版(2006)は間に3年の差がある。
Versionの差が大丈夫なのかと気になっています
0884nobodyさん
2010/06/07(月) 17:34:29ID:???その決まった行だけ呼び出して、決まった行だけ上書きするにはどうしたらいいのでしょうか?
決まった行だけ呼び出すのはできましたがそこから上書きするとその行以外が空白になってしまいます
0885nobodyさん
2010/06/07(月) 18:19:14ID:???決まった行以外も読み込んで書き出すか、DB使ってください。
1行のデータ量が固定長ならseekを使う手もありますが、正直お勧めしません。
>>883
2006年版なら問題ないです。
0886nobodyさん
2010/06/09(水) 01:38:21ID:???大丈夫なんですね。
初めて5版はperl5.10に対応したよんって書いてあったので、
その前に出された続初めて改訂版では5.10とそれ以前での変更された仕様で躓かないかと心配していました。
0887nobodyさん
2010/06/10(木) 04:26:17ID:???5.8.8と5.10.0の間で、互換性が保てなくなるほど大きな仕様変更はあまり無い。
どうしても心配ならここを読んでおけば大丈夫だよ。
http://fleur.hio.jp/perldoc/mix/pod/perl5100delta.mix.html
0888nobodyさん
2010/06/14(月) 14:15:33ID:uA0hCtuDPerl 5.8.8で取得するにはどうすればよいでしょうか?
0889nobodyさん
2010/06/14(月) 15:20:22ID:???for my $name ($CGI->param) {
print "$name = $CGI->param($name)\n";
}
0890nobodyさん
2010/06/14(月) 16:19:19ID:???0891nobodyさん
2010/06/14(月) 18:51:04ID:???0892nobodyさん
2010/06/18(金) 17:00:02ID:???それからフォルダ内に出力された画像全てのサムネイルを
自動的に別フォルダへ生成されるようにしたいと考えています。
ImageMagickというのを使えばいい、という所までは解りましたが
どうするのがよいのでしょうか?
ttp://www.aimix.jp/cgi/accimagemagicksz.html
ここのとかをみて試してみましたが
画像サイズは変わってもInternal server errorがでたりとかでちんぷんかんぷんです
0893nobodyさん
2010/06/18(金) 17:02:17ID:???0894nobodyさん
2010/06/18(金) 17:03:15ID:???だから、ばれたらまずい部分を伏せたエラーログをよろしく
0895nobodyさん
2010/06/18(金) 17:09:14ID:???そんなトコな気がしてきた
0896nobodyさん
2010/06/18(金) 17:38:32ID:???サムネイル作るならResizeじゃなくてThumbnail使った方がいいよ
0897nobodyさん
2010/06/22(火) 00:14:54ID:???100行ほどのテキストデータ($textdata)で、ある文字が含まれていたら行を削除
するようにはどのように処理をすればいいでしょうか?
データ形式は以下のとおりです。
あああ 20100622 00:05 いか 001 002 003 004
いいい 20100622 00:05 たこ 001 002 003 004
ううう 20100622 00:05 かに 001 002 003 004
・・・(100行)・・・
よろしくおねがいします。
0898nobodyさん
2010/06/22(火) 01:08:27ID:???my @lines = split("\n", $textdata);
$textdata = '';
for my $line (@lines) {
unless ($line =~ m/ある文字/) {
$textdata .= $line . "\n";
}
}
0899nobodyさん
2010/06/22(火) 02:58:09ID:???0900nobodyさん
2010/06/29(火) 12:10:40ID:???#フォームからデータを受け取る
read(STDIN, $date, $ENV{'CONTENT_LENGTH'});
#データを分解して$valに格納
($name,$val) = split(/=/, $date);
#空白の場合はエラーページへ
if($val eq ''){
print "LOCATION: error.html\n\n";
}
#55555の場合はTOPページへ
elsif($val eq "55555"){
print "LOCATION: ../../index.html\n\n";
}
else{
print "<html>\n";
print "<head><title>入力</title></head>\n";
print "<body>\n";
print "<p>入力されたメッセージは $val です。</p>\n";
print "</body>\n";
print "</html>\n";
エラーページとTOPページへ飛ばす処理は単体では動作したのですが、if〜とすると500エラーになります
どこがおかしいか教えて下さい
宜しくお願いします
0901900
2010/06/29(火) 14:35:51ID:???print "Content-Type: text/html\n\n";
が抜けていただけでした・・・失礼しました
0903nobodyさん
2010/07/02(金) 10:33:45ID:???初めてのPerl5版、って買ったんだけど、
サブルーチンがどうとか関数がどうとかループだ配列だってそっからまったく分からんのです
0904nobodyさん
2010/07/02(金) 14:35:29ID:???その本持ってるけど、かなり判りやすかったよ。
巻末の練習問題の解答を打ち込んで試さないと理解しにくいかも。
0905nobodyさん
2010/07/03(土) 20:35:04ID:???本には、改行文字を削除します と書いてあったのですが
改行文字を削除したから何が変わるのかわかりません
こんなバカでもわかるように説明できませんか?
0906nobodyさん
2010/07/03(土) 20:41:02ID:???テキストエディタとかでよく見るエンターの記号の奴を消すってこと
0907nobodyさん
2010/07/03(土) 21:22:41ID:???my $data = "A[TAB]B[TAB]C[TAB]D[CRLF]";
っていうデータがあったとして、
my @array = split(/\t/, $data);
としたとします。
んで、
if($array[3] eq 'D'){
〜ほにゃらら〜
}
という処理をした場合、$array[3] は D[CRLF] っていうデータなので $array[3] は TRUE にはなりません。
ほら、改行があると面倒くさいでしょ?
だから chomp で改行を切り落とすってワケです。
0909nobodyさん
2010/07/12(月) 13:20:02ID:???:q! で終了したあとの指示で
「 シェルプロンプトが出てきたら、このチュートリアルを始める為ににコマンドをタイプします。」 (vimtutorと打てと書いてあります)
と書いてああるのですが、なにも出てきません
なにがいけないのでしょう
win viata 32 版です
0910nobodyさん
2010/07/12(月) 17:13:52ID:???vim Part3 - ソフトウェア板@2ch
http://pc12.2ch.net/test/read.cgi/software/1224769266/
0911nobodyさん
2010/07/12(月) 17:52:08ID:???まだ足りない準備があったのか
0912最強
2010/07/12(月) 19:11:22ID:OYobocmNhttp://oreilly.com/catalog/pperl3
↑と書いてあったんだけど
URL飛んでもサンプルコードがダウンロード出来る場所ないんだけど
どこで手に入れるの?サンプルコードおしえて
0913最強
2010/07/12(月) 19:16:06ID:OYobocmN0914nobodyさん
2010/07/29(木) 19:44:51ID:CAEHWe/luse Socket;
use FileHandle;
my $id = 'test';
my $line;
my $host = "www.hogehoge.com";
my $port = "80";
my $iaddr = inet_aton("$host") or die "connection failed.";
my $sock_addr = pack_sockaddr_in($port, $iaddr);
socket(SOCKET, PF_INET, SOCK_STREAM, 0);
connect(SOCKET, $sock_addr) or die "connectError";
select SOCKET;
$|=1;
select(STDOUT);
print SOCKET "GET /hoge.php?id=$id HTTP/1.1";
print SOCKET "Host:$host";
shutdown(SOCKET, 1);
while($line = <SOCKET>){
print $line;
}
close SOCKET;
てな感じでGETしてるんだけど、何も送信されていないっぽい。
色々調べてるとHTTP/1.1のあとに本来は\r\nで改行を入れた方がいいみたいなんだけど、
入れるとなぜかBad Requestが返ってきます。\nのみにした場合も同じ。
送信できないのはまた別の原因かもしれないのですが、Perl自体不慣れなものでよくわからなくて・・・
原因の可能性がわかる方いたら、お願いします。
0915nobodyさん
2010/07/29(木) 20:24:47ID:???0916nobodyさん
2010/07/29(木) 20:27:24ID:???行末に改行が無いだけと思うよ
0917nobodyさん
2010/07/29(木) 20:28:05ID:???改行が無いから
print SOCKET "GET /hoge.php?id=$id HTTP/1.1Host:$host";
になっちゃってる
0918nobodyさん
2010/07/29(木) 20:42:17ID:???print SOCKET "Host:$host\r\n";
print SOCKET "\r\n";
最後に空行が必要<HTTP
0919nobodyさん
2010/07/29(木) 21:54:27ID:???>>914の後ろの方にも書いたのですが改行を入れると400 BadRequestが返ってきます。。
0921nobodyさん
2010/07/29(木) 23:22:36ID:???ちゃんと198を読んだか?最後は改行2つだぞksg
0922nobodyさん
2010/07/30(金) 00:03:00ID:???use FileHandle;
my $id = 'test';
my $line;
my $host = "www.google.co.jp";
my $port = "80";
my $iaddr = inet_aton("$host") or die "connection failed.";
my $sock_addr = pack_sockaddr_in($port, $iaddr);
socket(SOCKET, PF_INET, SOCK_STREAM, 0);
connect(SOCKET, $sock_addr) or die "connectError";
select SOCKET;
binmode SOCKET; ← 改行コードの内部変換を考えるのが面倒なのでこれで逃げる $/ を設定してもいいかも。 それか \x0D\x0A で改行させるとかとか
$|=1;
select(STDOUT);
print SOCKET "GET / HTTP/1.1\r\n";
print SOCKET "Host:$host\r\n";
print SOCKET "\r\n";
shutdown(SOCKET, 1);
while($line = <SOCKET>){
print $line;
}
close SOCKET;
これで受信完了
0923PHPヲタ
2010/08/05(木) 16:57:35ID:lfryc7FALWPじゃないとかwwwwwwwwwふるっwwwwwwwwwwwwww
0924nobodyさん
2010/08/13(金) 03:38:13ID:VdoCI/2sprint "$ENV{'HTTP_USER_AGENT'}¥n";
書いてみると、クライアント情報でなく長い桁の数字が
表示されます。
正しく取得できていません。他の環境変数は大丈夫だし、
試しにそれだけのperlを書いてcgi設置してみると
動作しています。
なぜなんでしょうか?
0925nobodyさん
2010/08/13(金) 12:51:32ID:???初っ端で別の変数に入れてから表示してみては?
0926nobodyさん
2010/08/13(金) 13:40:24ID:v7edkYYK書いてくれなきゃ分かりませんよん。
0927nobodyさん
2010/08/13(金) 14:48:00ID:???書いたスクリプトは ここのこれです
http://cgi-design.net/prog/bbs/bbs39/index.htm
#!/usr/bin/perl
そのあとに
$brows = $ENV{'HTTP_USER_AGENT'};
として、あとで表示させてみるのですが
本来
「Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; ja-JP-mac」
となるべきなのに
「18446744073709551615」と表示されます。
もちろんこの変数は使ってませんし、htm中に直接書いても同じ。
0928nobodyさん
2010/08/13(金) 15:22:23ID:v7edkYYKprint "</center></body></html>\n";
の直前で表示させたけど、ちゃんと表示されますよ。
あと、strict でないスクリプトなので使わないほうがいいかも
サーバーのエラーログが肥大化する原因なので・・・
0929nobodyさん
2010/08/13(金) 15:25:00ID:v7edkYYK1回の実行で1131件のエラー発生してる
strict してみるとエラーが多すぎるのか固まるまであるw
0930nobodyさん
2010/08/13(金) 15:31:11ID:???0931nobodyさん
2010/08/13(金) 17:19:56ID:???影響していたようです。
検証有り難うございました。
確かにレガシーですが、永遠の日曜Web管理人の私などには
分かりやすいのです。
ただ、tableが多いのにサブルーチンで使い回ししまくりなので、
何処で閉じてるのかもう何がなんだか分かり難いのが最大の難点です。
0932☆忍者Perl☆ ◆M5ZWRnXOj6
2010/08/13(金) 17:27:14ID:LkLBXJmk寄生虫のように脳味噌を取り付かれて、一定時期になったらweb言語をやりだすという
ハリガネムシに寄生されたカマキリみたいだねwwwwwwwwwwwww
0933nobodyさん
2010/08/13(金) 17:29:06ID:v7edkYYK0935nobodyさん
2010/08/14(土) 05:33:34ID:???見辛いコードは保守性もないし
0936nobodyさん
2010/08/19(木) 00:49:02ID:???素人がOOPやっても保守しやすくなるとは限らん罠
それより先にやるべきことがある
一番やるべきなのはビューの分離
0937nobodyさん
2010/08/19(木) 15:22:08ID:md+Wq55QwinでダウンロードしたMCryptをlinuxにコピー。
makeすると
mcrypt.h: No such file or directory
といわれてしまいます。
google先生に聞いてもphpの例しか出てこず、、、
どういうことなんでしょうか?
0938nobodyさん
2010/08/19(木) 16:19:15ID:???0939937
2010/08/19(木) 16:46:41ID:md+Wq55Qありがとうございます。
今度はRPMパッケージのlibmcryptをインストール中にこけました。
error: Failed dependencied:
libmcrypt = 2.4.11 is needed by libmcrypt-devel-2.4.11-2.i586
調べてみます。
0940nobodyさん
2010/08/19(木) 17:08:32ID:W8mNHQ1m0941nobodyさん
2010/08/26(木) 16:54:36ID:???foreach $no (sort keys %hash){ ・・・
$no の小さい順になるんで逆転したいのですが
どうしたらいいですか?
0942nobodyさん
2010/08/26(木) 17:24:53ID:2u47Mbsa0943nobodyさん
2010/08/26(木) 17:51:44ID:???sort { $b cmp $a } keys %hash
0944nobodyさん
2010/08/26(木) 19:02:28ID:???100abc
20abc
こうゆうデータがあるとき、先頭の数字で並べ替えたい時
どうやってソートしますか?
普通にソートすると
100abc
10abc
20abc
となりますが、希望する並べ替えは
10abc
20abc
100abc
です。
先頭の数字の配列と、文字列の配列に分断して並べ替えるのが妥当なのかな?と思ったけど、
分断した配列同士をどうやって紐付けるかで迷い、結局構造体っぽいハッシュにがっつり入れて並べ替えて対処してます。
もっとスマートに出来そうなのですが・・・
0945nobodyさん
2010/08/26(木) 19:51:42ID:???sort { int $a <=> int $b } @array
でいけるな。真っ当にやるなら
sort { ($a =~ /^([0-9]+)/)[0] <=> ($b =~ /^([0-9]+)/)[0] } @array
とか。
0946nobodyさん
2010/08/26(木) 20:00:51ID:???恐ろしく簡単で、灯台もと暗しすぎて笑えてきたw
正規表現は意外とコストが高いので、int 使っていこうと思います。
thx!
0947945
2010/08/26(木) 20:35:40ID:???0948nobodyさん
2010/08/26(木) 22:20:20ID:???sort { ($a <=> $b } grep { /^([0-9]+)/)[0] } @array
は駄目かな?
0949nobodyさん
2010/08/26(木) 23:41:34ID:???map{ $_->[0] }
sort { $a->[1] <=> $b->[1] }
map{ [ $_, ( /^(\d+)/)[0] ] }
@array ;
0950nobodyさん
2010/08/27(金) 19:12:21ID:RoA/6PjLところで、先頭に数字があるBBSのログをサーバ上で
他の目的用に整形し直した際に、
>>945の
sort { int $a <=> int $b }
でソートとしてみました。
こういうの
100<>name<>mail<>sub・・・・
99<>name<>mail<>sub
98<>name<>mail<>sub
ブラウザで新ログを見ると綺麗にソートされています。
それをFTPでダウンロードしてみると崩れています。
そんな事ってあるのでしょうか?
私の勘違いでしょうか。
0952nobodyさん
2010/09/09(木) 10:22:10ID:???話は戻るんだがそういうデータならどうせパースするんだし
@data = sort { $a->[0] <=> $b->[0] } map { [split /<>/, $_] } @lines;
とかでよくないか?
0953nobodyさん
2010/09/09(木) 17:38:07ID:mtEu4DDePerl::DBIで下記のようにコーディングしています。
my $codes = '1,2,3,4,5';
my $sql = 'SELECT * FROM TEST WHERE testcode IN (?)';
my $sth = $dbh->prepare($sql);
$sth->execute( $codes );
実行すると実際に発行されるクエリーは
SELECT * FROM TEST WHERE testcode IN ("1,2,3,4,5")
のようになると思います。(VARCHAR扱いでバインドされるので)
次のように発行させたい場合はどのように記述すればいいのでしょうか?
SELECT * FROM TEST WHERE testcode IN (1,2,3,4,5)
0954nobodyさん
2010/09/09(木) 17:50:35ID:???my @codes = split /,/, '1,2,3,4,5';
my $sql = 'SELECT * FROM TEST WHERE testcode IN (' . join(',', ('?') x @codes) . ')';
my $sth = $dbh->prepare($sql);
$sth->execute(@codes);
0955953
2010/09/09(木) 22:32:41ID:mtEu4DDe遅くなりました!
無事に動作しました。ありがとうございました。
0956nobodyさん
2010/09/10(金) 10:36:15ID:dfQ9DvRu何か定番的なやり方がありましたら教えて下さい
検索のキーワードでも何でも結構ですので
0957956
2010/09/10(金) 10:58:46ID:???その中で常時localtime(time)を取得し、特定の日時になったら
($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(time);
if($hour == 起こしたい時 && $min == 起こしたい分 && $sec == 起こしたい秒) {
#起こしたいイベント
}
こんな感じでイベントを起こす、というやり方です
また、指定する日時はCSVファイルで複数行を別途保持しておく形になります
YYYY,MM,DD,hh,mm,ss…みたいな感じです
もし他にもっとスマートな方法があるようでしたら教えて下さい
0958nobodyさん
2010/09/10(金) 11:12:12ID:???タスク
0959nobodyさん
2010/09/10(金) 13:23:53ID:???cronを使えない特別な理由があるとして、whileの中でsleep(目標日時 - 現在日時)とかすればいいんじゃね?
0960nobodyさん
2010/10/07(木) 20:01:34ID:dy4xwK3Operlの関数は引数にアクセスする際に$_->[0]で引数の値を取得できると
教わったんですが関数らしき処理はこのソースコードの前後に書かれておらず
困ってます。
あとforループの$tはどんな役割になるんでしょうか?
my $input_vec = { book => 29, '梅田望夫' => 27 ....};
my %sim;
for my %t(keys %input_vec) {
for(@{$index{$t}}) {
$sim{$_->[0]} += $input_vec->{$t} * $_->[1];
}
}
0961nobodyさん
2010/10/07(木) 20:11:47ID:???せめて何を目的とするコードなのかくらい書け。
0962nobodyさん
2010/10/07(木) 20:21:13ID:dy4xwK3O$input_vecにははてなブックマークのタグ数が代入されています。
実装 : ある記事を見たユーザにオススメの記事を推薦する機能
$indexははてなブックマークのタグとタグ数、記事のIDを元に
作られた転置インデックスです。
0963nobodyさん
2010/10/07(木) 20:49:20ID:???#!/usr/bin/perl
@array = ('a', 'b', 'c');
&func(\@array);
sub func{
foreach (@_) {
print $_->[0],": ",$_->[1],": ",$_->[2],"\n";
}
}
0964nobodyさん
2010/10/09(土) 07:58:30ID:???ここのメールフォームのスクリプトを試していて、
textareaに入力した改行が確認画面で反映されないのですが、
どのような改造をすればよいでしょうか。
送信されたメールではちゃんと改行されてるので、確認画面を出力するところが問題になるとは思うのですが。。。
0966nobodyさん
2010/10/09(土) 19:26:59ID:???平日のみ4つの配列を順に表示させる方法またはヒントが
あれば教えてください。
休日か平日かの判定は出来ています。
下のような感じです。
配列はA→B→C→Dの4つ。
10/04(月)→平日なので配列Aを表示
10/05(火)→平日なので配列Bを表示
10/06(水)→平日なので配列Cを表示
10/07(木)→平日なので配列Dを表示
10/08(金)→平日なので配列Aを表示
10/09(土)→休日なので表示しない
10/10(日)→休日なので表示しない
10/11(祝)→休日なので表示しない
10/12(火)→平日なので配列Bを表示
10/13(水)→平日なので配列Cを表示
0967nobody
2010/10/09(土) 23:54:45ID:???要素かを調べて、(qw(A B C D))[$n % 4] でいいと思う。
0968nobodyさん
2010/10/11(月) 06:28:12ID:???という行は¥$_をutf8からeucへ変換するということだと思うのですが、
¥$_ってどういう意味ですか?
0969nobodyさん
2010/10/11(月) 06:33:14ID:???参照渡し
関数の副作用
0970nobodyさん
2010/10/11(月) 12:56:11ID:DYbljc5PWin7+Apache+PerlでCGIを動かそうとしているのですが、Internal Server Error(500)が出てうまくいきません。
Apacheのerror.logをみると
[Mon Oct 11 12:41:43 2010] [error] [client 127.0.0.1] (OS 2)指定されたファイルが見つかりません。 : couldn't create child process: 720002: printenv.cgi
[Mon Oct 11 12:41:43 2010] [error] [client 127.0.0.1] (OS 2)指定されたファイルが見つかりません。 : couldn't spawn child process: C:/Program Files (x86)/Apache Software Foundation/Apache2.2/cgi-bin/printenv.cgi
と出てきます。
ググると、ソースの一行目の#!のPathの設定が正しくないとこのエラーが出るらしいのですが、
Pathは正しく設定してます・・・
#!c:/Perl64/bin/perl.exe
何か他に怪しいところとかありますでしょうか?
0971nobodyさん
2010/10/11(月) 14:04:59ID:???Windowsでexeの指定ってそれでいいの?
Linux環境でしか触ったことないからわからんけど
#!/Perl64/bin/perl
とか
#C:\\Perl64\bin\perl.exe
とかじゃね?
参考になりそうなURL
http://tep-pey.blogspot.com/2008/05/windowsapacheperl.html
0972nobody
2010/10/11(月) 16:46:12ID:???【質問】
&Jcode::convert(\$_,'euc','utf8');
という行は\$_をutf8からeucへ変換するということだと思うのですが、
\$_ってどういう意味ですか?
【回答】
&Jcode::convert(\$_,'euc','utf8');
という行は $_ をutf8からeucへ変換するということ
です。
0973nobody
2010/10/11(月) 19:50:02ID:???&Jcode::convert($_,'euc','utf8');
の場合は $_ をutf8からeucへ変換するということ
で・は・な・く・て
$foo をutf8からeucへ変換するということ
でっす!!!
0974nobodyさん
2010/10/14(木) 03:11:24ID:???searchという文字があった場合に行末にfooを付けたいのですが、
こんなふうにやってます。↓
perl -ne "print if ( /search/ )" input.txt > output1.txt
perl -ne "print if ( s/\n/foo\n/g )" output1.txt > output2.csv
2つのワンライナーを1つにするにはどうすれば良いのですか?
よろしくお願いします。
0975nobodyさん
2010/10/14(木) 06:27:55ID:???0976nobodyさん
2010/10/14(木) 23:39:16ID:???レス遅くなってすいません。
質問の仕方が悪かったです。
表示する方法ではなくて、「"今日"($year/$mon/$day)は"ある日"($tyear/$tmon/$tday)から何回目の平日か?」
を簡単にわかる方法があればと。。。
timelocal での差分 - 休日数でできました。
ありがとうございました。
0978nobodyさん
2010/10/16(土) 00:40:09ID:???0979nobodyさん
2010/10/17(日) 23:52:01ID:???ttp://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1242300167
の質問にある2番目の
<2>「YAHOO」という文字列を検索する際に「yahoo」と入力しても検索できるようにしたい
なのですが
大文字と小文字を区別しないでマッチさせるようにするにはどのように記述すればいいのでしょうか
0980nobodyさん
2010/10/17(日) 23:58:49ID:???既にcase-insensitiveになってる気がしますが
0981nobodyさん
2010/10/18(月) 10:00:17ID:???データベース検索時に正規表現を使うか
レス数が950を超えています。1000を超えると書き込みができなくなります。