Perlコーディング初心者質問スレ Part 51
Perlのコーディングで困ってる人のスレです。
【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。
過去ログやお勧めサイトは
>>2-10
10 :
nobodyさん :2006/07/27(木) 17:55:17 ID:??? BE:106128443-BRZ(1002)
乙
11 :
nobodyさん :2006/07/27(木) 19:47:33 ID:0k8QdmRt
文字列置換の処理で質問です。 変数を途中で使いたいのですが、どういう方法がありますでしょうか? $fruit =~ s/みかん/りんご/; #OK $apple = "りんご"; $fruit =~ s/みかん/$apple/; #NG $apple = "りんご"; $RegExp = "s/みかん/$apple/"; $fruit =~ $RegExp; #NG
>>11 >$apple = "りんご";
>$fruit =~ s/みかん/$apple/; #NG
これはNGにならない。
$apple = "りんご";
$RegExp = "s/みかん/$apple/";
eval "¥$fruit =~ $RegExp";
>1 乙〜
>>12 すんません、確かにNGではなく変数使えました。
$in{"select_fruit"} でフォームからの値が入ってなかったようです・・・
全体をevalするのがあるんですね、JavaScriptで多少覚えたので理解できます。
確か処理が遅いから、やらないほうがいいですよね?
無難に
>>11 の2番目の方法にしておきます。
ファイルを読み込むときに、特定の文字列1と文字列2の間の部分だけ 読み込むことってできないですかね? やはり一度全部読み込んでから、 特定の文字列1より前と文字列2より後の部分を削除する という方法でやるしかないでしょうか?
>>15 >ファイルを読み込むときに、特定の文字列1と文字列2の間の部分だけ
>読み込むことってできないですかね?
できる。
正確にはお察しのとおり、
1.ファイルを読み込みながら文字列1を探す。このとき読み込んだ文字列は保存せずに捨てる
2.1が見つかったらファイルを読み込みながら文字列2を探す。このとき読み込んだ文字列は変数に収納。
3.文字列2が見つかって終わり。
17 :
15 :2006/07/27(木) 20:58:10 ID:???
>>16 手順の説明ありがとうございます。
ただ自分としてはファイルの中身全部読み込んで
正規表現で文字列1と2をマッチさせてそれぞれの前後を捨てる
という方法を考えていたので、
>>16 のようなスマートなやり方が分かりません。
もう少しヒントというか具体的な関数名を教えてもらえないでしょうか?
while (<FH>) { next unless /文字列1/ .. /文字列2/; 読み込む; } 文字列1, 文字列2 自体が要らないなら、nextの次の行あたりで捨てて。
アルゴリズムは状況による。 全体のファイルのサイズはどれほどなのかとか 読み込みたい中身の文字列の割合はどのくらいなのかとか 対象文字列の判定はどのくらい厳密にやらなければならないのか (たとえば "このように引用された文字列" を探したいときに、 "このように\"エスケープされた引用符" をどう扱うのか これは正規表現でもいっしょ。) なので正規表現みたいに一行でスパッとというわけにはいかない。 そもそもどういう状況でその操作が書いてみると他のより効率的な手段を教えてもらえるかもしれない。 まぁ1kbyteそこらのファイルからなら単純に読み込んで正規表現使えばオケ
20 :
15 :2006/07/27(木) 21:43:03 ID:???
>>18 なるほど、nextを使って文字列にマッチしない限り次の処理へ進ませないわけですか。
ただ、文字列1と2が別の行にある場合は分けて処理する必要があるわけですね。
あいがとうございました。
>>19 後出し情報ばかりになってしまいますが、現在扱おうとしているファイルは
[00001]
情報A
情報B
[00002]
情報C
というように番号(重複なし)だけの行と情報が入ってる行があるファイルで
サイズはまちまちで大きいものだと100Kbyte近くあります。
そのうち特定の番号の間の情報だけを抽出したいと考えています。
そこで、ファイルの中身全部を$logに格納して
$start = '開始番号';
$end = '終了番号';
$log =~ s/$end.+/$1/;
$log =~ s/.+$start/$1/;
番号だけの行削除;
というような処理を考えていたのですが、
>>18 の方法の方がメモリ消費を抑えられそうですね。
まずはやってみます。ありがとうございました。
また何か妙案があれば是非ともお願いします。
23 :
15 :2006/07/27(木) 22:54:27 ID:???
>>22 ま!まじですか!!
早速やってみます!(ノ∀`)アチャー
24 :
nobodyさん :2006/07/27(木) 23:18:59 ID:1uzwaimq
こんばんわ。趣味でいじってて思いました。 年月日時分秒の計算がもっとらくに出来たらいいのにと。 print "こうなればいいのに" if 20060727121000 - 20060727120950 == 10 例えば時分秒用のマイナス演算子があれば・・・・・
HTMLエスケープ用のルーチンをライブラリに作ってありました。 ずっと昔のライブラリです。 $a = hoge::escape_h($a); @a = hoge::escape_h(@a); %a = hoge::escape_h(%a); $a = hoge::escape_h($a); #scalarref $a = hoge::escape_h($a); #arrayref $a = hoge::escape_h($a); #hashref でも全てうまく行くようにしたいのです。 用は引数がスカラか配列かハッシュか、リファレンス(どのタイプか)なのかを チェック入れてif分岐でもすればいいとおもいますが、どうやってチェックするのか。 そこで行き詰ってます。宜しくお願いします。
>>27 >@a = hoge::escape_h(@a);
>%a = hoge::escape_h(%a);
この2つの区別はつかないよ。
他のは大丈夫だけど。
リファレンスの区別は ref を使う。
29 :
27 :2006/07/27(木) 23:51:33 ID:???
>>28 やっぱりさすがにハッシュと配列の区別なんて無理ですよね。
同じですもんね。
スカラーか配列かはどうすればいいですか?
やっぱり@_の要素数が1か複数かで見るのでしょうか?
30 :
15 :2006/07/27(木) 23:57:33 ID:???
>>18 >>22 バッチリできました!
ありがとうございました!
でも、next unless /文字列1/ .. /文字列2/;
の動きが分からずじまい。
ファイルハンドルで1行ずつ読み込んでnextをかけて行くのに
なぜ複数行に渡っても処理ができてるのか不思議です。
たぶん条件式をきちんと解釈できてないんだろうなぁ。
こんな式初めて見るので。
暇な方居ましたら、解説してやって下さい。
eval 使って、$a[1] を強制的に読み込みを試行してエラーが帰ってきたなら スカラー、読み取れたなら配列。 ちょっと強引過ぎる気もしますが・・・
> >@a = hoge::escape_h(@a); > >%a = hoge::escape_h(%a); > この2つの区別はつかないよ。 デマですね。
>992 名前:nobodyさん[] 投稿日:2006/07/27(木) 09:50:11 ID:1uzwaimq
>trust::error_print() if $form{test} =~ /\D|\d{2}/;
穴は防げてるよ。どういう意味かにもよるけど
/^\d$/ or trust::error_print();
とか!~とかunlessの方がわかりやすかったりしない?
>>29 @_はループでリファレンスは再帰って形になるんじゃないかな
sub escape {
my @vals = @_;
for(@vals){
if(ref eq "ARRAY"){ # このへんをelsifで
$_ = [ escape(@$_) ];
}else{
$_ = エスケープ処理($_);
}
}
wantarray ? @vals : $vals[0];
}
>>20 もう解決したっぽいからどーでもいいんだけど、例えば、
{
open 略;
local $/ = "[00001]";
<FH>; # [00001] までのは捨てる
$/ = "[00002]";
my $log = <FH>; # [00001] の次 〜 [00002] まで取る
close (FH);
}
で 「情報A 情報B」 が取れないかな?
37 :
nobodyさん :2006/07/28(金) 10:40:17 ID:asi0sNZ0
open FH,"test.csv"; while (<FH>){...} 色々な処理 close FH; 色々他にもループ処理をしていまして、無限にならないようにちょこちょこ防止コードを 入れています。 それでtest.csvの行数が$form{get}に足らない場合にもエラー終了したいのですが。 my @test = <FH>; ということをしたくありません。 scalar <FH>やlength <FH> とやればいけると思ったのですが、一行目が取り出されてしまいます。 まあ配列じゃなくてあくまで行演算子?なので当然といえば当然ですが。 何かいい智恵はありませんでしょうか?
カウンタを用意すればいいだけかと思う
39 :
37 :2006/07/28(金) 11:25:15 ID:asi0sNZ0
>>38 いや一行で、イチイチ変数に読み込まずとか・・
scalar @test;
くらい簡潔にいけないかと思ってました。
でもむりなようですので配列に読み込むことでもうあきらめました。
連続ですいませんが他の疑問がありますのでお願いします。
http://perldoc.jp/docs/modules/Text-CVS_XS-0.23/Text-CVS_XS-0.23.pod このモジュールをcsvファイルを扱う時にいつも使ってます。
my $csv = new Text::CSV_XS({ binary => 1 , "always_quote" => 1});
これでやってます。
$form{value} =~ s/\n/\t/g;
悲しいことにいつもこれやってます。このモジュールは改行文字をクォートしてくれないのですよね。
自分で読んでもどうも改行文字は自分で痴漢する以外にないと思うのですが、
中途半端な自分の勘違いなのかもしれないので詳しい人お願いいたします。
>>27 プロトタイプ使ってリファレンス受け取るサブルーチンにすれば
呼び出し側では字面上はスカラー/配列/ハッシュをそのまま
渡しているように書ける。あとはrefで何のリファレンスか調べる
ことができるのでなんとでもなるだろう。
% cat cat foo.pl
cat: cat: No such file or directory
sub foo (\[$@%]) {
my($x) = @_;
printf "ref(\$x)=%s\n", ref($x);
}
my $x = 'scalar a';
my @x = ('array', 'a');
my %x = (hash => 'a');
foo($x);
foo(@x);
foo(%x);
% perl foo.pl
ref($x)=SCALAR
ref($x)=ARRAY
ref($x)=HASH
>>40 それだとリファレンスを渡した時に
一度デリファレンスして調べないといけないね
cgiってどんどん書き換えていきますよね。 ちょっともう自分で全ての把握をするのが難しくなってしまいました。 local.libっていうライブラリに色々作ってあるんですが、 その中にsub slash_printfer{}というものがあります。 そのサブルーチンの名前をsub slash{}に変えたいのです。 でもそのサブルーチンを使ってるページを全て書き直すのは骨が折れます。 というか100以上のファイルをなんてやりたくないですし。 置換ソフトでやっても最終的には全てのファイルの動作チェックを入れないといけなくなっちゃいますのでキツイです。 二つの名前を持つサブルーチンは作れませんか? sub slash or slash_printfer{} みたいにしてどちらで呼ばれてもこのサブルーチンが動くというような。
ちなみに sub slash_printferが呼び出されたらslashを呼んでslashからの返りを受けて 呼び出し元に返すといったやりかたは断固として拒否します。
> sub slash_printferが呼び出されたらslashを呼んでslashからの返りを受けて 逆ならいいべ。 sub slash{ return slash_printfer(); } つかそもそも > そのサブルーチンの名前をsub slash{}に変えたいのです。 と。
最後の行だけに反応。 my $hoge = my $foo = sub () { print 'hage' . "¥n" ; } ; $hoge->() ; $foo->() ; local *hoe = local *moe = sub () { print 'moeeeee' . "¥n" ; } ; &hoe ; &moe ;
レスは断固として拒否します
47 :
42 :2006/07/28(金) 13:02:54 ID:???
>>44 参りました^^;
なんか笑ったら疲れが少しだけ抜けたかも・・・軽く感動した。
>>37 ループしながらread()で読んで、改行を数える手も。
>>42 >>45 も出してるけど、型グロブもあるよ。
use strict;
use vars qw(*slash);
local *slash = \&slash_printfer;
slash();
exit;
sub slash_printfer {
print "printfer!\n";
}
>>48 うちも型グロブ使う・・・
local にするのはなんか意味があるのん?
>>50 いや my にはしないけどさ、グローバル変数が一番上なとこで local にする意味あるのかなと。
>>51 変数を最初に使うとき、宣言を必ず行うという癖。
意味は保守性を上げるぐらいだと思う。
localは宣言なのかという疑問が...
そういえばすぐ上でuse varsかけてるからlocalしなおしてるのは謎。
癖かよwww じゃあまあいいやw
>>53 表現変ですか?
どのように表現するのかご教示お願いします。
# local()だけを指すなら演算子だけどさ。
>>54-55 トップレベルで宣言はしないもの?
スタイルが違いすぎるかなぁ。
トップレベルでの local は意味あるのかなあ?、って感じ。 いくつかモジュール見たけど、そういう風に書いてるのみたことなかったもんで。 まああってもなくても問題ないからどうでもいいかw use vars qw(*slash); ← これも別になくても通るよね。
どっかにrequireして使うかもしれないならグローバルのスコープでも myなり何なりしておくのはよさげ。
型グロブだから全部要らないじゃんってことですね。 はい、その通りです。
>>58 言いたいことは分かるけど、ちょっと流れを読んでくれ(笑)
そもそもライブラリの中身なのかorz
>>35 初めて知った。
使い方によっては便利そうだねぇ。
local が宣言でないというのは use strict してみりゃわかります。 local は既存の変数の値だけを一時的に差し替えて利用するためのアレですから。
64 :
nobodyさん :2006/07/30(日) 08:37:54 ID:kTzF8iv+
key %hash この配列のキーはqw/1 2 3 4 5.../のようになってます。 でもqw/1 3 4 5 6 10.../のようにトビトビになってる場合もあります。 key %hashのキーを参照して、まだ存在してないキーの中から一番数字が若いものが(0以下除外) いくつになるかを調べるにはどうすればいいでしょうか? forとexistsを使う方法を自分で考えましたが、ちょっとforを使いたくありません。
>>64 $key = (sort { $a <=> $b } grep ($_ > 0, keys %hash))[0];
って存在してないキーか ('A`) 全然違った
Keyの範囲を仮定できるならバイナリーサーチ
68 :
64 :2006/07/30(日) 09:37:20 ID:kTzF8iv+
for使っちゃいました。m(__)m
>>65 せっかくなのにすいません。
普通に安全なforだったことに気付いたのでいいやってことで。
変わりに別の質問がしたいのですが、CGIで一番面倒なことはエスケープだと最近思うのですが。
チャット、掲示板、〜ファイル、〜ファイル、〜ファイル・・・・
何をやるにも表示の時にはエスケープ。
書き込む前には内容のチェック。
mysqlを思い出しまして。まあmysqlを使うほどではないときの法が多くて。
でもそんな時に例えば相手が送ってきた文字列のデータ型が何かをチェックしてくれるボジュールとかあれbなと。
@form{qw/name count ip address tel memo time/};
これら全て自分で毎度「これには何が入っていてはいけなくて・・・」とか書くのがめんどうってことです。
妄想モジュールのオブジェクト->data型(数字のみ,@form{qw/count tel time/})
みたいにするとチェックできるとか。数字のみであるかどうかをチェックみたいな。
69 :
67 :2006/07/30(日) 09:39:53 ID:???
俺、全然ダメじゃん。寝る。
>>64 すでに解決したかもしれんが。
my $ret = 0;
$ret = ++$_ while exists $hash{$ret};
>>64 こういう処理で for とか while とかのループ使わないって条件だったらひどいことになるなーw
grep でやろうと考えたけど煩雑でやめた。
my $test = \@test{qw/a b c d/}; こうすると$testの中にリファレンスが入るけどどうもスカラー型なんだよね。それも$test{d}の中身が入る。 my $test = [@test{qw/a b c d/}]; こうすればちゃんと配列リファレンスではいる。 どういう理屈だろこれ。
>>69 いやいや。もう朝だよ・・・頑張れよ。遊びに行こうぜ!
>>73 前者は、
my $test = \( @test{qw/a b c d/} );
になるんじゃないかな。
my $val = ( list ... );
で最後の値が代入される。
後者は無名配列へのリファレンス。
76 :
73 :2006/07/30(日) 10:15:01 ID:???
>>75 なるほど〜。
でも
\@testは\(@test)解釈されないのを聞くのは・・・無粋だよね。
そういう仕様なんだもんね。
タンキウス!
77 :
nobodyさん :2006/07/30(日) 10:26:02 ID:rQ64iO4Q
1:計算機を作りたい すいません3つあるんですが $a = 3/4; という例で・・ 1.分数の分子と分母をそれぞれ取り出す方法はありますか? $?? = 3; $?? = 4; みたいに・・・ 2.分数の逆数を求める方法はありますか? $?? = 4/3: みたいに・・・ 3.分子を1にして通分する方法はありますか? $a = 3/4; $?? = 1/1.3333・・・
>>77 $a = 3/4; の ”3/4” は文字列なの?
>>76 お前がリストと配列の違いを理解できてないことのどこが無粋?
>>77 前スレより条件減ってるけどそんなんでいいの?
>1.(2/3)*(2/3) の解を 4/9 にするにはどうすればいいですか?
>>77 use bigrat; # or use Math::BigRat;
$a = 3/4; # or $a = Math::BigRat->new(3/4);
my($n, $d) = $a->as_parts(); # 1. 分母分子の取り出し
$i = 1/$a; # 2. 逆数
3. だけ分からん。自分で考えてくれ。
BigRatでは、分母を小数にはできないかも。
ちなみに (2/3)*(2/3) を 4/9 にするには
use bigrat;
print 2/3 * 2/3;
多分正規表現についてのことだと思いますが、 ifを使って文字列の中にaとbとcがあったときに真を返すようにするにはどうすればよいのでしょうか。 例えば「crab」とか、「arabic」とかなら真を返す、見たいな感じです。
遲レス。
>>64 ,
>>72 my @data = sort { $a <=> $b } keys %hash ;
( join ',', @data ) =~ /(¥d+),(?!(??{$1 + 1}))/;
print $1 + 1 , "¥n" ;
# sort は使わざるを得ない。
>>81 if ( $str =~ /a/ and $str =~/b/ and $str =~/c/ ) { print 'true' . "¥n" ; }
>>80 自己レス
すまん、分母分子の切り出しだけメソッド名間違ってた。
my($n, $d) = $a->parts();
86 :
nobodyさん :2006/07/30(日) 19:20:45 ID:NH/5yRqc
初歩的な事を質問しますが ダブルクォート文字列で&を表示させたいのですが どうすれば良いのでしょうか? 何度やってもエラーが出てしまいます。
print "¥&";
print "&"; でも問題なく表示されるなぁ。何が違うんだろう。
日記スクリプトでRSS出力するのを自分用に弄っているのですが
$RSS_ITEM_URI = "
http://www.google.com/url?sa=D "."\&"."q=".
$RSS_SCRIPT_URI."?DT=".$dateY.$dateM.$dateD.$dateSUB."#".$dateY.$dateM.$dateD.$dateSUB;
では、どうもエラーが出てしまいました。
$RSS_ITEM_URI = "
http://www.google.com/url?sa=D "."\x?"."q=".
$RSS_SCRIPT_URI."?DT=".$dateY.$dateM.$dateD.$dateSUB."#".$dateY.$dateM.$dateD.$dateSUB;
こういう感じの事も試してみたのですが上手く行きませんでした。
>>89 そのエラーを書いてくれ。
&じゃなくて &amp; にしたら?
&amp; で無事行けました! xhtmlでは&amp; なのですね…(汗) 勉強なりました。
HTMLでも正式には & と書かなきゃいけない。 HTML は人による閲覧が主だから多少間違ってても読み手が補完するだろう と IE なり NN なり FF が適当に表示してくれるだけ。 XML だとそれが通用しない。
94 :
nobodyさん :2006/07/31(月) 00:56:13 ID:yxBpgbMa
if ($hoge ne ""){$hogeが無いぉ} と if (!$hoge){$hogeが無いぉ} ってどっちがいい?
>>94 casebycase
ってか下で迷うのは if ($hoge) じゃないのかよw
if ($hoge ne "") ← これは $hoge が undef のときに警告がでる
if ($hoge) ← これは $hoge が "0" のときにも FALSE になるのが注意
98 :
nobodyさん :2006/07/31(月) 07:17:33 ID:YjkkI8MZ
perlで作られた変数名から自動でhtmlを生成させるには どうすればよろしいの? 記事の投稿があったその都度に、その内容で新規HTMLを生成するスクリプトを考えてます
>>63 うん、まぁ、とりあえず、perldocではdeclaration(宣言)と書かれてしまっているんだ。
(5.8ではmyとourしか扱ってないから、古いperldocをあたってくれ。)
誤爆すみません
>>98 何を言ってるのか分からない。
(変数名).htmlというファイルを作りたいのか、
変数名を反映させた内容のhtmlファイルを作りたいのか、
>記事の投稿があったその都度に、その内容で新規HTMLを生成するスクリプトを考えてます
コレなんかは単に掲示板の出力をファイルにすればイイだけでは・・?
>>94 趣味の範囲の話しだけど
$hogeにはいる値の候補が文字列なら$hoge ne""とした方が読みやすいと思う。
$hoge ne '' と !$hoge では$hogeが"0"のとき挙動違うし。
http://www.rfs.jp/sb/perl/05/goto.html なんかラベルなんていらねって書いてあるけど、CGIでは結構使いところあるけどなぁ。
初めから設計通りに作るとかじゃなく、その場その場でどんどん機能が追加されていく場合に
数行処理をふっ飛ばしたいとか、多分多くの人がifとか$error = 1とかでやるところも
gotoでもっと簡単にできるのにって思った。
詳しい人にすっごい突っ込まれそう。
怖いがちょっと突っ込まれてみたいかも
Perlだしなあ
>>106 '0'という文字1文字の文字列もあるだろ。
>>105 >数行処理をふっ飛ばしたいとか、多分多くの人がifとか$error = 1とかでやるところも
たぶんそういうところは関数定義で何とかする
if(0ne''){print 2}
if('0'ne''){print 3}
if(0){print 5}
if('0'){print 7}
>>23
111 :
105 :2006/07/31(月) 11:58:13 ID:???
>>109 そこらへんがスリコミなんですかね。
目的も知らずに、「テーブルレイアウトはダメだ」と言うのに近い。
実際自分もgoto使うの気が引ける。
でもね。それで目的が果たせるのになぜ気が引けるのか。
で、スリコミだなぁって。
いやいや、スリコミじゃないだろって否定してもらいたいってのもあるんですけど。
すいません、今掲示板に確認画面を加える改造をしているのですが、 少々疑問があったため、質問させていただきます。 「投稿フォーム → 確認画面」 に行くとき、改行等を $value =~ s/\r\n/<br>/g; $value =~ s/\r/<br>/g; $value =~ s/\n/<br>/g; で、デコードするんですが、 もし「投稿フォーム → 確認画面 → 投稿フォーム」 にと、戻ったとき改行は $hoge =~ s/<br>/\n/ig; で、処理してよろしいのでしょうか?ちょっと自信がありません・・・。
>>112 エスケープちゃんとしてるか?
タグを埋め込まれてアボーンしても知らないよ?
んでな。普通はHTML表示部分のところだけ<br>と置換するが、
その置換結果を別の変数に入れるんだよ。大本をなくしたら困る時も出てくるからね。
<修正点があるので修正をする>とかのボタンで前のページに飛ばす時は
input type="hidden"1"に置換してない方の文字列を埋め込むのよ。
でもその時もエスケープは必要だから。
とりあえず動作確認してみなさい。
できないならローカル環境整えなさ稲。
input type=hiddenに埋め込む時はURIエスケープね。 確認画面で相手が書き込んだ内容を相手に見せる時はHTMLエスケープね。 ダレラ
gotoは判ってる奴が必要なときに使うのはいいんだが、判ってない奴がめちゃくちゃに 使うと手に負えないから表では使用禁止といっとくぐらいがちょうどいい。
例外処理にはErrorなんてモジュールがあるけどこれはどうなんだろ
118 :
nobodyさん :2006/07/31(月) 13:09:04 ID:oRCGT1rh
use CGI; use Time::Local; &timelocal(・・・ 先日まで問題なく動いてたんですが、本日使用しているPGM全てで 落ちるようになりました。 とりあえず回避するコードを書いたんですが、原因って何がかんがえられますか?
>>118 パーミッションは?
とりあえずエラーログだせよ。
わかるわけねえだろボケ。
>>117 何がじゃ
>>118 原因ねえ。おまいの頭が悪いってあたりが一番怪しいんじゃないか?
とりあえずそこらへんから検討してみてはいかが?
>>118 カワイソスw
プログラム変えてないのに挙動が変わったのなら鯖側でしょ
エラーメッセージも晒さずに聞いてわかるわけねーじゃん。
そういやビッグロブ、鯖変更メンテした時にフルパスが変わってたな。アナウンス無しに。 画像掲示板の画像が出なくなって驚いた記憶がある。
>>123 絶対パスは$ENV{DOCUMENT_ROOT}から取得したらいいよ。
後、バッククォート演算子でpwdしたり、Cwdモジュールで取得したりするのもいいかも
>>115 うそやん(´・ω・`)
hidden で %ef%80%80 とか書くと普通に % が %25 になるお。
127 :
98 :2006/07/31(月) 16:45:36 ID:YjkkI8MZ
>>102 レスありがとうございます。
スマソです。
(変数名).htmlのファイルを生成したいのです。
ひな形としての.htmlファイルは予め用意されていてるけど、
内容の一部も変数を反映させるけどこれはなんとかなりそうなんです。
最初はrenameを使うのかと思ったんですけど、これだとダメですね。
Webporgとは違うんですが、Perlでソケット通信についての質問はどこでしたらいいんでしょうか? 通信技術はハードよりの話題みたいなので・・・
別にここでもいいんじゃね ム板でもいいけど
>>129 ありがとうございます。
ム板のほうがよさそうですね。
過去ログ読んで整理してきます。
131 :
115 :2006/07/31(月) 17:53:53 ID:???
配列に格納したファイル名から拡張子を除いた部分を表示させたいと思っています。 書きの例だと「abc」を取得したいと思っています。 perl -e "@file=('abc.txt');print split (/\./, $file[0])[0];" perl -e "@file=('abc.txt');print (split (/\./, $file[0]))[0];" 以上の2例でもsyntax erorが出ます。 splitは配列を返すので、その配列の[0]を参照するという書き方でいいと思うのですが、 どのようにしたら正常に表示できるのでしょうか。 perl -e "@file=('abc.txt');print scalar (split (/\./, $file[0]));" このように記述すると2が表示されるので、splitの結果は配列になって帰ってきているとは思うのですが。
133 :
nobodyさん :2006/07/31(月) 21:08:03 ID:??? BE:247632847-BRZ(1002)
+ 付けろ
print ((split(/¥./, $file[0]))[0]);
print 文での () はシンタクスエラーの元
>>134 氏みたく丁寧に () を書いて、 print に正しく情報を与えるか、
perl -e '@file=("abc.txt");print [ split /¥./, $file[0] ]->[0] . "¥n";'
の様にリファレンスで出力するか。
137 :
135 :2006/07/31(月) 23:32:48 ID:???
すまん、
>>133 正直は何の事だか理解できなかった…が、やってみて判った!
もしかして基本?(汗
s/正直は/は正直/ わたひの受けた衝撃の高さを物語っています。orz..
139 :
98 :2006/07/31(月) 23:34:40 ID:YjkkI8MZ
?BRZ(1019) なにこれ? きっと板違いだね
+てどこに付けるの? まじで分からん。
たぶん。 perl -e '@file=("abc.txt");print + ( split /¥./, $file[0] )[0] , "¥n" ;'
sub html_escape{ my @value = @_; for (my$i=0;$i<@value;$i++){ $value[$i] =~ s/&/&/g; $value[$i] =~ s/</</g; $value[$i] =~ s/>/>/g; $value[$i] =~ s/"/"/g; $value[$i] =~ s/'/?/g; } return @value==1 ? $value[0]:@value; } my $test = "a <br> b <br> c <br>"; my @test = (qw/a <br> b <br> c <br>/); my %test = (qw/a <br> b <br> c <br>/); my $test_html = &html_escape($test); my @test_html = &html_escape(@test); my %test_html = map{$_,&html_escape($test{$_})}keys %test; #@test_html{sort keys %test} = &html_escape(sort values %test); print $test_html,"<br><br>",@test_html,"<br><br>",%test_html; 簡単に作ろうと思いました。これで動作しますが、実はマグレでどこか穴などありますか? できれば my %test_html = &html_escape(%test); が理想だったのですが。
143 :
98 :2006/07/31(月) 23:51:40 ID:YjkkI8MZ
で、すみません。 もぅ一度質問して良いですか? つまりsn uploaderとかそれ系のperlアプリでありがちな処理として 投稿された動画データの変数$1234などを元に閲覧用の外部htmlファイルを生成出来るように したいんです。 ソースを眺めてもいまいち理解しずらいので勉強がてら一から組んでみようと思ってるんです。 どなたかヒント頂けませんか? makehtmlという関数らしき記述があるけど。 自作の関数を組み込んでるんでしょうね。 かなり敷居の高いテクニックなんでしょうか。。
145 :
142 :2006/07/31(月) 23:55:45 ID:???
もういいです!^^v
146 :
98 :2006/08/01(火) 00:12:44 ID:t9If8ozv
結城さんのmakeweb.plを使って呼び出す形で使えば良いですかね? 誰か教えて!
>>137 3行目以降を+の話に入れ替えるくらい基本。
>>143 確かSn Uploaderは静的htmlを出してる。それがmakehtmlだったかな。
負荷対策だろうけど、動的にファイルインデックス作るのとコードは似たようなもん。
で、説明下手だからどんな状況からどんなhtml作りたいのか書いて。1レスに収まるように。
148 :
135 :2006/08/01(火) 00:54:07 ID:???
そうですね。perldoc -f print にもしっかり乗っている話だし、 どう考えても [LIST]->[] の方が邪道でした。
>>142 の
s/&/&/
などは、配布スクリプトで汚染チェックとか書いてあるのですが、何か意味はあるのでしょうか?
「汚染チェック」 ・・・^^;;;;
151 :
98 :2006/08/01(火) 01:17:50 ID:t9If8ozv
>>147 ありがとうございます!
元のスクリプトはKentWebさんのclip_bordなんです。
それに拡張子のwmvを追加し投稿されたwmvデータを$xxx.wmv.htmlで出力出来るようにしました。
(ここまでは簡単)
実は当面必要と思われるだけの1.wmv.html 2.wmv.html...と作ってディレクトリに突っ込んでやろうかとも思いましたが。。
あまりにバカっぽいのでやめました(笑
ひな形となるwmvプレーヤを組み込んだhtmlファイルをperlスクリプト内に置くか外部に置くかはまだ
決めてませんが、その雛形html内に$xxxを渡しつつその変数でのhtml作成を考えています。
# 添付データを書き込み
#.wmvに.htmlを追加。
if ($tail eq ".wmv") {$tail .= ".html" ;
#.wmv.htmlファイルの自動生成この辺り。
}
$imgfile = "$ImgDir$no$tail";
if (!open(OUT,"> $imgfile")) {
if ($clip_err) { &error("画像のアップロードに失敗しました"); }
}
binmode(OUT);
binmode(STDOUT);
print OUT $upfile;
close(OUT);
chmod(0666,$imgfile);
#の部分に雛形htmlファイルと生成の為のスクリプトを組み込めないものかと考えています。
思いっきり見当違いかも知れませんしこれじゃ伝わらないかもですが。。
勉強しようと思います。
よろしくお願いします。
152 :
98 :2006/08/01(火) 01:29:44 ID:t9If8ozv
>>151 要するにアップロードされたファイル1個1個に対して間接DL/再生ページを吐き出したいわけね。
$xxxにファイルの番号が入ってるのかな?
そのhtmlの雛型あるじゃん。その中でファイルごとに変動させたい部分を探すの。そこを変数にしといて
$htmlcontents =<<<"EOH"; # この構文はヒアドキュメント
<html>略
<title>$xxxの再生ページ</title>略
<... src="$xxx.wmv">略
EOH
とでもhtml化してあとはこの$htmlcontentsを"$xxx.wmv.html"といったファイル名で出力すればいいよ。
$tail .= ".html";するのはファイル出力直前のが良さそう。
154 :
98 :2006/08/01(火) 01:48:22 ID:t9If8ozv
>>153 その通りの事なんです。
それは理解出来そうです。ありがとうございます。
で、その>$xxx.wmv.html"といったファイル名で出力すればいいよ。
との事だけど、その出力関数?つまりUnixで言う所のmk...コマンドのような、
どういう記述でファイルを新規出力させれば良いのだろうかと。
perlのファイル周り関数を見てもそれに当たるものが見当たらないようだし。
どうでしょ?
$tail...の部分も含めてアドバイス、本当にありがとうございます。
>>154 普通にファイルオープンしてhtmlを書き込むんだよ。
検索すれば山ほど出るから調べてね。使うアクセスモードは">"になるよ。
156 :
98 :2006/08/01(火) 02:06:04 ID:t9If8ozv
あぁそっかー ファイルオープンで良いんだ。。 超基本ですね。きっと。 それでググって更に納得です! ありがとう。 俺も数年後ぐらいには、ここで初心者(超)の質問に答えてあげられるぐらいになりたいですよ。 がんばろ。 感謝。
157 :
nobodyさん :2006/08/01(火) 02:28:05 ID:k536PVpv
アップしたファイル(ページ)を10日後など一定時間後に自動消去させるにはどうすればよいでしょうか?
そういう事がしたいなら、静的ファイルを作るんじゃなくて、動的にページを表示するようにした方がいいね。
別に鯖側で管理しなくても、 PerlでFTPコマンド送信すればおk
161 :
nobodyさん :2006/08/01(火) 06:40:14 ID:rFB6zqEC
ものすごく初心者質問ですみません。 入力エリアが未記入かどうかの判断は if ($変数名 ne "") 以外にもあるのでしょうか? $htmlbuf .= "$cdname<input type=\"hidden\" name=\"$code\" value=\":$cdno=\"> <input name=\"$code\" size=\"15\" value=\"$input\"> <BR>\n"; ↑このような記述で コード名称 入力エリア <br> というのをいくつか繰り返して表示させてます。 初期表示では入力エリア($input)はスペース("")を送っています。 これで入力エリアに何か入れてsubmit後の処理なのですが $codeには 「:$cdnoの値1=$inputの値1:$cdnoの値2=$inputの値2……etc」と入っているので 「:」ごとに配列に格納し、要素を「=」で$cdnoと$inputにわけ if ($input ne ""){処理} という風にしたいのですが、未記入にも関わらず{処理}になります。 直前にPRINT文を入れて値を確認しても、未入力エリアには何も入っていません(多分長さ0) 何か表示されないコードのようなものが入ってるのかな?と思うのですが それを確かめる術もわかりません。 単純な質問のわりに長文になって申し訳ありません。 よろしくお願いします。
>>161 見間違い。printされてたか、変数名が違うか、実は別の処理が呼ばれてたか。
unpackするかlength使っとけば長さ0かどうかは分かる
print unpack("H*",$input); print length $input;
あとスペース(0x20)と空文字列は区別してね。
163 :
161 :2006/08/01(火) 09:10:57 ID:???
>162 早々のレスありがとうございました。 print unpack("H*",$input); print length $input; を入れてみたところ $inputには"2020"長さは2。最後の項目のみ"20"長さ1となりました。 空文字ではないということはわかりました。 printされていたか?というところなのですが 初期表示で$htmlbuf をprintして入力エリアを表示しているので この時点で「””(空文字)」は「2020」になるのでしょうか? 入力のある項目は「20入力文字20」となるので、勝手に半角スペースが挿入されてるみたいです。 最後の入力エリアのみ「20」の長さ1になるのも謎ですが 半角スペースを空文字に置き換える処理を入れておかないといけないということでしょうか?
NullはNull。 HTMLソースをよくみてみろ ぬるぽ
165 :
161 :2006/08/01(火) 11:13:02 ID:???
「""」=空文字=Nullではないということですか? このあたりは私の説明もごっちゃになってたと思います。 初期表示で「""」をセットした項目ならば、未入力の場合同様に「""」で判断できるかと思ったのですが それはできないということでしょうか?
半角スペースが挿入されてるってことはNullじゃないってことでしょ
すまないが 誰か use について詳しく説明してるサイト 教えてくれ 俺のミニマム脳みそじゃ見つからん
つperldoc
>>161 submit後の処理というのは、クライアント側からsubmitしてきた場合
の処理の意味ですか?それだったらどういう風にフォームデコードして
目的の文字列(「:$cdnoの値1=$inputの値1:$cdnoの値2=$inputの値2……etc)を得ているのか
詳しく説明よろしく。基本的にいって未入力の場合の$val ne ""は普通に使えますよ。
>>167 useの何に引っかかってるのか書いてくれないと、なんとも・・・
>>170 ブログスクリプトの共通ファイルを
下位ディレクトリに入れて共用しようとしたけど
どうやら use 何がしで読み込んでるらしく
どうしたら良いのか見当がつかなかったのです
調べてみたら
plファイルで指定してるけど
配布されてるものらしく指定箇所が
やたら多いので諦めました(´・ω・`)
しかもこのpl使って固有のログとってるから
共有するわけにもいかず・・・
お騒がせしました
webから直接アクセスされるスクリプトが少数なら、それらの先頭 (#!/usr/bin/perl の次の行あたり)に use lib './下位ディレクトリ'; 追加してみて。
改造工房池
>>172 うごいたーヽ(゚∀゚)ノ
ありがとう
しばらくテストして実装してみる
初心者です。すんません。 掲示板を作成しているのですが、 [1] [2] [3] みたく、ログ数をリンクさせたいのですが、自分の小さい頭ではどうしてもその方法が分かりません・・・。 本当に小さいことで構わないので、ヒントをよろしくお願いします・・・。
177 :
161 :2006/08/01(火) 21:42:14 ID:???
>169 すみません。最初の質問でInputのnameを変数名で指定していましたが 正しくは直接その名前を書いてます。「$code」→「code」 知識が無いので説明が的を得てなかったらごめんなさい。 $htmlbuf .= "$cdname<input type=\"hidden\" name=\"code\" ……… <BR>\n"; ↑$htmlbufをHTMLファイルで指定したエリア(userarea)に入れてプリント。 初期画面だと入力エリアには未入力で表示されています。 codeには :コード1=空文字:コード2=空文字:… という形になっています 入力エリアに何か入れてsubmitボタンを押す (これがクライアント側の処理という認識でよいのでしょうか?) デコードはcodeをサブルーチンに渡して { local($value, $codeto, $flag) = @_; $codeto ? ($kcd = $codeto) : ($kcd = $basic'kcd); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; unless($flag){ $value =~ s/</</g; $value =~ s/>/>/g; $value =~ s/"/"/g; } &jcode'convert(*value, $kcd); $value; } コードはsjisで変換です。 内容については既存のものなのでどのような変換内容なのかは理解していません。 すみません。
そう言われても分かるわけねえ('A`)
>>177 デコードはそれであってるのでいじらないほうがいいでしょう。
>codeには :コード1=空文字:コード2=空文字:… という形になっています
という形になってますというけど普通はこんな形にならないわけで、
この形を作ってる部分のコードが分からないとどうしようもないです
180 :
157 :2006/08/02(水) 00:45:20 ID:???
>>180 sn uploaderとかでやってるのは、確か、ファイル作った
日時を別ファイルに保存しておいて、起動ごとにそのファイル参照しながら
チェックとかしてたような・・・
unlinkとかファイル演算子とか調べると参考になると思う
182 :
nobodyさん :2006/08/02(水) 01:34:36 ID:lNNds71o
PHPのmd5()関数のように、簡単なハッシュ関数を作れる関数ってPerlにはありませんか?
>>182 crypt。用途知らないけどモジュールでMD5使う方が適してるかも。
184 :
161 :2006/08/02(水) 02:44:01 ID:???
>179 すみません。もう少し手前からかくべきでしたね。 foreach(@aaa){ if データがあれば{ $input = データ; } else{ $input = ""; } $htmlbuf .= "$cdname<input type=\"hidden\" name=\"code\" value=\":$cdno=\"> <input name=\"code\" size=\"15\" value=\"$input\"> <BR>\n"; } 実際には@aaaから条件で抽出したデータのみ処理をするのですがここでは略してます 繰り返す事によってcodeの中に「:$cdnoの値=$inputの値」のセットが後ろに追加されていきます 初期表示の場合は入力がないので$inputに全て「""」を直前にセットします(これは確認しました) なので初期状態及び、入力のない項目は「:$cdnoの値=空文字」になるかと思います。 しかしデコード後のcodeの内容を変数に入れてプリントさせてみると $inputの値のところ(=の右)は半角スペースになっているのです。 ほかの部分は特に何か文字が入ったりはしません。
>>183 ありです。
md5はモジュールぶっこまないとだめなんすねー
正規表現が正しい記述か間違った記述か判定するにはどうすればよいでしょうか?
>>186 正規表現が正しい(意図したとおり)かどうか機械的に判定する方法なんてあるわけ無い。
と、突き返したいところだが…
--- 以下、エスパー的解釈 ---
外部から入力されたorプログラム外に用意した正規表現を実行しようと、
$regexにその正規表現の文字列を入れて、/$regex/ と言う風にしてみました。
しかし、入力された正規表現に構文エラーがあったときに、例えば
Unmatched ( in regex; marked by <-- HERE in m/( <-- HERE / at -e line 1.
のようなエラーとなり停止してしまいます。そこで、事前に正規表現にエラーが無いかを
判定すればよいかと思ったのですが、その方法がわかりません。どうすればよいでしょうか?
--- 以上 ---
こういう質問だと仮定しての回答。マッチングするときにevalブロックを使えばよい。
構文エラーがあったときはそのevalブロックを抜けて、$@にエラーメッセージがセットされる。
eval { ... /$regex/ ... }
if ($@) { エラー時の処理 }
# そういう質問じゃないと言うのなら、順序だててちゃんと説明汁。質問はこういう風に丁寧に。
189 :
nobodyさん :2006/08/02(水) 08:17:41 ID:??? BE:212256746-BRZ(1002)
>>185 Digest::MD5は標準モジュールだにょ
なんか最近沸きすぎじゃね?w
課題でやるやつもいるからしょがないわな
//././..././/././///./.././././//../././///.//./././././././././././ モールス信号です。解読してください。そして回答をモールス信号で下さい。
いやです。
課題でPerl!?世の中変わったな・・・
夏だなぁ・・・
>>184 たとえば今
use CGI;
$a = new CGI;
print $a->param('code');
print <<FORM;
<form action="$ENV{SCRIPT_NAME}" method="post">
<input name="code" value=":1="><br>
<input name="code" value="a"><br>
<input name="code" value=":2="><br>
<input name="code" value="b"><br>
<input name="code" value=":3="><br>
<input name="code" value=""><br>
<input name="code" value=":4="><br>
<input name="code" value=""><br>
<input type="submit">
</form>
FORM
;
というコードを走らせてみましたが、
普通に:1=a:2=b:3=:4=
という出力が返ってきました。
ということで、CGI.pmを使うことをお勧めします。
あと、htmllintなどでもかかれてますが、同じname値をもったinputを複数
設置して値をつなぐというのは非標準です。ので、その動作は基本的には
保証されてません。
199 :
63 :2006/08/02(水) 16:47:03 ID:???
>>99 月またぎの遅い返事。書かれちゃってるのかあ。そうかあ。情報ありがとう。またひとつかしこくなったきがする。
200 :
nobodyさん :2006/08/02(水) 18:11:03 ID:Sa4fTnpW
掲示板に海外?からの迷惑書き込みが多く、対応策を考えています。 分からないなりに色々と調べて以下のような対応をしてみました。 迷惑書き込みのほとんどが英語の書き込みなので、書き込み内容が 全て半角文字だったら書き込みしないようにしたつもりです。 if($comment =~ /[\x81-\x9f\xe0-\xef][\x40-\x7e\x80-\xfc]/){ $textchk = 0; } else{ $textchk = 1; } if ( $textchk = 1 ){ print "書込み内容が不適切です\n"; } この対応でだいぶ書き込みが減ったのですが、まだ一部「Good design! 」みたいな書き込みがされていました。これも全て半角文字なのですが、 なぜ書き込みされてしまうのでしょうか?自分のPCから「Good design! 」と書き込もうとしたときはちゃんとチェックがかかります。文字コード (シフトJISやEUC)の違いなのでしょうか? ちなみに if ( index ($comment, 'Good design!') >= 0 ){ $textchk = 1; } という文も入れてみたのですが、ダメでした。 よろしくお願いします。
>>200 正規表現を変えた方が良いかも。
if ($comment =~ /[^ -~]/) { # 英語以外の文字がある
$textchk = 0;
} else {
$textchk = 1;
}
↑これだと文字コード依存無いし、元のより速いはず。
202 :
nobodyさん :2006/08/02(水) 18:37:13 ID:Sa4fTnpW
>>201 ありがとうございます。
正規表現をよく理解していないので意味はよくわかりませんが、
試してみたいと思います。(結果は数日待ってみないとなんとも
言えないので、また何かあったらよろしくお願いします。)
掲示板で弾くのもいいけど、 htaccessでアクセスを弾く方法もあるよ。 参考までに。
でも海外からの書き込みも許可したいけど、簡単にスパムだけ弾きたい時はどうすんだろな。
本文中に
http:// 〜 が何個以上入ってたら弾くとか? ウーン
>>201 それだと改行入ってたらおk っぽいんだけど、いいのかな?
画像認証のやつ、なんて言うんだっけ? ヒミコなんとか…
>>204 それもそーだ
>>202 if ($comment =~ /[^ -~¥r¥n]/) {
正規表現、こっちにしとけ
207 :
nobodyさん :2006/08/02(水) 21:56:39 ID:Aqv2fKnb
亀田あれで勝ちなのか・・・・・・・・・・・・・・・ う〜ん。あれでチャンピンオンの名乗りを受けて喜べるのか・・・・・・・・・・・・・・ 弟達はイマイチ喜んでなかったぞ。 本当はゲイスポに書きたいんだけどさ。 入れないんだよ。人が多すぎて。パンク状態。
スレ違い。だが酷過ぎw
209 :
nobodyさん :2006/08/02(水) 23:13:01 ID:Aqv2fKnb
一体PerlCGIってなんのためにあるんだろ? 何の需要を満たせるんだろうか。 自営業をしている。24歳。ネットショップを開いた。自作で。 アクセスとかその他もろもろを管理する管理CGIも作った。 ちょっと要塞っぽくなってきた。 でも一体なにができるんだろうかPerlCGIで。 注文を取れる?いやいや。電話でもいいだろ。現にうちは個人商店みたいなもんだが、 電話での通販は昔からやっていて利便性は十分だ。 商品案内はカタログを配ればいいだけ。折込チラシとかもね。 ネットからの注文は月に数えるほどでまるでダメ。 アクセスは一日平均100前後の異なるIPが着ている。 色々やった。CGIで実験的なことも色々とやった。いうとどこの店かわかるだろうからいわないが。 直接セールスに赴いたほうが100倍威力があるということを証明しつづけてるだけ。 いや自営業だからね。別に何をやってもいいのよ。 それで思ったのPerlCGIが満たせる需要って何?って。 ネットッショップの構築というが、実際にネットショップなど大して必要でないんだよ。 買い物籠などね。電話番号と商品案内を載せてれば十分。 で、考えるの。この技術で満たせる需要ってなんだろうって。 消費者の需要ね。BtoBではなくて。BtoBを除外するのは、実際うちの会社でCGIが うちの客の需要を満たせてないからである。やってみたいという商売側の需要を満たせても、 かわいそうな現実がその後に待ってるだけだからBtoBは除外する。
210 :
nobodyさん :2006/08/02(水) 23:19:20 ID:Aqv2fKnb
消費者の需要。 つまりインターネット利用者の需要ってことになるわけだ。 楽しいコンテンツこそがネット利用者の主な要求になるわけだ。 その楽しいコンテンツ制作のほんの少しの手伝いくらいはCGIにできるかもしれない。 しかしCGIが主役になっての供給はないんじゃないのか? 一体何のための技術なんだろう・・・これは。 と最近考えてる。 要はだな。どこかで俺は「PerlCGIの技術で直接赴くセールスに準じる強力な何かを実現できるのではないのか」 と考えていた。だから今「CGIって役に立たなくないか?」というのがなかなか受け入れられない。 あぁ。そうか。情報の整理と引き出し。ウィキみたいな。 あーいうのにはCGIがとても役に立っている。 まあ補助だが。準主役級だな。 しかしそれだけか?なんかないのかcgiよ。 情報技術の一端なんだろ? それじゃあなんでもっと伝える力がないのよ。 それを実現できないのよ。 ネットにつながないと。ヤフー検索で検索しないと。 そんな受身なのか?なぜそんなに脆弱だ? 人間本体ならいつだって相手の家に押し入ってなんでも買わせることができるのに。
>>209 とてもいい言葉を教えてあげます。
「馬鹿とハサミは使いよう」
あなたはインターネットを使いこなせていないだけ。
212 :
nobodyさん :2006/08/02(水) 23:27:41 ID:Aqv2fKnb
>>211 じゃあ優秀なあなたに問う。
あなたに一個1万円の健康食品を100個渡すとします。
完全に無名です。
それを1ヶ月で売り切れますか?
そういう話をしてるのです。
実際セールスマンは100個売り切るでしょう。
というか直接赴く方法でなら俺は実際に売れる。
営業は得意ではないが、訪問セールスの強力さは知っている。
さあ。あなたは売れますか?ネット上で100個を。
もちろん売った時の使用経費も重要です。
特定商品を単位時間で何個売るか、なんて勝負したら勝てるわけないじゃん。 ネット販売をどう利用すればいいか、Amazon とかが如実にやってみせてるだろう。
214 :
nobodyさん :2006/08/02(水) 23:36:34 ID:Aqv2fKnb
ショップなんかはあくまで仮想店舗であって、
現実の世界には勝てないんだよ。
例えば洋服。まず色、モニタや撮影手段によって微妙に変わるから信頼度が低い。
次サイズ、数字だけで試着が不可能なためイマイチ情報が足りない
最後に他の服や自分とのバランス、やはり試着ができないためイマイチ不明。
つまるところ3つの点全てで現実の世界の情報量に劣っているわけだ。
中途半端な商品情報などクソの宣伝にもならねえ。
だから現実の世界の手段にくらべ脆弱なのは当然だ。
だよな。。。あきらめきれないのよ。
>>211 はネットを使いこなせるみたいで、俺にわからないことを知っている。
層信じてまつ。頼むよ
>>211 。がっかりさせないでくれよ。
なので、 「馬鹿とハサミは使いよう」 なのです♪
216 :
nobodyさん :2006/08/02(水) 23:40:06 ID:Aqv2fKnb
>213 >ネット販売をどう利用すればいいか、Amazon とかが如実にやってみせてるだろう。 そうだね。文字や画像で伝えれる情報以外がほとんどない商品においては そこまで現実世界の手段との差は開かない。 ただ一つの本を誰か特定の一人に売るにしても直接家に言って説明したほうが売れるけどね。 まあこの辺りはプログラム畑?の人にはわからない感覚だと思うけど。 うん。でもamazonは確かにいい利用をしてるよね。 でもあれってさ。CGIあんま関係ないよね。相変わらずの補助レベルだし。
217 :
nobodyさん :2006/08/02(水) 23:41:05 ID:Aqv2fKnb
作るだけじゃなくて、ちゃんと検索エンジンに登録したり ネットらしい宣伝はしたの? それなしじゃダメだろうね。
219 :
nobodyさん :2006/08/02(水) 23:43:20 ID:Aqv2fKnb
>>217 あなたの意見は至極当然のことなのですよ♪
いきなり国際網店出したって売り上げが出せることなんて皆無でしょうに。
商品そのもの以外の付加価値があってこその国際網店かと♪
ここは「質問」スレであって、「演説」スレでも「討論」スレでもない どうみてもスレ違いだ 以後は他所でやれや
夏で逝かれたのが沸いてるな。 セールスでノルマ達成できなかったのか知らんが、道具に罪はない。 包丁もって野菜を切るか人を切るかは持ち主次第。 要は、 「馬鹿とハサミは使いよう」
224 :
nobodyさん :2006/08/02(水) 23:47:57 ID:Aqv2fKnb
amazonを話に出してくれた奴は本当にセンスがいい。 バカとはさみは使いようね。 そうだね。うん。 現実の世界の手段と競争したり、比べたりすることがうまくないんかもな。 確かに現実世界の手段は強力だ。凄いよ。でもネット手段にはネット手段ならではのことがあるのか? もちろんそれでもネット手段なんてのは脆弱だ。 しかしそこでamazonだ。現実手段とまともな比較ができるくらいの段階にまできている。 そうか・・・・・でもさ。うん・・・・テレビ通販と同じで 大金掛けて宣伝するってのが第一条件にあるんだよな。 現実手段ならまるで金などかけずにドブ板営業でやれるのに。 ってそれも比較をしてもしょうがないのか。 するとこの疑問提起自体が無意味だと?
225 :
nobodyさん :2006/08/02(水) 23:51:31 ID:Aqv2fKnb
>>220 自営業だってのに夏休みがあるわけねえだろ。
>>223 わかってんのかな。こいつ。
現実手段とネット手段との比較であって、使う人間云々じゃないんだよ。
ハサミ→現実
ピンセット→ネット
ハサミがなかった時にピンセットでなんとか紙を綺麗に裁断する。あくまでピンセットの原型のままで。
いや。お前の言いたいのはハサミがなければあきらめろって情けない意見だってのはわかってる。
>そうだね。うん。 なんだnullか。
227 :
nobodyさん :2006/08/02(水) 23:56:00 ID:Aqv2fKnb
要はだな。 amazonみたいにネットに適した商品を扱うっていう形は形でいいけどもさ。 なんだよその消極的なのはさ。いきなりネットの限界を認めちまうわけ? ネット販売に向かない商品をネット上に掲載するのはあくまでサブで本体ではない? なんだよそのあきらめきった態度は。 現実手段にもまけない強力な手段をネットで実現できないのかと。 ネットの限界をひきあげようって話。 それでPerlCGIね。てめえ何もできねえのかと。 現実手段に対抗することは何もできないのかと。 「バカとはさみ。。」はもういい。 ハサミを教えられた使い方しかできない。 それ以外にかんがえようとしないのでは発展はない。
ヤフオクとかもネットじゃなきゃできない代物だよな。 てか何か人と道具を比べて、道具はダメだ! って言ってるようにしかみえねえw
ネット見てても腹は膨れない。 金を食っても栄養にはならない。 「馬鹿とハサミは使いよう」
230 :
nobodyさん :2006/08/02(水) 23:58:26 ID:Aqv2fKnb
例えばよ。パソコン使わない世代。ネットなど無関係な世代がいるだろ。 っていうか日本人の3割はそうだろ。日常生活にネットはないよ。 高齢者だからな。 んでな。 ネット手段でどうにかしてお年寄りにある特定の商品情報をあますことなく 現実手段以上に伝えることはできないのかってこと。 パソコンすら持ってない人間にだ。
もう
>>211 で論破されてんだから、枕濡らしながら寝ろ。
232 :
nobodyさん :2006/08/03(木) 00:00:30 ID:Aqv2fKnb
>>228 いや。オークションも同じだ。現実世界の方が伝えれる情報量は圧倒的におおい。
例えばだよ。壊れかけたradioを出品するな。
どうやって壊れかけ具合を伝える?
現実なら何度か使わせれば伝わるだろ?
お前はそれをネットで現実手段レベルで伝えられるか?
233 :
nobodyさん :2006/08/03(木) 00:01:35 ID:Aqv2fKnb
>>231 おまえ
>>211 か?頼むよ。本当にさ。
ネット使いこなせてるんだろ?お前。
論破したとか冗談言ってないで本気で語れよ。
逃げんなよ。
結局極論持ち出し始めたな。 あぽーん
ワラ
>>230 携帯持ってないやつに、どこにいても連絡を取る手段はないかってこと?w
夏休みはまだまだ長いので、その間に色々な物を眺めてみるといいかもですね。 はさみだって材質がステンレスじゃなければ、刃をさらに研げばカミソリのような切れ味も出るし、 先をへし折って薄く削ってみればマイナスドライバにもなるうるし。 でも、いくら手を加えても純金の延べ棒にはならないわけでして。
熱くなるのはいいが、その前に次の語句について調べてくれ。 「 ス レ 違 い 」
で、あぼーんしやすいようにトリップを付けてね>ageで書いている厨さん
240 :
nobodyさん :2006/08/03(木) 00:08:09 ID:QGlUDLBT
>>234 極論?どこかだよ。あきらめんなよお前。俺より頭いいだろお前ら。
>>236 そうなんだよな。orz
でもよ。それを認めることは限界を認めることなのよ。
俺はまだ限界を認めたくないのよ。
お前頭いいだろ。もっと智恵を出せよ。
超音波を送るとかいくらでもあるだろ?
耳に超音波受信機をつけるんだよ。いや、つけないんだよ。
人間の耳に正規表現をあてるんだよ。
>>237 あきらめるな!
なんだお前は!そんなんでいいのか?
誰でも出せる答えでそのままあきらめていいのか!
純金の延べ棒にだってできるさ。
分子レベルで変換をする装置を作ればいいだけだろ?
何をあきらめてんだお前ら!
241 :
nobodyさん :2006/08/03(木) 00:09:31 ID:QGlUDLBT
>>238 スレ違い?何いってんだ。
逃げても何の解決もしないぞ!
>>239 何のために俺がID出してる思ってるんだ?
アボーンしたくなったらいつでもしてくれ。
お前の言うセールスってさ、 包丁もって上がりこんで、布団買うまで帰らないって脅すことか?w 「馬鹿とハサミは使いよう」
>>240 分子レベルでは錬金術師やん(呆)そんな同じ歴史の繰り返しみたいな低レベルでええんか?
・・・ってことで、いっぺん大きく息を吸って心落ち着けてまわりを見渡してみなされ(これ夏休み中の課題)
話はそれからだ♪
244 :
nobodyさん :2006/08/03(木) 00:14:21 ID:QGlUDLBT
>>242 お前セールスやったことあるか?
どういうときに売れ、どういう売れないかわかるか?
いや頭がよければ経験などなくてもわかるはずだ。
どれだけ現実手段が協力化を。
>「馬鹿とハサミは使いよう」
お前こうやってこの言葉に逃げてばかりだな。
ネットでは不可能。それでいいのか?お前。
もっと適した手段をとればいい?
なぜこの段階でネットが適してないと決め付ける?
お前は物事の限界を押し上げる心意気はゼロか?
頑張れよ!
245 :
nobodyさん :2006/08/03(木) 00:16:10 ID:QGlUDLBT
>>243 同じ歴史の繰り返し?
お前はただあきらめの繰り返しをしてるだけだろうが!
何のためにお前には手があり足があり脳みそがあるんじゃ!
あきらめてんじゃねえ!
夢を見すぎ。頭が悪すぎ。ここはPerlのスレだから、どこか適当な板探してそっちでやれ。。
>>245 なにも「あきらめた」なんて宣ってませんよ♪
で、だ。
結局このスレッドに何の用があったの?余りにもスレッドの趣旨にずれていませんか?
ひとまず餅付けるれ♪
249 :
nobodyさん :2006/08/03(木) 00:21:21 ID:??? BE:123816072-BRZ(1002)
ここは 『Perlコーディング初心者質問スレ Part 51』 だお( ^ω^)
250 :
nobodyさん :2006/08/03(木) 00:22:01 ID:QGlUDLBT
いや。あきらめきれないじぶんがいた。で、思わないレスが付いたので思わない方向に行ってしまった。 使いようって話は確かにそれでいいんだけどさ。 それじゃあPerlCGIの使いようってのは何だろうって聞きにきた。 しょっぱい方法はいいんだどうでも。 PerlCGIが一番威力を発揮できる。一番強力に思える使いようってなんだろうってこと。 言語間レベルの話ではなくてね。
253 :
nobodyさん :2006/08/03(木) 00:30:25 ID:QGlUDLBT
PerlCGIの技術を持ってるからだ。 俺はお前らと話がしたい。 そしてお前らはここにいる! 一緒にPerlCGIの一番強力な使いようってのを考えよう!
スレタイ読めないの? 注意されてもスレ違いの話題を続けて、どれだけ迷惑かわかってる? それとも、わかってて、わざとやってるの? いずれにせよ、ルールを守れないような人がどんな主張をしたところで、 真面目に読んでくれる人は誰もいない。非常識な人間に、営業うんぬんを語る資格もない。 あなたの「訪問販売」の名を借りた「押し売り」の被害者がかわいそうでならない。
/\⌒ヽペタン / /⌒)ノ ペタン ∧_∧ \ (( ∧_∧ (; ´Д`))' ))(・∀・ ;) おおおままいららももちちつけけけけ / ⌒ノ ( ⌒ヽ⊂⌒ヽ .(O ノ ) ̄ ̄ ̄()__ ) )_)_) (;;;;;;;;;;;;;;;;;;;)(_(
next if $id eq 'QGlUDLBT';
つまり「他の技術がさっぱりだからマーケティングを応用できない」ってことだな。ナメ過ぎ。
単なる馬鹿だよなぁ。 物干し竿売ってるのは移動ついでってのを知ってるんだろうか。 訪問販売で100個売れる?すごいね。 でも訪問販売してる間にサイトで注文が5個来てたら、 わざわざ訪問しないでも5個余分に売れるのにねぇ。 維持費と宣伝効果がそれを下回るなら必要ないって判断になるだけだし。
259 :
98 :2006/08/03(木) 02:52:12 ID:hD9wA+sa
俺もiTunesとか使うけどやっぱりリアルストアに行った方が楽しいしね。 まだまだ普通に「商売」って観点で見りゃネットはリアルにかなわないでしょ? コンビニでも売ってるようなモノをネットで扱ったって誰も買う訳ない。 リアルに向く商材、ネットに向く商材ってのもあるだろうし、 ネットならではの利益の上げ方ってのもあると思う。 まぁ、でも具体的な例だと新宿の某レコードショップは店舗の売り上げよりも通販の方が、 売り上げ出してるらいしいし。 (てか店舗はショボ過ぎ) 何故かっていうとマニア向けの品揃えだよね。 特殊なケースだろうな。 どっちか言うとテレビみたいなもんで無料サービスが基本で広告収入とか、 そういうやり方の方が向いてるんじゃないかな? いやいや一般的な商売で言ったら、そりゃリアル店舗&営業に適う訳ないのは当然と思う。 なんつぅか。
260 :
nobodyさん :2006/08/03(木) 02:52:44 ID:hD9wA+sa
名前消すの忘れてた。。(恥ずかしいw)
っていうか方法以前にどこの怪しい個人商店かわからないような所の ウェブサイトなんてまともに利用しようと思わないだろ。
まあネタとしてはちょっと面白かったよwww
ここまで読み飛ばした
264 :
nobodyさん :2006/08/03(木) 06:09:00 ID:QGlUDLBT
>>257 なるほど。マーケティングか。やっぱり凄いよ!お前ら。
で、Aという健康食品を売るのに具体的にお前ならどういうマーケティングを
どうやって取りどう生かすんだ?
アンケートでも書かせるのか?確かにプレゼント企画でもやれば1万レベルの人間が
集まるな。しかしなプレゼント企画に参加してくる貧しいやつらの意見をお前はどう使うんだ?
アクセス解析からマーケティングか?そうだなそれは日々行われるな。
うん。そうだな。どうも具体的に考えれば考えるほどイマイチだな。
これは俺がイマイチなんだろうな。マーケティングで成功してる
>>257 ならマーケティングからネットのいい使い方を見つけ出すんだろうな。
流れに逆らわずってやつか。よし。待ってるぞ
>>257 あきらめんなよ。
俺にお前の想いをぶつけてみろ。
>>258 いい例えだよorz
本当凄いよお前ら。
でもお前らの発言全て「ネットはしょぼい。しょぼいなりに利点がある。しょっぼいなりの使い方をしよう」
ってあきらめ。俺は「ネットはしょぼくないはずだ!あきめるかボケ!」って粘着。
>>261 いいところをつくよね。
「信頼を得るのもネットには向かない」
ってことを言いたいんだよな。
セールスならやりようでいくらでも信頼を取れるからな。
ちょっと待て。誰も 「ネットはしょぼい」 なんて言ってないぞw
そう思ってるのは
>>264 だけじゃないかw
「ネットの世界」 っていうくらい世界というか次元が違うだけ。いっしょくたにされても困る。
どっちも得手不得手があるのだから、その上でそれを生かしたことをするってもんだろ。
よく訪問販売を例に出すけどさ、わざわざ北海道や九州の人の家まで行ってできるかと。
耳かきで耳はほじれてもカレーは食えないってことじゃねーの。
相手すんな
どうでもいいけどスレ違いだからヨソでやれよ。
Perlのコーディングで困ってる人のスレです。
荒らしに構う奴は荒らしな。
>>254 がいいこと言ってる。
>非常識な人間に、営業うんぬんを語る資格もない。
>あなたの「訪問販売」の名を借りた「押し売り」の被害者がかわいそうでならない。
まんこ^^
売る商品の種類、値段、知名度で販売方法を選択出来ない 脳なし個人商店が愚痴をこぼすスレはくこでしか? とりあえず質問 値として0をもつフォームからGETを受けて、perl で値を調べると 値が入ってこないんだけど、これって正常動作なんでしょか? 入力データはハッシュにいれてて、definedで調べると未定義って帰って来ます。 perlは昨日落としてきたのを使用。
definedについて詳しく調べてみろ
ID:QGlUDLBTの人気に嫉妬www なんだかんだ全員レスつけたろ
>>273 コードが無いと分からない。
自動的に変数に代入されるわけじゃないから。
アホな質問者だなコイツ。 さっきのクソ自己中といい一体なんだってんだ。
278 :
nobodyさん :2006/08/03(木) 14:28:31 ID:VJorhNro
http://joe.ash.jp/pc/netprog/ftp.pl.txt ここにあるFTP転送スクリプトを一定時間サーバーの応答がなければ
実行を止めるというタイムアウト処理をするように書き換えようと思います。
alarm関数でなくselectでタイムアウト処理をしようと思いますが
以下のようにftp_recvを書き換えてみましたがタイムアウト処理が
行われません。どうしたら良いかご教授願います。
sub ftp_recv {
my ($sock) = @_;
my ($buf, $rc, $cont, $msg);
my $rin = '';
my $rout;
my $ftp_timeout = 10.0;
$rc = 0;
vec($rin, fileno $sock, 1) = 1;
die unless select $rout=$rin, undef, undef, $ftp_timeout;
while (chomp($buf=<$sock>)) {
die unless select $rout=$rin, undef, undef, $ftp_timeout;
print "$buf\n";
$buf =~ /^(\d\d\d)([ |-])(.*)/;
$rc = $1; $cont = $2; $msg = $3;
if ($cont ne '-') { last; }
}
return($buf);
}
>>276 エスパーになれとはいわないからせめて文字列を真偽値として使うときの
perl の振る舞いぐらいわかってから回答してください。 (>_<)
>>279 なんだこいつ?あの程度のこともわからないで質問に来たやつが何その態度は?
消えろウジムシ。
アクセス解析について質問です。 <img src="hoge.cgi">でperlからgifを返してます。 以前のページがどこだったのかを知るにはどうすればいいでしょうか? リファラには呼び出し元がはいるので2行目を記述してる自分のページがはいります。 index.cgiなど全部のページがcgiでないとアクセス者がどこから来たのかわかりませんかn?
1.素直に Apache の生ログ使用 2.全部のページにアクセス解析を設置して、 その情報をもとに自分で集計する。 3.Javascript 等を利用して <img src="hoge.cgi?(<img>が記述されているページから見たリファラ)" の形で呼び出す。 2世代前のリファラを送信する規格も実際送信するブラウザも存在しないので このような方法以外では無理。
あー俺もそれ悩んでJsで引数としてHTMLのリファラー渡して解決したわ
284 :
nobodyさん :2006/08/03(木) 19:17:34 ID:Uu9V7GTd
1.自分はこういう事がしたい。 CGI_Liteを用いて作成したアップローダーで、実際にアップロードする前に 1回確認画面(「このファイルでOK?」という感じのもの)を入れたいと考えています。 2.それでこんな風にやってみたが・・・ <INPUT TYPE="file" NAME="up_data">の内容を $data = $FORM{'up_data'};として、確認画面で <INPUT TYPE="hidden" NAME="up_data" VALUE="$data"> と入れて保持しておこうとしてみました。 3.こんなエラーが出て上手く行かなかった。 エラーというかhiddenのVALUEが空っぽになってしまいました。 そもそも自分がやろうとしていることが可能かどうかも分からない状況です。 具体的な手順を教えていただければこれ以上のことはありませんが、 可能か不可能かという回答だけでも構いませんので、よろしくお願いします。
アップされたファイルはテンポラリファイルに一時保存しておく
アップロードに確認画面いらんと思うけど
287 :
284 :2006/08/03(木) 19:26:19 ID:Uu9V7GTd
>>285 あぁ!なるほど!
とりあえずは確認画面に行くと同時にアップしておいて
確認画面でキャンセルしたらテンポラリファイル削除
確認画面でそのままOKしたらテンポラリファイルリネーム
って感じですかね。
ありがとうございます!
目からウロコでした。
>>287 確認画面でキャンセルも何もしなかったら、という場合も考えなよ。
ファイル残るから
289 :
284 :2006/08/03(木) 19:37:26 ID:Uu9V7GTd
>>288 完全に見落としてました。
危うくゴミだらけになるとこでした。
その解決方法は・・・
テンポラリファイルの名前にアップした日時を入れておいて
次回CGIにアクセスがあった場合にそのときの日時と比較して
ある程度の差があるファイルは全て削除
というようなものを想像してみましたが、変ですかね・・・?
俺もそうすると思う
291 :
284 :2006/08/03(木) 19:52:27 ID:Uu9V7GTd
>>290 やろうとしていることが間違ってないという後押しは心強いです。
ありがとうございました!
>ID:Aqv2fKnb ロングテールでググれ。話はそれからだ
>>282-283 輪足の場合はjsが現実的そうですね。
ちょっとあきらめかけてましたが、盲点でした。
jsをバカにしすぎてまいた。
すれではおれいあしな。
SSI 使ってもできるね
それでは結局全ページcgiと変わらない罠。 まぁアクセス解析img挿入もかわらんか。 apacheログとるのが一番楽。
ここはPerlでどうやるかのスレ・・・ って、apacheのログを取るモジュールをPerlで作ればスレ違いじゃない!
CGIの呼び出し元を限定したいんですがこれはHTTP_REFERERを見て判断するしかないでしょうか? 自分自身からの呼び出しのみを許可して外部からの呼び出しは禁止させたいんですが HTTP_REFERERだと容易に偽れてしまいますよね?
>>281 hoge.cgiを呼び出す側のhtmlもcgiにして、
<img src="hoge.cgi?$ENV{HTTP_REFERER}">
でもできそう。
というか全部のページをCGI にするのって、perlならそれほどめんどくさくない。
回答者っぽい釣りなのかなあれは・・・ >でもできそう。 ほのぼのマンか?
呼び出す側もcgiにするならそもそもimg要素でやる必要がどこにwww
・・・(´・ω・`)あんまいじめちゃだめだぞ
306 :
298 :2006/08/04(金) 22:20:26 ID:???
hoge.cgi(画像出力)からindexのリファラを知りたいっていうクレームでしょ。
誰かマジレスしてやれよ
306の発言はアレだが、claimの意味を知らずに煽っている奴は 辞書を引いて見るといい。
314 :
nobodyさん :2006/08/05(土) 17:42:22 ID:IQdTNDFf
クレーム【claim】 (1)商取引で契約当事者から出される損害賠償の請求を伴った苦情。 (2)(一般に)苦情。注文。「―をつける」 三省堂提供「デイリー 新語辞典」より
今からここは英語質問スレになります
UNIX板みたいな流れだな
318 :
nobodyさん :2006/08/06(日) 12:14:13 ID:NewLER86
perl5には my と local の違いがありますが、 どのように使い分けたらいいのか分かりません。 (同じとしか思えない) どういうときにmyを使うべきか、 どういうときにlocalを使うべきか、 おしえていただけますでしょうか? よろしくお願い申し上げます。
つperlsub
>>318 local はパッケージグローバル変数の値を一時的に差し換えて利用するための関数で、ダイナミックスコープと呼ばれる効果範囲を持っています。
my はシンボルテーブルに属さない局所的な変数を宣言するための関数で、レキシカルスコープと呼ばれる範囲で利用可能な変数を新たに生成します。
>>318 の求める物はほとんどの場合 my の働きだと思います (ぼくがなぜそう思うか理解できないなら、まず間違いなくそうです)。
ですから、そうしない理由を明示できない場合は常に my (及び use strict) を使ってください。
321 :
318 :2006/08/06(日) 13:52:08 ID:???
>>319-320 親切にごせつめいいただいてありがとうございます。
おっしゃるとおりに、my (及び use strict) を使って行こうと思います。
perl5で、XMLファイルの書き出しを行うスクリプトを作成しています。 ただ、perlソースの文字コードはEUCの為、XMLファイルのUTF-8の文字 コードに変換する必要があると思います。 そこで質問なのですが、EUC→UTF-8への文字コード変換について 一番スマートな方法は何でしょうか?
Encode.pm
325 :
323 :2006/08/06(日) 15:21:52 ID:???
おっと、このケースでは Encode::from_to() のほうがいいのかな。
>>322 >perlソースの文字コードはEUCの為
これに固執する理由による。
文面から見るに 「perlはEUCで書かなければならない」 と勘違いしてないか?
普通に UTF-8 でスクリプト書いても通るよ。
変換先、変換元の文字コードが変わることがなければfrom_toでやったほうがいい
329 :
322 :2006/08/06(日) 22:57:22 ID:???
>おっと、このケースでは Encode::from_to() のほうがいいのかな。 有難うございます。おっしゃった方法で解決できました。 UTF-8でスクリプトを書く方法でも出来ました。 皆様有難う御座います。
えーと、
>>81 で質問したものですが、それに関係した質問をさせていただきます。
bとcが2つ以上あったときに真を返すようにするにはどのようにすればいいのでしょうか?
「abacacaabaa」だったら真を返す、のような感じです。
少し「正規表現」でググって勉強してこい・・・
>>330 言い方があいまいでよくわからない
bとcの個数をそれぞれN(b),N(c)としよう。
N(b) >= 2 && N(c) >= 2
N(b) >= 2 || N(c) >= 2
N(b)+N(c) >= 2
どれともとれるが。
>>331 申し訳ないです、もう少し粘ってみます
>>332 N(b) >= 2 && N(c) >= 2
これです。わかりにくくてすみません
334 :
333 :2006/08/07(月) 12:27:32 ID:???
自己解決しました
>>330 のように11文字だったら
if($x =~ /b.{0,10}?g/i and $x =~ /d.{0,10}?d/i) {
何らかの処理
}
でいけました
b,cの出現順序はbbcc,bcbc,bccb,cbbc,cbcb,ccbbの6通りあるので それぞれの文字の間に.*はさんで|でならべればできあがり。 わざわざ正規表現使わずに数えたほうが楽かもね。
つまらないことですが教えてください。 perldebugでインタラクティブなperlを使用するために $ perl -d -e 42 とありますが、なぜ42なのでしょうか?
>>336 たぶん 「answer to life the universe and everything」
340 :
336 :2006/08/07(月) 14:10:30 ID:???
CGI掲示板を製作したんですが、 フォームにINPUT type=imageを使用した時にnameとvalueが無効になってしまっているようなんです。 これは元々そういう仕様なんでしょうか? それとも何かが間違っているのでしょうか?
typeにimage入れてどうすんの。 HTMLの質問はWeb制作板へ。
343 :
nobodyさん :2006/08/07(月) 21:52:54 ID:DmsXLNko
誘導されて来ました。よろしくお願いします。 nameに同じ名前を指定する時、 Input typeがcheckboxならばcgi-lib.plで処理出来るのですが hiddenの時も同じように処理は出来ないのでしょうか? &ReadParseの力を使っても何も表示されませんでした。
344 :
nobodyさん :2006/08/07(月) 22:21:18 ID:??? BE:159191892-BRZ(1002)
もうね
>>342 type に image は XHTML1.1のDTDにも定義されてる、有効な属性値だよ。
imageはたとえばnameをfooにしたら、foo.x=クリックした横座標&foo.y=クリックした縦座標が来るよ?
>>343 cgi-lib.pl使ってないけど
普通にできると思う。
けどnameをおんなじ名前指定するのは、非推奨のはずなので
perlというより、サーバー側でちゃんと処理されない可能性は考えられる。
詳しい人あとよろしく
@hoge = SplitParam('name'); で取り出せるよ?
349 :
343 :2006/08/08(火) 02:46:18 ID:???
>>344 ,347,348
無事出来ました。ありがとうございました。
・・・・もう少し自力で出来るように頑張ります。すみません。
サブルーチンに&を付けてないからPHPかと一瞬思ってしまった。
いやそれはおかしい
またKEMT仕様か
wwwwwwwww
最低限サブルーチンには「&」を付けるべきだろ。 えらい見づらくなる
つ、釣られないクマー!
質問があるんで聞いて下さい。 テキストファイルを読み込む時に半角スペースで区切って文字を認識させてるっぽいんですが 改行して認識させるにはどうしたらいいっスかね?
>>357 いやファイルを読み込んでforeach ( split(/\s+/, $test) ) {って感じでなってるんだけどこれだと半角スペースで
区切って複数を認識させるんだけどそれを改行して複数認識させたいっていうか・・・。
普通に /\s+/ ↓ /[\r\n]+/ とかでいいんでね? まあ、今回は何もいうまい。
if(バックスペース又はシフトが押される){エラー文} として、画面を戻すのを弾こうとおもうのですが、ifの条件の式が分かりません 解説しているサイトがあれば教えてください。お願いします
それ以前にそれ本当にPerlか?
スレ違いてか板違いw web制作板へどうぞ。 そのままだとユーザビリティに反するので答えてくれないかもしれないが
perlのCGIでラジオボタンを使った登録フォームを作成しているのですが、 ラジオボタンの制御がうまくいきません。 どういうことかというと、 フォームに必要項目を入力してもらい、確認ボタンを押した後、 入力項目にエラーがあると修正ボタンが表示され、 修正をしてもらうという仕組みなのですが、 修正ボタンを押して入力フォームに戻ると、ラジオボタンが選択していた 状態ではなくなり、デフォルトの状態にもどってしまいます。 修正ボタンを押した後に、ラジオボタンの位置を、選択した箇所のまま表示させるには どのような処理を行えばいいのでしょうか? どなたかご教授お願い致します。 修正画面までラジオボタンのデータが渡っていることまでは確認済みです。
valueが一致するラジオボタンにcheckedを付ける。
>>365 早速アドバイスありがとうございます。
HTMLのソースが下のような感じです。
input name="genre" type="radio" value="1-1">
input name="genre" type="radio" value="1-2">
input name="genre" type="radio" value="1-3">
この行一行一行を「m//」でvalueが一致するか調べて
一致したら、「s///」で行ごと置換すればいいのでしょうか?
HTML::FillForm
369 :
nobodyさん :2006/08/09(水) 02:28:37 ID:2nlyYTa7
Perl初心者です。投票スクリプトを製作しています。 データの書き込み処理に躓きました・・・。ヒントを下さい・・・。 $hogeに、「5」という数字が入っているとします。 そしたら、下記の「log.dat」の「番号5」の値の投票結果を「+1」していきたいのです。 つまり、「$hogeに入った数字と、log.datの『番号』の値を比べて、同じなら『投票結果』の値を『+1』する」 というスクリプトを組みたいのですが・・・・。 ログファイル(log.dat)の中身は以下の通りです。 番号 投票結果 ----------------------- 1 10 2 20 3 26 4 30 5 10 ----------------------- どうか、よろしくお願いします。
一旦、ログファイルを全部読み込んで、s/^(\s*\Q$hoge\E\s+)(\d+)(.*)$/$1.($2+1).$3/me とか。
371 :
369 :2006/08/09(水) 03:40:54 ID:eB/zZqiV
>>370 ありがとうございます。かなり複雑っすね・・・。
たびたび申し訳ありませんが、自分には何のこっちゃか・・・ orz
ログファイルの設計がおかしい 人間が見やすいようにするんじゃなくて perl様が見やすいようにする つか、他人の作った投票スクリプトを読み下せ
373 :
nobodyさん :2006/08/09(水) 04:32:22 ID:WfKDVGHV
正規表現で、1〜300の数字にマッチさせるにはどうしたらよいでしょうか? [0-9]{1,3}では999までヒットしてしまいます。 ループもさせたくないのですが、、
[12]?\d{1,2}
>>372 のいう
>>369 のログファイルの設計のおかしさ、どこかわからないんだけどw
そう書くのは割りと普通じゃないの?
簡単なログファイルでいいのならたぶん俺もそう書く。
open (略); read(略); %data = split(/\s+/);
だけでもデータとれるし。
>>369 +1 して保存するときは普通に。
$data{5}++;
foreach (sort { $a <=> $b } keys %data) { print 略 $_, "\t", $data{$_}, "\n"; }
close (略);
>>370 は結構トリッキーな書き方だね。 (.*)$ の部分はどうして必要なのかちょっとわからなかったけど。
>>369 >>372 が言っているように、ログファイルの書式を見直すべし。
1, 2, 最終行 は不要。もし入れたいならコメントと分かるように工夫を。
余分なスペースも不要。
ログファイル例:
1 10
2 20
3 26
4 30
5 10
> 「番号5」の値の投票結果を「+1」していきたい
いったん全部読みこんで、5の値だけ変えて、全部書き出す。
いや、どう考えても 1,2、最終行は、ここで解説するために追加したラベルだろw
上から1,2,3・・・って並んでるなら、indexは必要ないだろ ログファイル例: 10 20 26 30 10 で、十分。あとは、 open fh,$log; @dat=<fh>; close fh; chomp @dat; $dat[$hoge - 1]++; open fh,">$log"; print fh join "\n",@dat; close fh; で、どうぞ
379 :
369 :2006/08/09(水) 12:22:14 ID:???
本当にありがとうございます orz
>>378 試したわけじゃないが、何か可笑しくない?
381 :
378 :2006/08/09(水) 13:27:12 ID:???
>>380 えっと、自分は試して書いてますが・・・
最初chompとjoinは書いてませんでしたが、それだとうまく行かなかったので足しました・・・
なので、その辺がちょっと冗長かも・・・
普通にぶっ壊れそうだなw
別に普通だろ。
まあ同時アクセスで壊れるね。
失礼。もう一個・・・。 ------------------------- 10 20 26 30 10 ------------------------- のようなログがあった場合、この数字を全て足していきたいのですが、 ------------------------- open(LOG," $log"); @logs=<LOG>; close(LOG); for ($i = 0; $i <= $#logs; $i++) { $count += $logs[$i]; } ------------------------- で、大丈夫でしょうか? ひょっとすると、forよりforeachやwhileを使ったしたほうがよろしいのでしょうか? アドバイスよろしくお願いします orz
行番号$iをどこかで使うなら↑かなあ
387 :
385 :2006/08/09(水) 16:33:48 ID:???
>>386 ただ単に、ログの合計値を求めたいだけなので、「$i」は使わないっすね・・・。
そうすると、foreachでしょうか?やり方は分からんですが・・・。
がんばればきっとできる
さすがにこれから自分でコーディングしようとしてる人間が 関数すら調べようとしないなんてなぁ。 素直に「夏休みの宿題です」と言えば、まだかわいげがあるのに。
foreachよりforの方が速いって知ってる?
どのぐらいの量だとその差を実感できますかね
392 :
nobodyさん :2006/08/09(水) 17:57:13 ID:WfKDVGHV
393 :
nobodyさん :2006/08/09(水) 18:01:38 ID:WfKDVGHV
>>385 行が多いならメモリ節約のために1行づつ読んだほうがいいですよ。
排他したいならflockをした上で、いったんテンポラリファイルで保存してリネームがいいです。
>385 foreach(@logs){ $count += $_; } while(<LOG>){ $count += $_; } 下のほうが推奨されるやり方。 どちらにせよ10 + "15\n" == 25 という危ない等式を使っているので、 ほかの言語でやるときは注意が必要
>>391 そうか?
俺も結構ゴリゴリ書くから、こうゆう細かい事は極力気にかけてるぉ
>>394 ん?「10 + "15\n" == 25」って何がマズイんだ?
ギリギリchompしろよ
>>390 は迷信です。…言うまでもないんだろうけど、こういう与太が広まるのは迷惑っちゃ迷惑なんで。
>>397 タイプするのが速いって事じゃないの?
399 :
nobodyさん :2006/08/09(水) 21:27:42 ID:lhGjc7IL
ヤフーの株価ページにアクセスして必要な情報をテキストに書き出すCGIを作っています。 銘柄コードを1000から9999までループさせ銘柄名を取得するのですが、 ループの回数が少ない場合正常終了するのですが全件やると半分ぐらいまで書き込みが完了した所で Premature end of script headers のエラーになってしまいます。 ファイルへの書き込みがタイムアウト?しているのかと思い1000件毎に、CLOSEしてOPENしなおしても変化ありません。 何回かに分けて処理したほうが良いのでしょうか? 次でソースのせます。
400 :
nobodyさん :2006/08/09(水) 21:33:52 ID:lhGjc7IL
open(FILE, ">$name_data");#ファイルオープン(クリア) close(FILE); open(FILE, ">>$name_data");#追加書き込みでファイルオープン eval{ flock(FILE, 2) }; for($i = $start_code ; $i < $end_code ; ) { $cd = sprintf("%04d",$i); $url="ヤフーのURL"; $dt=get($url); @data = split(/\n/,$dt); $j = 0; while($j < @data) { if(銘柄名の行になったら){ $sk = $data[$j]; $sk =~ s/\<b\>//g;#ごみ取り $sk =~ s/\<\/b\>.+//g;#ごみ取り $sk = jcode::sjis($sk); $sk =~ s/\(株\)//g;#ごみ取り print FILE jcode::sjis("$cd\,$sk\n");#書き込み $j = 100000#終わりなので抜ける } ++$j; } ++$i; if(substr($cd,1,3) eq "000"){ close(FILE); open(FILE, ">>$name_data");#タイムアウト防止で1000毎に書き込み eval{ flock(FILE, 2) }; } } close(FILE); こんなです。よろしくおねがいします
自分がやってることが理解できないようだな。死ねよ
恐らく run time で kill されてるだけかと
サーバのタイムアウトの可能性があるから、 ApacheならTimeout値の見直しとか。 共有サーバなら逝ってよし。
>404 株価データの著作権とかの問題を言ってる?
良く分からんけど、 $dt=get($url); ってヤフーのデータを読みに行ってるんだよね。 これがforループの中にある事に不吉な気配を感じる。 $iの値は1000から9999まで1ずつ増えるんだよね?
407 :
403 :2006/08/10(木) 00:12:35 ID:???
>>404 さっぱり分からん。
それは本当に、私達に対して言う言葉なのか?
408 :
400 :2006/08/10(木) 00:30:08 ID:???
>>402-403 タイムアウト値を300から2000に変更したところ全て正常終了できました。
ありがとうございます。
>>401 、
>>404 プログラミングのお作法についてなのか
著作権の問題かどちらかでしょうか?
ネット上に公開されているデータを収集しファイルに落とすことが問題?
会員用のデータを公開したり勝手に売ったりしたら問題だとは思いますが・・
>404 >402-403のことで解決したってた。 解決策も提案できないチンカスは早く寝ろや >404 サーバーに負担かけすぎなので、出来れば一定間隔でsleep入れて相手のサーバーを思いやるか、 特定銘柄のみの取得にするといいかも。
げふ。アンカー先間違えた。 2個目は400さんへだ。
>プログラミングのお作法についてなのか >著作権の問題かどちらかでしょうか? どちらでもありません。ただ死んでください。
・・・(´・ω・`) このへんの板も ID つかねぇかなー
YahooのサーバーにF5アタックしてるのとかわらないから 下手すると威力業務妨害とかで訴えられるんじゃね?
PragmaヘッダやCache-Controlヘッダが付いてなければF5とは違う。
そもそもCGIでやる意味ねーし
テキストファイルに情報を格納したり読み出したりするプログラムを毎度毎度書くのは いいかげんめんどうじゃないですか? 最近はPerl限定ならStorableにハッシュ突っ込んで終わりにしてます。
テキスト形式が面倒だと思ったことはあんまりないなぁ・・・ むしろPerl依存の形式にしちゃうほうが後々めんどくさそう・・・
timethese (500, { test_a => q{ my $a = 0; for (my $i = 0; $i < 100000; $i++) { $a++; } }, test_b => q{ my $a = 0; foreach (1 .. 100000) { $a++; } } } ); Benchmark: timing 500 iterations of test_a, test_b... test_a: 12 wallclock secs (11.63 usr + 0.00 sys = 11.63 CPU) @ 43.01/s (n=500) test_b: 9 wallclock secs ( 9.63 usr + 0.00 sys = 9.63 CPU) @ 51.95/s (n=500)
それじゃあ条件が対等じゃなくね? てか、for と foreach の違いってそういう意味なの? use Benchmark; my @arr = (1 .. 100000); timethese(1000, { test_a => sub { my $n = 0; for (my $i = 0; $i < @arr; $i++) { $n++; } }, test_b => sub { my $n = 0; foreach (@arr) { $n++; } }, test_c => sub { my $n = 0; for (@arr) { $n++; } }, }); Benchmark: timing 1000 iterations of test_a, test_b, test_c... test_a: 26 wallclock secs (25.80 usr + 0.00 sys = 25.80 CPU) @ 38.77/s (n=1000) test_b: 15 wallclock secs (14.64 usr + 0.00 sys = 14.64 CPU) @ 68.31/s (n=1000) test_c: 15 wallclock secs (14.53 usr + 0.00 sys = 14.53 CPU) @ 68.82/s (n=1000)
10万回ループなんてどこで使うの?
いや・・・ 10万回ループは、あくまでベンチマークの為だから・・・。 普通の for ループ(test_a)と、リストを渡す for ループ(test_c)では、明らかに 1.5 倍程度前者の方が遅い。 でも、foreach (test_b) と for (test_c) の違いは、「無い」と言っていい。 (上のを何度か実行してみたところ、全ての結果において test_c の方が 0.1 秒ほど速かったけど誤差の範囲)
ああ、
>>418 はぐぐって出てきたのをそのまま(ry
>>421 そうじゃなくて、@aryを100とか1000くらいに、timetheseの方を100000とかにした方が現実的だと思っただけです。あんまり気にしないでください。
use Benchmark; my @arr = (1 .. 10000); timethese(1000, { test_a => sub { my $x = @arr; for (my $i = 0; $i < $x ; $i++) { } }, test_b => sub { foreach (@arr) { } }, test_c => sub { my $n = 0; for (@arr) { $n++; } } }); Benchmark: timing 1000 iterations of test_a, test_b, test_c... test_a: 2 wallclock secs ( 1.88 usr + 0.00 sys = 1.88 CPU) @ 533.33/s (n=1000) test_b: 1 wallclock secs ( 1.23 usr + 0.00 sys = 1.23 CPU) @ 810.37/s (n=1000) test_c: 2 wallclock secs ( 1.86 usr + 0.00 sys = 1.86 CPU) @ 537.63/s (n=1000) aで$n++する意味がわからん。
>>424 c で $n++ する意味もわからん。test_b と test_c は明らかに不公平。
条件が等しくない
まさかbとcを比較されようとは… use Benchmark; my @arr = (1 .. 1000); timethese(10000, { test_a => sub { my $x = @arr; for (my $i = 0; $i < $x ; $i++) { $arr[$i]=" "; } }, test_b => sub { foreach (@arr) { $_=" "; } }, test_c => sub { my $n = 0; foreach (@arr) { $arr[$n++]=" "; } }, test_d => sub { my $n = 0; foreach (@arr) { $arr[$n]=" ";$n++; } } }); __END__ Benchmark: timing 10000 iterations of test_a, test_b, test_c, test_d... test_a: 4 wallclock secs ( 3.72 usr + 0.01 sys = 3.73 CPU) @ 2678.81/s (n=10000) test_b: 2 wallclock secs ( 2.73 usr + 0.00 sys = 2.73 CPU) @ 3657.64/s (n=10000) test_c: 4 wallclock secs ( 4.34 usr + 0.00 sys = 4.34 CPU) @ 2302.03/s (n=10000) test_d: 4 wallclock secs ( 3.98 usr + 0.00 sys = 3.98 CPU) @ 2509.41/s (n=10000)
つか、なんで違う条件でばかりベンチ取ってるの?意味ないだろ
>>427 純粋に繰り返し部分だけを比較するなら @arr は余計。( $i は、それがないと
同等の機能を果たせないので必要)
for ( my $i=0; $i<10000; $i++) {}
for ( 0..10000-1 ) {}
use Benchmark; timethese( 1000, { a => sub { for ( my $i=0; $i<10000; $i++ ) {} }, b => sub { for ( 0..10000-1 ) {} } }); --- a: 1 wallclock secs ( 1.49 usr + 0.00 sys = 1.49 CPU) @ 673.40/s (n=1000) b: 1 wallclock secs ( 1.05 usr + 0.00 sys = 1.05 CPU) @ 955.11/s (n=1000) 前者は $i を使う分(?)少し遅くなってるが、実際の使用では 繰り返し処理のメイン処理部が時間を食うわけだから、どちらも同じ程度と 認識してよいでしょう。
条件同じにするなら、 for (@arr) {} と foreach (@arr) {} を比べるんじゃないの? 内部では同じだから、ほとんど誤差分しか違いが出ないと思うけど。 条件付きの for (my $i = 0; $i < 1000; $i++) {} が 条件なしの foreach (0 .. 1000) より遅いのは仕方ないし。
実際にforやforeachを使うとき、わざわざ配列を用意するか?
なにしたいのかさっぱり
434 :
:2006/08/10(木) 20:38:11 ID:/HJpKD0H
よくテンプレートで使うハッシュに入れる値をDBとかで配列でとってきますよね foreach (@omomomo){ my $ha = $hoge[0]; my $hb = $hoge[1]; push(@a,$ha); push(@a,$hb); } while(@ha && @hb){ my %has; $has{hoge} = shift @ha; $has{moge} = shift @hb; push(@hogehoge,\%has); } $template->{hogehoge} = \@hogehoge; これもっと短くする方法ないですかね
どこで質問させて言いかわからなかったので、ここで質問させてもらいます URLを指定してそれをダウンロードさせたいのですが、どのようなモジュールがありますでしょうか?
ポポポポポ( ゚д゚)゚д゚)゚д゚)゚д゚)゚д゚)ポカーン…
for ( 1 .. 1_000_000 )
とか今は平気なんね。
知らなかったから参考になった。
>>434 templateしらんがforeachは何してるん。
>>435 file:///C:/Perl/html/site/lib/LWP/UserAgent.html
たぶんここに答えのファイルがあるはずだッ
>>434 あまりにもそのコードがいい加減でなんとも言いようが無い。
テンプレート使うのに、そんな処理するか?
突然ですが質問です。 スクリプト側でファイルのパーミッションを指定したり変更するにはどのような 方法がありますか?
chmod
443 :
434 :2006/08/10(木) 22:30:27 ID:???
foreachは foreach(1..$num){ の間違いです(適当にかいてしまいました すみません $numにはmysqlから取得した個数が入っていて foreach(1..$num){ @hoge = $sql->fetchrow_array; # @hogeにはhogeとmogeを配列で値を取得 my $ha = $hoge[0]; my $hb = $hoge[1]; こんなかんじです
444 :
440 :2006/08/10(木) 23:07:09 ID:???
config.cgiで指定する 各種ログファイル名 という項目でファイル名を指定するわけですが その際にスクリプトの方でパーミッションを指定するにはどのように 記載すればよいですか?
445 :
435 :2006/08/10(木) 23:13:13 ID:???
>>438 ありがとうございます。
Windows環境でないのですが、UserAgent.htmlを探してみたのですが
自分の環境にはないようです。
>>442 ありがとうございます
実際にやってみると、標準出力にソースが出力されてしまいます。
後付けで申し訳ないのですが、それをHTML::TagParserで処理したいのですが
そのような事が出来る方法などないでしょうか?
>>434 とりあえず短くした
while (my $row = $sql->fetchrow_arrayref) {
push @hogehoge, {hoge => $row->[0], moge => $row->[1]};
}
>>445 出力結果を変数に入れてHTML::TagParserに渡すとか。
その方法すら想像付かないならプログラミング自体諦めたほうがよい。
450 :
444 :2006/08/10(木) 23:54:01 ID:???
config.cgiで指定する 各種ログファイル名を指定する所で $NAME_1 = 'logdata'; の用にした時のスクリプト側でパーミッションを指定する際には どうしたらよいでしょうか? 簡単にperldoc -f chmod のままではうまくいきません。
config.cgi って何についてくるやつ? chmod使ってどんな風に書いたの? それでどううまく行かなかったの?
>>450 perldoc が何であるか調べてからもう一度おいで。
>>$450 なんかソースにperldoc -f とか書いてそう・・・w
>>444 =440 はすでに
>>441 で答えをもらってて、
>>446 にも補ってもらってて、まだダメとは…。
コピペできるくらいに全部コード書いてあげないと分からないのでは。
455 :
444 :2006/08/11(金) 00:19:47 ID:???
うまくいかなかったというより書き方自体が分からなかったのでお聞きしました。
>>455 だから perldoc は、その「書き方」を調べる為のコマンドだってば・・・。英語だけど中学レベルの簡単な英語。
Windows なら、スタート→プログラム→アクセサリ→コマンドプロンプトを開いて perldoc -f chmod と打ってEnter。
自分で調べられない奴は、いつまで経っても上達しない。どうせ perldoc で検索すらしてないんだろ。
人の答えを丸写しして「動かない」とか文句いう奴に何を言ってもムダ
イミフ
460 :
nobodyさん :2006/08/11(金) 01:35:21 ID:5JciSP0N
モジュールの使い方がわかりません モジュールをコンパイルしてインストールしたら /usr/pkg/lib/perl5/site_perl/5.8.0/HTML/TagParser.pm としてインストールされました。 この場合、そこをuseしたらいいのでしょうか? use HTML::TagParser /usr/pkg; では、Internal Serverr Errorになりました。
use HTML::TagParser; 使い方は、perldoc HTML::TagParser 参照
>>463 それでもInternal Server Errorになります。
コードはサンプルコードの
my $html = HTML::TagParser->new( '<html><form action="hoge.cgi"></form></html>' );
my $elem = $html->getElementsByTagName( "form" );
print "<form action=\"", $elem->getAttribute("action"), "\">\n" if ref $elem;
と記述しているだけなので、間違いはないと思います。
エラーログ見れば? use が失敗してるなら、@INC調べる
CPANの設定やり直したいんですけど、最初に perl -MCPAN -e shellしたときの対話インターフェイスってどうやって呼び出すんですかね? あと、その設定が保存されてるファイルってどれですか
467 :
nobodyさん :2006/08/11(金) 21:27:36 ID:oxtjr5tX
マッチングについての質問です。 置き換えによる部分削除をしたいのですが すべての文字列を対象とする場合はたとえば s/<dl> </dl>//; とした場合、このタグの間にどのようなメタキャラクタを 書けばよいのでしょうか?
<dl>(.+)[^(<\/dl>)]<\/dl> わからん!
470 :
nobodyさん :2006/08/11(金) 22:27:28 ID:oxtjr5tX
>>468 うまく活きました。
ありがとうございます。
<dl>([^\<]*)</dl>までは思いついたのですが
これではダメだったんですよ。
あなたに幸あれ。
Pathがちがけりゃエラーも出るわな・・・
use Net::FTP;にてサーバー上のファイルのサイズを取得したいと 考えております。以下によりサイズ取得は成功しているようなのですが (エラーメッセージが出ない為)取得したファイルサイズを変数に格納 する事は出来ないのでしょうか? $ftp->size($testfile) || print "サイズ取得失敗"; どなたか宜しくお願い致します。
代入知らないって事?
Net::FTPを知ってて代入を知らないなんて。 釣りとしか思えない。
wwwwwwwwww
このぼけ新しい!
splitを/ /(スペース)で取る場合、"hoge geho"などのクォーテーションで囲ってあるものも分割されてしまうのでしょうか?
これがゆとり教育の成果
>>466 丸一日の亀回答失礼。
o conf init
設定ファイルパスはo confすれば表示される。
>代入知らないって事? >Net::FTPを知ってて代入を知らないなんて。 すいません。本当にわからないのです。 取得したサイズを変数に代入するにはどうしたらよいのでしょうか?
そんなエサに(ry
”=”って言えばいいの?
>>482 何がわからない? 右辺? 左辺?
それとももっと根本的なこと?
>何がわからない? 右辺? 左辺? 右辺です。
|| のかわりに or を使うと幸せになれるかもよ
488 :
nobodyさん :2006/08/13(日) 00:42:28 ID:BxCEpRlj
MLDBMを使ってDBファイルにハッシュの配列のハッシュを保存しようと思ってます、 そこで無名配列にハッシュのリファレンスを順番にpushしたいのですが上手くいきません。 なんででしょうか。 use strict; use MLDBM qw(DB_File); use Fcntl; tie(my %save, "MLDBM", "data.db", O_CREAT|O_RDWR, 0644) or die "エラー"; push @{$save{$aaa}}, $hash; untie %save;
>>488 MLDBMでぐぐったら1件目に答えが書いてあるように思うのは気のせいか?
$size = $ftp->size($testfile);
なんか休日になると伸びないような・・・
休日にしか伸びない夏厨の巣窟のようなスレよりはマシ。
五十歩百歩
夏厨以外がなんなのか知りたい・・・
>>473 は多分、次のように記述したんだろうなと思う。
$size = $ftp->size($testfile) || print "サイズ取得失敗";
つまり、優先順位がわからなかったかったものと思われる。
>>473 は、次のうち好きなのを選んでね。
$size = $ftp->size($testfile);
$size || print "サイズ取得失敗";
($size = $ftp->size($testfile)) || print "サイズ取得失敗";
$size = $ftp->size($testfile) or print "サイズ取得失敗";
エスパーからの回答でした。
orだと優先順位が低いんだっけか。 結構気づきにくいところだね。
498 :
nobodyさん :2006/08/15(火) 15:09:13 ID:amgg11pz
ヒアドキュメント内で関数は使えないのでしょうか? $a = 1; print <<DOC; 元の値:$a 処理後の値:&hoge($a) DOC sub hoge{ my $tmp = shift $tmp++; return $tmp; }
>>498 @{[ hoge($a) ]}
邪道だけどね。
perl6ではできるようになるらしい
501 :
nobodyさん :2006/08/15(火) 17:18:05 ID:??? BE:424512386-BRZ(1002)
、.,ri、 l''''レ :l|゙'rレ,,゙'r, .,,,,,,, l .l ゙'!,,゙レヘ!" :| | l .l___,,~ | :| .,,, 'l~~~~~~ ̄ .,,,,,_,,,, .| │ :|,,irrr‐'''''"~.゙'!i、  ̄ ̄ ゙̄,l リ: : .| :| ィー'''''' ̄` .,,,,,ir-ー''''}" ,r" '|'| .,,,, l|,,,,―i、 ,,,,,,i、,,,、 .,ri、 'l'ト │ ,l゙ | | =--'''''"| | ,i" ,r" .l | ._,,, | l '{\ _,,二,、 ,rlレ''l''l'''!i,'i、 l゙,| ,-rr,|.|,,,,,i、 .,l゙ .,l゙ .| .| | :| ,i" ,i" .,,l`|,|レr" .|.| .'Lト .'l|レー'''=゙L .,l゙,i´ l゙,! .リ゙l |.| .゙~ ̄|:| .,,i´ ,/ | l゙ | | .~'〃 : ,i'レ'~ .|.| ,r, ゙l,,} .,"| l..l、,ト,i´ .,!,レ | | ,,r-ノ.|,、 .,,i'" ,r" : ..,,i´.レ l゙ │ : リリ----r, ゙l,,l,,,i" ,,,,r!二 ゙l,,,,レ゙ ,r',,レ" l゙.| .l|'ニ,l゙,!!ii,= .,〃 ,,r" .゙l~゙゙゙゛.,,/ リ, .゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙レ .~゙゙゙゙゙゙゙゙゙゙" `` ゙='''" `~` `゙゛ `"'''~ ゙'!'" "'''''''~゛ ゙~''''''''''''''''''''''''"
>>499 確認しました。出来るんですね。
でも、邪道なのか・・・。
大量に変数あるんで、いつも困ってたんだが、
おとなしく普通にするかな。
配列にして、ループで処理か。
$a = 1; printf <<"DOC", $a, &hoge($a); 元の値:%d 処理後の値:%d DOC みたいな?
ヒアドキュメント内は知らないけど現行のPugsだと "処理後の値: &hoge()"; or "処理後の値: {hoge()}"; でちゃんと展開されるよ。
perl でCGI.pmをつかってCGIを作っていますが、 tableの行をforeach文で増やしたい場合は、どのようにするのが適切でしょうか? ・ ・ foreach (@abc){ $q->Tr( $q->td($q->b("xxx")), $q->td($q->b("yyy")) ) } ・ ・ のようなカタチでやってみると、うまく表示が出ません。 この描き方は間違っているのでしょうか? ご教授お願いします。
507 :
505 :2006/08/15(火) 21:59:06 ID:???
>>506 レスありがとうございます。
print は一番初めにかいて、
print $q->start_html,
$q->start_table,
foreach (@abc){
$q->Tr(
$q->td($q->b("xxx")),
$q->td($q->b("yyy"))
)
}
$q->end_table,
$q->end_html;
の用に利用していました。
ここで、foreach文を使うときは、foreach文のブロック部分と、それ以外の部分のところでつかうprintを分けてみたらできました。
506さんのレスで気がつくことができました。
ありがとうございます。
508 :
nobodyさん :2006/08/15(火) 22:15:10 ID:OtEfXNbt
my @arr = <FH>; my $sca = join '',@arr; どうしてもこんな処理をしたいんですけど、 もっとスマートに書く方法はありますか? 以前は foreach my $line(<FH>){ chomp; $sca = $line; } としてたんですが、 うまい方法をご教授願います
509 :
508 :2006/08/15(火) 22:17:00 ID:OtEfXNbt
訂正 × $sca = $line; 〇 $sca .= $line;
my $sca = do {local $/; <FH>}; これはどう?
511 :
508 :2006/08/15(火) 22:47:02 ID:OtEfXNbt
>>510 doは使った事がないので、今はあまり理解できてませんが参考になりました。
ありがとうございます。
read(FH, $buff, (-s FH)); これじゃなにか不具合でも?
>>508 my $sca = join("", <FH>);
514 :
508 :2006/08/16(水) 00:29:17 ID:???
>>512 そんな方法があったとは(゚д゚)
これに決めました。ありがとうございます。
>>513 どうしても空文字列を使うのが気に入らないので、質問させて貰ったんです。
すみません
use IO::All;で、@lines = io('file.txt')->chomp->slurp;というのもあるね。
516 :
nobodyさん :2006/08/16(水) 10:22:03 ID:??? BE:477576869-BRZ(1002)
$/ = undef; ( ^ω^)
File::Slurp使うとか
ただたんにファイルを読み込むだけなのにモジュールを使うとか、バカじゃなかろうか…
519 :
508 :2006/08/16(水) 12:08:18 ID:???
508です。
>>512 の方法を使わせて貰ったんですが、
その後に
$sca =~ s/#command#/$hash{'command'}/g;
のような処理をしたいんですが、
マッチさせたい部分が
#com\n\tmand#
のようになってしまったらマッチできません。
$sca =~ s/\n|\t//g;
のように逃げる事も可能ですが、
さらにその後に
HTMLとして出力するのでソースが崩れてしまいます。
#command#等の種類が多いので
s/#(\r|\n|\t)?c(\r|\n|\t)?o(\r|\n|\t)?m(\r|\n|\t)?m(\r|\n|\t)?a(\r|\n|\t)?n(\r|\n|\t)?d(\r|\n|\t)?#/$hash{'command'}/g;
これじゃ酷いです。
長くてすみませんが解決策があれば教えてください。
$sca =~ s/#([^#]+)#/&cmd($1)/eg;
>>520 <a href="index.html#hoge">
とか1つでもあったら即座に破綻だなそれw
522 :
508 :2006/08/16(水) 13:57:25 ID:???
>>520 なるほど(゚∀゚)
>>521 コマンド名を見直せば解決できそうです。
あと、対応してないコマンドだったら&cmdからreturn $_[0];でぉkですね。
#command# っていうのがあらかじめ決まってる文字列なら そもそもそのなかに改行やタブが入るのを 許す必要なくね?
524 :
nobodyさん :2006/08/16(水) 16:55:37 ID:4j1cx25o
183,info... 159,info... 115,info... 090,info... 061,info... 048,info... 019,info... 003,info... という風に先頭の数字が降順に並んでいるデータに 降順のルールを破らずに任意の数字(既存の数字は除く)のデータを追加したいんですが、 なかなか良い方法が思いつきません。 新しいデータを単純に行頭に追加してデータ全体をソートする方法で良いんでしょうか? ちなみにデータ数(行数)は500前後あります。 アドバイスよろしくお願いします。
まずやってみろって・・・
それなんて課題? まずやってみろって・・・
527 :
524 :2006/08/16(水) 17:15:20 ID:???
>>525-526 すみません。
>新しいデータを単純に行頭に追加してデータ全体をソートする方法で良いんでしょうか?
というのは、「この方法で出来ますか?」という意味ではなくて、
「この方法は回りくどい方法じゃないですか?もっとスマートな方法があればアドバイス下さい」
という意味です。
自分はこの方法しか思いつかなかったんですが、
もしかしたらもっと良い方法があるんじゃないかと思って書き込みしました。
ちなみに課題等でもありませんし、コードまで書けというつもりもありません。
「こういう方法でやった方が良い」というアドバイスがあれば教えて欲しいと思っただけです。
ヒント:連想配列
なぜソートが要るのか分からん。
数字でソートするんじゃないのか?
はじめからb-treeにしておくとか
「除く」とは、取り除くってことね。 それなら納得。
reverse sort($new,@data); これをスマートにしろと?
534 :
524 :2006/08/16(水) 18:52:56 ID:???
レスありがとうございます。
>>528 連想配列を使ってソート?ということでしょうか。
>>531 b-tree構造というものを初めて知りました。
これはとても役立ちそうです。
これから調べて検討したいと思います。
>>532 >任意の数字(既存の数字は除く)
は「データ中に既に存在している数字を除く任意の数字」という意味です。
分かりにくくてすみません。
>>533 「ソートする方法の中でよりスマートな方法は何ですか?」
ということではなく
「ソートする方法以外でよりスマートな方法はありますか?」
という趣旨で質問しました。
ちなみに、私はソートなら以下のような方法でやろうと考えていました。
push(@data,$new);
@data = map {$_->[0]}
sort {$b->[1] <=> $a->[1]}
map {[$_, split /,/]} @data;
>>524 更新、参照の頻度等を考慮して適したデータ構造を利用することがスマートなのだよ。
データ構造を勉強したことがなさそうだから、おとなしくソート使っとけ。
先頭の数字がユニークなら連想配列が見た目綺麗かも
>>509 ,519
コマンドなりフラグなりに改行などを許すこと事態が駄目でしょ
=~ s/#([a-z0-9_]+)#/$hash{$1}/g; コマンドは英数字のみ許可すればいい
539 :
508 :2006/08/16(水) 20:10:41 ID:???
>>523 >>537 その通りですね。
>>538 abc#cmd_1#def#cmd_2#ghi
だった場合に#def#もマッチする気がするんですが…。
あとは自分で解決できそうです。
皆さんありがとうございました。
(゜Д゜)ポカーン
541 :
524 :2006/08/16(水) 20:40:08 ID:???
>>535 b-treeがらみでデータ構造について読んでみましたが
かなり奥が深いので腰を据えた勉強が必要なようですね。
そもそもデータの「構造」という視点を持っていなかったので
その辺の収穫が大きかったと自分では思っています。
少なくとも今扱っているデータ量だとソート力技でやっても
大きな問題はなさそうなので、おとなしくソートでやろうと思います。
>>536 ソートの方法の中身についてはハッシュも含めて色々検討したいと思います。
ありがとうございました。
入力フォームにcsvのユニークのデータを入力して、 該当する一行を削除するcgiを作っているのですが、 うまくいきません。 csvを開いたときの処理はこう書いています。 &fileopen(CSV,"<",$csv); while ($line = <CSV>) { if($line =~ m/^"$no",/) { $line =~ s/$line//; } else { $line = $line; } print CSV "$line"; } close(CSV); もし、入力した$noと読み込んだ行の先頭がマッチしたら、 その行を空白にし、そうでなければ、そのままCSVに出力するという 流れなのですが、どなたかご教授お願いします。
固定長データのファイルじゃないデータファイルに対して読み書きを同時に行うこと自体が間違いかと。 open(INFH, $csvin); open(OUTFH, '>'.$csvout); while(my $line = <INFH>){ chomp($line); if($line !~ /^$no/){ print OUTFH . "\n"; } } close(INFH); close(OUTFH);
>固定長データのファイルじゃないデータファイルに対して読み書きを同時に行うこと自体が間違いかと。 これって、マジ? 何が問題?
545 :
542 :2006/08/16(水) 21:25:08 ID:???
>>543 ありがとうございます。
固定長データのファイルじゃないというのは
どういうことなのでしょうか?
アホっぽい質問ですみません。
固定長のデータって書き方が間違いだな。 1レコードが固定長のデータファイルと訂正。 ちゃんと考えて読み書きするならいいが、 現在位置から30バイト読み取り、30バイト戻って31バイト書き出せば次のデータの1バイトが欠落するよね? で、1行ずつ読み取って処理するのにprintしちゃったら正確な次の行が読み取れませんよと。 (seekつかって確かめてみるとわかります)
547 :
nobodyさん :2006/08/16(水) 21:40:17 ID:s8jUvrs4
「2004125」と言った数字が入ったファイルがあるのですが、 これを読込んで、「2004年12月5日」という形にして表示させたいのですが、 どうやっていいか分からず困っています・・・・・・。よろしくお願いします orz
>>547 それ、1月25日と、12月5日の差はどこで見分けるの?
>>547 「2004年1月25日」の場合の数字は何?
>>548-549 失礼 orz
では「20041205」を「2004年12月05日」ってのはできるでしょうか・・・・・・?
>>546 あぁ、なるほど。
1行ずつ読み取って書き込みという処理しないから考えたことなかった。
ちなみに$noをマッチングさせる方法だと
0とか1とか入れたらどうなるんだろ。
csvデータで1コ目のセルには$noの値のみが入っているという前提に立つと
open(FH, "+< $csv") or die;
flock(FH,2);
while(my $line = <FH>){
my @tmp = split(/,/,$line);
if($tmp[0] eq $no){$line = '';}
push(@data,$line);
}
seek(FH, 0, 0);
print FH @data;
truncate(FH, tell(FH));
close(FH);
オレならこう書くかなぁ。
ツッコミまくりでワロタ
Perlに限ったことではないと思うんですが、 例えば$flag = 1のときはエラーメッセージを出して処理終了、 そうでなければ処理続行、というとき if($flag){&error;} その後の処理 と書くべきか if($flag){ &error; }else{ その後の処理 } と書くべきか、どちらが好ましいんでしょうか?
確か前スレにも全く同じ質問があったような。 $date = "20041205"; $date =~ s/^(¥d{4})(¥d{2})(¥d{2})/$1年$2月$3日/; or sprintf("%d年%d月%d日", unpack("A4A2A2", $date));
>>550 if(/^(\d{4})(\d{2})(\d{2})$/){
print "$1年$2月$3日";
}
かぶったorz
558 :
542 :2006/08/16(水) 22:00:16 ID:???
>>546 >>551 ありがとうございます。
はやく色々な方法でperlを使いこなせるようになりたいです。。
>>554 最近
$flag and die "hogehoge";
みたいな書き方が好き。
next とかは next if ($flag); が読みやすい気がする。
好みかと。 俺は、elseの処理が長くなるなら前者の方法を取るし、数行で終わるならelseの中に書いちゃう。 >550 my $aa = "20060703"; ($year, $month, $day) = $aa =~ /(\d{4})(\d{2})(\d{2})/; print $year, $month, $day;
>>560-561 処理の速さとかに影響があるのかと思って神経質になってましたが、
単純に可読性とか好みだけで選んで良かったんですね。
>$flag and die "hogehoge";
エラー処理を別に書かなくて良いから便利そうですね。
どうも条件文とかを後に書くやり方は慣れない 最近やっと = ? : ; がしっくり来るようになった程度だ
>>563 変数のスコープに注意すると良いと思う。
あぼーん
(^ω^ )………
既に登録済みですね(呆)
アクセスするときは、/invitation以降を削除したほうがいいよ
>>564 慣れてくると快感になるよ。
というか、perlstyle にあるけど、その行で何をするか一目でわかるのが大事で、
それによって条件を前に書くか後に書くか分けるといいと思う。
572 :
nobodyさん :2006/08/17(木) 12:25:28 ID:nQZCnFuY
質問です。 変数の名前やルーチンの名前。 オブジェクトの名前。ハッシュのキー。 &form_getなどとするときにつなぎはアンダーバーとハイフンとどちらがいいでしょうか? ハイフンはダメだったようなきも擦るのですが、 それとハッシュのキーでは逆にアンダーバーがダメでしたのでしょうか? クォートして$form{"test_test"}とすればよかったですかな? なんというか。アンダーバー・ハイフン戦争が始まったのです。 画像やファイルなどのつなぎをどちらにするか、 パール内での色々な名前のつなぎをどちらにするか。 そしてcss・・・ 迷いが迷いwうみ。 どちらかに統一できないものかと・・ dgんwぷ2つびん2pつb2 たすけてくさい。
もの凄いのが来てるなw 多分統一は無理。どこかで折り合いをつけなされ。 Perlの中とその他を完全に切り離して考えることが一番なので、 フォルダ・ファイル名からhtmlのid属性の値などは全てハイフンでやり、 Perlの中では臨機応変に。
574 :
nobodyさん :2006/08/17(木) 12:35:32 ID:tIcJSB0O
XML::DOM使って何も無い、ファイルすらも存在しない状態からXML文書を 起こすコード書きたいんですがちょいとどうすればいいか分からず悩んでます。 存在するXMLを開いて拡張追記することは出来たんですが…
575 :
nobodyさん :2006/08/17(木) 12:41:45 ID:IXvxvsSu
perl モジュール インストール でぐぐれ
俺の場合、ハイフンはマイナスと勘違いするから使わない
>>577 それだとcssの時面倒じゃないか?
アンダーって×だろ確か。
CSSとは統一しない。 統一する意味がわからん。
>>572 変数や関数の名前にハイフンを使う事はできない。
ハッシュのキーはクオートで囲む必要はない。
$form{test}としても常に大丈夫であって、strictも通る。
perl救命病棟という変な名前の本にその辺のかなりマニ
アックな話が載っている。
$form{test-test}hadamedaro?
>>580 CSSいじってperlいじってhtmlいじって。
そんなことしてるときに何かに名前をあげるときが来る。
「
う〜んこれはホゲの背景のためだからだからhoge-backとするか。
ん?ハイフン?アンダーバー?どっちだっけ?
他を見てみるか・・・
ハイフンだったな。
それじゃ画像を作るか。ん?ハイフンか?アンダーバーか?
」
なんてこともある。
全部自分かよw 理由って「悩むから」だけ? じゃあCSSだけハイフン、あとは全てアンダーバーでOK
>>584 そうなるとhtmlで違和感を覚える。
nameはアンダーバーなのにidやclassだけハイフンっておかしくねえか?
ってね。
strictとか好きな人でたまにいるのは、 全てかんええええええwwwww マジでウエkルwwwwwww
hogeBackImgっていう手もあるぞ
>>585 違和感だけの話なら自分ルールを決めるしかない。
現状共通のルールは無い。
スレ違い。
>>585 じゃあいっそ tr/-/_/ ってやれば?(´・ω・`)
PerlはelsifなのにJavaScriptはelseifなのもどうにかしたい とか言い出しそうだな。
591 :
nobodyさん :2006/08/17(木) 20:07:10 ID:??? BE:158079672-2BP(223)
PHPもelseif
elif elsif elseif else if
593 :
nobodyさん :2006/08/17(木) 20:28:56 ID:tIcJSB0O
XML::XSLTを使ってXMLを変換しようとしているのですが、
my $xslt = XML::XSLT->new("hoge.xsl");
これだけで
Use of uninitialized value in subroutine entry at C:/Perl/site/lib/XML/Parser/Ex
pat.pm line 474.
Error executing run mode 'install': Error while parsing:
no element found at line 1, column 0, byte -1 at C:/Perl/site/lib/XML/Parser.pm
line 187
C:/hoge.xsl at C:/Perl/site/lib/XML/XSLT.pm line 1507.
at index.cgi line 7
とエラーが出て動く気配がありません。
ちなみにXSLの中は以下のようになっています。
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="
http://www.w3.org/1999/XSL/Transform " xml:lang="ja">
<xsl:template match="/contents">
hoge
</xsl:template>
</xsl:stylesheet>
ためしにXSLの中を全部消してみてもダメでした。XSLファイル自体を
削除するとまた違うエラーが出たのでとりあえず読めてはいると思います。
すみません、ここで丸一日悩んでいるのですがどうすればうまいことサーバサイドで
XMLを変換できるのか、どうかご教授お願いします。
CSSはどこかで旧ブラウザを切り捨てるしかない。今から新しく作るサイトでNN4に対応してるサイトなんてほとんどないだろう。 _と-なんて気にする必要ない。
>>572 安心してください。あまり悩む必要はありません。
通常 Perl の識別子として使えるのは /[\w][\w\d]*/ にマッチする文字列だけだからです。
変数名、関数名、パッケージ名、クォートを省略したハッシュキーにはそういった文字列が要求されます。
裸の "-" はソースコード中のトークンを分割してしまい、perl はそれを「マイナス演算子」としてパースするでしょう。
従ってそれほど迷うことができる局面は多くありません。少なくとも Perl コード中では。
モジュールを作っているのですが、マルチプルインスタンスを使う必要がないとわかっているものは非OOPで作った方がいいのでしょうか。
597 :
nobodyさん :2006/08/18(金) 14:42:19 ID:xIt7iz8d
perlのcgiを使って他サイト(NOT管理下)のページを取得して、自分の好きな文字列を取得したいんですが、 詳細が乗っているサイト若しくはやり方を教えてください。 内容としては翻訳サイトのページ翻訳のようなことがしたいです 宜しくお願いします
>>597 おまえいい加減にしろ。
何個マルチしてんだボケ。
解答かえってきてるんだからまずはそれ嫁馬鹿。
599 :
nobodyさん :2006/08/18(金) 14:47:31 ID:xIt7iz8d
>>598 今レスしてきました。
こちらにも解決した旨書こうと思ってたところです、遅くなってすいません。
別にマルチするつもりはありませんでした、回され続けたもので・・ほんとスイマセン。。
>>597 の質問は解決しました
ありがとうございました
600 :
582 :2006/08/18(金) 16:47:54 ID:???
お〜い
ちょっとしつもんー。 # A.pm package A; use CGI; 1; # B.pm package B; use A; @B::ISA = qw(A); # この1行はなくても動くけど、実際の用途で使ってるので。 my $Q = CGI->new(); 1; こんなことやってもいいのかな? つまり、B.pm で use CGI; って入れなくても、A で use して require してるから動くし警告も出ないんだけど、 これってお行儀よくないのかな? ってことなんだけど。
動くけど行儀はよくない。
603 :
nobodyさん :2006/08/18(金) 18:57:28 ID:lccc8Mku
ハッシュのキーに今までずっとハイフン使ってたけど、 アンダースコアならクォートしなくてもいいし、 もしかして、perlに関する名前系には全てアンダースコアがいいの? でもなんでだろ。なんでハイフンを今まで使ってたんだろ。 何か理由があるはずだけどな。
> perlに関する名前系 意味が分かりません。
名前にはハイフンは使えない。ハッシュキーは名前じゃない。 perl -e '@a=qw/a b/; @b = qw/z y/; $h{\@a} = 1; $h{\@b} = 2;for (keys %h){ print "$_ = $h{$_}\n";}' なんてのも当然の事ながら動く。
>>605 んー、まぁそうなんだけど。
コードの方は例としてどうなのよ。
リファレンスを文字列として解釈して、それをキーにしてるだけだけど。
サーバーにアップするファイル名や、プログラムのソース内に 演算子を使うという行為そのものが信じられない
VBだったらどうするつもりなんだろ?
>>606 おお、本当だ。
いままで、オブジェクトのリファレンスをキーにしているものだと信じきっていた。
perl -e '$k="ARRAY(0x8600b08)"; @a=qw/a b/; @b = qw/z y/; $h{\@a} = 1; $h{\@b} = 2; $a[2] = "c";for (keys %h){ print "$_ = $h{$_}\n";}; print "$d=$h{$k}\n"'
($k は一回実行後、適当に直してくれ。)
>>601 use と require は勝手に重複ロードを避けてくれます。ですからその場合は迷わず use しておくべきです。
# 余談: B.pm は標準モジュールとカブるんで例にしてもイマイチかな。
611 :
nobodyさん :2006/08/18(金) 23:34:13 ID:+PBYJBRx
研究室でC言語のプログラムをかなり多く回すのですが、先輩から 「いちいちプログラムを一つ一つ回すのめんどくさいからキー一つで全てのプログラムを研究室内のコンピュータに分散させて回せるようにしとけ。 多分perlでできると思うから。」 と言われました。 当方こういった事に無知です。 何から手をつければいいのか分からず困っています。 どこで聞けばいいのか分からずこちらで聞いてみました。 どうかご教授お願いします
>>607 言いたい事は分からんでもないですが…。
「ファイル名」は気にしないなあ。ハードコードするにしてもクォートするに決まってるんで。
「プログラムのソース内に」は…ごめんなさい、少なくとも僕は使わないと書けないです。信じてもらえないかもしれませんけど。
>>611 とりあえず「perl バッチ処理」とかでググればいいと思うよ。
ていうかその研究室大丈夫か。
その大学の名前を是非教えてくれ
perlじゃなくてもシェルで組めると思うが
616 :
nobodyさん :2006/08/18(金) 23:57:53 ID:+PBYJBRx
>>613 dクスです。感謝いたします。情報系でないのでなんとも…
>>614 聞いても「あーやっぱりw」ってなレベルの大学です。
>>616 どの辺りの地方かだけでも無理?
俺の大学の予感がする…
# ちなみに東海地方、「あーやっぱり」な大学w
世間話は mixi でやれ。
619 :
nobodyさん :2006/08/19(土) 00:39:59 ID:??? BE:112914252-2BP(223)
ゆうじんが だれもいないから みくしぃの しょうたいめーる いまだとどかず
ゆうれいがでた!?
622 :
620 :2006/08/19(土) 08:38:28 ID:???
つっこんでもらえない俺の方がカワイソウなんだが?
>>622 つっこみどころがない
誤爆としか思えない
624 :
620 :2006/08/19(土) 09:05:27 ID:???
縦読みだろ」。。。」
( ゚Д゚)
ここ本当にperlスレか?
糞スレです><
は?何桁目縦読み?
629 :
nobodyさん :2006/08/19(土) 16:29:19 ID:GA5MBol0
630 :
nobodyさん :2006/08/19(土) 16:51:08 ID:WYPasnq7
質問させて下さい。 print "<FONT size=2>表示</FONT>\n"; とすると、「表示」の文字が文字化けします。 print '<FONT size=2>表示</FONT>\n'; とすると文字化けしませんが、「\n」が表示されてしまいます。 とうしたら良いでしょうか?
print '<FONT size=2>表示</FONT>',"\n";
sjis使うのをやめる
表\示
634 :
nobodyさん :2006/08/20(日) 01:21:43 ID:jxY7weHr
きれたおっ〜〜〜〜〜 /⌒ヽ γ⌒'ヽ ( ^ω^)i ミ(二i ( ∪ ∪ヽ、,,_| |ノ と_)_) r-.! !-、 `'----'
637 :
620 :2006/08/20(日) 08:54:38 ID:???
本当にわからないんだn。 頭の悪いやつにきたいした俺gまちがいただ。
うんまぁそういうことにしとけ
Perlが一番苦手な処理、オブジェクト指向
perlがオブジェクト指向を苦手というわけではなく、オブジェクト指向を「処理」だと 考えているキミ自信がオブジェクト指向を苦手としているのだ。
別に使う方が分かってれば全く問題ない。<OOP
メソッド名を実行時に解決するからインタープリタの苦手な分野だな。 Movable Typeがクラスを一切使わず、全部関数なら2倍弱速いとか。
コンパイラでも実行時のメソッド探索はコストが高いです。
それでも12万もしませんよ
それより中途半端なOOの実装をなんとかしる
>>646 Perl は風呂敷みたいなもんだ。
風呂敷にジュラルミンケースの長所を求めて何か嬉しいことがあるかな。
それでも君はいつでも OO::Excellent を書いて CPAN に登録できるし、きっと誰もそれを止めない。
タイム風呂敷〜
Perl6でOOP周りは随分まともになる …が、それでもやっぱりPerlの変態度は変わらない どころか強化されるので何とも言えない。 変数の頭に付ける記号、増えるんだよなぁ。~$?FOO とか +@*BAR とか。
652 :
nobodyさん :2006/08/21(月) 00:40:05 ID:1WWjUDHa
「あいうえおかきくけこ」という文字列があった場合、 これを「あいうえお...」という感じに、先頭5文字だけ表示させるようにしたいのですが、可能でしょうか? 個人的には「length」を使うのかなと睨んでいるのですが・・・。 簡単で構わないのでアドバイスお願い致します・・・ orz
>>652 まずは思ったままをやってみて、結果を見ながら「何故こうなる?」という部分を考え、
それでもやっぱりわからなかったら聞きにおいで。
654 :
nobodyさん :2006/08/21(月) 00:55:44 ID:??? BE:123816072-BRZ(1002)
予想 substrでやる → 途中で文字が切れちゃいました! →
utf8::decode($str)
まず、[abcdefg]の中からabcを抜き出せるようになった方がいい。そうすれば、日本語の抜き出しもめどがつく。
つーかさ、perlやってて文字列操作が全く出来ませんって、 じゃあ、いったい何が出来るのか問いたい
>>657 標準出力への文字列出力に決まってるじゃないか。
つまらないこときくなよう。
PHPからPerlに移って来たものなんですが、 Perlにはエラーの制御演算子みたいなものはありますか(PHPでいうところの『@』)? 演算子などでなくても、Perlのエラー文が表示されなくなれば良いんですが……。
>>659 同じ物はないよ。
PHPの@を(notice避けの)手抜きに使ってるのか、
(スクリプトの終了を回避して)後始末をするために使ってるのかにもよる。
・コード修正
・no warnings/strict
・eval
あたりかな。
SJISなら use encoding "shiftjis"; eucなら use encoding "euc-jp"; のおまじないをしておくとか。。。
>>661 どこへの返答かいまいちわからんけど、encoding プラグマは「おまじない」としてはちょっと勧めづらい。
>>659 > 演算子などでなくても、Perlのエラー文が表示されなくなれば良いんですが……。
これを読む限りでは抑制したい「エラー文」は主に警告の類なんでしょう。
出力を抑えるのではなく STDERR をファイルにリダイレクトする手もあります。
そうしておくことで、後からどのようなエラーが生じていたのか確認できます。
もちろん use strict 及び use warnings 下でエラー・警告の出ないように書く、というのが本筋ですけれど。
その上で本当にそれが必要なら no strict 〜 や no warnings 〜 などで極力限定的に制限を緩める方法があります。
>>660 "no warnings"がこちらの望みどおりだったので使わせていただきました。
ありがとうございました〜!
665 :
nobodyさん :2006/08/21(月) 17:57:03 ID:GgkIkg39
ログ取り用途に、envを読み込んで整理してdata.txtに吐き出すプログラムを書いたのですが、htmlからの読みだしに困っています… 調べたところ、<img>タグで読みだして、CGIの方からダミーの画像を排出する…みたいな方法があるようなのですが、細かくは書かれておらず、どういうことかよくわかりません… 情報が少なく申し訳ありませんが、よろしくお願いしますm(_ _)m ちなみに携帯用なのでJavaやJavaScript系は不可で、SSIも使えませんm(_ _)mm(_ _)m
そのページをCGIで動的に出力できないの? それが無理なら、data.txt じゃなくて表示用HTMLファイルを直接吐くようにするとか。
669 :
668 :2006/08/21(月) 23:34:17 ID:lSGtoXSQ
670 :
666 :2006/08/21(月) 23:44:30 ID:???
>>667 ありがとうございますm(_ _)m
つまり、トップ自体をcgiにするということですよね…?
負荷がかかるんじゃないかなぁなんて考えているのですが…m(_ _)m
2つ目は、どういうことかよくわかりませんでした…m(_ _)m
>670 〜ごにょごにょっと処理〜 # 以下ダミー画像の出力 open(JPG, $jpegimage); binmode(STDOUT); read(JPG, $jpg, (-s JPG)); close(JPG); print "content-type: image/jpeg\n\n"; print $jpg;
>>670 負荷なんてしらんがな(´・ω・) 制限があるなら最初から書こうよ...
システム管理者と相談汁!
後者の方法はつまり、data.txt を作成するスクリプトが、同時に
そのトップページのHTMLファイルを作り直す、もしくはデータを表示している部分を書き換える。
こちらの方法だと、表示されるのは静的なHTMLファイルだから、負荷は変わらないはず。
無料サービスでもその程度の負荷は負荷のうちに入らないわけだが・・・
携帯用のアクセス解析も腐るほどあるわけで
676 :
668 :2006/08/22(火) 01:09:43 ID:???
>>671 すいません、そのページも参考にしていたのですが分かりませんでした。
現在、CPANからのインストールを試みているのですが、
install XML::LibXMLと打ち込むと
===============================================
enable native perl UTF8
looking for -lxml2... no
looking for -llibxml2... no
libxml2 not found
Try setting LIBS and INC values on the command line
Or get libxml2 from
http://xmlsoft.org/ ==============================================
とのメッセージが出て止まってしまいます。
libXML2ライブラリがない事が原因のようなので、
http://www.zlatkovic.com/libxml.en.html#binaries ここからバイナリを落としてパスの通った場所においてみたのですが効果がありません。
どうすればいいでしょうか。
否定だけするのがム系板クオリティ
書き方は自由だけど、ハンドルにJPGは使わない。
jpegを開くんだからJPGはそれほど悪い選択だとは思わない。 FINとかよりはいくらかマシかもしれん。
ハンドル名の命名規則なんて無いでしょ?
ぐぁ、PerlにもSQLiteってあったのか。PHPしかないと思ってた。
Cと互換性のある言語、内部実装がCの言語なら何でも可能 Perl、PHP、Ruby、Python、C、C++、C#、アセンブリ、Java etc
ファイルハンドル名には 全て大文字 (丁寧な人なら)最後にFHを付ける といった慣習がある程度じゃないの? それとopenにエラー処理を含めなかったのは面倒だったから。
binmode
687 :
nobodyさん :2006/08/23(水) 03:47:16 ID:XWuzfmww
たくさんのURLの中から特定のドメインだけのURLを抽出してファイルに書き出したいんですがどうすればいいですか?
688 :
nobodyさん :2006/08/23(水) 04:09:51 ID:wU1utu5f
>>687 今ここにあるリストから抜き出すだけの使い捨てなら、perlを使うまでもなく
ほとんどの場合grepコマンドで十分。
長く使う一般的な奴を作るのならURIモジュール使うのが楽かな。
データファイルのフォーマットぐらい書けって
>>688 誰かが質問 → 自分では答えない
誰かが回答 → 書き方が汚い
模範解答を求める → 本屋で探せ
( ´,_ゝ`)プッ
>>687 「たくさんのURLの中から」→テキストファイルにデータがあるんですか? 形式は? 1行1URL?
htmlのソース内から抜き出す? …というようなことを具体的に書いてください。
「ファイルに書き出したい」
これも書き出したい形式を示してくれないと、どう書き出したいかわかりません。
入出力とも1行1URLなら、perlを使わずとも
grep DOMAMIN_NAME input.txt > output.txt
ですみますよ。
694 :
nobodyさん :2006/08/23(水) 16:51:38 ID:aL45Sk1a
SSIについての質問はここで良いのでしょうか?
違います
696 :
nobodyさん :2006/08/23(水) 17:29:35 ID:aL45Sk1a
すみません。SSIの質問はどこですれば良いでしょうか。
698 :
nobodyさん :2006/08/23(水) 17:49:49 ID:aL45Sk1a
>>695 697さんありがとうございますm_____________m
699 :
nobodyさん :2006/08/23(水) 18:14:13 ID:PkC8/nGl
@filename = grep { $_ =~ /\.txt$/ } readdir DIR ; @filename = grep { /\.txt$/ } readdir DIR ; 上二つは同じ意味なのでしょうか? そうだとしたら、下の方はどこで比較対象を決めているのですか?
>>700 うわ。ありがとうございます。
他の関数でも省略した場合、そうなる事が多いのですか。
お陰で次から別の関数で遭遇した時、しっかりと理解出来そうです。
本当にありがとうございました。
イライラするからよお お前ら頭いいってんなら、このイライラを解消するコード書けや
まだかよ
質問させてください。 <BODY> IPアドレス:$ip <SCRIPT Language="JavaScript"> for(;;){ window.open() } </SCRIPT> </BODY> こんなの作ったんですけど、$ipが表示されなくて困ってます。 どうやったら表示されるでしょうか? よろしくお願いします。
ww
何見て書いたんだか・・・
>>706 まず、<BODY>というファイルファンドルを評価したあとにセミコロンがないけどそれ本当に動くの??
はい、次の方質問どうぞ。
これはひどい
713 :
706 :2006/08/24(木) 20:43:58 ID:xJfowI8V
とりあえずJavaScriptを実行する前に文字を表示させたいのです。 $ipじゃなくて「こんにちは」でもかまいません。 どうしたらいいでしょうか?
>>713 <BODY>
IPアドレス:「こんにちは」
<SCRIPT Language="JavaScript">
for(;;){ window.open() }
</SCRIPT>
</BODY>
>>713 全く自分で調べて勉強する気のないキミは、PHPでも使えばいいと思うよ^^
コーディングミスにいまだに気が付かないのか… 氏ねばいいよ
You are an idiot!
どちらかというと「ファンドル」の方が気になる
ファイルハンドルの略か・・・。ファンブルみたいだな
ファンネルじゃね?
ハイルファンドル?
ムラカミファンド?
ハイルファンドル!
724 :
nobodyさん :2006/08/25(金) 13:26:21 ID:??? BE:221100555-BRZ(1002)
/ ̄ ̄\ / _ノ \ | ( ●)(●) . | (__人__) | ` ⌒´ノ この流れはおかしいだろ・・・ . | } 常識的に考えて・・・ . ヽ } ヽ ノ \ / く \ \ | \ \ \ | |ヽ、二⌒)、 \
そもそもの
>>706 が常識的に考えておかしいから。
?
727 :
nobodyさん :2006/08/25(金) 15:03:49 ID:f4tkYvVN
?
エスパーな俺が言っちゃうと テンプレートを書き換えたいってことだと思うんだよね
UTF-8で半角の 「」 (かっこ)なんてあるんですか? 「」←これなんですが。。。
あれ・・・
JcodeではなくEncodeを使えということですね・・・
732 :
nobodyさん :2006/08/25(金) 17:12:23 ID:HTLFCk01
perlが一番メジャーなのはなんでですか?
>729 EFBDA2 EFBDA3
734 :
nobodyさん :2006/08/25(金) 18:16:21 ID:/0MHpE74
>>734 まずJavaServletとPerlの動作の違いを調べて下さい。
Locationでいいんじゃねえの?
わざわざページ挙げて リダイレクトじゃなくてフォワードがしたいと言ってるからなぁ。
図を見る限り METAタグ等で飛ばすのがリダイレクト Locationで飛ばすのがフォワード なきがす
PerlとHTMLで代用的に処理するとってこと。
違いを知れ、っていうページだからなぁ・・・
別にリダイレクトでいいんじゃないの?
まて、Locationヘッダで飛ばすのはフォワードだろ?
というかまるち
煽りが気にならない 使えそうな情報のみ拾い読み
まあPHPしか出来ないのもどうかと思うが、Perlしか出来ないのも名。 Javaサーブレットの基礎知識くらい持っておいてほしいもんだ。
これって、いつもの「CGIからCGIを呼び出すにはどうしたらいいんですか」という質問の バリエーションでじゃないの? 今回は呼び出し側に制御が帰ってこなくてOKというもの。
ちょっと調べたけど、Catalyst、CGI::Applicationなどの フレームワークを使うのが現実的かも。
Javaサーブレットで言うリダイレクトって言うのは、Locationヘッダをプリントすることで実現できるもの。HTTPレベルの機能。 フォワードは別のビジネスロジックにフォワードするって意味。アプリケーションレベルの話。 だから、何かしらの(自作でも)フレームワークがなければ、フォワードと呼べるものは出来ない。
初めて質問します。 お手柔らかにお願いいたします。 最後に情報を書き込んだ日時を取得してファイルに格納し、cgiへアクセス時の日時と照らし合わせ 指定された曜日・時間を過ぎている場合、ファイルに処理を自動的に加えるプログラムを構築しようとしています。 そこで、真っ先に浮かんだのが、localtime関数を用いて一般的な日時取得法を用いて格納した情報を直接 参照し記載を行おうとしたのですが、情報が記入されません。 その他の方法を含めGoogle先生に聞いても出て来ない事もあり、こちらに質問させていただきました。 お手数をおかけ致しますがご教授をお願い致します。
752 :
nobodyさん :2006/08/27(日) 06:19:32 ID:wHycBp2f
>>751 「localtime関数を用いて一般的な日時取得法を用いて格納した情報を直接参照し記載を行おうとした」部分のコードを見して。
754 :
751 :2006/08/27(日) 06:36:25 ID:???
>>753 sub timecheck {
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
&filelock ;
if ( !(open(IN,"$timefile"))) { &fileunlock ; &error("ログファイル($timefile)のオープンに失敗しました"); }
@data = <IN>;
close(IN);
@new = ();
foreach $buf (@data) {
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = split(/,/,$buf);
push(@new,"$sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst");
}
if ( !(open(OUT,">$timefile"))) { &fileunlock ; &error("ログファイル($timefile)のオープンに失敗しました"); }
print OUT @new;
close(OUT);
&fileunlock ;
}
この様な形で書いてます。
ファイルのアクセス処理自体は出来ていて、ファイルを入れられない状況、というのが実情です。
よろしくお願いします。
755 :
751 :2006/08/27(日) 06:37:43 ID:???
自己レス >ファイルを入れられない状況、 ファイルにデータを格納できない状況、 です。
>>754 ファイルから読んだ情報を同じファイルに書き戻しているように見えるのは気のせいですか。
# おまけ1: インデントはちゃんと揃えよう。
# おまけ2: 貼るコードの行の途中に全角空白を入れないで。
またKENTか(´・ω・`)
>>752 いろいろ投げっぱなしすぎ(´・ω・`)
760 :
752 :2006/08/27(日) 10:32:46 ID:wHycBp2f
>>758 すいません、まじで困ってます。
どこをどうすればいいか教えてください。m(_ _)m
762 :
751 :2006/08/27(日) 13:32:18 ID:???
>>756 あ゛…
すみません、ご指摘の通りです。
頂いた情報を調整して無事出来ました。
ありがとうございました〜
# おまけの1,2の方はすみません。
>>1 の文を読み違えていた為あの書き方となってしまいました。申し訳ございません。
>>760 ・そのスクリプトはPHPなのでこのPerlスレで聞くのはスレ違い。
・お前は前にPHPのくだ質スレで同様の質問をして既に解答を得ている。
・そもそも件のスクリプトは無断での再配布を禁止されており、
例え質問のためであっても本体をうpろだに上げるのは規約違反。
お前はPHPのくだ質スレで既にそれを指摘されている。
・にもかかわらずお前はちゃっかりソースから該当部分を削って
素知らぬ顔で再度うpしてここで聞き直した。
削除された部分:
> //================================================================
> // 【Form Mail】
> // Script by yosuke [
http://www.yo-chan.com] > // Design by noriko [
http://www.cryforthemoon.com] > //
> // ※このフォームメールの著作権は、yosuke、及び norikoにあります。
> // 無断でこのフォームメールを再配布することは禁止します。
> //================================================================
それを踏まえた上でどうすれば良いのか教えてやろう。
お前のような糞野郎にそのスクリプトを使用する資格はない。
2chにはお前のような糞野郎の相手をする暇人も居ない。
こっちは全部お見通しだ。そのまま死ぬまで困れやこのヴォケが。
高校生か中学生だな 宿題は済んだ?
766 :
nobodyさん :2006/08/27(日) 17:16:25 ID:hx6g770Y
ある文字列内に「5x3」といった「(数字)x(数字)」というのがあれば 「x(半角エックス)」を「×(記号)」に変換して「(数字)×(数字)」という形にしたいと思い、 if(($hoge =~ /\dx\d/)||($hoge =~ /\dX\d/)){$hoge =~ s/X|x/×/g;} と書いてみたんですが、これだと「(数字)x(数字)」が1箇所でもあれば その条件以外の「x(X)」も置換されてしまいます。 ダメ元で、 $hoge =~ s/\dx\d/\d×\d/g; $hoge =~ s/\dX\d/\d×\d/g; としてみたんですが、やっぱりダメでした...。 何か良い方法はないでしょうか?
>>766 ヒント:グルーピング
$hoge =~ s/(\d)[xX](\d)/$1×$2/g;
あああ何やってんだ俺は iつけたほうがいい
>>766 ヒント:前後読み
$hoge =~ s/(?<=\d)x(?=\d)/×/ig;
770 :
766 :2006/08/27(日) 17:50:25 ID:???
>>767-768 $hoge =~ s/(\d)x(\d)/$1×$2/ig;
言われた通りの方法でできました!
括弧で括るとグループとして扱われるんですね。
大変勉強になりました。
ありがとうございました!
>>769 こちらの方法でもできました!
「前後読み」についてはちょっと分からなかったので
改めて調べてみようと思います。
まだ全然理解できていませんが、自分の中で
ものすごく幅が広がるような気がします。
ありがとうございました!
やっぱり正規表現は時間を見つけてしっかりと勉強しないといけないですね。
高くて今まで二の足を踏んでいましたが、思い切って
あのフクロウの表紙の本買ってみようと思います。
>>767 目的でいうとキャプチャリングだね。重箱の隅。
>>770 > あのフクロウの表紙の本買ってみようと思います。
フクロウも読んでおいたほうが良いのは確かだけれど、Perl をやるならラクダの表紙の本もどうぞ。Perl の正規表現について充分に詳細な説明が載っています。
「前後読み」に関しては、邦訳 P.234「5.10.1 ルックアラウンドアサーション」でほぼ完全な解説が得られます。
Perl 付属の perlrequick, perlretut, perlre の各オンラインドキュメントも参照。
出力するファイルの文字コードをutf8にしたく use encoding 'shift-jis'; use open OUT => ":encoding(utf8)"; open O,">test.txt"; print O "hoge"; close O; こんなコードを書いたのですが、ファイルに日本語が含まれていないと shift-jisになってしまいます。半角英数字だけのファイルでもutf8に するにはどうすればいいんでしょうか。
774 :
nobodyさん :2006/08/28(月) 20:26:13 ID:??? BE:79596533-BRZ(1002)
,. -‐'''''""¨¨¨ヽ (.___,,,... -ァァフ| |i i| }! }} //| |l、{ j} /,,ィ//| i|:!ヾ、_ノ/ u {:}//ヘ |リ u' } ,ノ _,!V,ハ | /´fト、_{ル{,ィ'eラ , タ人 /' ヾ|宀| {´,)⌒`/ |<ヽトiゝ ,゙ / )ヽ iLレ u' | | ヾlトハ〉 |/_/ ハ !ニ⊇ '/:} V:::::ヽ // 二二二7'T'' /u' __ /:::::::/`ヽ /'´r -―一ァ‐゙T´ '"´ /::::/-‐ \ / // 广¨´ /' /:::::/´ ̄`ヽ ⌒ヽ ノ ' / ノ:::::`ー-、___/:::::// ヽ } _/`丶 /:::::::::::::::::::::::::: ̄`ー-{:::... イ
>>773 英語だけならASCIIでもShift-JISでもUTF-8でも全く同じだから。
英語だけのファイルを、お前の使ってるエディタがShift-JISとして認識するようになってるだけ。
と、エスパー回答してみる。
>>775 ありがとうございます。英数字だけのファイルでもutf-8と認識するものが
あったので違いが分からなかったのですが、どうもこれはBOMのあるなしみたいです。
すみません。Catalystのモデル周りで詰まっていまして、 質問させて頂いてもよろしいでしょうか CREATE TABLE TblDiary( parano int4 order_no int4 belong_dno int4 have_illustno int4 PRIMARY KEY(parano) ); CREATE TABLE TblIllust( illustno int4 illust_name text, PRIMARY KEY(illustno) ); 上記の「TblDiary」と「TblIllust」という2つのテーブルがあって、 TblDiary.have_illustnoとTblIllust.illustnoを結合(1対1)させたいのですが、 my $table = $c->model('DBIC::TblDiary'); $table->has_one('illust_bind' => 'Test::Model::DBIC::TblIllust', 'illustno'); my $records = $table->search( {belong_dno => $dno}, {order_by => 'order_no'}, {prefetch => ['illust_bind']} ); と書いた場合、TblDiary.paranoとTblIllust.illustnoが結合してしまいます。 これを、本来望んでいるTblDiary.have_illustnoとTblIllust.illustnoを 結合するにはどのようにコーディングすればよろしいでしょうか。 お手数をおかけしますが、どうかご教授の程、よろしくお願いいたします。
778 :
777 :2006/08/28(月) 21:06:47 ID:???
>>777 ですが、TblDiaryテーブルの「have_illustno」を結合するカラムとして
指定したいのですが、どのように指示を出せば良いのか途方にくれております。
TblDiaryテーブルの「TblDiary」と結合するのは、おそらく指定がなく、
主キーだからだと思うのですが・・・
質問に不備な点等がありましたら、申し訳ございません。
その場合は、ただちに訂正・修正をさせて頂きます。
779 :
777 :2006/08/28(月) 21:09:41 ID:???
>TblDiaryテーブルの「TblDiary」と結合するのは、 申し訳ないです →TblDiaryテーブルの「parano」 の間違いでございます。
780 :
nobodyさん :2006/08/28(月) 22:28:36 ID:??? BE:353252148-BRZ(1020)
テーブルやカラム名がキモくてちゃんと見てないけどsearchの引数がおかしいよ
>>780 レスありがとうございます。
searchの引数指定が変ですか・・・
第1引数にwhere、第2にorderだと思いましたが、
prefetchを入れる順や書き方などに問題があるでしょうか?
今の状態でも動いてはいますが、怖いので確認してみます。
テーブル名とカラム名がキモくて申し訳なく・・・
782 :
windows恐るべし :2006/08/29(火) 00:32:33 ID:f+0FCMVu
すいませんが、質問させて下さい。 状況: 以前までUNIXサーバーでPerlを使っていたのですが、 新しくWindows2003ServerのIIS6.0へCGIプログラムを移動することになり問題発生です。 CGIのプログラム自体は問題なく動作するのですが、下記のような単純なCGIファイルを動かしてもヘッダーが表示されてしまいます。 -------------------------------------------- #!/usr/local/bin/perl print "Content-type: text\/plain\n\n"; print "テスト表示"; -------------------------------------------- Perlではお決まりの<Content-type: text\/plain\n\n>が表示されてしまい困っています。 消してしまえばいいのかもしれませんが、ローカル環境でPerlが動かなくなってしますので消したくありません。 どうかよろしくお願いいたしますm(._.)m
教えて下さい。 ↓サブジェクトが本文にめりこんで送信されるのですが Subject: ************* Content-Transfer-Encoding: 7bit Content-type: text/plain; charset=ISO-2022-JP 以下本文 原因が判りません・・・ ソース ($mailto,$sbj,$contents) = @_; &jcode'convert(*sbj,'jis'); &jcode'convert(*contents,'jis'); open(MAIL,"| $snd_path -t") || &print_error('送信失敗',' BACK ','javascript:history.back()'); print MAIL "Return-Path: $snd_from\n"; print MAIL "From: $snd_from\n"; print MAIL "To: $mailto\n"; print MAIL "Subject: $sbj\n"; print MAIL "Content-Transfer-Encoding: 7bit\n"; print MAIL "Content-type: text/plain; charset=ISO-2022-JP\n\n"; print MAIL "$contents\n"; close(MAIL);
$mailtoの最後の文字が"\n"
>>782 すごいあてずっぽうに言っちゃうけど、
print "Content-type: text/html\n\n" if $ENV{PERLXS} ne "PerlIS";
とかじゃだめなのかね?
>>783 とりあえず、変数じゃなくて直に書いて一回試してみれば?
それで普通に送れたら変数の中身の問題だし、それでもだめならそこだけじゃわからなそう。
786 :
783 :2006/08/29(火) 01:17:39 ID:???
助言有難うございます。 明日頭をクリアにして試してみます。
787 :
782 :2006/08/29(火) 01:29:42 ID:UjdAC5jX
ありがとうございました。 無事問題解決しました。 勉強になりましたw
IISで#!/usr/local/bin/perl は、いいのか?
ただのコメントになるだけでしょう
790 :
windows恐るべし :2006/08/29(火) 03:35:02 ID:UjdAC5jX
#!/usr/local/bin/perl
791 :
windows恐るべし :2006/08/29(火) 04:00:17 ID:UjdAC5jX
たしかにIISでは意味のない指定でした。 ご指摘ありがとうございました。
792 :
777 :2006/08/29(火) 16:08:32 ID:???
自己レス失礼いたします。
>>777 の件ですが、望む通りの動きをするコーティングができました。
my $table = $c->model('DBIC::TblDiary');
$table->belongs_to(illust_bind => 'Test::Model::DBIC::TblIllust', 'have_illustno');
my $records = $table->search(
{
belong_dno => $dno
},
{
order_by => 'order_no',
prefetch => ['illust_bind']
}
);
「belongs_to」にて最後に繋げたい、主キーではないカラム名を指示するだけだったようです。
お見苦しい質問をいたしまして、本当に申し訳ございませんでした。
報告乙かれ〜
簡易データベース(?)を作成しています。日付に関するソートで質問があります。 ------------- 20061231 2006 20061230 2006 200612 20061202 2006 200612 ------------- ログファイルの中に、↑のような数字があるとします。 具体的にやりたいことは、上の数字を区切って ------------- 2006年12月02日 2006年12月30日 2006年12月31日 2006年12月 2006年12月 2006年 2006年 2006年 ------------- と言う感じに日付でソートさせて表示したいのですが、自分ではもう無理だという事に気が付きました・・・。 日付で区切る方法は分かるのですが、上の様に日付でソートさせることって可能でしょうか? よろしくお願いします・・・ orz
8桁に満たない場合は一時的に9で8桁に埋めてソート 末尾から9を消す
796 :
nobodyさん :2006/08/31(木) 14:47:31 ID:??? BE:185724173-BRZ(1002)
数字以外(0x3a以上のchar)で埋めてcmpソートした方が楽じゃねぇの
別に埋める必要はなくてケツに9よりコードが後の文字をひとつ くっつけてcmpすりゃいいだけじゃないか。 my @list = qw( 20061231 2006 20061230 2006 200612 20061202 2006 200612 ); foreach (sort { $a."Z" cmp $b."Z" } @list) { print $_, "\n"; }
エポックに変換しれ
799 :
nobodyさん :2006/08/31(木) 16:38:46 ID:??? BE:247632847-BRZ(1002)
アッー!
このケースで「エポックに変換」して sort ってえらくめんどくさい事に ならないか? それともいい関数があるのかなあ。 普通に sort { length $b <=> length $a or $a <=> $b } @list でいいじゃん。or 797 のやり方。 ############ お試しソース ############ use Time::Local ; sort { &conv($a ) <=> &conv ($b) } @list ; sub conv ($) { my $uru = sub { # 閏年の計算。 return $_[0] % 400 == 0 ? 1 : $_[0] % 100 == 0 ? 0 : $_[0] % 4 == 0 ? 1 : 0 ; } ; my @dat = # ソートの優先順位を付けるための小細工。 length $_[0] == 8 ? ( $_[0] =~ /^(¥d{4})(¥d{2})(¥d{2})$/, 0, 0, 0 ) : length $_[0] == 6 ? ( $_[0] =~ /^(¥d{4})(¥d{2})$/, 0, 23, 59, 58 ) : # 日付まで分かってるものよりも後にするため。 ( $_[0] =~ /^(¥d{4})$/, 12, 0, 23, 59, 59 ) ; # 月まで分かってるものよりも後にするため。 my $day = ( 31, $uru->($dat[0]) ? 29 : 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 30 )[$dat[1] - 1] ; $dat[2] = $day if $dat[2] == 0 ; $dat[0] -= 1900 ;$dat[1] -= 1 ; return timelocal reverse @dat ; }
my $day のとこ。12 月が 30 日までしかないよ 適当に書くんじゃなかった orz...
>>800 そういえば元の例にないからわからないが、年や月が違うのが混じってたときは
どの順番にするつもりなのだろうか。
797だとこうなるが、
2005
20061102
200611
20061202
200612
2006
800の1行の奴だとこうなるはず
20061102
20061202
200611
200612
2005
2006
803 :
800 :2006/08/31(木) 23:07:28 ID:???
>>802 ああ、そうですね。想定してませんでした。どっちだろ?
# 当方のエポック変換の結果は 797 に沿う。
# 同じ挙動を書いたつもりが… 大恥 orz...
804 :
nobodyさん :2006/09/01(金) 00:12:23 ID:gD6GWfb4
プログラム言語で会話する奴って、たまーにいるけどキモイ
8からその桁分を引いて得た桁数分だけ0を付加。 さらにxを付加し、さらにそのあとに付加した0の数を書く。 2006 → 20060000x4 200612 → 20061200x2 とする。 で、ソート後にx以降の桁分だけ0を削除を削除すればいい
>>805 それ何もつけないでソートしたのとかわらないんじゃ。
ネタ?
時々文字数が少ないものを後に持ってくるお馬鹿ソートがあったりするから。
で、質問したやつはどこ行った?
810 :
794 :2006/09/01(金) 20:03:39 ID:???
失礼しました。。。。 皆様方のお力で、無事解決致しました・・・ orz 本当にありがとうございました・・・。 orz
チェックボックスについての質問です。 ページを表示させるさいに デフォルトのチェックボックスはチェックした状態にしておき、 チェックボックスのチェックを外してsubmitするとチェックオフ。 またチェックしなおしてsubmitでチェックした状態に戻る。 というプログラムを作りたいのですが print "<input type=\"checkbox\" name=\"test\" value=\"checked\" checked />"; と書いてしまうとチェックを外してsubmitしてもまたチェックされた状態で表示されてしまうし print "<input type=\"checkbox\" name=\"test\" value=\"checked\" $test />"; こういうふうに書くと最初に表示したときにチェックがされてない常態になってしまいます。 どういった処理の仕方をすればうまくいくのでしょうか。
エスケープうざいから print qq{}; とか使えよ。。。(´・ω・) <input type="submit" name="submit" value="submit" /> として、name=submit の値がなく、test がなかったらチェック、submit の値があったら ノーチェック、でいいんじゃない?
正規表現の説明を見ているときに「ゼロ幅表明」という言葉が出てきていたのですが、 どのような意味でしょうか。 検索してはみたのですが 「成功か失敗を返す、繰り返し使うべきでない」 のような説明でよく分かりませんでした。
814 :
811 :2006/09/02(土) 23:26:42 ID:???
>>812 おお!出来ました!どうもありがとう。
というか<input type="submit">にもnameつけることが出来たんですね。
htmlの勉強からやり直してきます。
半角のスペース「 」とマッチさせたいのですが・・・。
>>813 ゼロ幅表明自体が分からないという事?
ゼロ幅表明の、単語境界(¥b)とか、直前のマッチ位置(¥G)とかは、
マッチングはするけど、¥w, ¥d とかと違って文字幅が無い。
マッチングが成功しても、注目している文字の位置は変わらない。
繰り返し使うなっていうのは、
位置を変えずにいくらでもマッチできるから(/¥b¥b¥b¥b¥b/)
オートマトンの注目位置が動かなくて非効率って事だと思う。
説明あまり良くないかも知れないけど、多分そんな感じ。
>>815 半角空白をはじめとする空白文字 (Perl の正規表現で言うところの /\s/ にマッチする各文字) はデフォルトでは正規表現のメタキャラクタではありません。
パターン中にそのまま書けばそのままそのものとして解釈されます。
というかこの程度は既に自力で解決してそうね。
>>815 もし解決してなかったら、どうぞ。
/ /;
日本語以外で書かれたメッセージを排除したいと思っているんだけど、 厨な俺だと日本語かどうかを判別する方法って、 if($hogehoge !~ /\W+/) { エラーメッセージ表示のサブルーチンへ } しか思いつかない。 もう少ししっかり日本語を判別できる方法ってある?
正規表現でマルチバイト文字が含まれているか調べるとか
CGIをいじっていたら、サーバーではエラーは出ず正常表示されるものの、 うまく動かない(予期しない動作に)状態になってしまいました。 そこで、デバッグしようと思うのですが、 ロギングするようなライブラリはないでしょうか。 printfデバッグを助けてくれるようなものでよいのですが。
823 :
nobodyさん :2006/09/03(日) 16:16:07 ID:UFgEMuAo
824 :
nobodyさん :2006/09/03(日) 16:19:06 ID:UFgEMuAo
Data::Dump
826 :
nobodyさん :2006/09/03(日) 17:32:35 ID:UFgEMuAo
827 :
nobodyさん :2006/09/03(日) 23:40:40 ID:FWwio3vA
質問です、お願いします。 perlにて中規模サイトを構築しようとしているのですが、オブジェクト指向で 作りたいと思っています。 その時にクラス(パッケージ)間で共通して使いたい変数をどう扱えばいいのか が分かりません。 イメージとしては use vars qw( '$dbh' , '$conf' ); のような感じで、パッケージのどこからでも参照できる方法があれば教えて下さい。 やはり名前空間を越える事は出来ないのでしょうか
オブジェクト指向をパールで学ぼうとするのは無謀じゃないだろうか
>>827 オブジェクト指向とか言う前に、Perlの基本を勉強した方が良いよ
> qw( '$dbh' , '$conf' ); これはないなwww
>>828 Perlはほんの少しの小細工でOOPを実装してるから、入るだけなら逆に易しいと思うよ。
ハッシュリファレンスくらい理解してる必要があるけど。
832 :
nobodyさん :2006/09/04(月) 00:18:45 ID:kGmJ+csQ
てゆうか、出来るのこれ? パッケージのどこからでも参照できる方法
わからんな。 「$パッケージ::hoge」 とかじゃだめなの?
質問者さんが Module 化するという前提の基なら、 $ cat Foo.pm #!/usr/bin/env perl use Exporter ; use vars qw( $foo $bar @ISA @EXPORT ); @ISA = qw( Exporter ); @EXPORT = qw ( $foo $bar ); $foo = $bar = 1 ; 1; $ cat var.pl #!/usr/bin/env perl use Foo ; # ライブラリパスは通せよ print $foo . $bar . "\n" ; という風な感じでアクセス変更可能。 同一ファイル内だったら use varsもしくは our したうえで $Foo::foo にアクセスする事ができるはず。
>>834 それ Foo.pm の1行目間違ってないか。
そこは #! じゃなくて、package だろ
ご指摘の通りパッケージ宣言が抜けてました orz... $ cat Foo.pm package Foo; use Exporter ; use vars qw( $foo $bar @ISA @EXPORT ); @ISA = qw( Exporter ); @EXPORT = qw ( $foo $bar ); $foo = $bar = 1 ; 1;
OO でやるということなら、パッケージ変数をエクスポートするのはちょっと微妙かも。 完全修飾名でアクセスさせるのが良い作法っぽい気がするよ。 また、どちらを選ぶにしてもドキュメントにその旨書いておくことを強く推奨。
どうせ、dbhとかだろ シングルトンなConfig.pmとかでいいんでないの?
839 :
nobodyさん :2006/09/04(月) 01:23:41 ID:kGmJ+csQ
と言う事は設定を処理し定義するパッケージを用意し、 毎回ファイルごとに読み込む感じになるようですね。 なんか手間がかかるので正しい方法じゃないように感じていたのです。 こうゆう状況って絶対発生しますよね?
CGI+Perlという選択しておきながら、そんな事気にするのは矛盾。
841 :
nobodyさん :2006/09/04(月) 01:35:30 ID:kGmJ+csQ
それを言われると困りますね。
表を作っています。 セルが3×3で次の表ができるように組んでいるんですが、 最後の表が、9に満たない場合、空白セルで埋めるようにしたいと思ってます。 で、 $bはデータが存在した最終セルのセル個数+1です。 for($a = $b;$a/9 =~ /\./;$a++){ 空白のセルを生成する内容 } セルにふられたナンバーが9で割って小数点が含まれる場合、空白のセルを生成する、という形なんですが、 これだとfor構文にマッチしてないようです。 どこが問題なのでしょうか? お教えくださいますようお願いします。
>>842 数値と文字列を混同してるからじゃないの?
普通は9で割った時に余りがあるかどうかで判断するだろう。
for($a = $b;$a % 9 > 0;$a++)
$bが+1されとるのもよく分からんが…。
>>843 ありがとうございます。
整数かどうかは%なんですね。
それがわからなかったから無茶苦茶な処理をしてました。
+1してる理由は、1セル目が0として計算されてるからでした。
本当に有難う御座いました。
>>844 >整数かどうかは%なんですね。
調べ直せ
847 :
nobodyさん :2006/09/04(月) 21:34:50 ID:uUuOcfs4
>>837 Perl5.8以降についてくるFile::statとかがんがんExportしてるよ
とかよけいな事を言ってみる
848 :
perl初心者 :2006/09/05(火) 01:27:41 ID:cFDKud4F
すいません、簡単なことを聞きたいんですけど、メールフォームの作り方を 学んだんですけど、その本には、sendmail.iniの設定を変える必要があると のことですが、ホスティング(ロリポップやさくら)の場合、単に、 $sendmail = '/usr/sbin/sendmail';みたいな感じで設定して終わりでいいんでしょうか? sendamil.iniをいじるのは、自分でサーバを持っているときとかのみですか?
わかんなかったら、まず試しに実行してみればいいと思うよ (´・ω・`)
>>847 ツッコミさんくー。
File::stat を見てみたら、デフォルトのエクスポートは関数オーバーライドだけだけれど、エクスポート可能な変数はたくさんあるね。
デフォルトではない (明示的に指定しなければインポートされない) ので、この文脈では問題ないんじゃないかな。
当方, JavaScript なら多少 自信あり. しかし perl は訳解りません. そんなわけで基本処理は JavaScript でやることにして log 書き込みだけを perl でやる hybrid 掲示板を作ってます. んで, server が nifty なので logfile が cgi-bin にあると Ajax の読み込みに失敗するようです. なので "homepege" directory に logfile を置く必要があります. perl で このようなことが可能でしょうか ? (調べた限りでは このようなことをやってる CGI は見当たらないので) もし可能なら ちょこっとアドバイスなど おねげぇ〜しますだ.
>>851 可能。
google: perl open
上のヒントで分かるかな。 open "path/to/homepege/logfile"; というように読み書きするファイルのパスを指定すればOK。
>>854 ご親切にどうも ありがとうございます.
MacPerl で local check をやっている関係で
delimiter の違いが (思い違いの) 原因でした.
"できる" と解っただけで方向性が決まりました.
んで, (骨組みだけ) 無事成功しました !
>>855 またお前か。いい加減OSXにしろ。デリミタの違いなんて無くなる。
>>856 申す訳ねぇ〜デスだ.
すれ違い気味に OS10.3 って今でも手に入ります ?
なんか, 10.4 の評判はいまいちみたいなので...
OS さえ手に入れば爺さんに鞭打って...
ヤフオクあたりに転がっていそうな。。。>Tiger
TigerよりもPantherを欲しがるやつなんて初めて見た。
とりあえずnullはここに居つくなよ。
861 :
nobodyさん :2006/09/06(水) 03:34:58 ID:KUgOOpEJ
if( $d == -1 ) { return 0; } for( my $n = 0; $n < @w; $n++ ) { if( $w[$n] == $d ) { return $n; } } return -1; これ↑と同じ処理を、1行か2行で書けないでしょうか?
>>861 return $d == -1 ? 0 : (@_ = grep { $_ == $d } @w) ? $_[0] : -1;
自分の分からないコードを書くと保守性が下がるよ。その点注意。
それだと
>>861 の求める index が返ってこないよ。
まあ、grep 部分を grep { $w[$_] == $d } 0 .. $#w に
すりゃいいだけだけど。
ご迷惑をおかけします。
http://pc8.2ch.net/test/read.cgi/hp/1156837689/ Perl使いの皆様、どなたかこの板違いの馬鹿どもの議論を、
一言でサラリと解決してやってください。
初心者が質問しにくい状況になっていて非常に迷惑です。
論点は
『CGIファイル(CGIスクリプト)はプログラムであるか?』
ということらしいです。
これだけだと、答えが出しにくいかもしれませんが
よろしくお願いします。
前スレでCGI=プログラムと言い出していたものがいて、
それが尾を引いて、わけのわからない展開になっていますが、
どなたか解決を・・・
見たけど既に正解は出ているが誰も見ちゃいないので、馬鹿につける薬はないな。 いらん話を他スレに持ってくるな。
868 :
nobodyさん :2006/09/06(水) 13:51:06 ID:??? BE:212256746-BRZ(1002)
webprogよりレベルの低い板があったとは
あれ、ただの荒らしだから。 勿論反応してるのもね。
>>860 召喚されてるように聞こえる...
それはさて置き, とりあえずマジレス.
ここで言うのもアレだけど perl って知れば知るほどアレルギー反応が...
要するに目的を達成するために しかたなくやってるだけで深く追求したくない.
したがって居座るつもりは さらさらありません.
さて, 結果報告 :
nifty は やっぱり だめぽ でした.
(XMLHttpRequest は "同一 domain" 限定で読み込みが可能.
nifty は見かけ上, 別サーバーのように見える)
そこで xrea で試したところ, どうにか動作はするように...
しかし あっしには理解不能なエラーが...
それでも back ボタンを押すと書き込めてるのですが...
作りかけで恥ずかしいのですがリンク貼っておきます.
alter.s225.xrea.com/hybrid/hybrid.html
だから同じドメインになるように
>>854 みたいにしたんじゃなかったのかw
>>871 思い違いかも知れないけど, 書きこみに失敗.
細かいところを作り込まなければならないので
あまり時間を浪費したくない.
そんな訳で深く原因追求してません.
>>870 nifty 特有の問題なら nifty のスレで聞くのがいいかも
>>870 エラーなんてでてないが? 直した? それとも、投稿後の画面遷移のこと?
だとしたら、JavaScript側でsubmitしてるんだから、画面遷移があるのは当たり前だろう。
どうせならform.submit()せずに、投稿もXmlHttpRequest使えばいいじゃん。何の為のAjaxなんだか。
Perlにアレルギー起こすのはいいが、JavaScriptも微妙だし、もうちょっとがんばれ。
追記。どうしてもformを使いたいなら、確かレスポンスとして 204 No Content を返すと 画面遷移をなくせたはず。
>>873 どうもありがとう.
一応チェックしてますがテクニカルな話題は なさそうでふ.
>>873 print "Content-type: text/html \n\n";を
書き加えてエラーは出なくなりますた.
>JavaScript側でsubmitしてるんだから
>画面遷移があるのは当たり前だろう
よく考えれば当然なんですが見落としてました.
>投稿もXmlHttpRequest使えばいいじゃん
こちらは以前作ったサンプルを転用しました.
で, 書きこみの方は未研究です.
これでうまくいくのなら万々歳ですだ.
>確かレスポンスとして 204 No Content を返すと
さっそく調べて実験してみます.
本当に ありがとう !!!
そしてもう来るな
878 :
876 :2006/09/07(木) 18:11:47 ID:4yMYFWbI
はじめまして。KENTスレから移動してきました。自分の日記やメモをつけるのに、
公開サーバではなくローカル・マシン上で、www.kent-web.com で配布されている
sunbbs を利用しています。このコードを眺めつつ、ちょくちょく改造しているの
ですが、投稿されたデータに
http:// で始まる文字列があった場合、自動的に
その文字列にリンク・タグを追加してくれる auto_link という処理を見つけました。
<sample-1>
sub auto_link {
$_[0] =~ s/([^=^\"]|^)(http\:[\w\.\~\-\/\?\&\+\=\:\@\%\;\#]+)/$1<A HREF=\"$2\" TARGET=\"_blank\"><B>$2<\/B><\/A>/g;
}
これを応用し、同じく sunbbs 内のワード検索サブルーチンに、ヒットした検索
キーワード部分を色付きでマーキングする処理を作ってみました。
<sample-2>
sub auto_marker {
$_[0] =~ s/$word/\<font\ color=\"\#FF0000\"\>\<b\>$word\<\/b\>\<\/font\>/g;
}
これで「おおむね」期待通りの処理をしてくれるのですが、検索キーワードの中に、
ひらがなやカタカナの長音記号「ー」が含まれていると、記事はヒットするらしい
ものの、肝心の記事を表示してくれない、という問題に悩まされています。
ヒットする「らしい」というのは、検索結果:12件 などという結果だけはちゃんと
表示されるからです。
ちなみに、<sample-2>の処理を外すと、色付き表示は当然されないものの、ヒット
した結果はちゃんと表示されます。
このことから、自分が書いた<sample-2>の処理中に、この問題を引き起こす原因が
含まれているのではないかと判断しています。
どなたか「そこはこう書かなきゃダメじゃん」というご指摘をいただけませんでしょうか。
どうぞよろしくお願いいたします。
ちゃんと読んでないけど、バックスラッシュ入れ過ぎ。 置換後のテキストで "<", ">", "#", 半角スペース、ダブルクォートとかは、 バックスラッシュ入れなくていい。
s/$word/ ↓ s/\Q$word\E/ とかじゃないの?
長音「ー」といえばUTF-8とS_JISの変換で失敗したことがある
883 :
879 :2006/09/08(金) 18:17:53 ID:???
>>881 どうもです。できました。感謝です。
しかしそれはどういう意味があるのでしょう?
あと検索キーワードが一つのときはきちんと動作しましたが、
複数のキーワードを半角スペースで区切って入れた場合、
結果は正しくヒットするけれども、赤マークはされませんでした。
スペース(%20)が邪魔をしているんだろうということは分かるのですが、
それ以上のことが分からないです。
>883 ぐぐれ
というか、kent のサイトのサポ板いった方いいんじゃね?
886 :
nobodyさん :2006/09/08(金) 22:27:06 ID:d2vLYLwU
アバウトな質問で申し訳ないのですが フォームにフリーワードを入力させて CSVのデータとマッチさせ、 マッチしたデータを表示させるCGIを 作成しようと思っています。 それで、yahooやgoogleのように 表示件数を○件毎という風にして、 画面の下のほうに 1 2 3 4 5 6 7 8 9 ..... と次の○件、という感じにしたいな と考えています。 同じような仕様で、参考になるソースを ご存知の方、居ませんでしょうか。。
>>884 横からですまないが、ググれないからいい検索単語ぷりーず
>>886 Data::Pager
HTML::Pager
etc.
見つかったので情報投下。 quotemetaと同じそうだ。
検索で得た件数を1ページで表示したい件数で割った数が総ページ数になる。 また、件数を割って得た数が割りきれなければ総ページ数を+1する ってとこかなぁ
>>878 nph script
ステータスコードに頼るような内容じゃないと思うけど
ステータスコードの書き換え方法はCGI仕様に一応あるから わざわざNon-parsed Headerする意図が(ry
893 :
886 :2006/09/08(金) 23:55:47 ID:d2vLYLwU
>>888 >>890 ご意見、ありがとうございます。
Data::Pager
HTML::Pager
ですか。恥ずかしながら始めてしりました。
勉強してみます。
最初は自分でロジックを考えて実装しようと
思ったのですが、案外難しいな。。と。
検索対象を全部HTMLソースに
吐き出して、DHTML + javasript で
表示の切り替えが出来ないかな。。なんて
ことも考えてます。
Perl経験あんまり無いので、無理にperl
で作るとソースがむちゃくちゃになりそうで。。
なやましい。。
>Perl経験あんまり無いので ちなみに、経験があるのは何なの?
myについてなのですが、 たとえば my $test = "soto"; my $a = 1; if ($a) { print $test; } とすればsotoが出力されますが、 my $test = "soto"; my $a = 1; if ($a) { my $test = "naka"; print $test; } print $test; だとnakasotoと出力されます。 myはあるサブルーチンのなかのみでしか変数を使えないようにするというのが私の理解なのですが、 この場合はどういう処理がされているのでしょうか。 仮に{}でくくられた部分内でしか変数を使えなくするというのなら最初の例に合いませんし・・・ 初歩的な事で申し訳ありません。
896 :
nobodyさん :2006/09/09(土) 03:06:29 ID:FjbM6rE4
rootで実行しているperlスクリプトから $filename = "filename.dat"; chown www,GROUPNAME,"$filename"; としても反映されません。 ユーザ:root グループ:wheel でログインをした状態でコマンドラインから色々試してみたところ 自分自身のユーザ・グループ以外には変更できないのですが www,GROUPNAME とするにはどのようにしたら良いのでしょうか。
>>895 「変数 スコープ perl」 でぐぐればわかるとおもう。
>>896 uid, gidでやっても?
chown scalar(getpwnam('www')),scalar(getgrnam('GROUPNAME')),"$filename";
>>898 ありがとうございます!
uid,gidで解決しました。
質問です。 auでフォームから送信すると次のページのURLに ?x-up-destcharset=17 と付くんですがなぜですか? また、これを表示させない方法があれば教えてください。
>>895 どんな結果を期待してたんだ?
nakasotoと出力されて当然なのだが???
902 :
896 :2006/09/09(土) 05:29:02 ID:???
>>899 で解決して喜んではいたのですが
ユーザ名,グループ名 では駄目だった理由が知りたくて
戻って参りました...どなたかお教えください。
perl chown で検索した解説サイトではほぼ全てが
「chown ユーザ名,グループ名,ファイル名」
という説明になっているということは一般的にはuid,gid形式では
指定しないのでしょうか。
環境はFreeBSD+perl5.8.8です。
>>903 これはPerlの設定ではどうしようもないって事ですか?
わかりましたスレ違いすみませんでした
>>902 まずperldocではちゃんと数値のUID,GIDと明言されてる。
そして、素人が作ったPerl解説サイトはデタラメ書いてる場合もある。
それはそうとして、どこでどう検索したのか書いてみろ。
yahooとgoogleで「perl chown」のTOP5件チェックしたが正しかったぞ。
907 :
895 :2006/09/09(土) 10:32:15 ID:???
>>897 ありがとうございます。
ファイルスコープなるものとブロックスコープなるものがあったんですね。
>>901 名前は知りませんでしたが、myはブロックスコープで動くと思っていました。
後者の出力が正しいとするなら、
前者はブロックの外でmy宣言してるのにもかかわらず、
ifのブロック内で$testが出力されているのが不思議だったのです。
>>907 スコープがネストされてる場合内側から外側のスコープが見えるよ
他の言語でも言うグローバル変数はそういう使い方
909 :
895 :2006/09/09(土) 13:05:50 ID:???
>>908 知りませんでした。ありがとうございます。
{
my $block;
{・・・・・・}
{
{・・・・・・}
}
}
などでも・・・・・・の位置から$blockをみれるということですか。
ということはサブルーチンに移るときだけ気をつければいいんですね。
localは覚えないでいい
914 :
nobodyさん :2006/09/09(土) 21:28:20 ID:??? BE:53064432-BRZ(1002)
local厨乙
do { local $/ ; <> } ; local $Data::Dumper::Deparse = 42 ; とかで必要すよ義務っすよ must っすよ。
ま た コ ン パ ク ト か
>>907 {
my $x = "soto_x ";
my $y = "soto_y ";
{
my $y = "naka_y ";
print "naka: ", $x, $y, "\n";
}
print "soto: ", $x, $y,"\n";
}
{
print "yoso: ", $x, $y, "\n";
}
ファイルスコープについては、この延長で「ファイルを丸ごと取り囲む見えないブロック」があると考えれ。
サブルーチンに移る時に何を気をつけるのかは知らんが。
>>910 localは環境変数など複数あってはいけない変数に違う値を付ける場合に必要なんですね。
>>918 分かりやすい説明ありがとうございます。
サブルーチンに移るときに気をつけるというのは
引数を渡すのを忘れて、変数を直接参照しないように
ということです。言葉足らずですみませんでした。
> local 他にも、こういう使い方とかってしないもんかね? my $hoge = { fuga => 1, piyo => 2 }; { local $hoge->{piyo} = 3; print $hoge->{piyo}; } print $hoge->{piyo};
>>920 必然性があるならやったらいい。
しかし設計としてはほめられたもんじゃない。
そこに合理性がない上に恥じらいもないなら、少なくとも僕はそれをクソと呼ぶ。
WindowsXP+ActivePerlでインストール直後のまっさらな状態で cpan Net::Amazon すると Undefined subroutine &main::UpdateHTML_blib called at -e line 1. NMAKE : fatal error U1077: 'C:\Perl\bin\perl.exe' : リターン コード '0xff' Stop. nmake -- NOT OK と出てインストールできません。どうしたらインストールできるでしょうか? ズブの素人なのでなってない質問の仕方と思いますが、 神様達の優しさに期待します。よろしくお願いします。
cpanでぐぐりなさい もしくはppmにしておきなさい わからなければ検索
16進数をバイナリにしてそれを保存し、printでも表示したかったのですが、 print pack ("H*","$d16") で、$d16のなかに00が含まれているとプリントがその手前までしかされません・・・ 何が原因でしょうか?
>>924 どこにprintしてるのか知らんがnullは文字列の終端。
表示する端末によっては表示が打ち切られたり、半角スペースに置き換えられて続行したり…
バイナリエディタの右側の枠のようなものを作りたいの?
926 :
924 :2006/09/10(日) 15:17:01 ID:???
>バイナリエディタの右側の枠 はい。Perlで簡易バイナリエディタを実験的に作ってみようと思いまして・・・ 00は違う値に置き換えてからprint表示する必要があるのですか。 ありがとうございます。
927 :
924 :2006/09/10(日) 15:17:52 ID:???
連続書き込みすみませんorz print先はモニタです。
>>926 まあモニタなのは分かるけど…
nullに限らず各制御コードは何かに置換することでエスケープするのは必要だね。
手っ取り早いのは tr/ -~/./c (US-ASCII以外を置換)とかを通すこと。
マルチバイトに対応させるならもう二捻り。
929 :
nobodyさん :2006/09/10(日) 17:19:33 ID:JN7kssrH
elsif とかまじでなんなの?開発してるヤツくるってる。 一文字分タイプする労力減るだろ?とか悦に入ってんの? elseif と else if で混乱してた方がまだマシ。泣きそう。
>>928 ありがとうございました。
マルチバイト対応がんばります。
elif
933 :
nobodyさん :2006/09/10(日) 22:10:15 ID:us6Jx56P
すみません。コーディング中にどうしても分からない事が出てきたので教えていただきたいのですが、\n(改行コード)を含むテキストを出力させたいのですが print <<EOF ほげほげ\n ほげほげ\n . . . EOF で出力すると、当然 ほげほげ ほげほげ . . . というテキストファイルが出来、出力させたい ほげほげ\n ほげほげ\n . . . というようなファイルを得ることが出来ません どのようにすれば上記の望む出力結果を得ることが出来るのか教えていただけると幸いです。
>>933 EOF が付加されるってこと? EOF って付加されたっけ。
とりあえず binmode あたりを試してみては。
>>933 改行している時点で、(見えませんが)改行コードは入っています。
改行コードではなく、"¥n" という文字が表示されて欲しいなら、
print <<EOF;
ほげほげ¥¥n
ほげほげ¥¥n
EOF
とすれば良いでしょう。
936 :
nobodyさん :2006/09/10(日) 22:23:57 ID:us6Jx56P
938 :
nobodyさん :2006/09/10(日) 22:30:09 ID:us6Jx56P
939 :
nobodyさん :2006/09/10(日) 22:41:36 ID:9Coln3UP
print "";とprint'';の違いだから知るとか以前の問題な気が・・・
GETしようとして、 ソケットに繋いでGET送って、 @get = <SOCKET>; をすると、ごく希にそこで止まってしまうので、 時間切れにさせるか、もっと安全に扱いたいんだけど、 どうするのが普通ですか?
やっぱりそんな感じですか さくっとぐぐってみたら、 > タイムアウト処理ではシグナルを使うため、Windows 系サーバでは使えません。 という記述を見かけたのですが、windowsのActivePerlでは無理ですか?
Win98系なら、ね。
読む前にselectしてみるとか。知らんけど。
試してみたらalarmの行でやっぱり、 The Unsupported function alarm function is unimplemented at 〜 というエラーになってしまいました 代案は何かありませんか?
$text =~ s/([>>]|^)(>[^<]*)/$1<a href=\"\">$2<\/a>/g; 携帯用の掲示板でアンカーを付けたいんですがこれだとURLが 〜〜.cgi?mode=view&No=>>番号 みたいに番号に>>が入ってしまうんですが数字のみにするには どうしたらいいですか?
$text =~ s/([>>]|^)(>[^<]*)/$1<a href=\"〜〜.cgi?mode=view&No=$2\">$2<\/a>/g; すみませんこうでした
>>948 [>>] の箇所、[] の使い方を誤解していると思われ。
正しくない正規表現からでマッチさせるべきテキストの例もないので
希望にそうか分からないが、一例を。
s/>>(\d+)/>><a href="〜〜.cgi?mode=view&No=$1">$1<\/a>/g;
950 :
946 :2006/09/11(月) 23:55:32 ID:???
ちなみに、 @get = <SOCKET>; の部分を、 for (1..100) { print "$_\n"; sleep(1) } とかに置き換えれば、それはちゃんとタイムアウトします
selectで読めるか確認しつつちまちま読むのが普通じゃね?
パラメータが4つある方のselectですよね ちょっと理解を超えてるので、 @get = <SOCKET>; と同等のことをしてくれるタイムアウト処理内蔵の安全なパッケージとか 無いでしょうか
IO::Selectは試した?
ドキュメントすら見つけられません ActivePerlでwebから何か読もうとする人はみんな同じ問題を 抱える筈なのに、あんまり困ってないのは、 windowsでそんなことする人がいないということなのかな
ググレカス
eval使えよ
>>955 > windowsでそんなことする人がいないということなのかな
Web から何か読もうとすれば、誰もが LWP を使うからだと思うよ。
> Web から何か読もうとすれば、誰もが LWP を使うからだと思うよ。 誰もがということにしたい?w
960 :
nobodyさん :2006/09/12(火) 22:00:41 ID:??? BE:212256083-BRZ(1002)
(´ー`)
それは「タイムアウト処理内蔵の安全なパッケージ」として使えますか?
よっぽど苦労したいか特殊なことをやりたい人じゃなければLWP使って終わりにするな。 あーあとLWP知らない人(笑)
>>961 せめて LWP が何であるかくらいは調べてよぅ。
たぶんあなたの手元に POD 内臓のソースが転がってるはずだから。
安全かどうかは使ってみないと判らないので
それに、良い物なら
>>941 の時点で真っ先に挙がりそうなものだし
もう書き込まなくていいよおまえ
とりあえず、LWP:Simpleを使った版を作ってみた 一日動かしてみてどうなるか
日記は要らない。
>>964 残念ながら「ActivePerlでwebから何か読もうとする」という目的が明らかになったのは
>>955 の時点なのですよ。
>>966 LWP::UserAgent を使いませんか。タイムアウト処理が欲しいのでしょう?
やっぱりSimpleだと勝手にタイムアウトはしてくれないか POSTする必要もあるので、GETだけLWP使うのも変だし、書き直します
日記は他所でやれ
今日は、いい天気ですね。
972 :
nobodyさん :2006/09/14(木) 07:32:23 ID:??? BE:424512768-BRZ(3000)
Simpleもタイムアウトあると思うんだけど…
物騒なもの作っていそうだ。
974 :
nobodyさん :2006/09/14(木) 16:13:18 ID:CaEHA0hf
任意の日本語にマッチするパターンを表現したいのですが どうやればいいのでしょうか? たとえば文字列"coding"にはマッチしませんが"コーディング"にはマッチする というような奴です。
/コーディング/
( ^ω^)?
非asciiにマッチさせたいんじゃないかと
/[^¥x00-¥x7E]/; 別に7Fでもいいけど。
しまった。マッチさせるのか。
>>978 だと2byteが含まれてるかどうかの確認にしかならんな。
980 :
nobodyさん :2006/09/14(木) 20:12:42 ID:5VQgHCQX
教えて下さい。 掲示板で検索フォームを作ってます 検索文字列を全角スペースで区切ると上手くヒットしません・・・ $key_wordはちゃんと区切り文字(半角または全角スペース)で分割されてると表示れるのですが $key_word =~ s/ / /g; $key_word =~ s/\t/ /g; @words = split(/ /,$key_word); ↑これ間違ってますでしょうか?
split /[\s ]+/, $s じゃだめなん?
全角スペースを [ ] の中に入れるのかよwww
983 :
980 :2006/09/14(木) 20:55:41 ID:???
ヒント:文字コード
ああ、ごめん。確かに
>>981 はEUC-JPかUTF-8じゃないとダメかも。
誰も使おうとしてくれない | がカワイソス
988 :
980 :2006/09/14(木) 22:24:36 ID:???
&jcode'convert(*key_word, "sjis"); これ入れてもダメでした・・・ もっとヒント下さい^^;
$baka =~ s/(\x81\x40)+/\s/g; $baka =~ s/\t+/\s/g; @aho = split(/\s/,$baka);
>>989 そのREPLACEMENTは無いだろw
ひどいなw
992 :
980 :2006/09/15(金) 00:40:01 ID:???
>>989 それだと区切れずに
文字列1s文字列2s文字列3 になってしまいます^^;
993 :
nobodyさん :2006/09/15(金) 01:10:55 ID:??? BE:265320465-BRZ(3000)
今は個人情報保護の時代です。 OSやインタプリタのバージョン、コードの内容からも ある程度個人の特定が可能です。質問の際にはなるべく 最小限のコードだけを提示して、回答を貰えばラッキーというスタンスで臨みましょう。
994 :
980 :2006/09/15(金) 02:03:11 ID:???
すみません・・・自己解決しました 検索ルーチンのミスでした><
995 :
nobodyさん :2006/09/15(金) 05:01:24 ID:EabJRhNL
そろそろ継続スレの開設について準備を開始するための議論を開始しませんか?
とりあえず過去ログ羅列はやめないか。倉庫だけでいい。
997 :
nobodyさん :2006/09/15(金) 08:29:43 ID:MgHy280R
CGIの処理を行って前画面に戻るって事は簡単にはできませんか?
過去ログ羅列は必要無い。 前スレだけあればおk 1000ならディレクターがちゃんと仕事をする
>>997 print "Location: $ENV{'HTTP_REFERER'}\n\n";
1000なら転職
1000なら次スレなし おしまい
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。