07/10/21 11:32:16
失敬。リロードしてなかった。
で、もっかい、今度は、(threory58Sはreposにいれてるんだよな?)
ppm install mod_perl ってやってみ。
462:nobodyさん
07/10/21 11:43:40
実はapache2.0を入れているという罠
463:どうしてパンチラが流出?
07/10/21 14:04:29
_ ⌒ヽ_ / `ヽ、
/´_ `ヽ、 ,ィ''´ ̄ハ、i,/lヽ、 l!
,ィ´/'´/::/:::ラ./ / /!イソ !i .ハ /
/゙ ! ' ::´:::::::|:// / ,イ /!"゙ヾ|リ i メ
! | :: ::::::ri/| |:::i|ハ i.|| i,/|! _//!:::|::::|
| :: .::イリノハ ::!lィl丙`|/ |、 _ハ/::/:::;/
i ; ::::レl/ !,ヾ、! ゙'゚┘ 尤i'/,' / 20万人くらいが見ちゃったパンチラ!?
/ !..:::::l/ ::::アi. 、 , ゙‐'ソ'"'´ 元女子アナウンサー丸川珠代さん(白パンティー)
ト、_// :::|:::::/ ::::://^ヽ、 ~ ,.ィi′ スレリンク(ana板:9番)
`ー'ナ/.:/::::/ ::::/´! ヾ "´l:::l|
i / .:|:::/ :::;ィ/ |! ヽ:::!:riト、_, 日本人でよかった♪ 白でよかたーーー!
!| /:|/ .//! ,!| ヽ ヾ、,リ この番組で有名となった参議院議員(東京)のまるたまさん
| | //:::/:::! ! \. \ ヽ\ スレリンク(furin板:174番)
ヾ// ::::/:::::|ノ _二;ヽ ゙、 ,}
オ′:::i :::::::|/ ̄ \ ヾー-、 たけしさんとツーショットのまるちゃんに注目!(白パンティー)
/ | :: ::|::::::::::! ハ iヽ i でも、小泉チルドレン筆頭の
i | ::|:::::::::リ ,イバー‐'′! ヽ 佐藤ゆかりタン萌えパンチラは無いよーーーーーーん
! |i : :|:::::ノ i /ハ | / | \
ヾ _,, !<_. { ///" ヽ
_,. ‐''";;;;;;;,:'";;;;;/ ゙̄T''''r-レ \ _ i
ヾ"、_;;;;_,;:'";;;;;;;;;;/;;;;;;;;;i;;;;;l;;;;;| }=ニl!;;ト、 /
ヾ;;;;;;/`''ー--ヶ、;;;;;;シ;;;;;;|;;;;;;! ぐー`"ヽ!
ヾi' / ヾ、;;;;;;;/;;;;;;;| 〈´  ̄~゙'''┘
;ヘ , i ゙\;;;;;;;;;ハェュj パンチラ規制厨と闘ってます
! `ヽ、'_,{_ ゙\;;;;;| スレリンク(sec2chd板:639番)
464:457
07/10/21 15:13:46 xMq+XN4p
>>461
やはり無理でした。
>>462
再確認しましたがapache2.2です。
--------------------------------------------
やむを得ず、「何かカオスな理由でトラブルが起きた」ということにして、
ActivePerlのリインストールという強硬手段に出ました。
その結果、無事インストールできました。
結局、問題の原因はミステリーのままに。^^;
アドバイスくださった方、ありがとうございました。
465:nu.
07/10/21 15:30:36 hpzcI35P
初めまして超くだらない事かもしれませんが質問させてください。
OceanGrid形式の動画を録画するにはどうしたらいいですか?
また録画出来るものなのでしょうか…?
よろしくお願い致します。
466:10い
07/10/21 19:05:50
質問します。
if( $ENV{'HTTP_USER_AGENT'} =~/bot|twiceler/){&zap;}
上みたいなのがあったとして、 USER_AGETNに、bot かtwiceler があると。
って感じなのですが、これですと例えば、Googlebotが来ると一致してしまいます。
bot以外の Googlebot や 1bot、 bots などに合致させない方法はありますか?
ifからの文はなるべく変えない方法を教えてください。
できれば、=~// この中の範囲内の変更でできないでしょうか。よろしくお願いします
467:nobodyさん
07/10/21 19:16:00
and $ENV{'HTTP_USER_AGENT'}!~/Googlebot|1bot|bots/
これを条件に加えるのがわかりやすくないかな
468:10い
07/10/21 19:37:52
>>467 お答えありがとうございます
467さんが書かれたのは、botに一致しないのでしょうか?
test下のですが and にエラーがでてしまい結果がでません
Premature end of script header
s: /home/oo/public_html/index.cgi
syntax error at /home/oo/public_html/index.cgi line 462, near "and"
Execution of /home/oo/public_html/index.cgi aborted due to compilation errors.
前後の流れは
if( $ENV{'HTTP_USER_AGENT'} =~/bot|twiceler/){&zap;}
else{&zap2;exit;}
のifからの部分を
and $ENV{'HTTP_USER_AGENT'}!~/Googlebot|1bot|bots/){&zap;}のように変えてエラーです
469:nobodyさん
07/10/21 19:43:45
めちゃくちゃ古いヴァージョンなら and => && でどーでしょ
470:10い
07/10/21 19:51:36
エラーが
syntax error at /home/oo/public_html/index.cgi line 462, near "=> &&"
です
$perl -version
This is perl, version 5.005_03 built for i386-freebsd
apache はApache/1.3.39 です
パールを最新にしてみます
471:nobodyさん
07/10/21 19:58:24
if( $ENV{'HTTP_USER_AGENT'} =~/bot|twiceler/ and
$ENV{'HTTP_USER_AGENT'}!~/Googlebot|1bot|bots/){&zap;}
エラー出ないよ
472:10い
07/10/21 20:18:23
>>471さん
取り急ぎ
andから書いてました
perlのアップグレードを始めてしまってなかなか終わらないので
終わったら試して確認してみます
473:10い
07/10/21 21:22:35
>>471 上行のキーワード完全一致だけがzap4に飛びました
perlのバージョンじゃなくて書き方が違っていたようです
!~/hoge/ の意味を教えてください
474:nobodyさん
07/10/21 21:58:00
hogeにマッチしなければ真を返す(=~/hoge/の逆)
475:10い
07/10/21 23:00:45
>>474ありがとうございます
476:nobodyさん
07/10/23 20:50:38
変数が配列であるかどうかを確認するには、どうすればよいのでしょうか?
477:nobodyさん
07/10/23 21:36:17
wantarray
478:nobodyさん
07/10/23 21:54:51
>>477
すいません、
sub write {
my $name = $_[0], $data = null;
if ( $_[1]が配列かどうかを確認したい ) { $data = join( "\n", $_[1] ) }
else { $data = $_[1] }
open( OUT, ">$name" ) || return 1;
print OUT $data;
close( OUT );
return 0;
}
のようにして、ifのところで、$_[1]が配列かどうかを確認したいのですが・・・・・
wantarrayの使い方がいまいち理解できませんでした。
このような場合は、どのようにすればよいのでしょうか
479:nobodyさん
07/10/23 23:15:24
>>478
「$_[1] が配列」ってPerlの言語仕様上ありえないわけだが?
$_[1]が配列のリファレンスか否かってんであれば、
if ( ref $_[1] eq 'ARRAY' ){ }
まあ、ソースを拝見した所、おそらく
&write( 'name', @data ) ;
あたりで呼ぶんだろから、
my $name = shift @_ ;
my $data = undef ;
if ( @_ >= 1 ){ $data = join( "\n", @_ ) ;}
でいいんじゃね?
余分なことだが、
1. write は perl ですでに使われてるので他の名前にした方がいい。
2. 、、、、まあいいや。
480:nobodyさん
07/10/24 13:14:01 nBn+cskB
いまだにphpではなくperlで動いているあたり。。。
URLリンク(yoshihi6.com)
481:nobodyさん
07/10/24 18:26:51
>>479
その方法で解決しました。
ありがとうございます。
482:nobodyさん
07/10/25 17:20:59 ZciT02o+
スライスした配列の参照を表現するにはどのように書けばいいですろうか。
@org[0..2]のリファレンスを作るとして、
イメージは$ref = \@org[0..2];みたいなことなんですが・・・
483:nobodyさん
07/10/25 18:16:27
$ref = [@org[0..2]];
484:482
07/10/25 18:38:58
>>483
おおっ、なるほど!無形配列に入れるんですね。
勉強になりました!
485:nobodyさん
07/10/26 10:43:23 HBlkZ3uQ
セッション変数で配列の扱い方はどうすれば良いでしょうか。
検索結果の一覧画面Aで、リンク文字列からは検索結果をCSVファイルに出力しようとしてます。
HTMLタグで、リンク先にURL引数として動的に実行時の回数を渡します。
↓----
<a href="data.cgi?num=(実行時の回数)>CSVデータ出力</a>
----
そして、実行回数とSQLをセッション変数に保存します。
↓----
# 一覧画面Aの実行回数を更新
my $numListA = $session->param('numListA');
++$numListA;
$session->param("numListA", $numListA);
# 一覧画面のN回目の実行時のSQLを保存
$session->param('ListAsql', $sql);
----
現状は上記のようにしてますが、これはまだ単一のSQLしか格納できない状態です。
これを配列でN番目の要素にSQLをを格納したいと考えてます。
486:nobodyさん
07/10/26 13:37:59
状況がハッキリ想像できてないので迷惑な答えになってしまうかもしれないけど
CGI-Sessionではたしか配列はリファレンス渡しだったと思う。
最初に↓こう準備しておいて
$arrayref = []; #初期化式
$session->('sql', $arrayref); #セッションに格納
その都度
$$arrayref[0] = $sql;
$$arrayref[1] = $sql;
$$arrayref[n] = $sql;
でいけるかも?
487:nobodyさん
07/10/26 17:05:53 1fUnrvio
ほんとにどうしようもない初心者なのですが誰か教えてください。
#!C:/Perl/bin/perl
require "cgi-lib.pl";
&ReadParse(*input);
@list={$input{'a'},$input{'b'},$input{'c'}}
$result=0;
foreach $value (@list) {
if($value == 0){$result++;}
elsif($value == 1){$result=$result+2;}
else{$result=$result+3;}
}
if($result<=1){$message = "文章1";}
elsif(($result>=2)&&($result<=4)){$message = "文章2";}
else{$message = "文章3";}
inputにはラジオボタンから0~2の値が送られてくるように設定してあります。
messageが結果として表示されるようにしてあるんですが何度やってもエラーがでてしまいます。
どこが間違ってるのでしょうか?
488:nobodyさん
07/10/26 18:26:02
@list=($input{'a'},$input{'b'},$input{'c'});
489:nobodyさん
07/11/01 10:55:03 yhsG2JfP
index.cgiからhtml.plをrequireし、
html..plの中でinfo.plを使いたいのですがどうしたら良いのでしょうか。
下のような感じではうまくいきませんでした。
==index.cgi==
#!/usr/bin/perl
require "./html.pl";
&html::header();
==html.pl==
Package html;
require "./info.pl";
sub header(){
print $header;
}
1;
==info.pl==
$header="Content-type:text/html¥n¥n";
490:nobodyさん
07/11/01 11:10:49
構造に問題があると思うけど、
PackageのPを小文字にすればいいと思うよ
491:nobodyさん
07/11/01 11:19:21 yhsG2JfP
>>490
packageのpは実際のソースのほうは小文字になってました。
投稿ミスorz
あとinfo.plの1;も投稿時の書き忘れです。
構造??
492:489
07/11/01 12:16:29
自己解決しました。
print $header;を
print $main::header;
にしたところ、Content-type:text/html¥n¥nが出力されました。
493:nobodyさん
07/11/01 19:49:10
headerの出力をinfo.plでする意味がワカランのだが?
index.cgiで出力の制御
html.plでHTML文書の構造制御
info.plでHTML文書の内容を制御
にした方が構造的には綺麗にまとまるとオモ。
494:nobodyさん
07/11/03 04:03:09 0ypwQ9jZ
CGI上のIDやパスワード認証のログを保存するにはどう書き足せば良いでしょうか?
495:nobodyさん
07/11/03 04:35:48
fwrite($fp, $id.$pass);
496:nobodyさん
07/11/04 01:00:13
>>495がPHPに見えるけど、酔っ払ってるせいだと思ってとっとと寝よう。
497:nobodyさん
07/11/08 09:06:26
禁止メールアドレスを複数設定したいのですがどうすればよろしいですか?
1週間前にcgiを知りましてなんとか1語ではできるようになったのですが・・・
ヒントでは理解できそうもないのでずばり回答でお願いします。
# 禁止メールアドレスチェック
if ($in{'email'} =~ /yahoo/) {
&error("フリーメールはダメ");
}
498:nobodyさん
07/11/08 12:50:47
まず、それだとfooyahoooo@docom*.ne.jpとかも弾いてしまうわけだが
499:nobodyさん
07/11/09 01:30:01
>>498さん
そのようですね。失礼しました。さようなら。
500:nobodyさん
07/11/20 17:27:42
誰か教えてくだされ。
Perl 5.8.2 CGI::Lite 2.02 を使って、うpローダを作ったんです。
URLリンク(digit.que.ne.jp)
を参考にバイナリ対応パッチは行いました。
Windowsだとうまく動いています。MacOSXからだと、0Dが0Aに化けます。
パッチが足りてない部分があるのでしょうか?
どこをなおせばうまく行きそうですか?
501:500
07/11/20 18:07:03
追加情報
・Mac OSX 10.4.11 (不明)の FireFox 2.0.0.9 からアップでデータ化け発生。(別の場所)
・Mac OSX 10.4.10 (Intel)の FireFox 2.0.0.9 からアップでデータ化けなし。(漏れ)
現在の状況:検証のために漏れのMacOSXを10.4.11へアップデータン中。
もしかすると、Perl側が原因じゃないかもしれないんで、Mac板でも情報集めして見ます。
502:nobodyさん
07/11/20 18:57:03
CGI::LiteとCGI_Liteは別物だぞ
503:nobodyさん
07/11/20 19:45:06
>>502
URLリンク(digit.que.ne.jp)
CGI::LiteとCGI_Lite
CGI::LiteモジュールはCGI_Liteモジュールの後継になります。 CGI::Lite v2.0とCGI_Lite v1.9の違いは(ソースレベルで見ても)以下の3点だけです。
* パッケージ名
* バージョン番号
* ドキュメント内での記述(パッケージ名、バージョン、更新日付)
CGI_Liteに関する情報は、99%までそのままCGI::Liteにも適用できます。なお、CGI::Lite 2.02版からは少しずつ修正が加わり始めています。
504:nobodyさん
07/11/20 21:37:27
別物じゃん
505:nobodyさん
07/11/27 00:40:39
Debian etch、Apache2.2.3+perl5.8.8でCGIスクリプト走らせたらHDDアクセスが止まらなくて
ログにOut of memory!ってでたんですけどどうすれば直りますか?
506:nobodyさん
07/11/27 08:35:46
鯖スペックとその糞コード晒せ
507:505
07/11/27 13:35:14
スクリプト
URLリンク(park1.wakwak.com)
鯖スペック
CPU:Pentium-M 1.4GHz
メモリ:768MB
HDD:80GB
508:nobodyさん
07/11/27 14:09:42
Perlのプログラムに関しての質問です.
現在2つのテーブルデータがありまして,
片方がID付きの参照テーブルになってまして,片方がログデータになってます.
ログデータを読み込んで,参照テーブルのいくつかのカラムを比較し,同一の
データを持つもつデータの参照IDを投げるという処理を行ってます.
現在ログデータを1行ごとに取り出し,その一回一回に参照テーブルを一致させるまでループして比較するという処理を行ってますが,
データの量もあり時間がかかりすぎて仕方ありません.何か良い方法はないでしょうか
イメージとしては以下の通りです.
この例ではログテーブルの2番目,3番目,4番目の文字を,参照テーブルの2番目,3番目,4番目と比較し
一致したら,参照テーブルの1番目のIDを出力してあげるといった形です.
ログテーブル
1107,A,B,C
1108,C,A,D
1109,A,C,B
1110,A,B,C
参照テーブル
1,A,B,C
2,A,C,B
3,C,A,D
出力データ
1107,1
1108,3
1109,2
1110,1
509:nobodyさん
07/11/27 17:03:00
>>508
my $log = <<'EOF' ;
1107,A,B,C
1108,C,A,D
1109,A,C,B
1110,A,B,C
EOF
my %table = reverse map{ split /,/, $_,2 } split /\n/, <<'EOF' ;
1,A,B,C
2,A,C,B
3,C,A,D
EOF
printf "%s\n", join ',', map{ $table{$_} || $_ } split /,/, $_, 2 for split /\n/, $log ;
文字通り参照テーブルをテーブルにするだけだよ。
>>507
人狼の掲示板で聞くのがスジだ。
インストールし忘れ(jcode.plなんか)とかチェックポイントが多すぎて答える気にもならん。
510:508
07/11/27 20:31:16
>>509
有難うございました.
実際やってみまして上の例ではちゃんと出力できたことは確認しました。
しかし%tableの意味するところが勉強不足でちょっと分かりませんでした。
変数等をいじったりしてみたのですが
お恥ずかしいところですが、具体的にどのような処理を行っているのか教えて頂けると
幸いです。
511:nobodyさん
07/11/28 00:13:10
my %table~~の行。
「改行区切りのデータをsplit して無名配列に入れ(split...)
その要素を最初の,だけで区切って更に無名配列として返し(map{})
結果として必ず偶数個となっている配列をhashと見なしreverse(reverse)
それを%tableと云うhashに収納。」
printf~~の行。
「$logを改行にてsplitして無名配列に入れ(forの後のsplit...)
それをfor修飾子にてループ(for)。
その各要素を最初の,だけで区切って無名配列に入れ(forの前のsplit...)
その無名配列の要素をkeyとして
テーブルにデータがあればテーブルのデータを返し、
なけれはそのまま要素を返す(map{})##
で,でjoinして(join...)
printf で整形してprint out(printf)」
## は真面目に $_[1] だけ table見に行かすべきなんだけど
メンドかったから、、、
EOF云々は「ヒアドキュメント」
まずは本でhashを覚えるんだ。
512:nobodyさん
07/11/28 00:29:11
スレタイと>>1読んで反省した。
スタンダードな書き方で書くべきでした。
my $table = <<'EOF' ;
1,A,B,C
2,A,C,B
3,C,A,D
EOF
my %table ;
foreach my $line ( split /\n/, $table ){
my @dat = split /,/, $line, 2 ;
$table{$dat[1]} = $dat[0] ;
}
foreach my $line ( split /\n/, $log ){
my @dat = split /,/, $line, 2 ;
print $dat[0] . ',' . $table{$dat[1]} . "\n" ;
}
513:509
07/11/28 11:28:52
なるほど,これなら理解できそうです.
この例では,一致させる列が順番になってますが,現在扱っているデータでは
順番にはなっていないのですが,整列してから処理したほうが良いですかねぇ?
わざわざ有難うございます.
助かりました.
514:509
07/11/28 13:38:32
何回も申し訳ありませんが,
$tableないし$logデータは別ファイルに保存されているので,ファイルから
読み出しを行ったので,配列として読み出したのですがこの場合処理は
どうなるのでしょうか.
515:nobodyさん
07/11/28 13:58:53
さすがにちょっとは自分でもしらべようぜ。
ヒント貰ってるんだからforeachとsplit辺りから検索できるだろうし。
516:509
07/11/28 14:21:28
↑すいません,自己解決です。
517:465
07/11/28 23:46:53 JbJxNee4
activePerl5,8インストールしようとしたら
invalid Drive:G
ってなってインストールできナス
orz
助けて下さい
518:nobodyさん
07/11/29 13:33:09
ドライブGがないのに、ドライブGをインストール先に指定しているだけでしょ
519:超初心者
07/11/30 10:10:18 Hc83DxRo
Perlがわからない超初心者です。よろしければ教えてください!
広告管理CGI ver1.3
URLリンク(hpcgi2.nifty.com)
これを使ったんですが、文字化けで悩んでいます。
ホームページビルダーShift_JISで使っている場合は問題ないですが、
ワードプレス(UTF-8)やロリポブログ(EUC)だと文字化けしちゃいます。
いろいろと試してみたのですが、まったく駄目です。
すいませんが、どこを直せばいいのでしょうか?
よろしくお願いします。
520:nobodyさん
07/11/30 12:36:34
>>519
そのURLのサポート掲示板へ逝け
521:超初心者
07/11/30 13:03:46 Hc83DxRo
確かにサポート掲示板で書けばいいのですが、
この掲示板2006/8で終わっているようでらちが明かないので質問しています。
すいませんが、どなたか手助けお願いします。
522:nobodyさん
07/11/30 13:30:01
>>519 スレ違い
CGI設置について質問【Part3】
スレリンク(php板)
523:nobodyさん
07/11/30 15:31:46 8pPZwPu7
どうも、こんにちは。
CGIゲームの改造(TOWN)をしている者です。
独自タグを導入しようと思っています。
#タグ処理
$in{'a_com'} =~ s/\[i\](.+?)\[\/i\]/<em>$1<\/em>/gi;
$in{'a_com'} =~ s/\[b\](.+?)\[\/b\]/<strong>$1<\/strong>/gi;
$in{'a_com'} =~ s/\[u\](.+?)\[\/u\]/<u>$1<\/u>/gi;
$in{'a_com'} =~ s/\[pre\](.+?)\[\/pre\]/<pre>$1<\/pre>/gi;
$in{'a_com'} =~ s/\[s([1-7])\](.+?)\[\/s\]/<font size="$1">$2<\/font>/gi;
$in{'a_com'} =~ s/\[c=(\S+)\](.+?)\[\/c\]/<font color="$1">$2<\/font>/gi;
$in{'a_com'} =~ s/</</g;
$in{'a_com'} =~ s/>/>/g;
$in{'a_com'} =~ s/([^=^\"]|^)(https?\:[\w\.\~\-\/\?\&\+\=\:\@\%\;\#\%]+)/$1<a href=\"$2\" target=\"_blank\">$2<\/a>/g;
$in_a_com = $in{'a_com'};#koko2006/11/07
このような感じにしたのですが、独自タグを記述してもタグのままでてしまいます。
独自タグを入力すると、変換はされるのですが、結果が表示されません。
このような場合どのようにすれば良いでしょうか?
宜しくお願いします。
524:nobodyさん
07/12/01 04:28:25 p/Twqk8/
>>523
独自タグ処理の後に<と>に変換してるからじゃない?
525:nobodyさん
07/12/01 04:29:21 p/Twqk8/
>>524
<>な
526:nobodyさん
07/12/03 02:01:35 J4A8iRzG
レンタルサーバーでインストール済みのモジュールを調べました。
そのときの一覧で、頭に5.8.8とかの数字がついているのがあって、
その意味がわかりません。
例えば
5.8.8::XML::XPath
というのが一覧に載っていたのですが、そのほかに
XML::XPath
というのも載っています。
これら二つはどう違うのですか?
527:nobodyさん
07/12/03 09:47:05
そのモジュール一覧を調べるスクリプトの
アルゴリズムが腐ってんだろうよ。
528:nobodyさん
07/12/06 00:17:44 HgYNR+TB
データベース処理に関してDBIを使用していますが、デバッグ用にクエリを表示もしくはログを記録したいのですが、どうすればいいでしょうか。
と言うのも、プレースホルダ使ってからクエリ実行する場合、動的なデータに対して「?」をセットしますよね。
このまま自分で記録しようとしても、「?」のまま記録してしまうし
かといってDBI->traceを使うと、余計な情報ばかり出力されます。
皆さんはどのようにデバッグしていますか?
529:nobodyさん
07/12/06 01:32:40 NHCKs2bj
あるファイルの一行目の文章のみ手直ししたいと思っています。
自分なりに考えた方法では
open(FILE,"+>./log.dat");
while(<FILE>){
@LOG=$_;
}
$LOG[0]=~/(hoge)(hoge)/;
shift @LOG;
unshift @LOG,"hoge3$2";
print FILE @LOG;
上記では、whileの中で一行目以降の行も配列に格納している点が、初心者の私には無駄に感じてしまいます。
もしこれより簡潔で、サーバーへの負荷も少なくてすむ方法をご存知の方がいらっしゃいましたら、ご教授ください。
530:nobodyさん
07/12/06 05:14:19
>>528
Perlではないけれども、自鯖環境なら、my.cnfに
log=/var/log/・・・ てな感じで記録すれば全てのクエリのlogが取れる。
レン鯖環境でも、デバッグ目的なら、自前のPCで同じことをすればよい。
(UnixだろうとWinだろうと、mysqlのversionが同じなら、クエリレベルでは全くの互換)
>>529
open(FILE,"<./log.dat");
open(OUT,">./logout.dat);
$row = <FILE>;
$row = うんたらかんたら・・・
print OUT $row;
while(<FILE>){ print OUT $_; }
close(FILE);
close(OUT);
オレならこうするかな。
既存ファイルの”ケツ”に足すのなら、">>file.name"で簡単だけど、頭だけを変更したいとなったら、
ファイルの内容を一旦全て読み込まないといけなかったんではなかったかな。
(変更前と変更後の一行のバイト数が同じになるとは限らないから。)
この後でRenameするなどしたらよし。
(自分の場合は、どんな時でも、基本的に変更前のbackupをとって置く性質なんで、確実に不要とわかってから元を消すようにしてる。)
もうひとつゆうと、ウチの環境では、
@log = <FILE>; とするよりも、 while(<FILE>){ push(@log,$_) } とか、 $log = join('',<FILE>);とかするほうが、
圧倒的に早い(WinXp + ActivePerl-5.8.8で、1.5倍~2倍くらい早い。よその環境は知らない。)
531:nobodyさん
07/12/06 05:29:50
>>529
ああ、その前に、そのコードそのままなら、
本当に $log[0] に一行目が入っているかい?
532:nobodyさん
07/12/06 05:34:31
>>528
ああごめん。
mysql限定とは書いてなかったね。
でも多分、ほとんどのDBには、DB側にクエリのlogを保存する機能がついてるはず。
なにも全てPerl側でやる必要はないと思う。
533:nobodyさん
07/12/06 07:57:56
>>529
簡潔って「一点のみ」で、
use Tie::File ;
tie my @array, 'Tie::File', 'hoge.txt' or die ;
$array[0] =~ s/foo/bar/ ;
untie @array ;
以下は横レスFYI:
>>530氏は、「ウチの環境では」ときちんと断わってはいるが、一応他の環境での
ベンチマーク結果だ。シビアに考えるなら常に自分の環境で、use Benchmark で
テストする事をお勧めする。
(けど、普通の環境ならシビアにテストしなくてもいいんじゃね?)
This is perl, v5.8.6 built for darwin-thread-multi-2level
@OSX 10.4.11, G4 500MHz メモリ1G
一行50文字の2万行のデータ hoge.txt にて
% cat hoge.pl
use Benchmark ;
sub __handle{ open IN, q{hoge.txt} ; push @arr, <IN> ; close IN ; }
sub __array { open IN, q{hoge.txt} ; while( <IN> ){ push @arr, $_ ; } close IN ; }
sub __join { open IN, q{hoge.txt} ; $dat = join '', <IN> ; close IN ; }
timethese ( 50, { op1 => '__handle', op2 => '__array', op3 => '__join' } ) ;
% perl hoge.pl
Benchmark: timing 50 iterations of op1, op2, op3...
op1: 7 wallclock secs ( 6.31 usr + 0.59 sys = 6.90 CPU) @ 7.25/s (n=50)
op2: 8 wallclock secs ( 7.11 usr + 0.59 sys = 7.70 CPU) @ 6.49/s (n=50)
op3: 8 wallclock secs ( 6.12 usr + 0.60 sys = 6.72 CPU) @ 7.44/s (n=50)
534:529
07/12/06 12:01:39 I3qzGVsw
>530
ご親切にありがとうございます。参考になります。
全部読み込む必要があるのですね。
>本当に $log[0] に一行目が入っているかい?
ご指摘の通り、入っておりませんでした。
@LOG=$_; の部分を
push @LOG,$_;
としましたが、それでも$log[0]に一行目が入っていませんでした。
試しに、
open(FILE,"+>./log.dat");
の部分を
open(FILE,"<./log.dat");
としたところ、ようやく$log[0]に一行目が入りました。
いまいち『+>』の意味がつかめません。自分が持っているperlの本を何冊か見ると、
『+>』は入出力共用(上書きモード)とあるのですが、それは『<』と『>』を同時にやったことにはならないのでしょうか。
例えば、
『open(FILE,"+>./log.dat");』
というのは
『open(FILE,"<./log.dat");
open(FILE,">./log.dat");
』
ってことではないのですよね(動作をみると)。よくわかりません。。。
535:529
07/12/06 12:02:24 I3qzGVsw
>533
ありがとうございます。そういう風にテストするんですね。
(自分の勉強不足でした。)
かゆいところに手が届いた感じです。感謝してマス。
早速調べて使ってみます。
536:530
07/12/06 14:42:15
>>533
わざわざ補足いただいて恐縮なんだけど、少しご意見を・・・。
自分は、あまり use Benchmark を信用せずに、 use Time::HiRes でベンチ取るようにしてる。
どうも use Benchmark は、実際の動作時間に即してないような気がするので。
具体的にゆうと、>>530や>>533の場合だと、ファイルIOについての待ち時間がカウントされてないように思う。
確かにPerl内部だけで動作が完結するコードについては、しっかりと時間を計測してくれてるようだけど、
例えば外部ファイル読み書きや、他のプロセスをロードしたりするための時間はカウントしてくれないみたい。
詳しくソースとかを追ったわけではないけれど、以下簡単な実証コード
use Time::HiRes qw(time);
use Benchmark qw(timethese);
$n = 100;
sub cgi_1 { system( q(perl -MCGI -e "") ); }
sub cgi_2 { system( q(perl -MCGI::Lite -e "") ); }
timethese($n,{ u_CGI => 'cgi_1', u_CGIL => 'cgi_2'});
$st1 = time();
for(1..$n){ &cgi_1(); }
$lt1 = time() - $st1;
$st2 = time();
for(1..$n){ &cgi_2(); }
$lt2 = time() - $st2;
printf "%.3f s\n",$lt1;
printf "%.3f s\n",$lt2;
537:530
07/12/06 14:42:47
Unix系だと、time for i in `seq 1 100 ・・・ とかで、コマンドラインから簡単に実測できるコードなんだけど、それをWinに移植したつもり。
これの結果が、This is perl, v5.8.8 built for MSWin32-x86-multi-thread(Pen4 3.4G mem2G)で、
Benchmark: timing 100 iterations of u_CGI, u_CGIL...
u_CGI: 4 wallclock secs ( 0.05 usr + 0.11 sys = 0.16 CPU) @ 641.03/s (n=100)
u_CGIL: 2 wallclock secs ( 0.02 usr + 0.06 sys = 0.08 CPU) @ 1282.05/s (n=100)
4.031 s
1.453 s
こうなった。wallclockは正しいようだけど、詳細の内容が実態に即してないように思える。
同じコードを、以前Unix(CentOSやFedora)環境でやってみても、同じような結果になる。
(とゆうか、詳細な数値は覚えてないけど、CGIとCGI::Liteが、ほぼ同程度の速度とかレポートされた。)
あと、そのLinuxで、>>533のようなベンチを取ったときも、やっぱり push(@log,$_) が最速だった。
あくまでもウチの環境で、でだけど。
@log=<IN>の倍程度は出てた。ファイルの容量、行数が多いほうが、よりpushが早かった。
(そちらのDarwinは、@log=<IN>形式がかなり早いね。)
ついでに、>>533のコードに、use Time::HiRes 書き足して、自分の環境でやった結果。
(OS等は同上。ファイルは、1行約200バイト、50万行で総計約100MB。時間かかるので、n=2で測定)
Benchmark: timing 2 iterations of op1, op2, op3...
op1: 72 wallclock secs (70.59 usr + 1.36 sys = 71.95 CPU) @ 0.03/s (n=2)
op2: 35 wallclock secs (33.95 usr + 0.66 sys = 34.61 CPU) @ 0.06/s (n=2)
op3: 38 wallclock secs (37.22 usr + 0.73 sys = 37.95 CPU) @ 0.05/s (n=2)
op1 = 138.750 s
op2 = 49.078 s
op3 = 54.547 s
538:nobodyさん
07/12/06 18:28:34
533 は、ただ「(データを含めた)環境によって状況は変る可能性があるよ」って言いたかっただけなんだ、が、、、
気を悪くなさったなら謝罪します。
==================================
一応、そちらの>>356の実行結果
Benchmark: timing 100 iterations of u_CGI, u_CGIL...
u_CGI: 16 wallclock secs ( 0.01 usr 0.32 sys + 11.46 cusr 3.34 csys = 15.13 CPU) @ 303.03/s (n=100)
u_CGIL: 5 wallclock secs ( 0.01 usr 0.30 sys + 3.00 cusr 1.96 csys = 5.27 CPU) @ 322.58/s (n=100)
15.595 s
5.506 s
>>357に関しては、
perl hoge.pl
Benchmark: timing 2 iterations of op1, op2, op3...
op1: 266.766 wallclock secs (16.62 usr + 29.02 sys = 45.64 CPU) @ 0.04/s (n=2)
(warning: too few iterations for a reliable count)
op2: 58.1595 wallclock secs ( 9.94 usr + 4.68 sys = 14.62 CPU) @ 0.14/s (n=2)
(warning: too few iterations for a reliable count)
op3: 899.579 wallclock secs (22.62 usr + 63.34 sys = 85.96 CPU) @ 0.02/s (n=2)
(warning: too few iterations for a reliable count)
op1 = 499.930 s
op2 = 108.665 s
op3 = 972.383 s
メモリが潤沢でないから join がこんな目に合うのは当然。
因に自己ツッコミだけど、>>533はサブルーチン内で my @arr なりしないとアンフェアなベンチ、、、、
539:530
07/12/06 20:10:20
>>538
いえいえこちらこそ申し訳ないです。そうゆうわけではありません。
ただ、use Benchmark にイマイチ信用が置けない者の意見として、
状況によっては、use Benchmark がアテにならないこともあるよ、ってことが言いたかっただけです。
>因に自己ツッコミだけど、>>533はサブルーチン内で my @arr なりしないとアンフェアなベンチ
そこは最初に気付いたから、自分のコードの中では、my して計測してます。
追記
CentOS5 でもやってみた。(コード、ファイルはWin環境と同じ)
This is perl, v5.8.8 built for i386-linux-thread-multi (Pen4 2.4G men2G、ソースから'-O3'オプションでコンパイル)
Benchmark: timing 2 iterations of op1, op2, op3...
op1: 5 wallclock secs ( 3.59 usr + 0.54 sys = 4.13 CPU) @ 0.48/s (n=2)
op2: 2 wallclock secs ( 2.44 usr + 0.21 sys = 2.65 CPU) @ 0.75/s (n=2)
op3: 4 wallclock secs ( 3.08 usr + 0.59 sys = 3.67 CPU) @ 0.54/s (n=2)
op1 = 3.677 s
op2 = 2.819 s
op3 = 3.510 s
はやっ!
以前計測した時はこんな早かったかな~って思ったけど、何回やっても同じような結果になるんで、あってるんだろう。
どうもWin(ActivePerl)が、Unix系に比べて、メモリ確保あたりが激しく遅いのかなって気がしてくる結果でした。
(Discパフォーマンスは同程度、ってかこの環境に限っては、上のレスのWin環境のほうが早い)
540:nobodyさん
07/12/07 21:30:21
>>534
つ seek
541:nobodyさん
07/12/10 02:52:34 FqUmo5vT
>>1 を読んで、ここなら私の質問も馬鹿にされずに
答えてくれるかと思いましたが、
どうやらそれすら適わないようです。
もっと低レベルの質問をしたい場合はどこに行けば良いですか?
542:nobodyさん
07/12/10 02:55:27
樹海
543:nobodyさん
07/12/10 20:07:09 iaWb7lQX
open(ファイルファンドル,"ファイル名") || &error; ←この&error;もしくはdieとかは
なんの意味があるんでしょうか?
これあってもなくてもInternal Server Error(500)になるんですけど・・・
544:nobodyさん
07/12/10 20:21:45
>>543
ファイル開くのが失敗した時にorの右の式が実行される。
ファイルが無事開ければ1が返すけど、
失敗すると0が返ってくる。
0 or &error;
って実行するとorの右の式が実行されるのが分かる。
my $flag = open~;
print $flag;
とかやってみれ
どっちにしても500になるのはファイルが存在しないからか、
別の場所でエラーが起きてる。
スクリプトの3行目あたりに
use CGI::Carp 'fatalsToBrowser';
を追加してテバックしなさい。
暇だからマジレスしたぜ
545:nobodyさん
07/12/10 20:33:24
>>544
レス㌧です
>500になるのはファイルが存在しないから
あーやっぱりファイル無いと500でるんですね・・
一応ローカルでファイルあるとき(使用中(オープン中))はエラー表示されますた
546:nobodyさん
07/12/10 23:08:25
>>545
ファイルが無くてもorの右の式は実行されるよ。
ローカルでは動くならパーミッションのミスか、cgi用のディレクトリに入ってないとかじゃない?
あとは、perlのパス間違ってるとか。
ファイルが無いときにエラー処理したいなら
&error if (not -e $file);
とかにしれ
or &error;ってやるのはロック中だけにするとエラーの原因が絞れるよ。
547:543
07/12/11 02:37:10
>>546
ローカル環境はXP+apache_1.3.39+ActivePerl-5.8.8.822です
use CGI::Carp qw(fatalsToBrowser);もスクリプトに入ってます
---------------------------------------------
open(FH,"abc.dat") || &error;←ココ
flock(FH,1) || &error;
以下割愛
sub error {
print "content-type: text/html\n";
print "\n";
print "ERROR : $!";
exit;
}
---------------------------------------------
>ファイルが無くてもorの右の式は実行される
>ファイルが無いときにエラー処理したいなら
>&error if (not -e $file);
どうも無理っぽいです ファイル無いと500エラー出ます
500用のエラーページ(←自分で作った)も表示されないので
ファイルが無いと500(強制終了?)ぽいです?
548:nobodyさん
07/12/11 07:09:06 hJLc29jh
>>547
> flock(FH,1)
その部分を
eval{flock(FH,1)};
にしてごらん
windowsではflock使うと致命的エラーになるよ。
549:nobodyさん
07/12/11 08:21:01
>>547
apacheのエラーログになんて出てる?
550:nobodyさん
07/12/11 10:15:38
嘘つくなよ
flockできないのは、非NT系だけ
551:nobodyさん
07/12/11 17:54:09
>>550
ごめんガチでしらんかったorz
552:nobodyさん
07/12/11 18:01:01 hJLc29jh
>>547
良く見りゃopenの種類書いてないけどそこ大丈夫?
>,>>,<,>+
553:nobodyさん
07/12/11 18:58:11
>>552
匿名掲示板だからといって、いい加減なこと言わない方がいいよ。
今まで何度匿名掲示板で犯罪予告して逮捕されたか、知っているの?
偽計業務妨害で逮捕されろ。
554:543
07/12/11 21:44:35
遅くなりました
>>549
ログはこんなんです。
["日時"] [error] [client 127.0.0.1] Premature end of script headers: "該当CGIへのパス"
>>552
openモードの1は省略可能では?
555:nobodyさん
07/12/12 00:35:05 amxfThwD
PHP4使ってます
作ったスクリプトをブラウザで実行させると
1分くらい待った後にエラーも出ずに、画面が真っ白に
なったんですが、何が原因ですか?
コマンドラインで-l付きで実行しても文法エラーは出ませんでした。
ただ、コマンドラインが異常に重くなったので、
PCにかなり負担をかけているようです。
無限ループ系のエラーかな?
556:nobodyさん
07/12/12 10:04:09
>>555
このスレのタイトルを、声を出して読めば何が原因かわかると思います。
557:nobodyさん
07/12/12 10:45:09
>>555
ちなみにperlは「パール」と読みます。
超初心者用は「ちょうしょしんしゃよう」です。
三回ほど声に出して読んでみてはいかがでしょう?
558:nobodyさん
07/12/12 20:59:26
超初歩的な質問なんだけど、ActivePerl5.8.8を
インストールしたんだけどコンパイルとか実行の仕方がわかんないです。
どなたか助けてもらえませんか?
559:nobodyさん
07/12/12 22:23:24
何がしたくてインストールしたのさ?
560:nobodyさん
07/12/13 00:30:26
>>558
>>556
561:nobodyさん
07/12/13 02:13:55
>>558
Perlはスクリプト言語なので、コンパイルは必要ありません。
コマンドラインからスクリプトを指定して実行するか、
AN HTTPD等からCGIを実行するのに使うのか、
それによってやり方が違います。
とりあえず、わざわざActivePerlを選んだって事はWindowsだと思いますが、
Windowsのバージョン(9x/2000/Xp/Vista)によって設定方法が色々違うので、
下記の情報を書くと多少は情報が得られると思います。
・OSのバージョン
・利用目的(CGI?ローカルのスクリプト?)
とりあえず、藻前は↓コレでも見て出直せYO!
URLリンク(pocketstudio.jp)
562:nobodyさん
07/12/14 06:41:05
>>561
匿名掲示板だからといって、いい加減なこと言わない方がいいよ。
今まで何度匿名掲示板で犯罪予告して逮捕されたか、知っているの?
偽計業務妨害で逮捕されろ。
563:nobodyさん
07/12/14 15:25:54
>>562 m9(^Д^)プギャーーーッ
564:nobodyさん
07/12/14 21:44:19
聞きづらい雰囲気だ(笑
CGIなんだけど、あるディレクトリの中身を全消去してから、
そのディレクトリ自体を消去するしようとしているんだけど、ディレクトリの消去がうまくいかない。
$dir = "./abc/hoge/";
opendir DIR, $dir;
@files = grep { !m/^(\.|\.\.)$/g } readdir DIR;
closedir DIR;
$flag = @files;
if ( $flag ) {
foreach $file ( @files ) {
unlink "$dir$file";
}
}
rmdir ("abc/hoge");
rmdirの使い方を間違ってるかと思って、中身入っていないabc/hoge2で試してみると消えてくれた。
どうやらunlink→rmdirの流れが悪いのかと思って、sleepで5秒間止めてみたけど、何も変わらなかった。。。
誰かわかる人いる??検索しても全然わからんかった。。。
565:nobodyさん
07/12/14 21:47:56
>>564
匿名掲示板だからといって、いい加減なこと言わない方がいいよ。
今まで何度匿名掲示板で犯罪予告して逮捕されたか、知っているの?
偽計業務妨害で逮捕されろ。
566:nobodyさん
07/12/15 01:11:18
こんなんじゃダメ?
use Cwd;
my $dir = "/abc/hoge/";
my $cwd = Cwd::getcwd();
execcommand("/bin/rm -r $cwd/$dir");
exit;
sub execcommand
{
my $cmd = shift;
my $err = '';
my @envbak = ($ENV{'IFS'}, $ENV{'CDPATH'}, $ENV{'ENV'}, $ENV{'BASH_ENV'}, $ENV{'PATH'});
delete @ENV{'IFS', 'CDPATH', 'ENV', 'BASH_ENV', 'PATH'};
eval{
system( $cmd );
};
if ($@) {$err = $@;}
$ENV{'IFS'} = $envbak[0];
$ENV{'CDPATH'} = $envbak[1];
$ENV{'ENV'} = $envbak[2];
$ENV{'BASH_ENV'} = $envbak[3];
$ENV{'PATH'} = $envbak[4];
return $err;
}
567:564
07/12/16 19:49:12
>566
ありがとうございます。
参考にさせていただきました。
568:nobodyさん
07/12/17 22:02:42
質問させてください。
mimew.pl というファイルを公開している所が見つからないのですが、
なんとか入手する方法はないでしょうか?
569:nobodyさん
07/12/17 22:08:17
>>568
多分これ。保証はしない。
つ[ URLリンク(ambiente.okayama-u.ac.jp) ]
570:nobodyさん
07/12/17 23:05:24
保証してください
571:568
07/12/17 23:13:17
>>569
早急な対応ありがとうございます!
無事メールフォームCGIを動かす事が出来ました!!
本当にありがとうございました!
572:nobodyさん
07/12/17 23:22:17
宣伝乙
573:nobodyさん
07/12/18 08:03:18
ハッシュ配列の各要素をリファレンスとして関数の引数に渡したいのですが
よくわからなくて試行錯誤の末下のような方法にたどり着きました
$AA{'name'} = '1234';
$BB[0]{'name'} = 'abc';
$BB[1]{'name'} = 'ああああ';
$BB[2]{'name'} = '!?';
kansuu( \%AA );
$tmp = \@BB;
kansuu( ${\$tmp->[0]} );
kansuu( ${\$tmp->[1]} );
kansuu( ${\$tmp->[2]} );
sub kansu
{
my $h = $_[0];
print "$h->{'name'}<br>";
}
BBの要素を kansuu() に入れるために
もっとスマートな方法(っていうか正しい書式)がありましたら教えてくれないでしょうか?
574:nobodyさん
07/12/18 19:13:55
Perlがプログラミング言語ということぐらいしか分からない初心者です。
ウインドウズXPを使っています。
ActivePerlでコマンドプロント上でppmを使ってImage::ExifToolをインストールしようとしたのですが
>ppm install failed: DBI connect(~) failed: unable to open database file(1)
と出てインストールできませんでした。
DBIをどうにかしたらよいとは思うのですがよく分かりません。
どうしたらよいのでしょうか?
ご教授お願いします。
575:nobodyさん
07/12/18 21:22:12
そんくらいぐぐれ
576:574
07/12/19 19:22:29
聞き方が悪かったですね。
具体的な問題点は
・ppmはActivePerlをインストールしただけでは使えない?
・DBIとか落としてきてもどうやってインストールしたらいいのか分からない。
・そもそもPerlの作業をどこで行ったらいいか分からない。
(コマンドプロントでuseをしてもなんにも起こらない←間違っている?)
・つまるところプログラミングのイロハが分からない。
スレ違いというやつですか?
577:574
07/12/19 19:37:06
で、何がやりたいかと言いますと、これです↓
URLリンク(www.fenrir.co.jp)
つまずいたのは2のところです。
578:nobodyさん
07/12/19 21:36:49
>>576
スレ違い
579:nobodyさん
07/12/19 23:17:02
・ppmはActivePerlをインストールしただけでは使えない?
使える
・DBIとか落としてきてもどうやってインストールしたらいいのか分からない。
ppmを使う
・そもそもPerlの作業をどこで行ったらいいか分からない。
(コマンドプロントでuseをしてもなんにも起こらない←間違っている?)
まずテキストエディタで書いて保存する
・つまるところプログラミングのイロハが分からない。
あっそ
580:nobodyさん
07/12/21 01:37:26
>>574
WebProgramingに無関係。板違い。誘導。
Perlについての質問箱 33箱目
スレリンク(tech板)l50
581:574
07/12/21 21:47:22
>>580
ありがとうございます。
そちらにもスレがあったんですね。
ご迷惑をお掛けしました。
582:nobodyさん
07/12/22 00:59:24 +1+1pRnk
こんちは
8 9 10 ってファイル読み込んで
8 9 って出力するにはどう書けばよいですかね
583:nobodyさん
07/12/22 01:26:23
ふむ
584:nobodyさん
07/12/22 02:11:54 At3tOlJk
わかります?
585:nobodyさん
07/12/22 03:40:10
10が必要ないのか二桁の物が必要無いのか
読み込んだファイルの三ツ目の物が必要無いのか
読み込んだファイルの最後の物が必要無いのか
条件が分からなければ判別のしようが無い
586:nobodyさん
07/12/22 04:19:02 At3tOlJk
読み込んだファイルの最後の物が必要無い
です
ほんとありがとうございます(泣)
587:nobodyさん
07/12/22 21:44:20
8 9 10ってのはファイルの内容か?ファイルの名前か?・・・まあ内容だろうな。
8 9 10ってのは毎回8 9 10なのか?・・・毎回同じってわけじゃないだろうな。
区切りはスペースだけ?タブも?ファイルの中に改行はあるの?
588:nobodyさん
07/12/22 22:22:37
質問だけ見てもきみにゃPGは向いてないことが分かるからやめとけ
589:nobodyさん
07/12/23 04:25:06 nSEv05U9
ごめんやめない がんばる
8 9 10ってのはファイルの内容で
8 9 10ってのは毎回同じってわけじゃないです。
区切りはスペースだけ
590:nobodyさん
07/12/23 05:02:25
自分で作る気があるなら、どこまで作ったか晒せ。
自分で作る気がないなら、仕様をまとめなおして、↓こっちで聞け。
Perlでリクに答えるスクリプトを作るスレ
スレリンク(tech板)l50
591:nobodyさん
07/12/23 08:20:22
返答の意図が分かってないだろ。
まず基礎を学べ。
んですぐ人に答えを求めようとせず頭使って考えれ。
592:nobodyさん
07/12/23 10:02:40 01+8BPxk
半年ぶりに書こうと思ったら驚くほどPerlに関する記憶が飛んでる
記憶をよみがえらせる方法を教えてくれ
593:nobodyさん
07/12/23 10:05:44
とりあえずスクリプト眺めたり、ちょっと書いたりしてるうちによみがえるんじゃね?
それができないなら、アルツハイマ-かもしれないから病院に逝ったほうがいいな
594:nobodyさん
07/12/24 01:41:03 yCHoznYX
漏れも吹き飛んだ
1からじゃ何も書けなくなったw
595:nobodyさん
07/12/24 07:17:33
PerlとPHPで開発してると、やっぱりPerlの方が書きやすいな。
PHPなのに、気がついたら途中からPerlになってたよw
596:nobodyさん
07/12/24 12:07:01
質問です。
ファイルをオープンし、それを一旦最後まで読み込んだ後、
またそのファイルを最初から読み取りを行いたい場合は、
一度ファイルを閉じるしか方法がないのでしょうか。
ファイルで閉じたり開いたりを多く行うと、処理が重くなったり、
ファイルの競合で問題が起きるので、出来れば避けたいのですが。
<コーディングの例>
# ファイルを開く
open ( FL, "dat.csv" );
# ファイルを最後まで読む。
while( $line = <FL> ){
# 何らかの処理
}
close( FL );
open ( FL, "dat.csv" );
# ファイルを最後まで読む。
while( $line = <FL> ){
# 何らかの処理
}
close( FL );
597:nobodyさん
07/12/24 12:52:16
ファイルの競合で問題ってのが意味わからんが
やりたいことはseekでできる
598:596
07/12/24 13:19:13
>>597
seekで検索してみたところ、すぐに見つかりました。
ありがとうございました。
ファイルの競合で問題というのは、ファイルのロックで
解決することなので、ここでは関係ありませんでした。
599:nobodyさん
07/12/24 16:29:55
Perl5からオブジェクト指向が導入されたということですが、
Perlのプログラマーは、オブジェクト指向プログラミングを
メインで行っているのでしょうか。
それとも、処理速度や安定性、多くの環境下で動く、Perl4互換の
構造化プログラミングをしているのでしょうか。
多くの方はどちらでやっているのかを知りたいです。
600:nobodyさん
07/12/24 16:54:59
>それとも、処理速度や安定性、多くの環境下で動く、Perl4互換の
>構造化プログラミングをしているのでしょうか。
の部分が突っ込みどころ満載だが、それは使っていくうちに知ってもらうことにして、
とりあえず、Perl5が出てから10年以上たっているので、Perl4の互換性を気にする必要は全くない。
オブジェクト指向も、使いたくないなら使わなくていい。
601:nobodyさん
07/12/24 17:02:48
>>600
ありがとうございました。
602:nobodyさん
07/12/24 17:22:38
>>599
「多くの方」はダウソしたcgiをうpしてパーミッション設定するだけだろ。
中途半端な知識でオブジェクト指向を目指すと余計に意味わかんないプログラムになる。
オブジェクト指向の考え方とPerlでのオブジェクト指向の実装方法を十分理解してないなら
オブジェクト指向に手を出さない方が良い。
603:nobodyさん
07/12/25 10:20:04
>>602
レスありがとうございます。
ちょっと確認をしたくて質問なのですが、
PerlでCGIを行う場合に限定すると、サーバのメインメモリにいつまでも
情報が残るわけではないので、オブジェクト指向プログラミングは、
状態の保存などを生かしたものというより、モジュール化を行い、
関数名やグローバル変数名が競合するのを防ぐ程度の意味合いしかないように
思うのですが、この解釈はあっているのでしょうか。
604:nobodyさん
07/12/25 11:34:27
それはオブジェクト指向プログラミングの利点の1つではあるが全てではない。
かといって全部ここに書いてるとキリが無いからググってこい。
っていうか結局何が知りたいんだ? どんな答えが欲しいんだ?
605:nobodyさん
07/12/26 06:07:36
サーバのメモリにいつまでもプロセスとして残る場合もあるよ。
606:nobodyさん
07/12/26 12:46:37 SU+LBgfr
perlで最規模なCGIゲーム(有名な箱庭やFFA以上)を作ろうと猛勉強してるのですが
まったくの初心者なのでサーバーに対する負荷とかまったく考えていませんでした。
そこで疑問点が3つあります。
・MySQLが軽いとかよく聞くのですが、
本気でCGIゲームを開発する場合サーバーの負担を抑えるためどういう勉強をしていったほうがいいのでしょうか?
・perlではなくphpのほうに切り替えたほうがいいのでしょうか?
・プログラムを書き終えてperl or phpを実践した後でもMySQLに対応するのは簡単なんでしょうか?
(難しそうなのでperl or php→MySQLではなくプログラムを書き終えた後にMySQLをやったほうが
モチベーションも保てるかと思って。)
phpの話題もでてますが、今はperlのほうを勉強していてこちらのほうが聞きやすいと思って。
よければご教授よろしくお願いいたします。
607:nobodyさん
07/12/26 12:52:25 SU+LBgfr
×最規模→○大規模
608:nobodyさん
07/12/26 14:37:40 9oL1uy7O
レンタル掲示板などで、
URLリンク(www.)○○.com/?uid=▲▲▲
見たいなURLがあるのですが
これを
http://▲▲▲.○○.com/
にしたいと思っています。
これを実現するにはどのような手段が用いられるのでしょうか?
ご指導や参考URLを頂ければ幸いです。
よろしくお願いします。
609:nobodyさん
07/12/26 18:35:59 8VJWqxjl
>>606
すいません
prog板初心者スレで聞いてみます、スレ違いだったかな
610:nobodyさん
07/12/26 22:20:24
>>608
perlよりもウェブ鯖で変換した方がいい
apacheならmod_rewriteとかを使う
611:nobodyさん
07/12/27 14:37:45
>>604
ありがとうございます。
聞きたかったのは、Apache + Perl でプログラムする際、
オブジェクト指向で組むと、利便性があがるかどうか、
という点です。
ネット上のサンプルソースでも、オブジェクト指向
で組まれていなかったので、何らかの理由があり、
さほど利便性がないのかと思ったのです。
できましたら、この、「何らかの理由」もあわせて
回答をいただけたらと思っています。
オブジェクト指向一般の利便性については、自分で調べますが。
612:nobodyさん
07/12/27 14:43:25
>>605
それは、サーバのエラーや、Perlなどのプログラムミスによる
ものということですよね?
そのメモリに残ったプロセスを利用してということは
ないと解釈していたのですが。
613:nobodyさん
07/12/27 15:08:55
>>612
mod_perl + DBI なんかでは、コネクションプーリング出来たりとか
そんなんじゃないのかね?
614:nobodyさん
07/12/27 17:41:06
perlにて、「use strict」を書くとエラー(500)となってしまいます。
これをコメントアウトすると、正常に動いていますので、
パーミッションなどの設定が原因ではないと思います。
疑われる部分はどんなことがあるのでしょうか。
615:nobodyさん
07/12/27 17:46:33
すみません。質問です。
package関連の記述方法についてです。
定義したクラスのメソッドにおいて、そのクラスがもつ別のメソッドを
呼び出すということは出来ないのでしょうか。
package ClassA;
sub funcA{
print "test";
}
sub funcB{
&funcA;
}
などと記述してみたのですが、エラーがでてしまいます。
&ClassA::funcA; としてもダメでした。
616:nobodyさん
07/12/27 17:57:54
全角スペースでインデント(字下げ)したらエラーになるよ
617:nobodyさん
07/12/27 19:24:37
>>614
error_logにみんな書いてある。
618:nobodyさん
07/12/27 19:37:01
>>616
全角スペースでインデント(字下げ)してるのは、2chで
見やすくするためです。先頭に半角だと無視されますからね。
619:nobodyさん
07/12/27 21:40:34 HdAuax/Z
>>593
うむ。書くしかないよな
620:nobodyさん
07/12/27 23:08:07
>>615
最後に 1; を書いてみ
621:nobodyさん
07/12/28 00:51:11
>>620
レスありがとうございます。
最後に「1;」は書いてます。
メソッド呼び出し部分をコメントアウトすると
動作はするので、メソッド呼び出し部分がおかしいのでは、
と思うのです。
メソッド呼び出しを記述すると、動きはするのですが、
そこで停止してしまうのです。
念のための確認ですが、同じクラス内のメソッド呼び出しの
記述方法はこれであっているとみてよいのでしょうか。
それとも、「ClassA::funcA」などと記述すべきなのでしょうか。
622:nobodyさん
07/12/28 02:36:45
>>621
ウチの環境で、上のコードそのままやってみたけど、
&funcB();
で、ちゃんと'test'と出力されたべ。
呼び出し側のスクリプトの問題じゃないのかな?
以下呼び出し側。
use ClassA;
ClassA::funcA();
ClassA::funcB();
---出力----
test
test
環境 WinXp SP2 ActivePerl 5.8.8-build822
This is perl, v5.8.8 built for MSWin32-x86-multi-thread
623:nobodyさん
07/12/28 02:51:08
>>611
ていうかオブジェクト志向のメリット、デメリットを勉強すれば
ネット上のサンプルソースの例が少ない理由はすぐわかる。
624:nobodyさん
07/12/28 13:27:40
質問です。
継承に関して、ネットを調べていると、コードの書き方が
2通りあるようですが、これはどういう解釈をしたらよいのでしょうか。
ClassAが継承もととなる場合
use base qw( ClassA );
@ISA = qw ( ClassA );
use base qw()を使う方法
URLリンク(www15.plala.or.jp)
URLリンク(www.rwds.net)
@ISAを使う方法
URLリンク(www.rfs.jp)
URLリンク(bulknews.net)
一方の書き方が古いという類なのでしょうか。
それとも、継承においては特に出てこない、何か違う意味が
含まれているのでしょうか。
お願い致します。
625:nobodyさん
07/12/28 14:37:39
今までVisual Basic や java をやってきていた者です。
Perlの場合以下のようにドキュメントとしてコーディング規約は
まとめられてないのでしょうか。
URLリンク(www.objectclub.jp)
626:nobodyさん
07/12/28 18:56:10
>>624
perldoc base
>>625
ない
627:nobodyさん
07/12/29 00:20:43
>>622
もう一度0からコードを書き直してやってみたら
動きました。
何が悪かったのだろう・・・
全角スペースが入ったりしていると、赤く表示が出る
エディタを使っているのですけどね。
原因が分かりませんが、質問の内容は解決しました。
ご迷惑をおかけしました。
628:nobodyさん
07/12/29 09:32:18
>>623
Perlのオブジェクト指向を調べてみたのですが、なんだか
完全にオブジェクト指向に対応した言語ではなく、
package や ハッシュ を用いて工夫してオブジェクト指向を
実現してるみたいなものですね。
メンバやメソッドにも外部からのアクセス制限をかけたり
出来なさそうだし。
PerlをCGIでやる場合は、まず、GETやPOSTを取得して
どの関数に飛ぶのかを判定し、その関数を書いていくという
処理しかないので、構造化とさほどかわらないのかもと思いました。
ありがとうございました。
629:625
07/12/29 11:06:25
>>626
どうしてないのでしょうか。
Perlは歴史が長い分、何かノウハウを集めたものがあるかと思ったのですが。
630:nobodyさん
07/12/29 11:19:00
>>629
オマエが作れよ
俺は無視するが
631:nobodyさん
07/12/29 14:02:28
ハッシュを宣言し、それを関数に渡す処理をしたいのですが、
Perlのサイトにはそのサンプルが載っていなかったので、
自分なりにコードを書いてみました。
URLリンク(www.rfs.jp)
URLリンク(www.site-cooler.com)
関数に渡すときのコードの書き方や、受けるときのコードの書き方において、
これが偶然動いているだけなのか、不安になって質問してみました。
書き方は基本的にこれで良いのでしょうか。
やりたいことは、「ハッシュと数値を受け取り、処理を行う関数を
定義すること」です。
sub tt(){
my %t = @_;
print $t{"水"};
print "\n";
print $_[1];
}
%c;
$c{"月"} = 1;
$c{"火"} = 2;
$c{"水"} = 3;
&tt(%c,1);
632:nobodyさん
07/12/29 15:00:37 CoF2fqIA
sub tt {
my ($t,$n) = @_;
print $t->{"水"};
print "\n";
print $n;
}
%c;
$c{"月"} = 1;
$c{"火"} = 2;
$c{"水"} = 3;
&tt(\%c,1);
633:631
07/12/29 15:52:15
>>632
すばやいレスありがとうございます。
いろいろ試してみて気づいたのですが、$_[1]としても、
2番目に指定した引数が取れるわけではないのですね。
今回は偶然$c{"月"}の1が表示されていただけなのには
気づきませんでした。
あと、ハッシュを関数に渡す場合は参照渡しの方が良いのですね。
非常に助かりました。
634:nobodyさん
07/12/29 17:19:50
>>626さんくす
635:nobodyさん
07/12/29 20:00:55
>>629
Perlベストプラクティス
636:nobodyさん
07/12/29 20:26:23
>>629
理由は大まかに言って、
・ コーディングの自由度の高さこそがPerlの特徴
→ コーディング規約で縛ったらPerlらしくない
・ Perlのコーディングスタイルとしてキーストロークをいかに減らすかを重視するスタイルが存在する
→ キーストロークを減らす派にとってコーディング規約なんて邪魔以外のなにものでもない
・ スクリプト言語なので元の用途は自前のツールをお手軽に作る事だった
→ 自分専用の道具を作るのにJIS規格とかを気にするヤツはいないのと同じでコーディング規約なんてキニシナイ
・ スクリプト言語はコンパイラ言語と違って大規模開発に向いてないと信じられていた
→ 小規模ならコーディング規約なんていらない。
って感じだな。
プロセッサも高性能化し、スクリプト言語でも十分に大規模開発が可能になったが、
・ 未だにキーストロークを減らす派の存在が大きい
・ CPANなど充実したライブラリの存在で実際にコーディングする量はそれほど増えてない
って理由から、わざわざコーディング規約を決めようとする動きも存在しないわけ。
使いたいものが、この世に存在しないなら自分で作ればいい。
もし、藻前さんがPerlのコーディング規約が欲しくて作るというなら、
目を通して意見を言うぐらいの手伝いはこのスレの人もやってくれると思う。
まあ、使う人がそんなにいるとは思えないが。
637:629
07/12/30 19:23:31
>>636
詳細な説明のレスありがとうございます。
自分でもPerlについて調べていたのですが、似たようなことが書いて
ありました。自由度の高さが売りなので、逆に規約が無いということ
ですね。納得しました。(TMTOWTDIと呼ぶみたいですね。)
スクリプト言語関連の部分は調べた範囲ではなかったので、非常に
参考になりました。歴史的な経緯もあるのですね。
私は今までVBなどをやっていたので、Perlの規約が無いのには違和感を
感じますが、自分がなれている独自の規約で書いていこうと思います。
こうなると、コーディング規約よりも「こういう場合はこういう
コードを書くと便利だ」といった、Tips系のものを集めた方が
よさそうな気もしました。
例:POSTで受け取ったデータは、foreachを用いてハッシュに入れると良い。
この方法のメリットは~~。デメリットは~~。
詳しく考えがまとまったらまた相談します。ありがとうございました。
638:nobodyさん
07/12/30 20:27:22
>>637
use CGI;
my $q = new CGI;
print $q -> param( 'hoge' );
これよりも簡単に書けるなら使ってやる。
639:629
07/12/30 20:56:34
cgi.pmというのがあったんだ。知らなかった。
今まで読んでたサンプルソースにはそんなのが
なかったので知らずに全部コード自作してたよ。orz
640:nobodyさん
07/12/31 10:57:08
CGIの実行を制限する方法についての質問です。
例えば、2ちゃんねるは、別のサイトやローカルPCに保存したhtmlファイル
から「書き込む」をしてもエラーが出て受付けない仕様となっていますが、
こういった不正な入力を防ぐには、具体的にどういったコードを書いたら
よいのでしょうか。環境変数あたりで判断して行うのでしょうか。
641:nobodyさん
07/12/31 15:09:23
一番簡単な方法は環境変数だわな
if ($ENV{'HTTP_REFERER'} !~ m!^\Qhttp://俺のサーバ/cgiのパス\E!) {
# 外部から書くな氏ねハゲ池沼ボダ抱いて
}
みたいなかんじで
642:nobodyさん
07/12/31 15:48:47
先ほどスレ違いをしてしまったので
.cgi .plのスクリプトを使いたいのですが
どうすれば実行されるのですか?
クリックしても.exe .batみたいに動かないし…
やり方を教わったのですが 意味がわからないし…
教えてください お願いします
643:nobodyさん
07/12/31 15:51:39
>>642って何?いろんなところにコピペしてるのかな?
スレリンク(php板:443番)
644:640
07/12/31 19:09:34
>>641
レスありがとうございます。
書き込みをみて、$ENV{'HTTP_REFERER'}をキーワードで
検索をしてみたのですが、書き方は何種類かパターンが
あるのが分かりました。
$site = "http://俺のサーバ/cgiのパス";
if($ENV{'HTTP_REFERER'} !~ /$site/i)
if($ENV{'HTTP_REFERER'} !~ /^$site/)
この書き方においては、これが一番いいなという結論のような
ものはないのでしょうか。
改行コードの変換の仕方の解説で、こういったサイトを
読んだことがあるので、ちょっと不安になって聞いてみました。
URLリンク(www.din.or.jp)
645:638
08/01/02 18:35:41
>>639
まぁ、おいらも最初は自作してたんだし。
それに、自作したからこそ理解できた部分もあるだろう?
心配するな。みんな同じ道を歩んできた。
>>640
参照元は偽装できるから、セッション利用するのがいいかもね。
646:640
08/01/04 00:25:33
>>645
ヒントありがとうございます。調べてみます。
647:nobodyさん
08/01/04 14:22:05
確認ですが、CGI.pm のモジュールでは、FORMタグを書いた際に
改行されないようにするのが出来ないですよね?
具体的には、↓これをFORMタグ内に記述したりするものです。
style="float:right"
改行されるのが嫌ならば、FORMタグをTABLEタグの外で記述すれば
いい話ではありますが、デザインの都合上でそれが出来ないケースの話です。
648:nobodyさん
08/01/04 15:55:01
>>647
馬鹿じゃないの?
649:nobodyさん
08/01/04 15:56:37
かなり初級的な質問ですが、お願い致します。
Perlの場合は、配列と数値を引数で渡すことは出来ないのでしょうか。
例えば、以下のような感じで、@a を @n1 へ、そして、$i を $n2 で
受け取りたいのですが、$n2 値が表示されないのです。
sub FuncA(){
my( @n1, $n2 ) = @_;
print "@n1[0]\n";
print "@n1[1]\n";
print "@n1[2]\n";
print "$n2";
}
@a = ( "aaa", "bbb", "ccc");
$i = 3;
&FuncA( @a, 3 );
650:nobodyさん
08/01/04 16:19:57
リファレンス
651:649
08/01/04 16:42:27
>>650
レスありがとうございます。
以下のように書き直してみたら、ちゃんと3が表示されましたが、
こういう渡し方をするしかないという意味合いですよね?
sub FuncA(){
my( $n1, $n2 ) = @_;
print "$n1->[0]\n";
print "$n1->[1]\n";
print "$n1->[2]\n";
print "$n2";
}
@a = ( "aaa", "bbb", "ccc");
$i = 3;
&FuncA(\@a,3);
652:nobodyさん
08/01/04 17:41:36
他にもやりようあるけど
それがいちばん簡単じゃない?
653:649
08/01/04 20:24:38
>>652
他のやりようとはどんなものなのでしょうか?
キーワードのヒントでもいいのでお願いいたします。m(_ _)m
654:nobodyさん
08/01/04 20:38:02
すみません質問です。
「Perlは時代遅れだ。」という書き込みを読んでちょっと不安になったのですが、
Perlは本当に時代遅れなのでしょうか?
レンタルサーバのサービスでは、低価格でもPerlは確実にサポートしているので、
システムを組む時や、別のサーバにシステムを移項するのには非常に
やりやすいものであります。
COBOLがすたれたのは、Excelが出たからというのが一つの要因ですが、
私には、PerlにとってのExcelにあたるものが見当たりません。
なので、PerlはWebプログラミングとしては、まだまだ十分に
活用できる言語だと思っています。
もし、本当にPerlが時代遅れだとすると、PHPやJavaが特有で持っている機能が
必須となるわけですが、それらは具体的にどういう機能なのでしょうか。
よろしくお願い致します。
655:nobodyさん
08/01/04 22:34:46 zn9OWNdo
>>653
>>652じゃないけど
プロトタイプでできるよ
sub hoge ($@) {
my $foo = shift;
my @bar = @_;
}
hoge($foo,@bar);
たぶんこんな感じだと思う
普通に配列を後で渡せば受け取れるけどね。
$_[0]をshiftしちゃえば同じ事だと理解できればぉk
656:nobodyさん
08/01/04 22:39:39 zn9OWNdo
>>654
PHPに出来てPerlに出来ない事は無い。
たとえばPHPならDBとの連係が良いとか。
でも、web専門だったり。
javaは規模や対象から違う。
要は目指す所の違いだと思う。
Perlが汚いと思うならRubyやPythonをやれば良い
657:nobodyさん
08/01/05 01:11:38
アンチPerlの人は、時代遅れとか言って叩く。
658:654
08/01/05 02:15:25
>>656
>>657
ご回答ありがとうございます。
目指すところの違いがあるんですね。
アンチは具体例を出さずにすぐに一般化して
否定しますしね。
安心しました。ありがとうございます。
659:649
08/01/05 14:25:20
>>655
レスありがとうございます。プロトタイプ使えばよさそうですね。
こちらでいくらかプログラムを書いてみたのですが、配列は
必ずあとじゃないとダメみたいですね。
FuncA($@) これだと動くのですが、 FuncA(@$) これだとダメでした。
660:nobodyさん
08/01/05 18:18:51
質問です。
ナビゲーションバーが<li>タグで
フォームがテーブルタグで囲む形で
出力されるテンプレートエンジン。
これは今風ではないでしょうか?
出力されたHtmlを読むと可読性が良さそうなので
これで行こうと思っています。用途はテンプレート
エンジンの勉強がてら簡易wikiでも自作してみよう
と思ってます。どうぞよろしくお願い致しますm(__)m
661:nobodyさん
08/01/06 01:12:32 4ZDHflzT
ActivePerlにcpan Perl::Tidyしました
cygwinからActivePerlを使っているのですが、
$ perltidy
としてもcommand not found になります。
どうしたわけでしょう。
cygwin用のperltidyもあるときき、Cygwinからもcpan Perl::Tidyで入れてみましたが、
依然として
$ perltidy
command not found
です。アドバイスください。ヒントでもいいのでお願いします。
662:nobodyさん
08/01/06 05:36:20
昔俺もやった。確か bin にパスが
通ってないだけだったと思うけど。
663:nobodyさん
08/01/06 11:16:43
>>660
htmlタグの書き方について質問をしたいのであれば、
WebProg板ではなく、Web製作板の方へどうぞ
664:nobodyさん
08/01/06 13:57:41 4ZDHflzT
>>662
うまくいきました。ありがとうございます。
665:nobodyさん
08/01/06 15:48:56 srAiPMxF
関数に配列を渡そうとしているのですがうまくいきません。
呼び出し側
p_html_kotaivew_kekkawrite
($name, @status, $ks, @han1, @han2, @sta1, @sta2);
関数側
sub p_html_kotaivew_kekkawrite{
local($name, @status, $ks, @han1, @han2, @sta1, @sta2) = @_;
~~以下略
このような感じにやると、渡した$name以降の配列がすべて@statusに格納されてしまいます。
アドバイスお願いします
666:nobodyさん
08/01/06 16:21:21
リファレンス渡しにしろ
667:nobodyさん
08/01/06 16:47:29 XbpFSz7R
>>666
リファレンス渡しをしてみましたが、やはり@statusに以降の配列がすべて格納されてしまいます。
668:nobodyさん
08/01/06 17:03:52
>>667
p_html_kotaivew_kekkawrite
($name, \@status, $ks, \@han1, \@han2, \@sta1, \@sta2);
sub p_html_kotaivew_kekkawrite{
local $name = @_[0];
local @status = @{$_[1]};
local $ks = @_[2];
local @han1 = @{$_[3]};
local @han2 = @{$_[4]};
}
local @sta1 = @{$_[5]};
local @sta2 = @{$_[6]};
}
669:nobodyさん
08/01/06 17:04:32
>>668
ブレスミスすまそ
670:nobodyさん
08/01/06 17:26:06
>>669
なるほどそのように記述すればよろしいのですね。
本当にありがとうございました
671:nobodyさん
08/01/06 19:10:38
>>668ですでに回答は書いてあるけれど。。。
他の言語を先にやったものだと違和感を感じるものだが、perlの場合は、
関数は、スカラを先に書いて、配列を後に書いた方がいいというルールが
あるようだ。
672:nobodyさん
08/01/06 19:20:03
ま、スライスを理解すればそれが普通に・・
673:nobodyさん
08/01/06 19:21:39
すみません。質問です。
Perlで検索結果一覧を出すまでや、ファイルへ書き込みをした場合に
要した時間を計り、表示させたいのですが、どのような関数を
使用したらよろしいのでしょうか。
674:nobodyさん
08/01/06 19:50:13
>>673
my $t = time;
~ #計測したい処理
my $t2 = time;
my $sec = $2 - $1;
print "$sec秒だったです";
675:nobodyさん
08/01/06 19:51:41
訂正
× my $sec = $2 -$1;
○ my $sec = $t2 - $t1;
676:nobodyさん
08/01/06 19:58:47
>>674->>675
すばやい回答ありがとうございました。
677:nobodyさん
08/01/06 20:17:39
開こうとしているサイトのURLを入力し、危険なhtmlコードが
含まれているかをチェックするcgiサイトがありますが、
あれはどういう原理で動いているのでしょうか。
自分のサーバとは別の、他のサイトのhtmlファイルを読み込むという事は、
perlのopenでは出来ませんよね?
678:nobodyさん
08/01/06 20:38:06
Socket使うかLWPモジュール使うか
679:nobodyさん
08/01/06 22:14:19
初歩的な質問ですが、サイトを読んでいてもいまいち分からなかったので
こちらで質問させていただきます。
配列の1つの要素への処理の記述方法についてです。
以下のコードを記述しておいて、それに続くものです。
@a = ( "a1", "a2" , "a3" );
記述1:$a[1] = "b2";
記述2:@a[1] = "b2";
どちらの記述でも、思うように動作しているので、問題なさそうなのですが、
処理速度や、内部的な動きなどからいってこっちの記述が良いというものや、
多くの人のコーディングはこちらが多いから、などというものはあるの
でしょうか。
680:nobodyさん
08/01/06 22:15:19
おま・・・
681:nobodyさん
08/01/06 22:30:21
cgiをブラウザで開いてテストしたいのですが、
ブラウザで開こうとするとエディタが開いてしまいます。
どうすればいいですか?
682:nobodyさん
08/01/06 23:05:56
>>678
ありがとうございます。
さっそくぐぐって見ます。
683:nobodyさん
08/01/06 23:12:15
>>681
必要な環境整えてる?
Windowsならば、ActivePerlとApacheをいれて設定するとか、
設定したフォルダにcgiファイルをおいてるかとか。
684:nobodyさん
08/01/06 23:28:59
>>683
ApacheもActivePerlも入ってます。
ブラウザで開こうとするとエディタに実行結果が返ってきてるので
フォルダ等も大丈夫だと思います。
685:nobodyさん
08/01/06 23:31:53
エディタに実行結果返ってきてるからってフォルダが正しいとは限らない気が・・
686:nobodyさん
08/01/06 23:37:38
取り合えずやったことを書き出してみます。
#! c:/perl/bin/perl
print "Content-type: text/plain\n\n";
print "Hello Perl !";
を1-1cgiとしてhtdocs/rensyuに保存してブラウザでURLリンク(127.0.0.1)を使って実行すると
ファイルをダウンロードしてエディタが開いて実行結果が返ってきてるんですよね
687:nobodyさん
08/01/06 23:39:11
cgi-binに入れようよ・・・・
688:nobodyさん
08/01/06 23:43:00
>>686
httpd.conf の設定は確認してる?
参考にとほほのサイト紹介しておきます。
URLリンク(www.tohoho-web.com)
689:nobodyさん
08/01/06 23:49:36
text/plainだからじゃないの
690:nobodyさん
08/01/07 00:02:41
>>687
参考にしてる本がhtdocsだったんですよね
>>688
設定確認しましたが、大丈夫だと思います。
ちょっと試してみたんですが、
#! c:/perl/bin/perl
# CGIヘッダーの出力
print "Content-type: text/html\n\n";
# HTMLの出力
print "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\">\n";
print "<html>\n\n";
print "<head><title>Hello HTML</title></head>\n";
print "<body><p>こんにちは。これはHTML文書の例です。</p></body>\n";
print "</html>";
だとブラウザに出力されました
もうわけが分かりません
>>689
ソースはテキストどおりなんですよね
691:nobodyさん
08/01/07 00:23:35
何がわけわからんのだろう
ブラウザの設定でtext/plainはエディタで開くようになってるんでしょ
692:nobodyさん
08/01/07 00:41:55
自分もさっきApache入れたら同じ症状になって困ったが
explorerの関連付けはずしたら正常になった
693:nobodyさん
08/01/07 00:56:15
>>691
ブラウザの設定なんですかね?
ブラウザに関連付けしてみたらブラクラみたいになったんですが、
どういう設定をいじればいいんですか?
>>692
.cgiへの関連付けを削除してみたら
ブラウザから開こうとしたら
このファイルを保存しますか、または開くためのプログラムをオンラインで検索しますか?と
でてきました。
よければ現状、何に関連付けされてるか教えてもらえないですか?
694:nobodyさん
08/01/07 01:06:33
>>690
どうしてもhtdocs内で実行させたいなら
<Directory ******/htdocs>
Options ExecCGI
</Directory>
みたいにExecCGI追加して
AddHandler cgi-script .cgi
みたいに設定ファイル(httpd.conf)を書き換えて再起動して味噌
695:nobodyさん
08/01/07 01:14:15
>>693
まったく関連付けなし。
ってか>>688のサイトにあった、>>694の設定をしたら
関連付けしても普通に動くようになったぞ
696:nobodyさん
08/01/07 01:17:32
>>693
関連付けはいじらずにtext/htmlで書き出せばどうだい
あと関連付けするのはcgiじゃなくてtxtだと思う
697:nobodyさん
08/01/07 01:39:40
<Directory "C:/ApacheGroup/Apache2/htdocs">
Options +ExecCGI
AddHandler cgi-script .cgi
</Directory>
を付け加えてもダメでした・・・
エディタは開かなくなったんですが、一瞬プロンプトの画面が見えたと思ったら消えて、
ブラウザにはWeb ページへのナビゲーションは取り消されましたってでてしまいます
>>696
htmlで書き出すとブラウザにでるんですけど、テキストがplaneで出力できてるんで自分の設定がなにかおかしいところがあると思うんですよ
だからそれを解決しとかないと・・・と思うんですよ。
698:nobodyさん
08/01/07 09:36:39
>>697
もう一度よ~~~く見るんだ。
”Content-type: text/plane” じゃあ、
そりゃ「そんな mimetype わしゃ知りません」ってIEがおっしゃるよ。
699:nobodyさん
08/01/07 09:53:12
初心者はapacheじゃなくてanhttpd使った方がいいぞ。
たぶんapacheの設定で失敗してるはず。
700:nobodyさん
08/01/08 17:54:44
【質問】
レンタルサーバでCGIでプログラムを動かしているのですが、
処理を行う際のサーバの負荷が気になるので、>>674-675に
書いてある方法を使用し、常に処理にかかった時間を
表示するようにしています。
ある関数を動かした際、普段の処理時間は1~2秒なのですが、
ネットが異常に遅い時に同じ処理をした時、10秒ほどかかりました。
この処理にはhtml出力が入っているのですが、CGIのhtml出力は、
CGIで処理した結果すべてをまとめてクライアントPCのブラウザへ
流しているものだと思っていましたが、仕組み的にはそうではない
ということなのでしょうか。
それとも、私の使用している計測方法が誤っているのでしょうか。
何かこういうのを調べてみろ、みたいなヒントでも良いので
よろしくお願いします。
701:nobodyさん
08/01/08 19:20:06 b1r9jep2
perl -Mでシンボルをインポートするにはどうしたらいいですか。
perldocしましたが見つかりませんでした。
702:nobodyさん
08/01/08 19:21:24
>>700
検索→[Perl フラッシュ]
703:nobodyさん
08/01/08 20:25:03
>>700
times関数ってのがあるよ
704:700
08/01/09 00:13:41
>>702
>>703
ありがとうございます。
早速調べてみます。
705:701
08/01/09 06:38:37 g0MHwkoX
>>701お願いいたします。
706:nobodyさん
08/01/09 07:18:12
>>700
時間計測をやめて少しでも処理を減らすが吉
707:nobodyさん
08/01/09 23:13:03
現在、データを複数のテキストファイルに書き込む処理を
するかたちでプログラムを組んでいます。
この複数のファイルは、丁度テーブルに見立てた設計に
しており、主キーで連携を取っています。
しかし、データがテキストファイルであるため、データの
取り扱いに不便を感じる場合もあります。
ソートをする際、すべてのデータを変数に読み込んだり
出来ない場合は、ソートをしながら別のファイルに
書き込むといった感じです。
こういう、データを記録するのに丁度良いモジュールという
ものはないのでしょうか??
ま、データベースを使えばという話になるのでしょうが、
レンタルサーバなどの環境でそこまで準備が出来ない場合の話です。
708:nobodyさん
08/01/09 23:25:07
>>707
無料レンサバでもDB使えるとこ結構ある。
709:nobodyさん
08/01/10 02:06:12
# フォームデータの取得
if($ENV{'REQUEST_METHOD'} eq 'POST') {
read(STDIN, $query, $ENV{'CONTENT_LENGTH'});
}
else {
$query = $ENV{'QUERY_STRING'};
}
ここまではエラーなく処理できてるんですが
# フォームデータの復元
foreach $pair (split(/&/, $query)) {
($key, $value) = split(/=/, $pair);
コレを入れるとエラーがでてしまうんですが、どこが悪いんですかね?
710:nobodyさん
08/01/10 02:09:13 YdP4IGcZ
閉じ中カッコがない
711:nobodyさん
08/01/10 19:24:04 Ea25ozf2
引数を作るにはどうしたらいいんですか?
index.cgi?----
みたいな感じのです。
712:nobodyさん
08/01/10 19:44:52
>>707
つ DBD::CSV
713:nobodyさん
08/01/10 19:46:08
>>711
つ[ URLリンク(www.futomi.com) ]
714:nobodyさん
08/01/10 21:21:19 YdP4IGcZ
5.10にしないと入れられないモジュールを入れるにはどうしたらいいですか
5.8.8からcpanコマンドで入らないです
715:nobodyさん
08/01/11 02:44:48
>>712
make
make install
716:nobodyさん
08/01/11 18:21:27 PVnoyiBC
C++,JAVAを児戯並みに使えるパーラー見習いですが、
最近パールの良さがわかってきました
さてWindows上のGUIアプリケーションを作るのには向いてますか?
モジュールはちらほら見かけましたし実際作ってみましたが、やり方が悪いのかうまくいきません
どうも腑に落ちません
実際作ってみてどうですか?
717:nobodyさん
08/01/11 21:00:50
Tkはモジュールの近い方覚えれば何でも作れるけど、ローカルサーバー立ててCGIで済ましちゃうことが多い。
Win32はシラネ
718:nobodyさん
08/01/11 22:16:12
>>716
WindowsのGUIアプリならば、VBなどがあるのにあえてPerlを
選ぶ理由は何?
企業が使う業務システムではVBが圧倒的に多い理由を考えると、
と思うけれど。
719:nobodyさん
08/01/12 03:37:57
>>716
Perlのよさがわかってないと思います
720:nobodyさん
08/01/12 03:49:51
Rubyまじお勧め
721:nobodyさん
08/01/12 14:37:13
Rubyは1.8でオワタ
722:nobodyさん
08/01/12 16:29:39
Perlではソースコードの圧縮(空白やコメント除去)があまり行われないのはなぜですか?
723:nobodyさん
08/01/12 17:15:04
スレリンク(php板)l50
ここでソースコードの圧縮やってるよ
724:nobodyさん
08/01/12 20:57:02
ティムトゥディだからさ
725:nobodyさん
08/01/13 01:39:09 EtYE9LoZ
CPANモジュール名のリストがあるときに、それらを自動でインストールするには
どうしたらいいですか?
726:nobodyさん
08/01/13 08:37:57
Windowsならバッチファイルにする
Linuxはしらね
727:nobodyさん
08/01/13 12:51:10
パール六は全然違うとしきりに言う同僚がいて不安感が煽られています
当方パール入門したでして…覚えたばかりの知識が海のもずくになると思うと…
しかし実際のところあと3年はPerl5の知識が使えるんですかね?
そのPerl6とやらがいつ出るかも知らないので(公式サイトを検索しまくっても見つからなかった
私はバカですか?)何とも言えない状況です
あと移行はいきなりなんでしょうか、5.12を過ぎて6になった途端に様変わりしちゃったらすごく困ります^-^;
728:nobodyさん
08/01/13 13:46:17
デフォでuse strictとか、正規表現の記述が変わるとか、ソレぐらいしかしらね。
729:nobodyさん
08/01/13 14:45:25
変更点を把握すれば何も問題ないだろ
730:nobodyさん
08/01/13 16:08:40
Rubyの仕様変更に比べればどうってことない
731:nobodyさん
08/01/13 17:03:12
>>727
ま、こういうのはどの言語でもふつうにあることなんじゃないかな。
そういうのについてこれないのは、技術者として終わりみたいな。
今でも N88BASIC とか COBOL とかで組んでる人っていないだろ?
> しかし実際のところあと3年はPerl5の知識が使えるんですかね?
> あと移行はいきなりなんでしょうか
これは、ケースバイケースなのではっきりとはいえない。
例えば、過去の資産を活かしたシステムを構築する場合は、Perl5で
構築するだろうし。
あと、安定性も考えて、いきなり新しくはしないケースもある。
システムは、早く作れることも大事だけど、安定して動くことが
大事なのだから。
個人的に思うのだけど、大幅な仕様変更をするのに、いつまでも
前の名前を使い続けるから紛らわしくなるんじゃないかなと思う。
Perl は 5 で完成形であり、それで終わり。役割は果たした。
そして、新しい言語が出る。とした方が分かりやすいと思うのだが。
732:nobodyさん
08/01/13 17:13:18
安定性を無視して、やたらと新機能を追加させることに
固執している言語があるが、あれよりマシだと思う。
大幅に仕様変更していて、ユーザがついてこなかったから、
やっぱり戻したとか。
仕様変更をしすぎて、別の言語と非常に似ていて
その存在自体が意味無いものに見えるとか。
733:nobodyさん
08/01/13 20:48:32
>>732
PHPのことか。
zendはphp4のサポートを終わらせて無理やり5に移行させたがっているが、4の開発メンバーは今は6を作ってるらしいからそれ待ちだ。
734:nobodyさん
08/01/14 03:03:11
なんでPHPやねんw
735:nobodyさん
08/01/14 03:20:58 h4dQ9PIo
日本のPHPの人気ぶりは異常
海外サイトではPHPなんて全く持ち上げられてない
んで、何がいいたかったかというとPerl最高
736:nobodyさん
08/01/14 09:05:00
ということにしたいんですね
737:nobodyさん
08/01/14 09:50:52
日本のウォシュレットの人気ぶりは異常
海外サイトではウォシュレットなんて全く持ち上げられてない
んで、何がいいたかったかというと温熱最高
738:nobodyさん
08/01/14 12:36:17
PHPのプロジェクトに放り込まれて、担当モジュール作ったけど、他のモジュールが遅れてたので、暇つぶしにPerlで全部作ったら怒られた。
Rubyのほうが良かったですか?って聞いたら余計に怒られた。
なんで?
739:nobodyさん
08/01/14 13:25:17
KY社員は死ね
740:nobodyさん
08/01/14 14:50:02
レンタルサーバにて、Perlを使ってPostgreSQLに接続し、
その内容をhtml出力するところまでやっと出来たくらいの知識の者です。
そこで、普段のバックアップはどういう仕組みでやるとよいのか
迷いましたので、こちらで質問してみました。
私としては、Perlで、データベースのテーブルとテキストファイルと
をコンバートするプログラムを自作し、定期的に手動(FTPソフトを
使うなどして)でローカルにファイルを保存しておく方法くらいしか
思いつきませんでした。しかし、それだと普段の作業に非常に
手間がかかってしまいます。
一般的に、レンタルサーバでPerl+PostgeSQLのWebシステムの
バックアップは、このような方法を取ることが多い、みたいなものは
あるのでしょうか。よろしくお願いします。
741:nobodyさん
08/01/14 18:56:43
SSHでpg_dump
742:nobodyさん
08/01/14 19:46:06
>>741
Postgresqlの定番のバックアップの方法ですよね。
それしかないのでしょうかね。
743:nobodyさん
08/01/16 10:57:33 Z4nycbhz
パールでWebプログラミングしようかと思っております。
が、セキュリティーが不安です。
レンサバでやるにせよ、セキュリティーに穴があって攻撃されると
いろんなトラブルがあるんでしょ?
当方、素人の趣味でやってるプログラミング歴まだ1年のプログラマーなもので
そのあたりを実際に企業で開発した経験が当然なく不安です。
セキュリティーやネットワークに関する勉強をやるのに手始めとしてオススメのメソッドありますか?
あまりパールと関係なくてごめんなさい。
パールの本でセキュリティーやネットワーク関係のものって無いですよね。
LWP本はありましたが、
もっと広範にネットワーク関係のスキルを強化したいです。パケット解析とか。
まあ、それはそうと他のWeb系を始めようとするパーラーはそういうセキュリティーやネットワーク関係の不安ないんでしょうか?
皆さん気軽に始めていらっしゃる方が多くよほど知識がおありなのだなあと斜にかまえて静観しています。
744:nobodyさん
08/01/16 17:37:17
どこを縦読み?
745:nobodyさん
08/01/16 17:58:11
>>743
Perlからはなれて、パケットフィルタリングとか、TCP/IPの
詳細について調べていった方がいいと思う。
セキュリティも個人情報を扱っているとか外に洩れるとやばいものは
物理的なレベルで外部に公開せずに社内LANでのみとかにするわけで、
そういうものはPerlの設定やコーディングでなんとかするものではない。
746:nobodyさん
08/01/16 18:07:35
>>743
最近は、ASP(アプリケーションサービスプロバイダ)とかあるので、
それを利用した方がいいと思う。プログラムを組むのは辞めて。
それだと、必要な機能だけを月に数千円~数万円で必要な期間だけ
利用できる。
747:nobodyさん
08/01/16 20:49:06
ごめん、拡張子aspだけど、中身Perlwwwwww
748:nobodyさん
08/01/16 22:39:49
>>747 あるあるwww
749:nobodyさん
08/01/18 20:13:52
すみません。質問です。
不正な入力を防ぐ為に、いろいろなことを考えているのですが、
一人で考えていると、漏れがありそうな気がして怖くなりました。
何か、こう言うことを考えてコーディングしたほうがいいという
ガイドラインのようなものはあるのでしょうか。
例えば、以下のような感じです。
1.変なアドレスからcgiを実行しようとしていたらはじく
2.textareaタグの記述は○文字まで
3.同一IPアドレスからの連投を防ぐ
750:nobodyさん
08/01/18 22:45:45
パイプで別プロセスを作った場合ですが、
特殊サブルーチンENDはそれぞれが終了した場合に常に行われる。
これを防ぐ手立てはないでですか?
751:nobodyさん
08/01/19 10:32:13
>>750です。自己解決しま。
752:nobodyさん
08/01/19 16:56:00 FZ1FRzKn
Perl使用者がよく使うライブラリ、モジュールなどを紹介した
投票形式のサイトを以前見かけたのですが、思い出せません。
どなたかご存じないでしょうか?
753:752
08/01/19 17:21:59
見つかりました
URLリンク(mfpm.blogdb.jp)
お騒がせしました
754:nobodyさん
08/01/23 16:33:04 LaH3xf3C
こんにちは。
755:helpです
08/01/23 17:26:00 AM6Aqa52
すいません。下記のようにwhile→foreach→whileと入れ子構造で
繰り返し単語リストにある用語を文書から検索したいのですが、
上手く動きません。Helpお願いします。
$word がwhile (<F>) 以下の$wordに上手く渡せません。
open(F4, $dic_file) || die "$dic_fileをオープンできません:$!\n";
while (<F4>){
@words = split(/\n/, $_);
foreach $word (@words){
while (<F>) {
print "$_";
#「$word」という単語のみにマッチさせる
756:nobodyさん
08/01/23 18:55:07
while (<F4>){
@words = split(/\n/, $_);
wwwwwwwwwwwwwwwwwwwwwwwwwwww
757:nobodyさん
08/01/23 19:27:30
$/ = '';
758:755
08/01/23 22:55:33
つまり
1.用語ファイル (単語が1行に一つずつ入ってる用語。500個位)
2.文書ファイル (文書ファイル。単純なテキスト)
3.2の文書ファイルを、1の用語ファイルの単語を一つずつ
whileを使って検索します。
早めに必要なのでどなたか教えてください。>756さん笑ってないで。
759:nobodyさん
08/01/24 00:24:58
>>755
Perlでは(というか…)改行文字でレコードが分割されているので
@words = split(/\n/, $_); # <-はありえない
そもそも、こんなループを組むこと自体どうかとも思うが
my @words = [];
while (my $word = <F4>) {
push @words, $word; # $_でもいいけど
}
ファイルをループ先頭でseekするのもありかな、あとはお好きにドゾー。
760:nobodyさん
08/01/24 07:38:32
>>755
>>759に書いてあるように改行文字で分割される、
事前に>>757を書いておくと、以降$/に代入された文字で分割されるようになる。
ここでは空文字列なので分割しなくなる。
my $txt
{
local $/;
open(F,$txt_file) or die "$txt_fileをオープンできません。";
$txt = <F>;
}
open(F4,$dic_file) || die "$dic_fileをオープンできません。";
foreach $word (<F4>) {
$word =~ s/\n$/s;
$txt =~ s/\Q$word\E//sg #例: マッチ部分削除
}
|´д`)ノ笑ってすまんね
761:755
08/01/24 09:47:56 TN487IBF
好きよ、好きよ、好きよ >760さん。
762:nobodyさん
08/01/24 10:15:27
検索するといっても、どういう結果が欲しいわけ?
ファイル2の行数までほしいとか、ファイル1のwordのリストだけでいいとか、
件数までいるとか。
763:nobodyさん
08/01/24 23:47:07
すいません。Perlからword, excelファイルをいじることってできます?
マクロの言語(VB?)分からないので・・・。
764:nobodyさん
08/01/25 03:03:45
Win32::OLE
765:nobodyさん
08/01/25 08:09:41
>>763
Perlそのものがその程度の知識であれば、VBAを勉強した方が早いと思う。
一つバージョンが違っただけで途中で動かなくなるとかしょっちゅうだし。
766:nobodyさん
08/01/25 15:27:50
VBAでわからないなら Perlでも無理だと思う。
767:nobodyさん
08/01/25 18:34:06
VBとVBAの違いが分かっていない時点で、
プログラムそのものをあきらめた方がいいと思ったりw
768:nobodyさん
08/01/26 00:07:47
VBAだけでもVB組めるんだが・・・釣られた?
769:nobodyさん
08/01/26 18:10:44
cgiファイルにアクセスして来た内容(GETやPOSTのデータなど)を
ログに保存する場合、すべて独自でプログラミングするしかないのでしょうか。
自分で作りはしたのですが、こういう状況は頻繁にあるので、
モジュールがあるのでは、と思ったりしたのですが。
770:nobodyさん
08/01/26 18:32:06
なぜ、そう思うならドキュメントを読もうと思わないのだろうか?
URLリンク(search.cpan.org)
771:nobodyさん
08/01/27 01:37:41
>>770
レスありがとうございます。
ドキュメント読んでやってみます。m(_ _)m
772:nobodyさん
08/01/27 12:37:53 TNan8zlF
日本でperlの良いサイトが見当たりません。
perlの英語サイトでお勧めありますか?
773:nobodyさん
08/01/27 13:13:35
きみの言う”良いサイト”を説明しないことには・・
774:nobodyさん
08/01/27 13:32:38
perlはネット上では情報量は多い方だぞ。
一方で某社の言語のは情報量は少なく、高い公式文書とかを
買うしかなかったりするし、簡潔すぎて分かりにくい説明を
一生懸命読む羽目にもなる。
775:nobodyさん
08/01/27 19:07:45 TNan8zlF
>>773
良いサイトを教えて欲しいのではなくて良いサイトが日本ではないと思うので
海外のお勧めサイトを教えて欲しいんです。
切実な要求ではなくて、ハックな皆さんが常日頃どんな英語サイトを見ているかを気軽に尋ねたつもりなんですが。
776:nobodyさん
08/01/27 19:26:24 TNan8zlF
>>774
分かる気がします。
定番ですがperl mongerは良く見ますが、かなり突っ込んだトピックでも有益な情報がたくさん引っかかることがあったりしますね。
例えば、insideout objectはこのサイトで勉強しました。
あとGoogleの最近更新されたページ検索とはてブとCPANサーチを使えば目的のページが見つかることが多いですね。
皆さんはどうやってperl情報を検索してますか?
お勧めあったら教えてください。
で、上で質問したのは、RSSで読みたくなったりブラウザーのお気に入りに入れておきたくなるような良いサイトが
なかなか日本のperl関係では少ないかなということです。
まあそのあたり実際どう思います?
個人の主観なので、まあそのあたりは適当にスルーしてくださっても結構です。