【Perl】初心者コーナー Part18
レス数が1000を超えています。これ以上書き込みはできません。
0001nobodyさん
02/11/20 22:04ID:???1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
CGIだけど、なんか質問ある? Part 8
http://pc.2ch.net/test/read.cgi/php/1032704121/
参考書籍の話題は【Perl,CGI】参考書籍 第三版
http://pc.2ch.net/test/read.cgi/php/1030209573/
その他の雑多な話題は、【CGIに依存しないPerlの話題一般/Part2】
http://pc.2ch.net/test/read.cgi/php/1030548610/
スクリプトの改造依頼は 【 スクリプト改造工房 PART 5 】
http://pc.2ch.net/test/read.cgi/php/1028193595/
過去ログ、その他の役立ち情報は>>2-10あたりを見よう。
0002nobodyさん
02/11/20 22:05ID:???Part1 http://tako.2ch.net/test/read.cgi?bbs=perl&key=957208980 参照不能
DAT: http://tako.2ch.net/perl/dat/957208980.dat
Part2 http://tako.2ch.net/test/read.cgi?bbs=perl&key=971817087 参照不能
DAT: http://tako.2ch.net/perl/dat/971817087.dat
Part3 http://tako.2ch.net/test/read.cgi?bbs=perl&key=979894521 参照不能
DAT: http://tako.2ch.net/perl/dat/979894521.dat
Part4 http://tako.2ch.net/test/read.cgi?bbs=perl&key=984430156 参照不能
DAT: http://tako.2ch.net/perl/dat/979894521.dat
Part5 http://pc.2ch.net/php/kako/988/988728069.html
Part6 http://pc.2ch.net/php/kako/996/996075607.html
Part7 http://pc.2ch.net/php/kako/1000/10002/1000267444.html
Part8 http://pc.2ch.net/php/kako/1003/10039/1003900311.html
Part9 http://pc.2ch.net/php/kako/1009/10095/1009549309.html
Part10 http://pc.2ch.net/php/kako/1014/10145/1014556702.html
Part11 http://pc.2ch.net/php/kako/1017/10172/1017201229.html
Part12 http://pc.2ch.net/php/kako/1019/10199/1019917048.html
Part13 http://pc.2ch.net/php/kako/1022/10227/1022731565.html
Part14 知らん
Part15 http://pc.2ch.net/test/read.cgi/php/1028816385/
Part16 http://pc.2ch.net/test/read.cgi/php/1032070299/
part17 http://pc.2ch.net/test/read.cgi/php/1034583844/
[ひまぢん氏のミラー]
Part1 http://www.angelfire.com/ak5/2ch-web-program/kako/957208980.html
Part2 http://www.angelfire.com/ak5/2ch-web-program/kako/971817087.html
Part3 http://www.angelfire.com/ak5/2ch-web-program/kako/979894521.html
Part4 http://www.angelfire.com/ak5/2ch-web-program/kako/984430156.html
Part5 http://www.angelfire.com/ak5/2ch-web-program/kako/988728069.html
0003nobodyさん
02/11/20 22:07ID:???とすると表示されますが、
perl -F, -ane 'print @F[4];' kyoto.html.csv
……
perl -F, -ane 'print @F[10];' kyoto.html.csv
は表示されません。perlって●を認識するのでしょうか?
0004nobodyさん <sage>
02/11/20 22:29ID:???●って何よ。
0006前スレ991
02/11/20 22:46ID:/E1Vbwszあと、いきなり出て来て1000取ってすいません・・・。
00087
02/11/21 00:20ID:???0009nobodyさん
02/11/21 00:42ID:???LWP::Simpleモジュールが入っているなら
perldoc lwpcookして出てくる文書読んでみるとやり方出てるよ。
use LWP::Simple;
getstore "http//:www.yahoo.co.jp", "yahoo.html";
みたいな感じ。
0010nobodyさん
02/11/21 00:49ID:izFT1sBO┃ ┃┏━┛ ┗┫┃┃ ┃ ┃┏━┓┃┃┃
┗━┳━ ┃┃ ┗╋┛┏━━━━┓┗━┛┃ ┃┃┃┃
┃ ┃┗━┓ ┏━┛ ┃ ┃ ┃ ┃┃┃┃
┃ ┏━┛┏┓┃ ┃┏┓ ┗━━━━┛┏━━┛ ┃┗┻┛
、 ┃ ┃ ┃┃┃ ┃┃┃ .‘; ゜ ・ ┃ ┃
、 ┃ ┃ ┃┃┃ ┃┃┃ .‘; ゜ ・ ┃ ┃┏┳┓
┗━┛ ” ;┗┛┗━┛┗┛ ノ ┗━━━━┛┗┻┛
∧_∧ ヽ(。、::。.::・'゜・' )〆 .' ,
( ゚∀゚)__ ( 。、 ::。 ).。:: θ) .∴ '
r'⌒ ̄ ̄ ̄ ̄ (。、::。.::・'゜。'゜ )ゝ| ・,‘
|  ̄ ̄ ̄ ̄ ) ヘ( 。、 ::。 )ヽ | | ←>>1
\ │ ’ Υ γ | |
ヽ │ ⊂.J| ) し`⊃ ヾ
( ヽ | || |
\ \\ | |.| |
\ ヽ ヽ ( 丶( \
> ノ ノ \ \\ \
/ /| / ) \. ) \
/ // / (_/ .(_/
/__// /__
〈_ __〉 _ __〉
0011nobodyさん
02/11/21 18:30ID:La3b0kHh例:$#hogehoge
0012nobodyさん
02/11/21 18:52ID:???使えない。
$#hoge は配列 @hoge の最後のインデックス値。
Perl で変数名に使えるのは英数字とアンダーバー。
ただし $ に続く一文字目が数字の場合、
変数名はすべて数字でなくてはならない。
で、あってる?
0015nobodyさん
02/11/22 16:14ID:UpQRYD34"01","09","01","21"
"01090121"
としたいのです。各値は実は日付で整数演算で日付の
更新を行っていますが、更新されたあとの数字を繋げると
"19121"
のように整数2桁にはなりません。
どうしたらよいのでしょうか?
0016nobodyさん
02/11/22 16:40ID:???my @ctg_ids = ();
while (length($ctg_id_) > 1) {
push (@ctg_ids,$ctg_id_);
chop $ctg_id_;
}
------------
$CTG_ID = 'MK0010'
↓
@ctg_ids = (MK0010,MK001,MK00,MK0,MK)
というコードを一行にしてください。
0018nobodyさん
02/11/22 17:11ID:???配列だとしたら、
@array = ("01","09","01","21");
join('', @array);
それ以外なら sprintf で %02d のフォーマットで出力すれば良。
0019nobodyさん
02/11/22 17:28ID:UwQQAcbpわかっているのは現在の西暦と月($nowYear、$nowMon)で、
ユーザーから与えられるのはページ番号($pg)とします。
1ページに 3ヶ月まとめて表示します。
未来については問題ないのですが、過去を表示させようとすると
「/12」でやっているのでマイナス値が出せません。
もっと効率のよい式はないでしょうか?
-------------------------
$nowYear = 2002;
$nowMon = 11;
$pg = 0;
foreach $i ( 0 .. 2 ){
$mon = ($nowMon + $i + $pg * 3) % 12 + 1;
$year = $nowYear + int((($nowMon + $i) + ($pg * 3) -1) / 12);
print "$year / $mon\n";
}
-------------------------
002015
02/11/22 19:48ID:UpQRYD34ありがとう。解決しました。
0021nobodyさん
02/11/22 20:55ID:???my $ctg_id_ = $CTG_ID; my @ctg_ids = (); while (length($ctg_id_) > 1) { push (@ctg_ids,$ctg_id_); chop $ctg_id_; } ------------ $CTG_ID = 'MK0010' ↓ @ctg_ids = (MK0010,MK001,MK00,MK0,MK)
0022rubyist@カラアゲうまうま
02/11/22 20:58ID:???002323
02/11/22 23:11ID:???@data = (taro ,Jiro, Sabro);
@temp = ('$b');
foreach $b(@data){
foreach $c(@temp){
$c =~s/\$(\w+)/${$1}/g;
print $c;
}
}
とやって、ほんとは「taroJiroSabro」と表示したいんですが
「tarotarotaro」となってしまいます。
どうすればいいのでしょう
002423
02/11/22 23:13ID:???@data = (taro ,Jiro, Sabro);
@temp = ('$b');
foreach $b(@data){
foreach $c(@temp){
$c =~s/\$(\w+)/${$1}/g;
print $c;
}
}
とやって、ほんとは「taroJiroSabro」と表示したいんですが
「tarotarotaro」となってしまいます。
どうすればいいのでしょう
0025nobodyさん
02/11/23 00:16ID:TlwVHlkv0027nobodyさん
02/11/23 00:56ID:???$c =~s/\$(\w+)/${$1}/g; は止めて
print eval $c;
なら「taroJiroSabro」になりました。
でもこれって正しいやり方なんですかね
0028nobodyさん
02/11/23 05:29ID:???だとxxx.txtは自動生成されないので直前に
open(F, "xxx.txt");
を入れようとしましたけど、その場合直後でcloseすべきですか?
となるとflockも必要ですか?
ていうか煩雑なのでもっとスマートなやり方はないですか?
003019
02/11/23 10:38ID:???ttp://www.din.or.jp/~ohzaki/perl.htm#Date2WDay
の方法で use Time::Local; することにしました。
003128
02/11/23 13:53ID:???+>>なんて初めて見ますた。
flockを使う上で一番安全ぽいと思われたのでわざわざ+<を使っていたわけですが
+>>てのは具体的にどんな動作するんでしょか。
0032nobodyさん
02/11/23 21:45ID:???CGIで、フォームのデータを%inにしまってあって、
それをJcodeモジュールで片っ端からコード変換したいのですが
全部のキーに対して変換をかけるとエラー吐かれますた…
んで、次にgetcodeでsjis、euc、jisの時のみ変換をかけるようにしたのですが
フォームの中にラジヲボタンとかがあり、配列のリファレンスに対して
getcodeしようとするとエラーを吐かれてしまい、困ってます
全部変換しようとする>エラー
日本語だけ変換>コードをゲトしる>エラー
これ以上おヴァカな自分には対処方が思いつきません、どうか御教授くださいませ…
0033rubyist@カラアゲうまうま
02/11/23 21:49ID:???0034nobodyさん
02/11/23 22:35ID:???ちょっと自分で検証ミスが有ったようで、なんかgetcodeはできるぽでした…
その後の処理が上手くいってないのかもです
[Jcode.pm:575:die] Not a SCALAR reference at C:/Perl/site/lib/Jcode.pm line 575, <DATA> line 1579.
上記のエラーが出てました…
ラジヲボタンのフォームとか場合によってリファレンスだったり普通の値だったりしてわけわかんない・゚・(ノД`)・゚・
0035nobodyさん
02/11/23 22:54ID:zBuUfsU+if (-e $a)
なんですが
ファイルをOpenするとかなりパフォーマンスは悪くなりますよね?
これも悪くなるのでしょうか?
0038nobodyさん
02/11/24 15:36ID:???>>36
cgi-lib.plかなんかを使っているのではないかと想像してみる。
まあ、自分のやったことを全部言わない>>32がアレなんだが。
0039nobodyさん
02/11/24 15:57ID:???上記の場合は、どちらを使うのが普通なのでしょうか?
用途が違うからなんとも…。
例えば、変数の中身が'0'だと前者は偽、後者は真になるよ。
004223
02/11/25 00:00ID:???自己レスです。
@data = (taro ,Jiro, Sabro);
@temp = ("\$b", $b ,$b);
foreach $b(@data){
foreach $c(@temp){
$d = $c;
$d =~s/\$(\w+)/${$1}/g;
print $d;
}
}
こうすれば、ちゃんとtaroJiroSabroになりました。
0043.32
02/11/25 17:33ID:???>>36
すみません、勉強不足なようでわかりません
>>38
CGI::Lite使ってまつ
>>41
Σ(´Д`;)そんな関数があたのか…
いろいろヒントいただきましたので、がんがってみます、ありがとうございました
004438
02/11/26 00:49ID:???CGI::Lite の使い方を最初から勉強しなおせ。
悪いことは言わないからさ。
そもそも、「%inにフォームのデータをしまって」あるのがわかっているなら、
いつ%inに格納したのかわかるだろうに。
0045nobodyさん
02/11/26 16:45ID:Y+XqV5xbこれからやるならDBは何を使えばいいんでしょうか。
他のスレ読むと、PostgresSQL+Pg.pmよりもDBIを使えとかいろいろ書いてありましたが
初めてなのでよくわからないです。実際はPg.pmというのを使ってる人が多いみたいですし。
いい方向へ誘導してください。
追伸:InterBaseってどうなのですか?
0046nobodyさん
02/11/26 17:25ID:???0048nobodyさん
02/11/26 21:48ID:???bashのsourceコマンドみたいなものってないのでしょうか?
0050nobodyさん
02/11/26 22:24ID:kEoHEjhGここみたいに、Enterキー押した時は認証しないのに
loginボタンをクリックした時は何故かCGIに認証しに行きます。
Enterキー押した時も認証しに行くようにするには
どうすればいいんでしょうか?
005250
02/11/26 22:33ID:kEoHEjhGボタンの値を見ておいて・・・というとどういう事ですか?
フォームタグではなくてCGI側の問題ですか?
0054nobodyさん
02/11/26 22:54ID:???005550
02/11/26 22:54ID:kEoHEjhGた、たしかにスペルは間違ってますが、、、
でもクリックだと認証に飛びますけどね・・
0056nobodyさん
02/11/26 23:03ID:???それはブラウザ依存だ。
IEの場合、formタグのaction属性がない場合、action属性を自分自身に設定する。
だから、クリックだと自分自身に飛ぶ。
0057nobodyさん
02/11/26 23:07ID:???クリックすると、type="submit" のnameとvalueが渡される。Enterキーだと
それが渡されない。
だから、type="password" のほうのnameとvalueだけ見て処理しろと>>51は
言っている。
005850
02/11/26 23:08ID:kEoHEjhGなるほど、分かりました。
どうもすみません
0059nobodyさん
02/11/26 23:11ID:???Perlでデータベースを扱おうと思ったら、その仲立ちをするモジュールを使うのが楽でいい。
Pg.pmはPostgreSQLとの接続専用のモジュール。
だが、DBI.pmとPostgreSQL用のDBDの組み合わせでも同じことができる。
(細かいやり方は違うだろうが)
同じことをするのに二つのモジュールを使うのは無駄だと思うかも知れないが、
こうしておくと、将来別のデータベースを使わなければならなくなった時に、
DBDを差し替えて、スクリプトをちょっと(多分一行)だけ変更すれば、
そのまま動くようになると言う利点がある。
これからの生涯でずっとPostgreSQLしか使わないと言うのであれば構わないが、
そうでなければ、DBI.pmを使うことを勧める。
ま、どっちを選ぼうが自由なんだがな。
0060nobodyさん
02/11/26 23:28ID:???0061nobodyさん
02/11/27 00:38ID:???http://palmperl.sourceforge.net/
006260
02/11/27 01:46ID:???全然順調じゃないじゃん
ぇゃ、ほんと有り難うございますた、なんかスゲェ質素なページでしたが(藁
検索しても引っかからなかったんですけどねぇ…
完成を心待ちにしときます
0063nobodyさん
02/11/27 09:27ID:???か
perl -F" " -ane 'if($F[1] >=130 && $F[1] <=170 && $F[2] >=30 && $F[2] <=60) {print $_;} tmp1 > $ofile
か
perl -F" " -i.ofile -ane 'if($F[1] >=130 && $F[1] <=170 && $F[2] >=30 && $F[2] <=60) {print $_;} tmp1
はどれが一番速いのですか?
0064nobodyさん
02/11/27 10:37ID:???set min = `awk '$3 <= 0.9 {print $0}' aho.txt | sort +1 -n | head -n 1`
echo min[1]
foreach time ( 90621)
ifile = hoge${time}.txt
set gyou = `awk '$1 == '$time' {print NR}' date.txt`
awk 'NR >= '$gyou' && NR <= ('$gyou' + 80) {print $0}' date.txt > tmpA
paste $ifile tmpA > tmpB
awk '( NR % 2 ) == 0 {print $0}' tmpB > tmpC
set gyousu = `awk '$5 > 0 {print $0}' tmpC | wc -l`
if ( $gyousu == 40 ) then
set temae = 40
else if ( $gyousu < 40 ) then
set aaa = `awk '$5 < 0 {print NR}' tmpC | head -n 1`
set temae = `awk 'NR < '$aaa' {print $0}' tmpC | wc -l`
endif
echo $temae
end
0065nobodyさん
02/11/27 10:41ID:???set min = `awk '$3 <= 0.9 {print $0}' aho.txt | sort +1 -n | head -n 1`
echo min[1]
と
set gyou = `awk '$1 == '$time' {print NR}' date.txt`
awk 'NR >= '$gyou' && NR <= ('$gyou' + 80) {print $0}' date.txt > tmpA
paste $ifile tmpA > tmpB
awk '( NR % 2 ) == 0 {print $0}' tmpB > tmpC
set gyousu = `awk '$5 > 0 {print $0}' tmpC | wc -l`
をそれぞれperlで書くとどのような感じになりますか?
いいかげんな感じでいいので、perlの構文教えてください。
調べてたら、卒論かけません。
本来のcshスクリプトでは
foreach time ( 90621 90609 90521 90509 83021 83009 81821 81809 81721 81709 81621 81609 81521 81509 80821 80809 80721 80709 80621 80609 80521 8050
9 80421 80409 80221 80209 72921 72909 72821 72809 72721 72709 72621 72609 62121 62109 61021 61009 60921 60909 60821 60809 52209 50521 50509 50421
50409 50321 50309 50221 50209 50121 50109 43021 )
となっており、このスクリプトでは遅すぎて、話しになりません
アフォですみません。
0066nobodyさん
02/11/27 10:51ID:???という、YYYYMMDDという日付データがあった場合に、
「今日からあと何日でその日が来るか」を算出するのにはどうしたらいいのでしょうか。
006766
02/11/27 10:55ID:???例えば、20020631という日付データがあって、
その日から3ヶ月後は何日か求めたい時はどうすればいいですか。
普通に20020931にしても、9月は31日が無いかもしれないですし、
うるう年とかで2月は28日だったり29日だったりしますよね。。
0068nobodyさん
02/11/27 10:56ID:???0069nobodyさん
02/11/27 11:04ID:???timelocal()を使うと楽。
>67
じゃあ、8月31日の3ヵ月後の11月31日が存在しなかった場合はどうするの?
なかった場合どうするかを先に決めないと何もできない。
0071nobodyさん
02/11/27 11:30ID:???なると思いますじゃねーだろ。
どういう仕様にしたいか決めないと出来ないってんだよ。
0072nobodyさん
02/11/27 11:32ID:???>70は>66-67みたいな事がしたくて
それでどんな風にやってみて、
それだとどんなエラーが出て上手く行かなかった
んだ?
自分で何もせずにやり方聞いてるわけじゃないよな?
>1読め。
0074nobodyさん
02/11/27 12:01ID:???その文字数分、処理をループさせたいのですが、
これだと何も出来ませんでした…。
要するに、入力されたひらがな($tango)を、
ローマ字に変えてファイルに書き込みたいって事なんですが…。
$mojisu = length $tango;
while ( $x < $mojisu ){
$moji = substr($tango,$x,2);
if ($moji = "あ"){print $romaji "a"};
・
・
・
$x = $x+2;
}
0076nobodyさん
02/11/27 12:20ID:???ttp://www.din.or.jp/~ohzaki/perl.htm#JP_Split
これ参考にしてみ。
0077nobodyさん
02/11/27 12:22ID:???$tango =~ s/あ/a/g;
$tango =~ s/い/i/g;
ずら〜っとコレじゃダメですか?
でも、「っ」とかって大変そう・・・
後に来る文字で変わるでしょ・・・
0080nobodyさん
02/11/27 17:38ID:37dF+px+って文字コードになってるファイルがあるんですが
コレを元の文字に置換するようなやつはどのように書けばいいんでしょうか?
0081nobodyさん
02/11/27 17:46ID:???0082nobodyさん
02/11/27 19:08ID:???一生独りでシコってろ!!
0083nobodyさん
02/11/27 21:43ID:???ドピュッ
0084nobodyさん
02/11/27 22:06ID:Op374sN2$in = 500; #10進法で入力された数値
for($i = 1;$i < 1297;$i++){
$c[$i] = $h.$j++;
if($j eq "10"){$j = "a";}
elsif($j eq "aa"){$j = "0";
$h++;
if($h eq "10"){$h = "a";}
}
}
$out = $c[$in]; #36進法で出力される数値
効率のいいコードはないでしょうか?
0085nobodyさん
02/11/27 22:42ID:wgGugnNo$after = array('0','1','2','3','4','5'..........'z');
$a = floor($in /36);
$b = $in % 36;
$out = $after[$a].$after[$b];
echo $out;
008685
02/11/27 22:45ID:wgGugnNo$in = 500;
@after = qw(0 1 2 3 ... z);
$a = int($in / 36);
$b = $in % 36;
$out = $atter[$a].$after[$b];
0089nobodyさん
02/11/27 23:01ID:XpHW8B1z$out = (0..9,a..z)[int($in/36)] . (0..9,a..z)[$in%36];
0091nobodyさん
02/11/27 23:17ID:???0092nobodyさん
02/11/27 23:28ID:???0093nobodyさん
02/11/28 00:49ID:???0094nobodyさん
02/11/28 07:22ID:???009574
02/11/28 11:13ID:???今のところ全くの初心者なものでご迷惑をお掛けしました。
とりあえず>>77さんのやり方で出来ました。
「っ」や「ゅ」等については後で考えます。
皆さんありがとうございました。
0096nobodyさん
02/11/28 12:20ID:AB88ovMQどうしたら良いでしょうか?
if( $env(HTTP_REFERER) == NULL)
流石にこれじゃだめっすよね…
0097nobodyさん
02/11/28 12:39ID:???0098nobodyさん
02/11/28 12:40ID:9pvjX8Vyunless( $ENV{HTTP_REFERER} ) {
.
}
0099nobodyさん
02/11/28 12:40ID:FjFqkJQzではだめでつか?
0103nobodyさん
02/11/28 13:17ID:n94VkAjj0104nobodyさん
02/11/28 13:16ID:???>環境変数が存在するか無いかを判定したいのですが
というお題なので、exists でいいんじゃないか?
0や''を検出するなら、まず仕様を決めてもらわんと。
010596
02/11/28 13:22ID:cubtANrCCGIを重複で利用したいので
フォームからアクセスしたときと表示するだけでアクセスした時
に分けたかったんです。
フォームからアクセスした時にはQUERYなりCONTENT?なりに
残るじゃないですか。
それを判別したかったんです。
いろいろ御意見ありがとです。。
0106nobodyさん
02/11/28 13:24ID:???上のCGIが作りたいのですが、どうすればいいですか?
初心者なうえに知識がないんで…
教えてください。
0107nobodyさん
02/11/28 13:41ID:n94VkAjj該当するweb管理者にお問い合わせ下さい。
0108nobodyさん
02/11/28 14:47ID:???業務口調ワラタ
0109nobodyさん
02/11/29 02:18ID:???初心者に掲示板の制作は無理だから諦めれ。
(余談だけど、初心者って掲示板の設置のことを「作り方」って聞くときがあるんだよなー)
0110nobodyさん
02/11/29 11:03ID:YJ7YkLxM文字列を一定の長さまで比較したいんですけど
標準関数ありますか?
Cでいえばstrncmpみたいなものです。
できれば、今後自力で調べる方法も教えて頂けないでしょうか。
0111nobodyさん
02/11/29 12:26ID:???0112nobodyさん
02/11/29 17:54ID:nCXK5uR+メモリ上にロードされっぱなしになって速度が速くなったりするの?
あと、自分のperlソースをpmにすることはできますか?
webで調べたけど情報が無かったです。
0113nobodyさん
02/11/29 18:04ID:???> webで調べたけど情報が無かったです。
http://www.kt.rim.or.jp/~ekbk/perl5.005/perlmod.html
0114nobodyさん
02/11/29 18:08ID:FGwKAXnrprint <<HERE
テスト
HERE;
例(2)
print "テスト";
例(1)と例(2)ではどちらが表示が速いでしょうか?
0115nobodyさん
02/11/29 18:28ID:???●ソース
use Benchmark;
timethese(1000000,{
'ex1'=>sub {
print "テスト\n";
},
'ex2'=>sub {
print << "EOM";
テスト
EOM
}
});
●結果
Benchmark: timing 1000000 iterations of ex1, ex2...
ex1: 40 wallclock secs ( 5.84 usr + 5.25 sys = 11.09 CPU) @ 90203.86/s (n=1000000)
ex2: 49 wallclock secs ( 6.26 usr + 5.56 sys = 11.82 CPU) @ 84631.01/s (n=1000000)
●結論
気にするほどの差はない
0116の
02/11/29 20:42ID:vqpWO9fR> 「DBI.pm」の「pm」って何??モジュール化されてるってこと?
単なるファイル名。use を使ったとき、名前+".pm" で読み込むくらいです。
普通中身はモジュールのための構造を持たせるけど、別に何か規定されてるわけじゃない。
---
俺的ポータルサイトを作ろう
http://mysite.ddo.jp/
0117nobodyさん
02/11/29 22:23ID:JObUfqd/0118nobodyさん
02/11/29 22:23ID:lYLiGnC/という文字列があったとして、
例えば3つ目のA以降の文字列を除去するにはどうすればいいでしょうか。
この文字列の場合、
ABCADEA
まで残したいのですが。。。(あるいはABCADEまで
0120nobodyさん
02/11/29 23:00ID:JObUfqd/0121117
02/11/29 23:06ID:JObUfqd/とかすると、
sub error {
の中で、
error:line 333 in hoge.pl
とか出したいんですが。
&errorは、hoge.plからrequireします。
0122nobodyさん
02/11/29 23:13ID:???とかで簡単にコンパイルできたらなぁ
0123nobodyさん
02/11/29 23:13ID:???sub error{
die "error: line $_[0] in $0";
}
0125nobodyさん
02/11/30 00:52ID:???テキスト内のどこにキーワードがあるか一見してわかるような
プログラムを作っているのですが、
jcode::convert(\$_, 'euc', "", "z");
jcode::convert(\$word, 'euc', "", "z");
$_ =~ s/$word/<XX>$word</XX>/; #(XXは任意のタグ)
とするとどうしてもうまく置き換えられずに化けてしまう
文字があります(主に全角のカナ)。
処理は入力をすべてEUCにコンバートしてから行っています。
化けてしまう原因が分かりません。
置き換え時の文字化けというのは避けられないのでしょうか?
0126nobodyさん
02/11/30 00:55ID:???0127nobodyさん
02/11/30 00:58ID:???情報すくなすぎ。
具体的に$_と$word それぞれがどういう入力のときにうまく
いかないのか。jcode::convertした時点で化けているのか、
置き換えたときに化けてしまうのか。
0128125
02/11/30 03:00ID:???jcode::でsjis→EUCコンバート時には
まだ化けていないようです。
さらにそのテキストをsjisに戻した場合は
化けてしまうものもあるようですが、今回は
sjisに戻しておりませんので無視しています。
現状としてはどうやら置き換えている時に
化けてしまっているようです。
どの文字がどのようなタイミングで化けるか調査して
もう一度書き込ませていただきます。
0129125
02/11/30 04:09ID:???確認したところ、置き換え時に同一文字コードながら違う文字?
で置き換えが行われていて化けてしまっているようです。
例えば
$_ = "007シリーズの最新作「ダイ・アナザー・デイ」";
$word = "次';
としたときに以下のようになります
007シリーズの最新作「ダイ・アナザ。<XX>次</XX>Ε妊ぁ廚・
このように、"次"という文字は含まれていないのですが
文字コードが同一?のため中途半端な所で置き換えが
行われて以後の文章が化けてしまう、という現象に見えます。
このような動作を回避することは出来るのでしょうか?
0132nobodyさん
02/11/30 09:03ID:KwMUsAxfうまくいきません。(例:40000000000とか) 何でですか?
$m = 2; $x = 0; $c = 0; ($nは元の数)
while ($h == 0){
if ($n % $m == 0){
$n = $n / $m;
@x[$x] = $m;
$x++;
}
else{
$m++;
if ($n % $m == 0){
$n = $n / $m;
@x[$x] = $m;
$x++;
}
}
if ($n < $m){$h = 1;}
}
0133nobodyさん
02/11/30 09:36ID:???素因数分解のアルゴリズムは置いておいて、
http://pc.2ch.net/test/read.cgi/php/1000191385/66-69
これか?
0134132
02/11/30 10:21ID:KwMUsAxfよく分からないんですが、perlのバージョン?(仕様上?)に問題があるということですかね?
0135nobodyさん
02/11/30 12:00ID:???たとえば<txt></txt>で囲まれている間の文字のみを
s/</</g;
s/>/>/g;
という風に変換したいのですが、
どうしたらいいか分かりません。下記の様にしたのですが、できませんでした。
ご教授して頂けませんか?
if ($val =~ /<txt>(.*?)<(.*[^>]*)>(.*?)<\/(.*?)>(.*?)<\/txt>/) {
$val =~ s/$1<$2>$3<\/$4>$5/ig;
}
#見にくくてスミマセン…
0136135
02/11/30 12:17ID:???上手くいきました、ご迷惑おかけしまスタ
0137nobodyさん
02/11/30 13:59ID:/75slB4UMath::Bigint 使ってください。
Perlで大きい整数はまともに扱えません。
使い方は perldoc Math::Bigint 読んでね。
0138nobodyさん
02/11/30 14:04ID:???ttp://www.din.or.jp/~ohzaki/perl.htm
ここの「日本語を扱う 正しくパターンマッチさせる」を読んでくれ。
日本語処理はそう簡単には実装できない。
0139125
02/12/01 14:00ID:???求めていた回答がここにありました。
じつはそこのサイトはこのスレッドの頭にあったので
見ていたのですが、ちゃんと読まずに通過していたようです。
解決することができました。ありがとうございました。
他の皆様も考えてくださったり回答してくださったりして
ありがとうございました。では。
0140nobodyさん
02/12/01 21:52ID:???で作ったをもとに、
hoge,piyo,huga
と表示させたいです。どうやればいいか教えてください。
0141nobodyさん
02/12/01 21:55ID:???0142nobodyさん
02/12/01 21:58ID:???0143nobodyさん
02/12/01 22:02ID:???0145nobodyさん
02/12/01 22:06ID:???{
my @hogelist = ('hoge','piyo','huga');
my $count =1;
foreach(split(/\t/,join('\t',@hogelist))){
print "," if $count%0x04;
chomp;
print STDOUT;
$count += ($count+1)/0x01;
}
もっと無駄な方法ってないかしらん・・・
0147nobodyさん
02/12/01 22:22ID:SByI0FEM誰かUPローダの作り方教えてください。
作り方を説明してるサイトでもいいんで、お願いします。
0148nobodyさん
02/12/01 22:25ID:???CGI::Liteとかのurl_encode,decodeなんですけども、
ある文字列がエンコード済みなのか未エンコードなのか調べる方法は無いでしょうか?
既にエンコード済みの"300%89%7e%82%c5%8d%a1%8c%8e%90%b6%82%ab%82%c4%82%a2%82%af%82%e9%82%a9%89%b4"
とか、未エンコードの"松屋のカレー(゚д゚)ウマー"とか色々な文字列が与えられてくるのですが
それを一律にURLエンコードがされた状態にしたいのです
で、ソレをデコードする時等、エンコードされてるモノはデコードしなきゃいけませんですし、
エンコードされてないモノに、"今日の降水確率は%25ってとこですかね"とか与えら、
デコードしたら変になってしまいますし…
なにかいい方法はないでしょうか?お知恵をお貸しください…
0149nobodyさん
02/12/01 22:37ID:???レンタルのにしなさい。
>>148
本文につっこみますが日本語がとても難しいです。
もう一度日本語の勉強をしなおしてきます。
($str =~ m#^%.*#)? デコード処理 ;
ではダメ?(やっぱりよくわからん)
0150nobodyさん
02/12/01 22:38ID:???理論的には不可能だ。
'%22'という文字列だけが来たときに、それがもともと
'%22' という文字列をそのまま送信したのか、
'"'(ダブルクォーテーション)を送信したのか、判別できないだろう。
[\x80-\xff]が含まれていたらエンコードされていないと見なす、くらいで
妥協したら?
0151nobodyさん
02/12/02 04:38ID:weXpByrh->decode($str) if $str =~ m/^(?:%[a-fA-F0-9][a-fA-F0-9])+$/;
で、十分実用に耐えると思うが・・・
エンタープライズとかだと、デコードしてないと
error 400になるけど
0152151
02/12/02 04:39ID:???0153nobodyさん
02/12/02 04:41ID:???表示するためには、CGIでどういう記述をすれば良いのか教えて下さい
0154nobodyさん
02/12/02 08:03ID:???ごめんなさい、意図がよく伝わらなかったようで(汗
えと、とりあえず"与えら"は"与えられたら"です、打ちミスりました
>>150
まだまだワカッテナイので、[\x80-\xff]ってのは日本語が入ってたら、ってことなのでしょうかね
あとは"とか&とかそゆモノが入っていた時もエンコされてないなー、って方針でいいのでしょうか
>>151
%xxが含まれてたらエンコード済み、と解釈するということでしょうか?
>>150さんのと組み合わせたほうがより完璧を期することができそうです
下2行はよくわかんないですけど、ある鯖でやると、ってことでしょうか?
>>153
IO::Socketモジュールとか使えばいいような気がします
にちゃんねる掲示板の仕様はよくしらないのですが、どっかにスレ一覧を保持してるファイルが有った気がします
でもアクセスごとに結構な大きさのファイルを取りに行くと転送料問題とかで怒られそうな気もします
初心者なのでなんか重大な勘違いをしてるかもしれませんがネ…
0155150
02/12/02 14:17ID:mB0yHtje150は適当に書いちゃったけど、
[\x00-\x20"#;<>?{}|\\\\^~`\[\]\x7F-\xFF]
が含まれていたらエンコードされていない、と見なすのは?
まあ>>151さんのでOKだと思うけど。
0156nobodyさん
02/12/02 14:53ID:???0158nobodyさん
02/12/02 17:07ID:???キボンと言われましても、他のDBをほとんど使ったことがなく
単純に登録、更新、削除くらいしかしないので感想はあまりないです。
ただちょっとデータ量が多そうなのでDBを使ってみるかとなったのです。
0159nobodyさん
02/12/02 17:55ID:fz9HS+5s上記のサイトを参考にして(というかそのままコピペで)、
WEBページを読み込むCGIを作りました。
しかし、CGIにアクセスしてみたところ正常に読み込めないようです。
$errorMessageは、Can't connect to httpとなっています。
メッセージの意味は分かるのですが、解決策が分かりません。
サーバーの環境は、MacOS10.1.4、Perlのバージョンは5で、自宅サーバーです。
掲示板等のCGIは正常に動いています。
解決策が分かる方、お願いします。
0160nobodyさん
02/12/02 17:56ID:VWSOmEHp>↑オマエは頭の悪いバンドマンだなーどうせオールナイトイベントに出てた
>スキムミルクっていうバンドだろ?ライブ中の態度でけーんだよ。
>ツアーバンドはノルマとらないんだよ。それからいい音出すPAも雇ってチラシも
>すってんだよ。金かかってるんだよ。そのくせてめえら客よばね―のか?
>Y野氏の組織はやばいからねーパソコンオタクもいるから調べられて
>そんな事言ってるとCHOKOに本当にカツアゲされるぞ。
>2ちゃんねるキラー組織って知ってるかなー君?
↓ここでこんな書き込みを見つけたんだが
恐らくお祭り状態になる予想。興味のある方は是非見てきてくだされ。
http://music.2ch.net/test/read.cgi/minor/1031619119/74
ちなみにCHOKOというバンドのサイト。
http://choko3.hp.infoseek.co.jp/
2ちゃんねるキラー組織キタ━━━)゚∀‘)・ω・) ゚Д゚)゚∀゚)・∀・) ̄ー ̄)´_ゝ‘)-_)゚∋゚)´Д`)・∀。)━━━━!!!
0164nobodyさん
02/12/02 18:28ID:+ey3nn6hhost->IPが取得できないのでは
0165159
02/12/02 19:12ID:???レス感謝です。
今日は時間切れの為大学から閉め出されてしまうので、
また明日調べてみようと思います。
ありがとうございました。
0166nobodyさん
02/12/02 19:24ID:???0167nobodyさん
02/12/02 21:16ID:???そのファイル内にある.cgiなどをFFFTPでアップするだけでいいんでしょうか?
0168nobodyさん <sage>
02/12/02 21:21ID:???WebprogとかCGIのスレ行ってよ。Perlとぜんぜん関係ないじゃん。
0169167
02/12/02 22:22ID:???0170nobodyさん
02/12/02 23:00ID:afn6SBSE時間表記をできるように、以下の行を足しています。
($sec,$min,$hour,$day,$mon,$year,$wday,$yday,$isdst) = localtime(time);
@month =('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');
@youbi=('Sun','Mon','tue','Wed','Thu','Fri','Sat');
$year += 1900;
if($day < 10){$day = "0$day";}
if($hour < 10){$hour = "0$hour";}
if($min < 10){$min = "0$min";}
$time="$youbi[$wday], $day-$month[$mon]-$year, $hour:$min";
ここで質問なのですが、時間・日を、2時1分が、2:1とならないように、
ifで02:01となるように書きました。
でもこれ、置換処理か何かでもっとスマートに書ける気がするのですが、
具体的にわかりません。どなたか、ご教授願えないでしょうか。
0171nobodyさん
02/12/02 23:06ID:???($day,$hour,$min,$sec) = map {sprintf "%02d", $_} ($day,$hour,$min,$sec);
0172170
02/12/02 23:06ID:???「すぐわかるパール」でした。
古田たかし著の「初めてのCGI&Perl」と混同しました。
今まで読んだ参考書は、上記2冊です。
0173nobodyさん
02/12/02 23:08ID:???@youbi とか、、ダサすぎでしょ。
0175nobodyさん
02/12/03 01:13ID:???if($day < 10){$day = "0$day";}
なんて方法は最悪の部類ですよ。かなりひどい本だと
断定してもいいです。たぶんこれもkent-webのソース
をダサいままぱくってるのかな?
0176nobodyさん
02/12/03 01:18ID:ZhYTYd9Tデータファイルを読み込んで、任意の数字がある場合のみprintしたいと思っています。
for(@log){
if($_ =~ /$num/){
print "$_";
}
}
これでやると、$num=10;とした時、100や101、102....もマッチしてしまいます。
10なら10だけをマッチさせたいのですが可能でしょうか?
0177nobodyさん
02/12/03 01:27ID:???後で必要なのは$timeだけだよね?
($min, $hour, $day, $mon, $year) = (localtime time)[1..5];
$time = sprintf "%s, %02d-%s-%d, $02d:%02d".
qw(Sun Mon Tue Wed Thu Fri Sat)[$wday], $day,
qw(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec)[$mon],
$year+1900, $hour, $min;
0178nobodyさん
02/12/03 01:29ID:???区切り文字とかってないの?どんなデータファイル?
いちおう /\D$num\D/ で可能だとは思うが
行頭と行末の場合はヒットしないので注意。
0179176
02/12/03 01:44ID:???データファイルは掲示板の書き込みのような文章です。
その文章中(記事番号とかではなくて)に任意の数字がある場合にマッチさせたいのです。
/\D$num\D/を使ったらうまくいきそうです。
ありがとうございました。
0180nobodyさん
02/12/03 02:26ID:???$t = localtime;
print $t, "\n";
0181nobodyさん
02/12/03 13:18ID:???前スレでおしえてもらったのを使いつつやってみてるんですが、、、
perl書くの初めてなんで全然分からず行き詰まり。どなたか助けてください。
my $output = "aaa.html";
open (OUTPUT, ">$output") || die "Could not open file $output : $!\n";
print OUTPUT "(HTMLヘッダ部〜<table>まで)";
print OUTPUT "<tr><th>No.</th><th>filename</th><th>update</th></tr>\n";
my $now = time;
my %files;
opendir(DIR, '.');
while (readdir(DIR)) {
if (($_ =~ /.txt$/i) && ($_ ne "readme.txt")){
$files{$_} = (stat($_))[9];
}
}
closedir(DIR);
0182nobodyさん
02/12/03 13:18ID:???foreach $key (reverse sort {$files{$a} <=> $files{$b}} keys %files) {
# このへん分からない
my $last_date = $files{$key};
my $ptime = int(eval(($now - $last_date)/86400));
$title = $key;
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($last_date);
$year = eval($year + 1900);
$mon = eval($mon + 1);
substr($title,-4,4) = "";
print OUTPUT "<tr>\n<td align=\"center\">$i</td>\n";
print OUTPUT "<td>$title</td>\n";
print OUTPUT "<td align=\"center\">$year年$mon月$mday日</td>\n</tr>\n";
# ??
}
(以下続きがある予定)
print OUTPUT "(タグ閉め)\n";
close (OUTPUT);
0185nobodyさん
02/12/03 15:16ID:???>print OUTPUT "<tr>\n<td align=\"center\">$i</td>\n";
の行はいらないんで、$iは無視してください。
sortしたのをforeachでちゃんと回るようにしたいんですが。
0186nobodyさん
02/12/03 18:16ID:???新しい順に並ばないか?
0188nobodyさん
02/12/03 21:12ID:???プログラミングPerlを買ってきて読め。
それで全て解決。
0189184=186
02/12/03 22:07ID:???このスクリプトなら新しい順に並ぶでしょう?
並ばないなら、どうなるのか教えて欲しい。エラーが出るのか?
で、最終的にどうしたいわけよ。
%filesにどんな値が入るか観察してみるとわかるかもな。
実行して生成されるhtml見ると、この部分(foreach(){ }の中)が抜けてて、
ヘッダとフッタの部分だけになっちゃうんで。。
0191nobodyさん
02/12/03 23:23ID:lLuHX1/s$time(10桁の数値)を出来るだけ少ないバイト数に可逆圧縮したいのですが、
どうすればよいでしょうか。
例えば16進数で表記すると、
1037797479(10byte) → 3DDB8867(8byte)
で2byte縮むことになります。
ただ、圧縮後の数値は aタグにのせてリンクするので、(<a href=test.cgi?i=3DDB8867>)
URLに使えない文字だと駄目なのですが。
よろしくお願いします。
0192nobodyさん
02/12/03 23:33ID:???そんなことをする意味は……それは言わんでおくか。
URLに使える文字のテーブルを作って、仮にそれが50個あった場合は
timeの数値を50進数に変換したあと、テーブル引いて文字化する。
受け取る側では逆のことをやる。これなら5〜6文字ぐらいにできるんでない?
0194nobodyさん
02/12/04 00:01ID:???ありがとうございます。
目的は携帯サイトの2k制限を如何にクリアするか、ということなんです。
その為にHTMLに出力する部分は出来るだけ文字数を落としたいのです。
(0..9,a..z,A..Z,_,-)
仕様上URLでそのまま送れる文字は上記と、'.'、'*'だけみたいですので、
そうなると64進数が限界でしょうか。。
ご意見ありがとうございました。
0196nobodyさん
02/12/04 00:14ID:???あ゛あ゛あ゛恥ミス発見!
ご指摘の通り $time = time; でした。
64^4 = 16777216
で、10桁は表現できないと思うのですが・・
4バイトで表現するにはどうしたらいいんでしょうか?
0197189
02/12/04 00:23ID:???おお。すまん。
foreachと言うのでそこばかり気にしていたよ。
while (readdir(DIR)) {
を>>193のように
foreach(readdir DIR){
とするか
while($_ = readdir DIR){
としてみれば解決すると思うぞ。
0198nobodyさん
02/12/04 01:33ID:???1970年のデータが必要かどうか判りませんが、
もし最近のものならその数字(timeの戻り値)自体を減らしてみてはどうでつか?
$time = time - 946684800;
2000年01月01日午前00時00分00秒を0とするとか。
0199nobodyさん
02/12/04 01:33ID:???>>195は、timeの値が4バイトだと言ってる。つまり32ビット。
で、64通り=6ビットの場合、6文字必要。
でも、何十年も使う訳じゃないだろうから、timeから1000000000を
引いた値を5文字(30ビット)で格納、でどうかな。
0200199
02/12/04 01:34ID:???1時間前のカキコに…笑
0201181
02/12/04 09:10ID:???0202196
02/12/04 11:17ID:???なるほど!理解できました。
確かに最近のものだけなので、timeの戻り値を減らしてみます。
この度はどうもありがとうございました。
またよろしくお願いいたします。
0203nobodyさん
02/12/04 15:23ID:???for (1..10){
print "うんこ\n";
}
こういう書き方はありですか。
0205nobodyさん
02/12/04 18:01ID:7+5xaubmlinuxの設定ファイルでよくある「.conf」ってなにか規格があるの?
perlから簡単に扱えるようなモジュールはありますか?
0206nobodyさん
02/12/04 20:05ID:???意味があまりよく判りませんが、「.pl」や「.cgi」など、AddHandlerで設定した拡張子にしておくと、直接ブラウザで見られたときに、エラーが返ってくるので安心かもしれません。
0207nobodyさん
02/12/04 20:41ID:???Windowsでいうところの.iniやMac OS Xでよく使われているようなplist
みたいに、設定ファイルのデファクトスタンダードな規格はあるのか?
ってことでしょ? 無いと思う。
CPANにいけば、設定ファイルをごにょごにょするモジュールはいっぱい
あるので、検索してみることをお勧め。
0208nobodyさん
02/12/05 02:20ID:???ここに有るものを好きに選ぶよろし
http://cpan.org/modules/by-category/02_Perl_Core_Modules/Config/
02091/2 長文すいません。。
02/12/05 04:48ID:jP9xslt3timethese(1000, {
foreach => sub {
open(FILE, '/test.data');
my @data = <FILE>;
close FILE;
foreach (@data) {
tr/E//;
s/a/e/g;
}
},
while => sub {
open(FILE, './test.data');
while (<FILE>) {
tr/E//;
s/a/e/g;
}
close FILE;
},
});
}
02102/2 長文すいません。。
02/12/05 04:48ID:jP9xslt3foreach: 2 wallclock secs ( 0.19 usr + 1.21 sys = 1.40 CPU) @ 713.78/s (n=1000)
while: 2 wallclock secs ( 0.46 usr + 1.72 sys = 2.18 CPU) @ 457.88/s (n=1000)
Benchmark: timing 1000 iterations of foreach, while...
foreach: 1 wallclock secs ( 0.22 usr + 1.12 sys = 1.34 CPU) @ 745.71/s (n=1000)
while: 2 wallclock secs ( 0.55 usr + 1.59 sys = 2.14 CPU) @ 466.42/s (n=1000)
Benchmark: timing 1000 iterations of foreach, while...
foreach: 1 wallclock secs ( 0.21 usr + 1.19 sys = 1.40 CPU) @ 713.78/s (n=1000)
while: 3 wallclock secs ( 0.52 usr + 1.71 sys = 2.23 CPU) @ 447.63/s (n=1000)
foreach の方が速いんですけど、Benchmark の使い方間違っていますか?
この2つではよく while を使えといわれますが、それは速さではなくて別の要因があるからなんでしょうか?
配列にいれると大きなファイルだとメモリを圧迫するとか。
whileで回すとその心配はないのかな?
0211209-210
02/12/05 04:51ID:???やっぱりwhile のほうが速いですね・・・・。
すいませんでした。。
0213正規表現・・・・
02/12/05 13:08ID:vPIO4lyL$test =<<"TEST";
ここから始まりです。
<FOO>
hogehogehoge
hogehogehoge
hogehogehoge
</FOO>
ここで終わりです。
TEST
という文字列から<HOGE>から</HOGE>までを抜き出したい場合。
Perlでどんな風にかきゃいいんでしょう?
正規表現道場過去ログには
m[<FOO>.*?</FOO>]sのようにすればイイみたいな事が書いてあるんだけど
$test =~ m[<FOO>.*?</FOO>]s;
print $test;
てな感じでやってみると、$testはなにもされてません。
0214nobodyさん
02/12/05 13:14ID:???print $1;
0215nobodyさん
02/12/05 13:15ID:???print $1;
0216正規表現・・・・
02/12/05 13:31ID:vPIO4lyL感謝です。
0217nobodyさん
02/12/05 15:55ID:34DLd1c6ファイルオープンでエラーが出た場合に
処理を続行したいのですがエラーをクリアーする
関数などはあるのでしょうか?
また、読み込みの場合でもファイルロックをかける必要は
あるのでしょうか?
0218nobodyさん
02/12/05 16:19ID:???> 処理を続行したいのですが
開けなかった場合中断するってな風にプログラムしてなきゃ普通に処理を続行しますが。
>また、読み込みの場合でもファイルロックをかける必要は
>あるのでしょうか?
読み込みしかしないファイルなら必要ありません。
更新されるファイルならした方がよいでしょう。
0219nobodyさん
02/12/05 16:58ID:34DLd1c6勉強になりました
0220nobodyさん
02/12/05 18:12ID:x3XgL2vWJcode.pmをniftyで動かす方法を、教えていただけないでしょうか。
0221nobodyさん
02/12/05 22:49ID:???#!/usr/local/bin/perl -T
とするとエラーになって動作ません。
原因としてどんなことが考えられるのでしょうか?
0222nobodyさん
02/12/05 23:03ID:qFEbS8pnこれってプロバイダに言えばインストールしてくれるもんでしょうかね?
諦めて自宅鯖にしたほうがよいですかね?
0223nobodyさん
02/12/05 23:07ID:???Niftyは標準モジュールも入ってないし無理じゃない?
>>221
Tオプションの意味が分かるなら答えもおのずと分かりそうなモンですが。
>>222
プロバイダによってポリシーが違うだろうし、プロバイダに聞けとしか言いようがない。
0227nobodyさん
02/12/05 23:17ID:???エラーメッセージぐらい書いても罰あたらんだろうに。
0228nobodyさん
02/12/05 23:20ID:???0229nobodyさん
02/12/05 23:27ID:???1:自分はこう言う事がしたい。
掲示板のフォームから送られてくるデータの汚染チェックをしたい。
2:それでこんな風にやってみたが・・・
#!/usr/local/bin/perl -T
としてみた。
3:それだとこんなエラーが出て上手く行かなかった。
The script did not produce proper HTTP headers.
Please see the error log to see the detail of the errors.
あと226は多分漏れじゃない誰かです。
0230nobodyさん
02/12/05 23:39ID:???Please see the error log to see the detail of the errors.
適切なHTTPヘッダを吐いてない。
エラーの詳細はエラーログで見れ。
って書いてるじゃん。
0232nobodyさん
02/12/06 00:35ID:???MODULEしか使わないのですが、require 'aa.pl' と use MODULE; では速度や
負荷は変わらないですか?
aa.plの内容
#------↓ここから
packege MODULE;
・・・
1;
package MODULE2;
・・・
1;
#------↑ここまで
0233nobodyさん
02/12/06 00:41ID:???0234nobodyさん
02/12/06 00:46ID:???aa.plをuse MODULE;では呼び出せないと思うが。
0235232
02/12/06 00:50ID:???a.pm
--------------------
package MODULE;
・・・
package MODULE2;
・・・
1;
-------------------
b.pl
-------------------
use MODULE; # または require 'a.pm';
# MODULE2は使用しない。
0236nobodyさん
02/12/06 01:07ID:???use a;
になると思うのですが。
でOOPなら
$hoge1 = new MODULE;
$hoge2 = new MODULE2;
$a = $hoge1->hoge( $xxx );
とかに
単に関数を呼び出すだけなら
$a = MODULE::hoge();
$b = MODULE2::hoge();
0238nobodyさん
02/12/06 01:38ID:???1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
0239nobodyさん
02/12/06 01:40ID:???余計なの読まないから良いんでない?
サブルーチンをインポートする必要がなければ、だけど。
あとは大差無いかと。
0240nobodyさん
02/12/06 07:37ID:???0241nobodyさん
02/12/06 11:46ID:yzLDpzsK@values = split(/■/, $aiueo);
$i = 0;
foreach $value (@values){
if($value eq ""){
@values[$i] = "NULL";
}
print "$i : @values[$i]\n";
$i++;
}
これを実行すると、
0 : 1
1 : 2
2 : NULL
3 : NULL
4 : 3
5 : 4
こう表示されます。
しかし、最後の5以降はsplitでは無視されてしまうようです。
自分としては
0 : 1
1 : 2
2 : NULL
3 : NULL
4 : 3
5 : 4
6 : NULL
7 : NULL
8 : NULL
としたいのですが可能でしょうか。
0242nobodyさん
02/12/06 12:01ID:???ものすごく安易な解ですがsplitする前に
$aiueo .= "EOL";
とかで後ろに文字をくっつけておいて、
splitした後にpopしてやると逃れることは
できます。
$aiueo = "1■2■■■3■4■5■■■";
$aiueo .= "EOL"
@values = split(/■/, $aiueo);
pop @valures;
$i = 0;
という感じです。
0244nobodyさん
02/12/06 12:20ID:q7PjCrztサーバに保存するファイル名に投稿された時間を反映させるには(img200212061220.jpgのように)、
どのような記述が必要ですか?
0245nobodyさん
02/12/06 13:24ID:???スクリプトを見ないとわからん
こんな感じで作った文字列をファイル名につけてやりゃいいんじゃないの
@date = reverse((localtime)[1..5]);
$date[0] += 1900; $date[1]++;
$now = sprintf "%4d%02d%02d%02d%02d", @date;
0246nobodyさん
02/12/06 13:27ID:???マルチは市ね
0247244
02/12/06 13:44ID:y8w9Rsa1ありがとうございました。やってみます。
0248bloom
02/12/06 13:47ID:7xw6gZYBhttp://www.agemasukudasai.com/bloom/
0249242
02/12/06 15:19ID:0nNWvuklあのコードじゃ
$aiueo = "1■2■■■3■4■5■■■6";
とかのときに最後の値を捨ててしまいますんで、
後ろにくっつけるのは区切り記号込みにしないと
だめですね。
$aiueo .= "■EOL"
@values = split(/■/, $aiueo);
pop @valures;
で、うまくいくはず。
0251nobodyさん
02/12/06 15:41ID:???@values = map($_||'NULL', $aiueo=~/(.*?)■/g);
0252nobodyさん
02/12/06 17:08ID:zqw+GwyUある文字(\x{100}以上かもしれない)が大文字か小文字か判定したいのですが、たとえば
「任意のアルファベット大文字1文字に一致するメタ表現」などはないんでしょうか。
それとも、UnicodeData.txtをいちいち読まなければならないんでしょうか。
0253nobodyさん
02/12/06 17:50ID:???改行数の多い書き込みは
「省略されました。全部読むには(略」 という感じで省略表示したいのですが
任意の改行数までを取得するにはどうすればいいでしょうか。
よろしくお願いします。
0254nobodyさん
02/12/06 18:04ID:???改行でsplitとか・・・、色々あるでしょ。
何故思いつかん?
0256nobodyさん
02/12/06 18:35ID:???0258256
02/12/06 18:40ID:???0259nobodyさん
02/12/06 18:43ID:???1だろ。
0260nobodyさん
02/12/06 18:44ID:???スマートかどうか知らんが、sortじゃだめなんですか?
sub numerically { $a <=> $b; }
@sorted = sort numerically LIST;
これで、最小値が@sortedの先頭に来ます。
0263nobodyさん
02/12/06 19:26ID:???my $a_ref = $_[ 0 ];
my $min = $a_ref->[ 0 ];
foreach (@{ $a_ref }){
$min > $_ and ($min, $_) = ($_ , $min);
}
return $min;
}
my @b= (20, 19, 100, 75, 6);
print min @b;
0264263
02/12/06 19:39ID:Wd1BEmDy@bの内容変わってる。
0265nobodyさん
02/12/06 22:56ID:???my($minimum) = sort { $a <=> $b } @list ;
print("$minimum\n");
これじゃダメ?
0267nobodyさん
02/12/07 00:15ID:???0268nobodyさん
02/12/07 00:19ID:ePZJKayyどうすればいいんでしょう?
10個あったら$hoge[9]まで、とか。
0270nobodyさん
02/12/07 00:49ID:???10要素の配列で$hoge[9]までなら全部じゃん(w
foreach (0..$#hoge-1){
print $hoge[$_];
}
とか。
0271nobodyさん
02/12/07 01:08ID:yEekv6g9http://www36.tok2.com/home/bttl/bttl-pc/
0272yani ◆saNSktNEdQ
02/12/07 01:19ID:KB9hByzAforeach (@list) {
$least ||= $_;
$_ < $least and $least = $_;
}
ベタな気がする。エレガントな解法求む。
0273yani ◆saNSktNEdQ
02/12/07 01:30ID:KB9hByzAmy $least;
foreach (@list) {
defined($least) or ($least = $_, next);
$_ < $least and $least = $_;
}
0274yani ◆saNSktNEdQ
02/12/07 02:26ID:6Rt0AxGbしかしイマイチ美しさを感じないのは気のせいか。
my($least) = @list;
foreach (@list) {
$_ < $least and $least = $_;
}
0275nobodyさん
02/12/07 03:44ID:???0276268
02/12/07 04:11ID:ePZJKayyあ、確かに全部っすね・・・(w スマソ
こういう方法があるんですねぇ。おかげさまでうまくいきました。
ありがとうございます。
0277nobodyさん
02/12/07 06:27ID:???forを使ってないだけで中で回ってるのは一緒だけどな。
0278nobodyさん
02/12/07 06:39ID:???grep { $min > $_ && ( $min = $_ ) } @list;
こんな具合かな。テストしてないけど。
0279nobodyさん
02/12/07 06:44ID:???駄目だ寝よう。
0280yani ◆saNSktNEdQ
02/12/07 09:40ID:6bq1sAwRそうそうgrepがあった。
手元の5.8.0の標準モヂュールで面白いものを見つけた。
use 5.8.0; ###
use List::Util qw(min);
...
$least = min(@list);
0281yani ◆saNSktNEdQ
02/12/07 11:42ID:6bq1sAwRないんだが、「面白い」(ことができるかもしれない)と言ったのは List::Util::reduce のことだ。
0282nobodyさん
02/12/07 11:46ID:???0283nobodyさん
02/12/07 16:22ID:???0284nobodyさん
02/12/07 16:24ID:/TptzaIRエラー表示させる場合「&error("文字列");」を使う例を良く見るのだが、
この場合「sub error{}」は用意しなくて良いのだろうか?
所持する本には書かれていなくて……。
ちなみに漏れは「die」関数を使ってます。
0285nobodyさん
02/12/07 16:58ID:???0286nobodyさん
02/12/07 18:32ID:???0287nobodyさん
02/12/07 20:46ID:???自分でつくるんでねぇ?
>>286
構造化プログラミングとかの本を見ると、GOTO分はプログラムの流れがワープしちまって
全体を把握するのが困難になるからいくないらしい
昭和57年頃の本だけど(藁
0288nobodyさん
02/12/07 21:03ID:???わかっていたら混乱することもないんじゃない?
0289nobodyさん
02/12/07 21:06ID:???自分で好きなの作ろうぜ。>sub error { }
きちんとエラーメッセージ吐いてその時の環境変数やら標準入力の内容やらも表示すれば、
デバッグに便利。
0290nobodyさん
02/12/07 21:54ID:HolpJHokSOCKET
WGET
LWP
WGETはサーバに入っていないので。。
LWPよりSOCKETの方が早いと思うんですが。
0292nobodyさん
02/12/07 22:31ID:HolpJHok実際私はこれで毎月30000円稼いでいます、
しかも毎月1000万円が当たるチャンスなどあります。
お小遣い稼ぎに是非!!!
http://www.fruitmail.net/cgi/introduce_jump2.cgi?901913
0293nobodyさん
02/12/07 22:58ID:???Socketの方がなんぼか早いだろうなあ。
でも、それぐらいだったらLwp使って安全かつシンプルに持ってくる方が俺はいいな。
SocketだったらRFCとかきちんと目を通さないと、正しいものは作れないだろ?
0294nobodyさん
02/12/08 10:58ID:H7RlugSZ0295nobodyさん
02/12/08 11:38ID:???「サブルーチン名は、全部小文字の方がいい」だろ?
モジュール名は(プラグマ以外は)大文字で始めろともあるだろう。
それと合わせたんじゃないか? 区別がすぐにつくように。
ま、作法の話だから、あんまり深く考えるな。
従ってれば、いつかきっと自分の中で決着がつく。
0296nobodyさん
02/12/08 11:43ID:???print "ふーん。。。\n";
}
0297nobodyさん
02/12/08 12:07ID:H7RlugSZなるほど、ソースの読みやすさのためなんですね。
モジュールは使ったことがないので今まで気にならなかったんだと思います。
0298nobodyさん
02/12/08 13:10ID:???Perlで、累計・今日・昨日のアクセス数をカウントするカウンターCGI(IMG or JSタグでCGI起動)
を設置しようと思ってるんですが、カウントの方法で少し悩んでます。
count.cgi?total でカウント処理(累計+1, 今日+1)
count.cgi?today で今日のカウントをロードするだけ
count.cgi?yesterday で昨日のカウントをロードするだけ
上の順でCGIが呼ばれると正常にカウントされるんですが、
昨日、今日、累計の順に呼ばれると、当然昨日と今日のデータはカウントされる前のものになっちゃいます。
今日と昨日のCGI が呼ばれたら、sleep(1)をして、累計のカウントがおわるまで待つ
というのも考えたんですが、あまりいい方法じゃないなーなんておもいますた。
また、カウントだけをする count.cgi?count みたいなタグを入れて、
そのタグを一番上に置いて、累計・今日・昨日のタグがきたらカウントデータを読むだけ
ってしても、やっぱり設置場所によってはデータがずれたりしてきちゃいます。
おい、おまえら!もしいい方法がありましたら教えて下さい。
0299nobodyさん
02/12/08 13:37ID:???count.cgi?todayで今日のカウントを+1して今日のカウントを出力
count.cgi?yesterdayで昨日のカウントを出力
で良いべさ。
0301nobodyさん
02/12/08 16:23ID:GWJer8wb&jcode::convert(\$hoge{'hoge'},'euc');
てやってもだめなので一回普通に変数に代入して変換して元に戻して
いるんですが・・・。
0303nobodyさん
02/12/08 23:59ID:???flockの使い方教えてくらはい。とりあえずはflockがサーバで使えるみたいなので。
そんなやつが掲示板など作るな!とかいわれそうですがお願いいたします。
参考になるサイトだけでも結構なんでお願い。
半日ググってたら、何が何やら分からなくなってしまいました。
0304nobodyさん
02/12/09 00:07ID:???ttp://www.google.com/search?num=100&hl=ja&ie=UTF-8&oe=UTF-8&as_qdr=all&q=perl+flock+%E4%BE%8B&lr=lang_ja
検索サイトの使い方のコツを覚えた方がいいんじゃないか?
0305nobodyさん
02/12/09 00:21ID:???今まで「perl cgi flock 掲示板」やら「flock 掲示板」やら、
しらみつぶしにサイトを見まくっていたら頭が変になっていました。
「例」で検索するのをすっかり忘れていました。
本当に感謝です。>304
0306nobodyさん
02/12/09 20:40ID:30vqgT1r%ex = (
hoge => "hage",
xxxx => "$ex{hoge}",
);
みたいにしたいのですが、
Global symbol "%ex" requires explicit package name at ファイル名 line 13.
みたいにエラーが出ます。
どうすればいいですか?
よろしくお願いします。
0307nobodyさん
02/12/09 21:00ID:???0308nobodyさん
02/12/09 21:01ID:???0309nobodyさん
02/12/09 21:13ID:???0310nobodyさん
02/12/09 21:14ID:???0311nobodyさん
02/12/09 21:34ID:30vqgT1ruse strict;をコメントアウトしたら、エラーは出なくなりましたが、
$ex{xxx} に $ex{hoge} の値が代入されていませんでした。
実際には、my %ex; です。写し間違えでした。
0312nobodyさん
02/12/09 21:38ID:???0313nobodyさん
02/12/09 21:59ID:???(
hoge => "hage",
xxxx => "$ex{hoge}",
)
が評価される時点で$ex{hoge}に何も入っていないなら当然。
0315nobodyさん
02/12/09 23:42ID:???0316nobodyさん
02/12/09 23:46ID:???0317nobodyさん
02/12/10 00:21ID:???checkboxや、radioのcheckedは、引き継げないんですか?
0318317
02/12/10 00:29ID:???0319nobodyさん
02/12/10 11:20ID:???たとえば、
$count;
$hoge;
foreach $count (1 .. 10){
$hoge$count = "文字:$";
}
こんな感じでつまり、
$hoge1 = "文字:1";
$hoge2 = "文字:2";
〜
$hoge10 = "文字:10";
こういう事はできるのかなという事です。
これだとやはり$hoge$countの書き方がまずいようでエラーになります。
0320nobodyさん
02/12/10 11:27ID:???0321nobodyさん
02/12/10 11:59ID:???推奨:$hoge[$count] # ただし$countが数字の場合のみ
推奨:$hoge{"$count"} # $countが文字列の場合
非推奨:${"hoge$count"}
0323nobodyさん
02/12/10 13:14ID:???0324nobodyさん
02/12/10 13:22ID:???○ 推奨:$hoge[$count] # ただし$countが自然数の場合のみ
負の数とか小数を使われたらたまらんから訂正。
0325nobodyさん
02/12/10 13:26ID:???0326nobodyさん
02/12/10 13:31ID:???0327nobodyさん
02/12/10 14:02ID:+QGYbS02抽出するにはどうすればいいのでしょうか?
例えば『あいうえお』,『Aいうえお』などの場合です。
substrを使うと『Aいうえお』がおかしくなってしまいます
0328nobodyさん
02/12/10 14:10ID:???ttp://www.din.or.jp/~ohzaki/perl.htm#JP_Split
0329nobodyさん
02/12/10 14:16ID:???Thanks
0330nobodyさん
02/12/10 15:27ID:???すいません、よく考えたらただの配列じゃダメなんです。
$hogeと$iを合体して、
「$hoge1」という変数自体を作りたいんです。
よって、「$hoge1」という変数に文字とかを代入したりしたんです。
0331nobodyさん
02/12/10 15:46ID:???書き込み処理の所なんですが、
open(OUT, "+<$dat");
flock(OUT, 2);
@sasa = <OUT>;
truncate(OUT,0);
seek(OUT, 0, 0);
print OUT "書き込み\n";
print OUT @sasa;
close(OUT);
と
open(OUT, "+<$dat");
flock(OUT, 2);
@sasa = <OUT>;
seek(OUT, 0, 0);
print OUT "書き込み\n";
print OUT @sasa;
truncate(OUT, tell(OUT));
close(OUT);
ではどちらがいいんでしょうか?
ただtruncateの使い方がちょっと違うだけなんですが・・・。
それ以前に文法的に間違っていたらご指摘お願いします。
0334nobodyさん
02/12/10 16:11ID:???>332さんごめんなさい。
0335nobodyさん
02/12/10 16:17ID:???せめて、配列じゃなくって$hoge1という変数が欲しい
理由を書いてもらえませんか? もしかするとその原因
自体変更することで、全体としてすっきりするっていう
可能性もありますから。
0336nobodyさん
02/12/10 19:01ID:4NsDPNiK作ろうとしてるのは、パスワードを作るだけのスクリプトと、そのパス
を使って管理する掲示板なんだけど・・・文法チェッカかけたら
「Missing right curly or square bracket at hoge.cgi line 65, at end of line
syntax error at hoge.cgi line 65, at EOF
hoge.cgi had compilation errors.
」
ってなってしまった。。。
0337336
02/12/10 19:02ID:4NsDPNiK0338nobodyさん
02/12/10 19:04ID:???メールの受信をしたいので、下記のように記述したのですが
0 use Net::POP3;
1 unless ($pop = Net::POP3->new("$HOST")) {
2 print "POP3接続失敗 \n";
4 }
5 $pop->user($LOGIN_NAME);
6 $auth_check = $pop->login($LOGIN_PASS);
7 if( $auth_check == undef )
8 {
9 print "認証: NG \n";
10 }
どうしても、認証NGとなってしまいます。
POPサーバーには、Win2000 exchangeを使用しているため
ログインユーザー名に、「ドメイン\\ユーザー名」と記述したり、
しなかったり、と色々試してみたのですがダメでした。
ちなみに、モジュールが置いてあるマシンからPOPサーバーへの
pingは通りました。
どなたか、分かる範囲で構いませんので
ご指摘下さい。
0340336
02/12/10 19:06ID:4NsDPNiK暗号化して、それをファイルに保存(ファイルを作成というコマンド
がない?ので、ロックファイル作成のコードを使ってます)、というもの。
エラーが出ている65行目は。。。
sub error {
&head;
print <<"ERR"; #ここが65行目。
<center>
<hr>
<font color="#C20000"><b>エラー</b></font><hr>
$_[0]
<hr>
</body>
</html>
ERR
}
何が違うんでしょう??
0341336
02/12/10 19:07ID:4NsDPNiKカッコ?!
・・・見てみます。
0343nobodyさん
02/12/10 19:17ID:???0345338
02/12/10 21:05ID:???とりあえずもう一度、修正版を書いておきます。
0 use Net::POP3;
1 unless ($pop = Net::POP3->new("$HOST")) {
2 print "POP3接続失敗 \n";
4 }
5 $pop->user($LOGIN_NAME);
6 $auth_check = $pop->pass($LOGIN_PASS);
7 if( $auth_check == undef )
8 {
9 print "認証: NG \n";
10 }
0346nobodyさん
02/12/10 21:24ID:???0347nobodyさん
02/12/10 21:51ID:???@test=("か","き","く","け","こ");
@hoge=("あいうえお","テスト","さしすせそ","たちつてと","");
@hoge{1}=@test;
$data=@hoge[0];
このようにすると$dataの中には「か」だけが格納されてしまうのですが。
0349347
02/12/10 21:53ID:???正 $data=@hoge[1];
0350nobodyさん
02/12/10 21:56ID:???0352nobodyさん
02/12/10 23:43ID:???@test=("か","き","く","け","こ");
@hoge=("あいうえお","テスト","さしすせそ","たちつてと","");
$hoge[1] = \@test;
print $hoge[1]->[5];
print $hoge[1][3];
print @{$hoge[1]}
0353nobodyさん
02/12/11 00:22ID:???open(FILE,"xxxx");
@file = <FILE>;
@file = @file[0..8];
seek(FILE,0,0);
print FILE "zzzz";
print = @file;
close(FILE);
このように添字を使って”xxxx”の記録数を10にしたんだけど、
これはかなりダサイやり方?
0354nobodyさん
02/12/11 01:45ID:fCm39Cv9モードは"+>"だよね。そのコードからすると。
@file = ();
push @file, scalar <IN> for 0..8;
のほうがいいと思うよ。
0355nobodyさん
02/12/11 11:59ID:IDueDvlEこちらのスレに対策知ってる神はいらっしゃる?
0356nobodyさん
02/12/11 12:50ID:???$sql = "insert into *** values( '***' )";
$statement = $dbHandle->prepare( $sql );
$sqlResult = $statement->execute;
この$sqlResultには何が返ってくるのでしょうか。
見たんですけど何も入っていませんでした。
0357nobodyさん
02/12/11 13:21ID:mexeU5Q0しても
timelocalが使えません。
助けてください。
0358nobodyさん
02/12/11 13:25ID:???実はPerl4ってことはないか?(w
ところでどう使えないんだ?エラーが出るのか?値が不正なのか?
良ければここにソースを書いてみれ。
0359nobodyさん
02/12/11 13:25ID:mexeU5Q0のことは忘れてください。。。
0360nobodyさん
02/12/11 14:40ID:???Firebirdかなんか知らんが、つまりはDBIだしょ?
$sqlResult = $statement->execute();
で、処理した件数が返ってくるはずだが・・・
0361nobodyさん
02/12/11 15:55ID:3BdsDO3lコマンド「chmod」の代わりになるコマンドってあるんですか?
もしあるのであれば教えてください。
もしくは
$ImgFile = "$ImgDir$no$tail";
if (!open(OUT,"> $ImgFile")) {
if ($clip_err) { &error("画像のアップロードに失敗しました"); }
}
binmode(OUT);
binmode(STDOUT);
print OUT $upfile;
close(OUT);
chmod (0666,$ImgFile);
この部分をchmodを使わずに構成する事はできませんか?
>>1で指定された書き方が出来そうにないのでこういう形でお聞きします。
どなたかお願いします。
0362nobodyさん
02/12/11 16:10ID:???open(OUT, "> $ImgFile")より上に umask 0;
0363nobodyさん
02/12/11 16:22ID:IDueDvlEいえ、Perl4なんてことはないっす。w
前はActivePerl5.6.1ビルド633でGDBM_FileをPPMインスコした記憶があって、
今回ActivePerl5.8.0ビルド804にする際以前の5.6.1ビルド633は綺麗さっぱり
DISKから消してしまったんです。GDBM_Fileは後からインスコすればいいという
考えで。
そしていざGDBM_Fileのインスコしようと思ったら、Perl5.6用しか見つからなくってお口あんぐり状態な訳です。
エラーは
Can't locate GDBM_File.pm in @INC (@INC contains: C:/perl/lib C:/perl/site/lib .) at (eval 1) line 2. BEGIN failed--compilation aborted at (eval 1) line 2.
と、漏れのマシンにGDBM_Fileが装備されてないって出ます。
ソースの抜粋は。。。自分が作ったスクリプトじゃない配布物なんで、カキコするのもちと・・・。
動作は電話帳データベースのようなもので、電話番号を入力すれば住所が分るといったものと同等です。
暫く待てばPerl5.8(Windows)用のGDBM_Fileが出てくるのかな?
0364nobodyさん
02/12/11 16:44ID:???chmodの行を削って
open(OUT, "> $ImgFile")より上に umask 0;
という事でよろしいですか?
ありがとうございました。
0365nobodyさん
02/12/11 17:50ID:???require './jcode.pl'; # jcode.plのパス
をしてjcode.plを呼んでるんですけど、コマンドラインで
「C:\>perl "C:\Documents and Settings\***\デスクトップ\unko.cgi"」
を実行すると、
「Can't locate ./jcode.pl at C:\Documents and Settings\***\デスクトップ\unko.cgi line 17.」
と出てしまいます。
(webだとエラーになりません。ローカルではデスクトップでスクリプトを実行しています。)
なぜでしょうか。
0366nobodyさん
02/12/11 18:14ID:???require '.\jcode.pl';
0367nobodyさん
02/12/11 19:35ID:???カレントディレクトリに jcode.pl がないんでしょ。
そのコマンドラインだと、カレントは C:\ で、スクリプトのある場所と違ってるし。
0369nobodyさん
02/12/11 20:59ID:???じゃぁいちいち、perlのスクリプトがある場所までcdしてからやらないといけないのですか?
毎回cdするのは結構面倒だと思うんですけどどうなんでしょうか。
0370nobodyさん
02/12/11 21:03ID:3ApX3k5Y0371nobodyさん
02/12/11 21:08ID:???0372nobodyさん
02/12/11 21:32ID:IDueDvlEそうなんです。Perl5.6用は見つかるんですが5.8用に全く行き当たらなくって。
グーグルしか使ってませんが。w
暇を見てぼちぼち探してみます。
>>365
いっぺんお使いのPerlにJcodeをインスコしてみてはどうでしょ。
コマンドプロムプトで
perl -MCPAN -e shell
してから、プロムプトがcpanに変化しますんで
>cpan install Jcode
でいけるかと。
0374nobodyさん
02/12/11 22:10ID:a27i1ZyR上手くいきません。Perl5を使っています。
#!/usr/bin/perl
$file = 'split.txt';
open(IN,$file);
@data = <IN>;
close(IN);
foreach(@data){
($1,$2,$3,$4) = split(/ /,$_);
$newdata = "$4,$3,$2";
open(OUT, ">$file");
print OUT "$newdata\n":
close(OUT);
}
exit;
これを走らせると
Modification of a read-only value attempted at split.cgi line 9.
と split の部分にエラーが出てしまいます。
どうしたらいいんでしょうか?
0375nobodyさん
02/12/11 22:15ID:qA0+bOBO$1とか$2というのはマッチの特殊変数。
任意の値を代入することは出来ない。
変数名を別なのに変えるべし。
0376nobodyさん
02/12/11 22:22ID:???もしくはヘビーユーザー( ´∀`)
>>374
同じファイル2回もopenするのは無駄っぽいから、
>>331(の下のやつ)みたいに1回にまとめた方がいいかもね。
0377nobodyさん
02/12/11 22:26ID:???0378374
02/12/11 22:34ID:???とりあえず、出来ました。ありがとうです。
chomp(だっけ?) だかなんだかを使ってやるやり方があったような…
0379nobodyさん
02/12/11 22:47ID:???つーか、chomp使ってないから、できたファイルは意図したようにはなってないはずだが?
0380ありゃ
02/12/11 23:15ID:pgarahTm削除したいのですが、
foreach (values %array){
s/ //g;
print "$_\n";
}
とした場合と、
foreach (values %array){s/ //g;}
foreach (values %array){print "$_\n";}
とした場合、私のローカル環境(パールのバージョン:5.6.0 built for i386-linux)
では、同じ結果が出るのですが、ほとんどのレンタルサーバ上で
実行すると、違った結果が出力されてしまいます。
なぜでしょう?
}
0381353
02/12/12 00:03ID:???レス、サンクスです。
>モードは"+>"だよね。そのコードからすると。
"+>"と"+<"は意味は同じですよね?ちなみに僕は"+<"です。
open(FILE,"xxxx");
@file = ();
push @file, scalar <FILE> for 0..8;
seek(FILE,0,0);
print FILE "zzzz";
print = @file;
close(FILE);
こんな感じでいいんですよね?
いまいち”scalar <FILE> for 0..8”この辺の書き方が曖昧にしか理解できていないど、
本でも読んで理解したいと思います。
0382nobodyさん
02/12/12 00:04ID:???0383nobodyさん
02/12/12 00:53ID:???話じゃないよね? っていうか「違った結果」の
希望とする値
実際の結果
の両方が見たいんですけど。
0384nobodyさん
02/12/12 01:25ID:ZGG2sBOp違うよ。
"+>"は内容を消す。
"+<"は内容がそのまま残ってしまう。
素直に一旦読んだ後書き込みで開き直した方がいい。
0385ありゃ
02/12/12 01:56ID:DcSt6eP2すみません、
%array = ('one' => '0 1','two' => '0 2','three' =>
'0 3');
とした場合、希望する結果は01と02と03が表示されることで、
私のローカル環境(パールのバージョン:5.6.0)
では、上下どちらの書き方でも同じ結果が出ますが、
実験した複数のサーバでは、
上の場合では0 1と0 2と0 3が表示され、
下の場合では01と02と03が表示されてしまいます。
実験したサーバのひとつは、パールのバージョンが5.0
だったので、単にバージョンの違いでしょうか・・・。
0386Q1
02/12/12 03:43ID:???ランダムリンクを作成して、
処理で
print "Location: http://xxxx.xx.xx/\n\n";
として飛ばしているのですが、
サンプルで自分のホームページを登録したのですが、
試して見ると、 302 FOUNDと表示されます。
この処理はアンカータグを使い、getの処理で呼び出しているのですが、
呼び出すページと飛ぶページが同じだと、302が表示される様なのですが、
これを回避する方法はないでしょうか。
「302を表示させずに、そのページへ飛ぶ。」というのは可能でしょうか。
0387マリモーマ
02/12/12 05:04ID:ItnO3SiH&header;
print "<meta http-equiv=refresh content=0;url=http://$url>";
exit;
0388Q1
02/12/12 05:39ID:???検討してみます。
ありがとうございました。
0389nobodyさん
02/12/12 09:19ID:???> if ($mode %2 != 1) {
っていうのがあるんですけど、これの %2 って何ですか?
0392391
02/12/12 09:33ID:???0393389
02/12/12 11:25ID:???>2で割った余り。
あっそうか。% と 2 がくっついてるので
「またPerlの記号的な記法か」と思ってしまいました。
ありがとうございます。
0394nobodyさん
02/12/12 11:55ID:???0396353
02/12/12 15:33ID:???と言うことは
open(IN,"<xxxxx");
flock(IN,2);
@file = ();
push @file, scalar <IN> for 0..8;
close(IN);
open(OUT, "+>xxxxx");
flock(OUT,2);
seek(OUT,0,0);
print OUT "zzzzz\n";
print OUT @file ;
close(OUT);
とした方が良いみたいですね。
なんとなくopenを2回するのは、あんまりいいことではないと思っていました。
"+<"と"+>"の違いも教えてもらって、感謝します。
0400336
02/12/12 19:14ID:BLMNLzB2ここ間違ってました。
sub decode {
if ($ENV{'CONTENT_LENGTH'} > 51200) { &error("長すぎます"); }
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
@pairs = split(/&/,$buffer);
foreach $pair (@pairs) {
($name,$value) = split(/=/, $pair);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
# S-JISコード変換
&jcode'convert(*value,'sjis');
}
}←このカッコを忘れていた。
エラーメッセージよりだいぶ上(^^;
・・・でも動かない。なんでだろう。
ファイルへの書き込みが出来ていないみたいなんですが。。。
>>344
それはここに書き込む時に付け加えたので問題ないです(^-^;
0401336
02/12/12 19:18ID:BLMNLzB2#入力された内容をファイルを作って保存する。
sub words {
$file = "./pass.txt";
if($in{'pass'} eq ""){ &error("設定できませんでした"); }
open PD, ">$file" or &error("システムエラー発生");
@pwd = ('a'..'z','A'..'Z','0'..'9','.','/','%');
srand;
$kw = $MIX[int(rand(@pwd))] . $MIX[int(rand(@pwd))];
$words = crypt("$in{'word'}", $kw);
print PD "$words";
close PD;
}
@pwdの変数をちょっと変えているんですが、これは使っては駄目ですか?
(%とか/とか。)
#参考にした掲示板スクリプトでは中身が9までしかないです。
#それ以降は私の付け加え。
0402336
02/12/12 19:19ID:BLMNLzB20403nobodyさん
02/12/12 19:51ID:???@MIXって @pwd じゃない?(別に@MIXがあるのかな)
あと、cryptの salt($kw) は '%' は使えません。
それ以外の64文字は使えるので、 int(rand(@pwd)) は int rand 64 でもOK。
0404nobodyさん
02/12/12 20:01ID:???以下のようなsort したデータがあります。
名前,点数というデータの形(配列)です。
山田,28
山田,39
佐藤,94
加藤,83
加藤,28
加藤,28
木下,23
木下,33
ここから、各人の合計点を出したいのですが、どうするのが良いでしょうか?
名前でuniqする方法は分かるのですが、点数を足していく方法がわかりません。
ヒントだけでよいので、お願いします。
0405nobodyさん
02/12/12 20:07ID:ZGG2sBOp@dataに入ってるとして、
%hash=();
for (@data) { my @array = split/,/; $hash{$array[0]} += $array[1]}
で%hashに入る。
0406nobodyさん
02/12/12 21:01ID:???すげーー!目からウロコ。thanx
12行位かかって書いてたのに、一行って!(for は foreachでなくてもOK?)
平均点(合計点 / 名前の出現回数)を出すには、
%hash=();
$no =1;
for (@data) {
my @array = split/,/;
$hash{$array[0]} += $array[1];
if ( $prev_name eq $array[0]){ $no ++; }else{ $no = 1; }
$avg = $hash{$array[0]} / $no;
$prev_name = $array[0];
}
??? とか? やっぱ頭悪い。
0407nobodyさん
02/12/12 21:16ID:???割り算の後に小数点を下2桁まで表示したいのですが、
sprintf("%4.2f",$a) すると割り切れる時でも小数点以下に 3456.00
と出てしまいます。
割り切れない場合、 1234.56
割り切れる場合 1000
と表示するにはどうしたらよいのでしょうか?
0408nobodyさん
02/12/12 21:20ID:H3YHNRGsuse strictってなんでみんな使わないの?
0410nobodyさん
02/12/12 21:26ID:???そうかなあ。ちゃんとしたPerl使いならもちろん
使っているだろうけど、CGIだけのためにPerlやってる
人ってなんかそういうのあんまり意識してないような。。。
0411nobodyさん
02/12/12 21:33ID:???$a =~ s/\.00$//;
>>410
巷で配布してるCGIはピンからキリまであるからなあ。
あと配布用にPerl4でも動くようにしてるところもあるでしょうし。
0413ななし
02/12/12 22:17ID:???なんとか方法は分かったんですが、ブラウザにドラッグするののやり方が
わかりません。おしえてください。おねがいします。
0414nobodyさん
02/12/12 22:20ID:???0415nobodyさん
02/12/12 22:21ID:LUwqAPKoありがとうございます。
そういう方法しかないんですかね。結局。
あるサイトに
$a = int($a * 100)/100;
ってあったんですけど、これだと無駄が多そうですよね。
$a =~ s/\.00$//;
$a =~ s/\.0$//;
の方が早そうですね。
0417nobodyさん
02/12/12 22:50ID:rgoFlUwc★http://yahooo.s2.x-beat.com/linkvp/linkvp.html★
0418n
02/12/12 22:51ID:rgoFlUwc★http://yahooo.s2.x-beat.com/linkvp/linkvp.html★
0420nobodyさん
02/12/12 23:16ID:???>407を読み直した方がいいかも。
0421nobodyさん
02/12/12 23:19ID:i62/L17Z0423422
02/12/13 00:04ID:???$b+=0;
の間違い。
0424nobodyさん
02/12/13 00:12ID:???ベタだけど、
%hash1=%hash2=();
for (@data) {
my @array = split/,/;
$hash1{$array[0]} += $array[1];
$hash2{$array[0]}++;
}
$hash1{$_} /= $hash2{$_} for keys %hash1;
でどうかな。(結果は%hash2)
0425398
02/12/13 00:53ID:???0427424
02/12/13 08:15ID:???0428nobodyさん
02/12/13 11:37ID:???検索すれば理由は簡単に判りそうな気がするけど・・・
ttp://www.ryu.dyn.to/cgi-bin/tree.cgi?action=clip&no=771
※※※これは「Return-Path」のみの検索キーで見付けた※※※
注)自力で調べる努力を怠ってる人はまともに相手をして貰えません
0430nobodyさん
02/12/13 15:58ID:???の者ですが。色んな方法がありますね。
sprintf($a=~s/\.0+//?"%4f":"%4.2f",$a)
と
$b=sprintf('%4.2f', $a); $b+=0;
が一番シンプルそうです。
>>419
int $a ではいけないですよね?
0431nobodyさん
02/12/13 17:39ID:iG+3sspLCSVで貯めるのですが、その際、CSVデータが誕生日$yyyy,$mm,$ddで
ソートしたいのですがいつソートするんでしょう?
1回そのまま書き込んで、もう一回呼んで、ソートしかないですか?
書き込む前にソートできますか?
0433nobodyさん
02/12/13 18:16ID:???好きなように決めてくれ。
書き込みが追加書き込みなら、読んでからソートのほうが改造が楽。
基本的には頻度が少ないほうでソートするべきだろう。
0434nobodyさん
02/12/13 19:29ID:4EJmzvt/@MIX??・・・は、ないです。
$MIXではなく@MIXにしないといけないのでしょうか。
あ、あと%の件ありがとうございました(^^;
で、書き直しましたが、これでもできてないです。
文法エラーとかInternalエラーとかは一切出ず、フォームに
言葉を入れてボタンを押すとリロードされます(これはちゃんとした処理)
動いているように見えるんですけど、PDへの書き込みが出来てません。
どこで引っかかっているのかな・・・。
cryptが動いていないのか、ファイル書き込みが動いていないのか。。。
0436nobodyさん
02/12/13 20:12ID:???そもそも、
$kw = $MIX[int(rand(@pwd))] . $MIX[int(rand(@pwd))];
は、
$kw = $pwd[int(rand(64))] . $pwd[int(rand(64))];
であるべきでは?
あと、
print PD "$words";
は、何かセパレータを入れておくべきかも?
例:
print PD "$words\n";
13文字ずつで切り出せばよいけれども。
0437nobodyさん
02/12/13 20:13ID:???これはちょうど表示部分のところです。
#このスクリプトの名前,"bbs.cgi"
$pagemax = "1ページの表示数";
$file = "データファイル";
open(OUT, "<$file");
flock(OUT,2);
@view = <OUT>;
$log = @view;
if($ARGV[0] =~ /\d{1,3}/){
print @view[$ARGV[0]..$ARGV[0]+$pagemax];
$ARGV[0] += ++$pagemax;
if($ARGV[0] < $log){
print "<a href=\"bbs.cgi?$ARGV[0]\">NEXT</a>";
}
}else{
print @view[0..$pagemax];
if($log > $pagemax+1){
$pagemax++;
print "<a href=\"file.cgi?$pagemax\">NEXT</a>";
}
}
close(OUT);
とりあえずこれで動作はしたんですが、もっとスマートな方法はないですかね?何かすごく効率が悪そうなんで。
0438nobodyさん
02/12/14 01:20ID:???去年まで金無し君だったけど、オンラインカジノとパチンコで
二年で350万貯めた。一度やってみなよ。
初回のみだけど、1ドル以上のチップを買えば30ドル(4000円くらい)貰える。
もらうだけもらってプレイせずに換金することもできるし、ルーレットで赤か黒に
思い切って賭けてしまえば50パーセントで二倍になる。
金なきゃオフラインでゲームすればいいだけ。暇つぶしになる。
ビデオポーカーとかスロとか色々あるのでマジでお勧め。
http://www.imperialcasino.com/~1kl5/japanese/
0439nobodyさん
02/12/14 11:40ID:???無駄なところは読み込みたくないので
何行目〜何行目 を ハンドルに放り込む方法はないのでしょうか?
0440439
02/12/14 11:57ID:???ちょっとログがMB級あるんで
必要なところだけ読み込めたら楽なんだけど
0441nobodyさん
02/12/14 12:20ID:???原始的な方法でいいなら、100〜200行の場合。
$from = 100;
$to = 200;
open(IN,$file);
foreach $l(1 .. $from-1){<IN>;}
foreach $l($from .. $to){push(@data,<IN>);}
close(IN);
とか。
過去スレで出た方法だと、行の始まりのインデックスを別ファイルに保存して
readで呼び出すとかあったかな?
0442nobodyさん
02/12/14 12:59ID:???データを展開しないで指定行に飛ぶのは無理っぽい。
0443439
02/12/14 13:08ID:2kNAmjtjログファイルの記録方法を考え直して見ます
0444nobodyさん
02/12/14 13:12ID:???0445nobodyさん
02/12/14 15:48ID:???$from = 100;
$to = 200;
$lines = $to - $from + 1;
open IN, "head -$to | tail -$lines |";
0447439
02/12/14 17:45ID:???open IN, "head -$to $filename | tail -$lines |";
で逝けそうですね ありがとうございます。
0448nobodyさん
02/12/14 19:22ID:???while (<IN>) {
next if ++$count < $from;
last if $count > $to;
...
}
ファイルの大きさと、指定範囲によるけど、
数千行ぐらいなら十分かなぁと。
パイプは起動コスト高いから、ベンチとって見るのがいいと思う。
perlメモにperlでtailするサンプルあったけど、正直大して早くなかった。
でもお勧めは、バークレイDBかな。。身も蓋も無いけど。
0449nobodyさん
02/12/14 21:36ID:???自動で、別窓で一覧にして永久的に表示するというのをやりたいのですが
どうしたらいいでしょう
0451nobodyさん
02/12/14 21:49ID:???0453nobodyさん
02/12/14 23:14ID:TSZsnHUGAn electric wave boy is the reason which carried out the way which finishes being incomprehensible...
電波少年は不可解な方法を実行した理由です...
微妙ですが
0454nobodyさん
02/12/15 00:32ID:???0456nobodyさん
02/12/15 02:18ID:???0457nobodyさん
02/12/15 02:56ID:N8e98l/q$value{key}
この二つではどちらが書き方として正しいのでしょうか?
0458nobodyさん
02/12/15 03:13ID:brjLalCm↑ここはどうですか?
0460nobodyさん
02/12/15 04:02ID:N8e98l/qいちおうどちらの形にしても、同じ値が見れるので
どっちでもいいのかなと思ったのですが。。。
0461nobodyさん
02/12/15 11:28ID:???perl5以降なら$value{key}
0463nobodyさん
02/12/15 21:08ID:5VtRENUn参考になるサイト、書籍等ありますでしょうか?
0464nobodyさん
02/12/15 22:17ID:V1pBf1mlどなたか教えてください。
use strict;
print ${&return_html};
sub return_html {
return \"<p>てすと</p>";
}
これを実行すると当然のごとく<p>てすと</p>が出力されますが、
1.この”<p>てすと</p>”が記憶される領域は変数を宣言して確保するのとどう違うのでしょうか。
2.これが記憶されている領域はいつまで読めることが保証されているのですか?
(読まれる可能性があるときまで保持して置くように勝手にコンパイルされるのですか?)
3.このように値の参照を返す方法は返す内容が膨大になった時に、
値そのものを返すよりパフォーマンスの点で期待できますか?
いまいち上手く説明できないので質問の意図がわからないかもしれませんがよろしくお願いします。
0465nobodyさん
02/12/15 23:20ID:1E3ue/P5よくわからんけど・・
1. 無名のスカラーのリファレンスだという所。
2. 参照されている間、だから、printの次の行では、もう消滅している(読む手段がなくなるから)、かな??
3. 期待できる
0466464
02/12/16 03:56ID:???それで納得いきました。
0467nobodyさん
02/12/16 14:33ID:P42iaa2L上手く <p>文章</p> としてやりたいのですが、上手くいきません。
改行コードを </p><p> に置換しても、最初の部分で </p> が余ってしまうし。
どうにか上手く囲えないですかね?
0468nobodyさん
02/12/16 14:51ID:3MTAHZ/Xデータを$detaに入れるとして
$deta = "<p>$deta</p>";
$deta =~ s/[\r\n]/<\/p>\n<p>/g;
これでダメ?
0469nobodyさん
02/12/16 18:06ID:y6GM3n5O#改行コードを統一
$str =~ s/\x0D\x0A/\n/g;
$str =~ s/\x0D/\n/g;
$str =~ s/\x0A/\n/g;
#行末の改行を削除
$str =~ s/\n+$//;
#空行があれば段落とみなす
$str =~ s/(.+?)(\n{2,}|$)/($_ = $1) =~ s!\n!<br \/>!gs; "<p>$_<\/p>\n";/gse;
これじゃダメかな。
0470nobodyさん
02/12/16 20:20ID:???467じゃないけど、
いま改造してるヤツでありがたく使わせてもらいます。
うまくできました。
でもなんでそれでできるのか解らない漏れ・・・
0471nobodyさん
02/12/16 23:10ID:???俺だけ?
CGI.pm使ったら、すっきりするような。
0472nobodyさん
02/12/17 00:06ID:x9yr2U770473471
02/12/17 00:56ID:???改行をそのまま<p></p>にするのか、それとも<br/>にするのか、
それとも二行以上あいているのを<p></p>にするのかとかさ。
その辺の処理をきちんとしないときちんとしたものはできないと思う。
0475469
02/12/17 02:04ID:???こういう所にレスをつけるときは、答えを書くというより参考になればなと思って書いています。
今回の例だと少し正規表現いじれば、471さんの言うようなケースには合わせられるわけですし・・・
0476nobodyさん
02/12/17 15:15ID:/cJ6LV5I0478nobodyさん
02/12/17 15:37ID:???○use Socket;
0479434
02/12/17 16:27ID:dfOkftcJう〜ん、パスワードを別ファイルに保存するのは無理なのかな・・・。
0480nobodyさん
02/12/17 16:59ID:dfOkftcJする、っていうのをつけようとしています。
が、500エラーになってしまいました。こういうふうに書いたのですが、何が
間違っているでしょうか。
#設定部
#メール通知機能
#0:使用しない
#1:管理人の投稿も通知する
#2:管理人の投稿は通知しない
$mailing = 2;
#管理人の名前(メール通知2の時設定)
$adname = "管理人";
#sendmailのパス
$sendmail = '*****';
# 通知先
$mailto = '****@*****';
#ここまで。
#以下を「書きこみ処理」サブルーチンの一番最後に追加。
if ($mailing == 1) { &mail_to; }
elsif ($mailing == 2 && Form{'name'} ne "$adname") { &mail_to; }
}
↑サブルーチンの締めかっこ。
元になってる掲示板はLiteboard。
0481nobodyさん
02/12/17 17:00ID:???0482nobodyさん
02/12/17 17:31ID:???>>401の $MIX[] を $pwd に変えて
sub words { ... };
&words;
でやったらちゃんとできた。
&wordsはちゃんと呼び出されてる?
もしかしたら crypt() がMD5専用かもしれないので(BSD系の場合?)、
$words = crypt($in{'word'}, '$1$' . $kw);
でやってみたら。
0483nobodyさん
02/12/17 17:31ID:???ttp://pc.2ch.net/test/read.cgi/php/1028193595/
【 スクリプト改造工房 PART 5 】
0484nobodyさん
02/12/17 18:21ID:???> Form{'name'}
$Form{'name'}じゃないのか?
それと、なぜ$adnameを引用符でかこんでいるのかわからん。
0485nobodyさん
02/12/17 18:44ID:c+lM3tmR---●●●変態痴女を紹介致します。●●●---
例えば>欲求不満オマ●コヌレヌレ女・露出オナニー痴女・
フェラチオおしゃぶり女・ミニスカ・ノーパン娘・巨乳パイズリ娘・
アナルSEXおねだり娘・オマ〇コ弄られマン汁グチョグチョ女・
SM牝豚・緊縛・浣腸・スカトロ・等・・・刺激を求めています。
●●●学生・OL・主婦・モデル・牝豚・女王様・オカマ等・多数!●●●
090-8002-8356番
下のカタカナを小文字に変換してください。
http://www.エムティーティー.jp/i
0486Omoti@2ちゃんねるアナリスト ◆hFOmotia5o
02/12/17 19:17ID:???既婚女性板
● ちょっと奥様今年のご主人のボーナスおいくら?
http://human.2ch.net/test/read.cgi/ms/1039952630/
のスレの書き込みのボーナスの金額をスマートに抜き出して
統計処理したいのです。どうすればいいでしょうか。
0488Omoti@2ちゃんねるアナリスト ◆hFOmotia5o
02/12/17 19:43ID:???アドバイスありがとうございます。
できれば、人間の手でやるのではなくて、
もっとスマートにできないものでしょうか?
0489nobodyさん
02/12/17 20:02ID:???0490Omoti@2ちゃんねるアナリスト ◆hFOmotia5o
02/12/17 20:07ID:???2ちゃんねらーにしては、あきらめが速いですね?
不可能を可能にするのがプログラマーでは?
ま、私自身もうまい方法が思いつかないので
ここで相談してるわけですが(@w餅
0491nobodyさん
02/12/17 23:25ID:???こういうのはゴリゴリソースを書いていくしかないね。
.datを取得して、行に分解する。
その一行一行に対して以下の処理を行う。
・書き込みのみを抜き出し、
・全角数字を半角に変え(正規表現にひっかかるように)、
・半角カタカナを全角に変え(ひっかかりやすくするように)、
・数字の連続+「マン/マソ/万」をボーナス額と考えて正規表現で取得する。
・例外として「ゼロ」は0として扱う。
・以上の条件にあてはまらない時は、その行には金額が書き込まれていないと判断する。
こうして得られたデータを表示するなり別ファイルに書き出したりして保存する。
こういう流れだろうな。
後は実際にスクリプトを起こすだけだが、
それぐらいなら初心者と言ってもできるだろう?
んで、実行してみてうまく抜き出せない場合は、条件を見直す訳だ。箇条書きの部分な。
そんじゃ健闘を祈る。
0492Omoti@2ちゃんねるアナリスト ◆hFOmotia5o
02/12/17 23:33ID:???おお。詳しい説明ありがとうございます。
やってみます。今後ともよろしくお願いします。
0493木田
02/12/18 00:04ID:???http://www.diohosting.com/jp
0494nobodyさん
02/12/18 00:23ID:???0496
02/12/18 01:27ID:uR+QrFPjエラーがでてしまいます。検索してもおかしくなさそうに見えるのですが…
perl -e"s/aaaa/bbb/g;" *.txt
<エラーメッセージ>
Unquoted string "perl" may clash with future reserved word at
"C:\WINDOWS\デスクトップ\test.pl" line 1.
syntax error at "C:\WINDOWS\デスクトップ\test.pl" line 1, near "perl -e"
Unquoted string "txt" may clash with future reserved word at
"C:\WINDOWS\デスクトップ\test.pl" line 1.
"C:\WINDOWS\デスクトップ\test.pl" had compilation errors.
以上、よろしくお願いします。
0497nobodyさん
02/12/18 01:31ID:1Ah7QOiOHOGE
までの中で計算する方法ってなにか無いのでしょうか?
0498nobodyさん
02/12/18 01:49ID:cSfhj2ax夜も更けて参りましたので今宵はお休み下さい。
0499496
02/12/18 02:01ID:???そうですか、ではまた明日伺います。お休みなさい。
0500nobodyさん
02/12/18 03:35ID:???【Perl 】初心者コーナーPart5
http://corn.2ch.net/php/kako/988/988728069.html
ここの256あたりからやり方が書いてあるよ。
0501nobodyさん
02/12/18 04:29ID:???それはスクリプトの中に書くものではなく、コマンドラインから実行するもの。
スタート>プログラム>MS-DOS プロンプト(またはコマンドプロンプト)
C:\WINDOWS>cd デスクトップ
C:\WINDOWS\デスクトップ>perl -e "s/aaaa/bbbb/g;" *.txt
0502nobodyさん
02/12/18 06:19ID:+CI84VDc@a = sort {$a cmp $b} @a;
print @a;
実行すると、一三四二 となります。
漢字の数字って、どうやって並べるの?
できればこれを 一二三四 にしたいんだけど、
どうすればいい?
0503nobodyさん
02/12/18 08:24ID:???漢数字は、漢字コード上では順番に並んでないから、ソートできないよ。
通常は普通の数字で処理して、表示するときに漢数字に変換するといい。
0504nobodyさん
02/12/18 11:45ID:8xOlQixN処理にいささか困ってます。送信フォームから来る情報は
検索文字 and検索(ラジオボタン)にするか 検索ファイル(チェックボックス) です。
and検索にするかと検索ファイルは情報が可変長なので困っています。
このような場合は受け取った情報を一つずつ解析していくのがベストなのでしょうか?
検索という性質上、0.1秒でも処理を早くしたいのでベストな手順を
教えていただけないでしょうか。お願いします。
0505nobodyさん
02/12/18 11:48ID:???0506nobodyさん
02/12/18 12:27ID:???0507nobodyさん
02/12/18 13:44ID:dss5kZ4mとやっても全角スペースが消せません。sjis
簡単な正規表現か何か希望。
\Q\Eつけても、一時的にEUCにしてもだめでした。
いい正規表現かなにかないですか?
0509トリップはマイクロソフト ◆lKiTB20t66
02/12/18 16:55ID:9mUf2zGi配列の任意の場所に値を入れたらそれ以降をずらしてくれる
関数有りますか?
ex.
[a][b][c]
[b]と[c]のあいだに[x]を入れると
[a][b][x][c]
こういう風なイメージです。こんなのありますか?
0510nobodyさん
02/12/18 16:58ID:???0511トリップはマイクロソフト ◆lKiTB20t66
02/12/18 17:00ID:9mUf2zGiいえいえ単次元配列で構いません
配列に値を入れたらそれ以降がずれてくれれば
それで構いません
0512nobodyさん
02/12/18 17:17ID:???s/"活動内容",//;
のように消去させると
<AD><A1>
のようなへんなコードが出来てしまいます。
日本語を安全に置換するにはどうすればいいでしょうか?
0513いきぬきを
02/12/18 17:26ID:xIqy3Dxbダウンロード 世界標準
http://www.kisslovetoco.com/
0514bloom
02/12/18 17:30ID:fboSAjfAhttp://www.agemasukudasai.com/bloom/
0515nobodyさん
02/12/18 17:39ID:???splice
0518nobodyさん
02/12/18 18:12ID:R82phE4X#! Perlのフルパス
を書くことによりファイル名を指定するだけで実行できるというのはLinuxでは出来ないのでしょうか?
0519nobodyさん
02/12/18 18:32ID:???コンパイラー、リファレンスの情報が探しても見つかりません。
ご存じの方はいらっしゃらないでしょうか?
0521518
02/12/18 19:08ID:R82phE4X実行権限を与えないと
Permission denied
の警告が出るんですよね?
実行権限を与える前も与えた後も
そんなコマンドねえよハゲみたいなメッセージがでるんです。
どうしたものでしょうか。
0523nobodyさん
02/12/18 22:06ID:???0524496
02/12/19 00:44ID:Duvh3oq4さっそくプロンプト上で同じコマンドを打ち込んでみたのですが、
なぜかそんなファイルはないというエラーがでました。
試しに存在するファイル名を直接打ってみると、これは動作しました。
ワイルドカードが効かない原因はなんなのでしょうか。
0525nobodyさん
02/12/19 06:29ID:ZsaWrRnVどうやら仕様が変更されて読み込めない。。。
Windowsでは(というかWindows標準のコマンドシェルでは)ワイルドカードは無意味だからね。
Googleで「Perl Windows Wildcard」で探してみるといい。
>>525
dbmopenは、インストールしてあるDBMモジュールから使用できるものを
動的に選ぶ仕様だから、5.6の方に標準以外のDBMモジュールをインストールしたなら
5.8にも同じモジュールをインストールしてみるといいかもしれない。
まぁ、仕様が変わったのかもしれないけど。
0528496
02/12/19 13:52ID:???なるほど、そうだったんですね。どうりでできないはずです。
perl windows wildcardやActive perl wildcardなどで
ググってみましたが、日本語サイトでは諦めている人の
情報しかありませんでした。
英語サイトを見ると解決法があるかなあ、
ここを見ろというサイトがありましたらどなたか教えて頂けませんか。
http://www.google.co.jp/search?q=perl+windows+wildcard&ie=UTF-8&oe=UTF-8&hl=ja&lr=lang_ja
この一番上の"jperl"というタイトルのページで紹介されている"Wildcard.pm"なんてどうかな。
使い方は
perl -MWildcard script.pl *.txt
という感じで。
または、CPANにあるWin32::Autoglobでもいいね。
0530496
02/12/19 16:11ID:???ありがとうございます、ばっちり走りました!
実はwildcard.pmはDLしていたのですが、使い方の説明も
書いてなかったので、どうしていいか分からなかったのです。
インストール先も分からなかったのですが、フォルダを覗いていたら
libフォルダに.pmファイルがたくさんあったので、入れてみたら正解
だったようです。
3日渡りお世話になりまして、皆さんありがとうございました。
0531518
02/12/19 17:17ID:gnHgtnzEありがとうございます。
やってみましたところそれでも
command not found
となってしまいます。
Perlのパスはtype -a perlで表示されたものでいいんですよね?
ちゃんとファイルの先頭に「ドットスラッシュ」を書いてください。
ファイルネームだけだとコマンドパス(/binとか/usr/binね)にあるコマンドのみを探します。
0533518
02/12/19 18:34ID:gnHgtnzE./ファイル名 と打ち込むのでいいのですか?
それでもやっぱり駄目ですね・・・。
どこかおかしいのかもしれないです。
0535518
02/12/19 19:10ID:gnHgtnzEPerl ファイル名 だとちゃんと動作します。
保存してあるディレクトリに移動して
#! Perlのパス や ./ ファイル名 では command not foundとなります。
0536nobodyさん
02/12/19 19:23ID:sSjdESWgっていうのを作ってほしいな・・
鬼のようなコードになってる。。
0537nobodyさん
02/12/19 19:49ID:???同じことをやるにしても、あのコーディングは凡人にはできない。
解析ガンバレ>536
0538nobodyさん
02/12/19 20:27ID:???ビビッタ
0539nobodyさん
02/12/19 21:25ID:???0540nobodyさん
02/12/19 22:58ID:SoXwX8I8http://www.yakin.cc/ch2.gif
0541nobodyさん
02/12/19 22:59ID:lw7wMpYEhttp://petitmomo.com/mm/
ここがちょっぴりエッチ系のめぐが運営している出会いサイトです。
もしよかったら使ってみて、、、
ヨロシクです。
めぐ(^o^)-☆
0542nobodyさん
02/12/19 23:14ID:ZsaWrRnVmother
hanako
father
taro
grandfather
kenzo
grandmother
hana
上記のようなテキストファイルがあります。
これを奇数番目をキーとし、偶数番目を値とする連想配列にしたいのですがどうしたらいいでしょうか?
つまり、
motherは、hanako
fatherは、taro
grandfatherは、kenzo
grandmotherは、hana
としたいのです。ご教授ください。
0544nobodyさん
02/12/19 23:31ID:sSjdESWg1.
%hash = map {
return chop($_);
} <TEXT>;
2.
while (<TEXT>) {
my $key = $_; chop($key);
my $value = <TEXT>; chop($value);
$hash{$key} = $value;
}
もうちょっとまともな手段で改行文字を消すこと。
0545nobodyさん
02/12/19 23:37ID:sSjdESWg0546nobodyさん
02/12/19 23:37ID:???はちょっと不親切のような気がする。
>>544
はちょっと冗長な気がする。
俺なら。
# ファイルを取得してリストに入れる。
open (IN, 'file.txt');
@line = <IN>;
close (IN);
# リストの全ての要素から、末尾の改行を取る。
chomp @line;
# そのまま代入する。
%hash = @line;
こんなもんかな。
0547修正版
02/12/19 23:42ID:sSjdESWgchop($_); $_;
} <TEXT>;
0548nobodyさん
02/12/19 23:44ID:sSjdESWgこう書いたほうが面白いと思って・・・
0550nobodyさん
02/12/20 00:01ID:LLjHcAeKあと、新バージョン。どちらかが空行で終了
while ((my $key = <> ) ne '' and (my $value = <>) ne '') {
chop $key, $value;
$hash{$key} = $value;
}
もしかしたら、ご希望の品はこっちかも。空行をkeyにしない
while (<TEXT>) {
chop;
next if ($_ eq '');
my $key = $_;
my $value = <TEXT>;
chop($value);
$hash{$key} = $value;
}
0551nobodyさん
02/12/20 00:03ID:???0552542
02/12/20 00:07ID:???>>550さんのも試してみます!ただ、例外処理は特に考えなくて良いんです。
みなさん、ありがとうございました!
0553544=547=550
02/12/20 00:15ID:???そのあたりも考えて使ってね...
冗長とか言われてるけど。。
0554nobodyさん
02/12/20 00:26ID:???0555nobodyさん
02/12/20 00:38ID:Av7thQVnそのサーバ上にあるアカウントとそのアカウントパスワードで
認証させるにはどうすればいいんでしょうか?
0556nobodyさん
02/12/20 00:40ID:Av7thQVn0557nobodyさん
02/12/20 00:47ID:???http://www.hoge.co.jp/index.html //comment
のように投稿者が書いた場合、//commentの部分の色を変えたいの
ですが、どのようにしたらいいのでしょうか?
正規表現を使って、取り出した文字列をタグで挟んだ形にしてやるという
ことはわかるんですが、 //commentの部分の取り出し方がわかりません。
お教え願えないでしょうか。お願い致します。
0558nobodyさん
02/12/20 01:03ID:???perl -pe 's{\s(//.*$)}{ <tag>$1</tag>}'
http://www.example.com/index.html <tag>//comment</tag>
で、どうでしょ。
0559nobodyさん
02/12/20 01:03ID:iYZ6MU3U$str =~ s|([\s]+)(//[\S]+)|$1<tag>$2</tag>|g;
$str =~ s|^(//[\S]+)|<tag>$1</tag>|g;
こんな感じかしら。
正規表現苦手。
0560nobodyさん
02/12/20 01:42ID:4aAUDwG2レスありがとうございます。
んー、どうもうまくいかないです。
$value =~ s~([\s]+)(//[\S]+)~$1<span class="comment">$2</span>~isg;
$value =~ s~^(//[\S]+)~<span class ="comment">$1</span>~isg;
と記述してみましたが変化なしです。
どうもとりだせてないようです。
^(//[\S]+)の部分を書き換えると部分的には色が変わるのでタグはあってるんですが。
どこに問題ありでしょうか?
0561nobodyさん
02/12/20 02:00ID:p0zZgi4w0562nobodyさん
02/12/20 02:11ID:???$value =~ s/(?<!http:)(\/\/.+)$/<a>$1<\/a>/;
0563nobodyさん
02/12/20 02:11ID:4aAUDwG2ありがとうございます〜。
できましたー。これで今日はゆっくり寝られます。
>>558さん >>559さん >>561さん
ご協力ありがとうございました。
0564nobodyさん
02/12/20 02:18ID:4aAUDwG2レスありがとうございます。
なるほど、こういうふうにすればいいんですね。
バッチリです。勉強になりました。
ありがとうございました^^。
0566nobodyさん
02/12/20 11:52ID:???スクリプトを組みたいのですが、出来る限り動作の軽い物にしたいと思っています。
単純に
if(-e $ARGV[0]){
print "ok";
}else{
print "no";
}
のようにしようと思っていたのですが、-eでは他のホストのものは
調べられないそうですね。
他のホストを調べられ、かつ軽くする方法はありますか?
0567566
02/12/20 11:56ID:???それをイントラのweb上で、formにファイル名入れて確認させる形にするつもりです。
ので、実際には$ADGV[0]とかにはならないと思います。
0570nobodyさん
02/12/20 12:51ID:kZj4R1Az添え字で指定したいのですが、
ループ処理で何番目かを自分で取得するしかないんでしょうか
0571nobodyさん
02/12/20 13:13ID:???まえにココで、質問したのですが、
いま、過去ログに行っていて読めません。
もう一回質問します。
ディレクトリにある全てのファイルから
最後の3行を取り除くのにはどうすればいいでしょうか?
始めの3行ならば
% perl -ne 'print unless 1..3;' *.txt
でいいはずです。
0574nobodyさん
02/12/20 14:14ID:???ファイル読み込み
N=行数カウント
1..(N-3)まで出力
こんなスクリプトで我慢汁!
0575nobodyさん
02/12/20 14:34ID:???谷口 腕太 タニグチ ワンタ 1977年生まれ
を
谷口 腕太,タニグチ ワンタ,1977年生まれ
に置換したいです!!!
"2つめの全角スペース"→","
"4つめの全角スペース"→","
という風に置換するにはどうすればいいのでしょうか?
そんなことできますか??
0576570
02/12/20 14:51ID:kZj4R1Azありがとん
ループでやってるとさすがにコードが長くなるんで
助かったわ〜
0577nobodyさん
02/12/20 15:01ID:N/iHD9mS$test = jcode($test)->jis;
print jcode($test)->mime_encode;
はできるのに、
my $test="入力テスト";
print jcode($test)->jis->mime_encode;
すると、
Can't locate object method "jis" via package "NO%F%9%H"
って怒られる。
なぜ?
0579nobodyさん
02/12/20 17:03ID:AHOklkZ9<option>
<option selected value=$data[1]>$out[0]
<option value="0">yes
<option value="1">no
<option value="2">ok
</select>
$data[1]には0,1,2が入っていて
$out[0]にはyes,no,ok が入っています。
これを画面表示させると(仮に$data[1]=1,$out[0]=noとする)
______
|no | ←当然ながらここに<option selected value=$data[1]>$out[0]
|yes |
|no |
|ok |
~~~~~~
こんな感じで画面にでてしまうんですが。
これをfor文でまわして同じヤツは表示しないで
($data[1]=1,$out[0]=no)のときだったらselectedをつけて表示させる
______
|yes |
|no |←ここに<option selected value=$data[1]>$out[0]
|ok |
~~~~~~
こんな感じでやるにはどうしたらいいんでしょうか?
0581579
02/12/20 17:26ID:AHOklkZ9ってことです。
あと
$out[0]にyes,no,ok のどれか1つが入っている。
ってことです。
書き方がおかしくてすみません
0582nobodyさん
02/12/20 17:29ID:???それをテキストファイルとして出力するスクリプトを組んだところ、
コマンドラインから実行すると問題なく動くのですが、
phpなどから呼び出すと、out of memoryとなってしまいます。
止まるは常に同じところなのですが、一体何が原因なのでしょうか?
phpからは
system ("hogehoge.pl $a $b $c");
というように動かしています。
$a等は、formのtype=textで指定するようになっていて、
pl側で表示させて、問題なく渡せていることは確認できたのですが・・・
0583nobodyさん
02/12/20 17:31ID:???どう見てもPerlに見えないけど・・・
スマートじゃないがこんな感じ
@chknum = (0,1,2);
@chkstr = ('yes','no','ok');
$data[1] = 2;
$out[0] = "no";
$chkflg = 1;
for($i = 0 ; $i < 3 ; $i++) {
if($chknum[$i] == $data[1] && $chkstr[$i] eq $out[0]) {
$selected = "selected";
$chkflg = 0;
}
else {
$selected = "";
}
$outstr[$i] = "<option " . $selected . " value=" . $chknum[$i] . ">" . $chkstr[$i] . "\n";
}
if($chkflg) {
print "<option " . $selected . " value=" . $data[1] . ">" . $out[0] . "\n";
}
for($i = 0 ; $i < 3 ; $i++) {
print $outstr[$i];
}
ちなみに難しい処理は一つも無い・・・聞く前に自分で考えてみたのか?
0584nobodyさん
02/12/20 18:04ID:???具体的には
/home/user1/user.pass に htpasswdで暗号化したのをアップしてもらって
user1で認証しようとした場合
/home/user1/user.pass をパスワードファイルに読み込みたいのですが...
0585bloom
02/12/20 18:18ID:V4mJQRW4http://www.agemasukudasai.com/bloom/
0588579
02/12/20 20:35ID:AHOklkZ9どうもありがとうございました。
私はIDにAHOと出るくらいアホなんで
こんなのもわからないんです。
0589579
02/12/20 20:41ID:AHOklkZ9print "<option " . $selected . " value=" . $data[1] . ">" . $out[0] . "\n";
}
あと、この部分は何のためにあるんですか?
0590nobodyさん
02/12/20 20:54ID:Av7thQVn特定のディレクトリのサイズを取得するためにはどうすればいいんでしょうか?
unixプログラムならduで一発なんですが
setuidなもんで外部プログラムがうまく動かないっス
0591nobodyさん
02/12/20 21:00ID:mZ5RE2AI>>540
よろしくお願いします、、
0592nobodyさん
02/12/20 21:09ID:???0593fg
02/12/20 22:02ID:1ptZgAGxthe errors. Depending on the server configuration, you can also run this script under CGIWrap
debugging. Usually, either rename or link the script temporarily to a file which ends with .cgid
extension, or add a AddHandler cgi-script-debug .cgi line to your .htaccess file
このエラーはいったいなんでしょうか?
解読出来ませんでした。
imgboard v1.22 R6 です。
0594571
02/12/20 22:32ID:???聞いて
0595571
02/12/20 22:32ID:???0599nobodyさん
02/12/20 23:34ID:???別に難しいことじゃない。
エラーの内容自体は最初の.までだ。
後はシステムからのありがたいアドバイス。
辞書ひけ。ヴォケ。
0600546
02/12/20 23:40ID:???冗長とか言って悪い。俺は心情的な富豪的プログラミングの信奉者なんで。
>>554の出したヒントにより、3行に集約できた。
open ( IN, 'file' );
%hash = grep { chomp } <IN>;
close ( IN );
ソースは短ければ短いほどいい。と思う。
0602546
02/12/21 00:14ID:???open ( IN, 'file' );
$eval = join ( '', <IN> );
close ( IN );
$eval = '%hash = qw('.$eval.');';
eval $eval;
これなら、途中で余分な改行が入ってたり、
改行のかわりにタブや半角スペースが入っていても問題なく読み込める。
ま、そゆことで。
0603nobodyさん
02/12/21 00:20ID:???$line = '谷口 腕太 タニグチ ワンタ 1977年生まれ';
@token = split / /, $line;
$line = "$token[0] $token[1]\,$token[2] $token[3]\,4token[4]";
print $line;
# 谷口 腕太,タニグチ ワンタ,1977年生まれ
これからは、こんな糞みたいなフォーマットで記録せずに、
最初からきっちり設計するんだぞ。
0604nobodyさん
02/12/21 01:00ID:???0605nobodyさん
02/12/21 09:46ID:???名前: 谷口, 腕太
フリガナ: タニグチ, ワンタ
生年: 1977
などというデータ仕込まれてパニックに陥るんだろうな。
0606nobodyさん
02/12/21 09:57ID:94hGjCxm入力されたsjisの日本語をcryptしてパスワードを発行することに
何か問題があるのでしょうか。
文字によってサーバーエラーになるとか、
文字によって暗号化したものにセキュリティホールが発生するとか。
文字の長さは同じです。
0607nobodyさん
02/12/21 10:47ID:???0608nobodyさん
02/12/21 11:08ID:???のポート80の部分ってどうやってわかるんですか?
$ENV{hoge}でしょうか?
0609544=547=550
02/12/21 11:21ID:???普通は、ポートスキャンするしかない。と思う。
Via:に入ってたりするかもしれないけど・・・
0610nobodyさん
02/12/21 11:31ID:QdhN2u6I0611お?
02/12/21 12:00ID:SSXanoCBSSIからCGIを呼び出したらクッキーの読み書きが出来ない問題もここでお聞きしてよろしいでしょうか?
単体では動くのですが、
execでCGIを呼び出すと引数が送れないので
include virtual="cgi-bin/xxx.cgi?yyy"
で呼んでます。
0614お?
02/12/21 12:51ID:???早速のレスありがとうございます。
色々WEBで検索をかけて無理そうだとは思ったのですが、スキルの高いこちらの方々なら何か力技でも無いだろうかと思いまして。
やはり無理ですか。ありがとうございました。
>>613
私は普段javaSc切ってますので出来るだけ使いたくないんです。
0615nobodyさん
02/12/21 16:42ID:???力技ていうなら<img>タグでクッキー発行する為だけの
イメージ吐いてみる。
0616お?
02/12/21 22:34ID:???ありがとうございます。
取りあえず別の方法で逃げました。
imgタグで呼び出すのも試したのですが、他の方のスクリプトを参照して真似ても、どうも正常に動かないので投げました。
まだまだ基本が出来てません。
ありがとうございました。
0617nobodyさん
02/12/22 01:52ID:???0618lopper
02/12/22 02:19ID:iYo7T5onEncode::JP には、
$euc_jp = encode("euc-jp", $utf8);
と書いてあるが、utf8 の文字列からしか変換できんのか?shiftjis 変換は
from_to( "shiftjis", "euc-jp", $strings )
をすれば出来るが、変換元文字コードを指定しなければならん。自動で判別して
文字コードを変換するにはどうさればいいのか?
0619_gunzip ◆eiH/XdoCNg
02/12/22 03:54ID:???use Encode::Guess;
---------------------------
#!/usr/bin/env perl
use strict;
use Encode;
use Encode::Guess qw[euc-jp shiftjis 7bit-jis];
my $jpstring = "日本語文字列";
my $utf8_string = decode("Guess", $jpstring);
my $encode = guess_encoding($jpstring, qw[euc-jp shiftjis 7bit-jis]);
0620lopper
02/12/22 13:08ID:dY2TGdd7Guess モジュールって $jpstring が短い文書の場合、判別つかずに
shiftjis or euc-jp
などと返してしまうのですよね。
たとえば上記を $jpstring = '結論' とすると判断がつかず
$encode の中身は 'shiftjis or euc-jp' が入ってきます。
やっぱりそういうものですか。
0621nobodyさん
02/12/22 13:38ID:y/X/HeeKif ((-M $lockdir) * 86400 > 600)
このような処理があります。
変数の前に-Mや-Eなどを見かけるのですが、検索が掛けられませんのでこれら-をつけた英字の総称(?)を教えてください。
0623621
02/12/22 14:02ID:???ありがとうございました。
検索を掛けても2件しかヒットしなかったですが、少し情報が入りましたのでなんとか自力で調べてみます。
ありがとうございました。
0625621
02/12/22 14:23ID:???ファイルテキスト演算子で検索していますた・・・
色々詳しく解説しているサイトを見つけましたのでゆっくり勉強します。
本当にありがとうございました。
0626りゅう
02/12/22 17:29ID:9RnyP9Mxgifのグラフィックカウンターを作りたいんですけど。
全然、先が見えてきません。
どなたかご教授よろしくお願いします。
サイトを検索してもSSIのやつがほとんどなんです。
(´・ω・`)ショボーン
0627nobodyさん
02/12/22 17:38ID:???http://www.kent-web.com/count/index.html
0628nobodyさん
02/12/22 18:11ID:???てキーワードで検索かけよう。
とほほさんのgifcat.pl使うと簡単
0630nobodyさん
02/12/22 19:57ID:???本にあったサンプルを記述して動かしてみたのですが、
何も表示されません。シンタックスエラーはないですし、
記述ミスもなさそうなのですが、windows環境では
走らないのでしょうか。
<目指す結果>
[ABCABC]
[WindowWindow]
<ソース>
while (<DATA>) {
chomp;
/ (\w{3}) (\w{3}) / && ($1 eq $2) && print "[$&]\n";
/ (\w{6}) (\w{6}) / && ($1 eq $2) && print "[$&]\n";
}
__END__
ABCABCDEFG
X-WindowWindows
0631nobodyさん
02/12/22 19:58ID:???HTTP-Lite
Time-HiRes
のインストール法がよくわからないんですけど
誰か教えてもらえませんか?
0632nobodyさん
02/12/22 20:03ID:???/(\w{3})(\w{3})/ && ($1 eq $2) && print "[$&]\n";
/(\w{6})(\w{6})/ && ($1 eq $2) && print "[$&]\n";
でしょ。/ /の中の空白には意味があるよ。
0633nobodyさん
02/12/22 20:09ID:???あああああ、本当だ…。
もしあのままの記述だと、空白がないとマッチしないという事に
なるのですね。なるほど。
レスありがとうございます。とても勉強になりました。
0634nobodyさん
02/12/22 20:30ID:???http://pc.2ch.net/test/read.cgi/php/1032704121/917 マルチ
0635nobodyさん
02/12/22 21:55ID:ICjO1mQtkill INT => $pid;したいんですが。
0636yumi
02/12/22 23:28ID:???0637nobodyさん
02/12/23 00:08ID:???systemは無理だろう。execならpidは代わらないからexecする前にpid取っとけ。
つーか、普通execする前にforkしたときに親の方で取っとく。
0638nobodyさん
02/12/23 00:36ID:3vP0jNwS「ActionScript+CGIプログラミング」(ソフト バンク)ではスレッド
を立てられないのですが、少なくともデザインだけはオリジナルに
したいです。どこかにいい資料はないでしょうか?
0639nobodyさん
02/12/23 01:21ID:cOyl9Q7wどうもうまくいきません。
open GZIP, "| /usr/bin/gzip -d";
print GZIP @compressed;
こんな感じで実行してみましたが
結果が標準出力に出力されて、受け取れないです。
どうしたらいいですか?
0640nobodyさん
02/12/23 01:27ID:???0641nobodyさん
02/12/23 01:38ID:cOyl9Q7wレスありがとうございます。
なるほど、ファイルを経由させれば簡単ですね。
ですが、ファイルを経由しないで、解凍結果を受け取りたいのです。
@compress -> gzip -> file
file -> gzip @decompress
これは分かるのですが
@compress -> gzip -> @decompress
このように処理したいのです。もう一つお願いします。
0642640
02/12/23 02:06ID:???パイプ "|" を使うと内部でフォークされて子プロセスの標準出力へ吐き出される
っぽい。。。
0643nobodyさん
02/12/23 02:12ID:cOyl9Q7w0644( _。。)_ バタ。 ◆eJlUd9keO2
02/12/23 10:28ID:???単純な「フォームから送られてきたGETデータ」で躓いてます。
<FORM METHOD="GET" ACTION="ans_check.cgi" TARGET="main_disp">
<INPUT TYPE="HIDDEN" NAME="question" VALUE="001">
Ans. <INPUT TYPE="TEXT" NAME="ans">番
<INPUT TYPE="HIDDEN" NAME="dummy" VALUE="ABCDEFGHIJKLMN">
<INPUT TYPE="SUBMIT" VALUE="プレゼント開封">
</FORM>
とした時(Ansには1234と記入・・・) $ENV{'QUERY_STRING'}の中身が
question=001&ans=1234&dummy=ABCDEFGHIJKLM
と、末尾1文字(たまに2文字)抜けてる時点でなんかヤバそうなのですが、さらに
このデータに対して
@buff = split(/&/, $ENV{'QUERY_STRING'});
とした際のbuffの中身が
buff[0] = 'question=00'
buff[1] = 'and=123'
buff[2] = 'dummy=ABCDEFGHIJKL'
とさらに末尾が1文字消えてしまっているのです……。
可能性…何が考えられるでしょうか? お力添えお願い致します。
0645( _。。)_ バタ。 ◆eJlUd9keO2
02/12/23 10:34ID:???さらに buff を = で split すると・・・
($key,$val) = split(/=/); の結果
$key='questio' $val='00'
$key='an' $val='123'
$key='dumm' $val='ABCDEFGHIJKL'
と今度は分割の先頭($key)が一文字抜ける……ワケわかりません。 T−T
0646nobodyさん
02/12/23 10:41ID:???ソースを示せ。
まずはそれからだ。
どうせchopかchompを入れちまってるだけだろう。
0647nobodyさん
02/12/23 11:05ID:???#!/usr/bin/perl
$pid = open P, '-|';
die unless(defined($pid));
if ($pid) {
このブロックで受け取る
while (<P>) {
print;
}
} else {
close P;
my $pid2 = open GZIP, '|-';
die unless(defined($pid));
if ($pid2) {
このブロックで書く
print GZIP <STDIN>;
} else {
exec 'gzip', '-d';
}
}
if ($pid) {
} else {
このブロックは
close P;
open GZIP, 'gzip -d' || die;
print GZIP <STDIN>;
でもよい。
}
0648( _。。)_ バタ。 ◆eJlUd9keO2
02/12/23 11:12ID:???Σ(゜д゜ ) PHPとちがって末尾1文字なんでも消すのかッ > chop
ごめん、私が悪かった。 せっかくの休みなのにマヂでごめん。
0651nobodyさん
02/12/23 13:42ID:???『=>』
これってどういう動作をする物なんでしょうか?
宜しければ教えて下さい。お願いします。
0652nobodyさん
02/12/23 13:46ID:???0653nobodyさん
02/12/23 14:14ID:???p 10 #=>10
print("こんにちは") #=>こんにちは
0654nobodyさん
02/12/23 15:27ID:UoY7N20E0655nobodyさん
02/12/23 16:01ID:???0656nobodyさん
02/12/23 16:19ID:3KeBindS今までずっとcount.cgiとかでそのままHTMLに数値を出力していたのですが、
<img>タグで呼び出すにはどうするんでしょうか?
count.cgiと呼び出すカウンターの違いはなんなんでしょうか?
どうかご教授お願いします。
0657nobodyさん
02/12/23 16:51ID:mDd0PRmu今までのcount.cgiは「文字」を返す。
画像の場合は、<img src="img_count.cgi">で呼び出す。
img_count.cgiは、画像(の中身)を返すCGI。(readしてprint)
こうすれば、ブラウザがHTMLを読んだ後に画像としてimg_count.cgiを取りに行く。
0658nobodyさん
02/12/23 17:31ID:???foreach(split(/&/,$i)){
/=/;
$in{$`} = $';
}
read(STDIN,$i,$ENV{CONTENT_LENGTH});
foreach(split(/&/,$i)){(
$key,$val) = split(/=/,$_);
$in{$key} = $val;
}
どちらが効率が良いでしょうか。
あんまり変わりません?
0659nobodyさん
02/12/23 19:16ID:???ヒントだけでもいいのでお願いします。
0660nobodyさん
02/12/23 19:25ID:???foreach(配列){
if(/xxx/でマッチしたら){その行を削除}
}
0661nobodyさん
02/12/23 20:14ID:???レスありがとうございます。
ループを使ってマッチしたら、その行を削除というのは分かるのですが、「その行を削除」の所が分からないんです・・・
while(@配列){
if($_ =! /zzz/){
push (@新しい配列,$_);
}
}
@配列 = @新しい配列;
こんな感じでしか思い付かないのですが、何かいい方法お願いします。
0662nobodyさん
02/12/23 20:30ID:???0663nobodyさん
02/12/23 20:43ID:???perl -w -e '%s = (a , 1); print $s{a};'
perl -w -e '%s = (a => 1); print $s{a};'
0664641
02/12/23 20:50ID:???そのように外部プロセスと通信するのですか。
手持ちのWindows環境だと、'-|'は(forkを使っているみたいなので)
動きませんが、UNIX環境で試した所、見事に動いてくれました。
それと調べた所、IPC::Open2という標準モジュールでも
外部プロセスとの通信ができるようで、こちらを使うことにしました。
わざわざサンプルコードまで付けて頂き、ありがとうございました。
謎が一つ解けました。。
0665nobodyさん
02/12/23 20:51ID:???それで悪い理由は何?
=!の部分がわけわからんけど。
0666nobodyさん
02/12/23 20:54ID:???速度を軽視するのは良くないが、だからと言って、自分に不相応な高速化に挑んで安定性や保守性がなくなっては意味がない。
高速化のコードを教えられても、自分で保守しきれないと思ったら、自分でわかるやり方に戻すのも利口な人間の判断だよ。
プログラミングはタイムトライアルじゃないんだから。
0667nobodyさん
02/12/23 21:11ID:???0668659
02/12/23 22:00ID:???ありがとうございます。
その方が僕のよりかなり良さげですね。
>665
=!じゃなくて!=でした。
何か配列を無駄に出し入れしている気がしたので。
0669nobodyさん
02/12/23 22:08ID:???0670nobodyさん
02/12/23 22:40ID:ty3RFcqjその選択した結果をb.cgiに送りb.cgiで結果を表示、ファイルに書き込み
をするということができています。
これをa.cgiで選択したものをa.cgiに送り表示、ファイルに書き込みさせたいのですが
どうやらhiddenという、コマンドをもちいて
1回目と2回目のページの閲覧を場合わけすればできるみたいなんですが
どうやればいいのですか?
<INPUT type="hidden" name="action" value="write">
こんなのを送信ボタンと一緒につけてやるみたいなんですが…。
0671nobodyさん
02/12/23 22:44ID:ExE7e9sR0672nobodyさん
02/12/23 23:12ID:???> <INPUT type="hidden" name="action" value="write">
> こんなのを送信ボタンと一緒につけてやるみたいなんですが…。
書き込みフォームのなかにこれを入れておくと、CGI側では他のフォームと同じように
$in{action} という感じで値が取り出せる。(この場合、中身はもちろん write)
ただ単にCGIが呼ばれただけだと $in{action} の中身は空。
これをCGIの冒頭で判断して、表示だけするなり書き込みするなり処理を行う。
ちなみに"action"と"value"の部分は、他の name の中身と重複しなければ
好きな文字列でいいよ。
0673nobodyさん
02/12/23 23:14ID:/nqoyrjh0675670
02/12/24 01:03ID:o+cSQN2k$in=$form{action};
if($in eq "write"){
&write_file;
}
<FORM METHOD="POST" ACTION="a.cgi">
<INPUT TYPE="submit" VALUE="実行">
<INPUT TYPE="hidden" name="action" value="write">
こんな感じでやれば、ただページを閲覧した1回目の時は何もしないで
フォームを選択した2回目のときはifの中の&wite_fileを実行するってことでよいですか?
0676nobodyさん
02/12/24 01:32ID:???微妙に甘い。それではwriteがあった場合、
write_fileが実行されるが、その後で本来の表示もされる。
if ( $in eq 'write' ) {
&write_file;
} else {
&read_file:
}
exit;
この方がよかないか?
0677670=675
02/12/24 01:57ID:o+cSQN2kread(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
$cgi_url = './hid.cgi';
$in=$form{action};
if ( $in eq 'write' ) {
&write_file;
} else {
&read_file:
}
print "Content-type: text/html\n\n";
print <<"END";
<FORM METHOD="POST" ACTION="$cgi_url">
<tr><td align=right>選択<br></TD><td align=left>
<select name="box"><option><option value="1">yes<option value="0">no</select></td></tr><br>
<INPUT TYPE="submit" VALUE="実行">
<INPUT TYPE="hidden" name="action" value="write">
END
sub write_file{print "2回目ですね<br>";}
sub read_file{print "1回目ですね<br>";}
exit;
これだとできないんですけどなぜですか?
0678nobodyさん
02/12/24 02:03ID:???>2:それでこんな風にやってみたが・・・
>3:それだとこんなエラーが出て上手く行かなかった。
>
>1と3が無いと誰も答えられないよ。
>良い回答は良い質問から。一緒に勉強しましょう。
0679nobodyさん
02/12/24 02:28ID:???HTTPヘッダ吐く前にprintしたらいかんだろう。
print "Content-Type: text/html\n\n";
をif の前に置く。
0680nobodyさん
02/12/24 10:42ID:???アホを怒ったりはしないが自分で努力せずに「聞きゃいいや」って考え方に
教える気力を奪われる
>>589 はどういう場合に実行されるか考えれば貴方にとって必要か不必要か
判るはず。アホを自慢せずに自力で考えましょう
0681nobodyさん
02/12/24 16:14ID:V710Vuw6rindexって便利そうなのですが、
1バイトずつ戻ってくれるのでしょうか。
頭から調べなおすのでしょうか。
0682nobodyさん
02/12/24 21:26ID:0ZCnncs6eval "use $module";
と書いてみました。
しかし、useとevalでぐぐってみてもヒットしません。
不安なので、ベターな方法を教えてください。
0684nobodyさん
02/12/25 00:41ID:???use Module LIST
use Module
Imports some semantics into the current package from the named module,
generally by aliasing certain subroutine or variable names into your package.
It is exactly equivalent to
BEGIN { require Module; import Module LIST; }
0685nobodyさん
02/12/26 02:12ID:wZ43brtnっていうのは使えませんかねぇ。
0686685
02/12/26 02:53ID:wZ43brtn実は685を書き込むまで参照を知りませんでした。
cのポインタみたいに理解しているのが間違いなのだろうか…?
$i = 774;
$ip = \$i;
$$ip++;
if( fork() ){
while(1){
print "親:$$ip\n";
$$ip++;
sleep(2);
}
}else{
sleep(1);
while(1){
print "子:$$ip\n";
sleep(2);
}
}
0687nobodyさん
02/12/26 02:55ID:WbFeNueP$abc = "a&b&c";
@pairs = split (/&/, $abc);
↑このような場合に、@pairs から $abc を作り直したいのですが・・・
私では、@pairs の要素数を求めてから、$abc_2 = "$pairs[0]&$pairs[1]&$pairs[2]&・・・"; のようにやっていく方針しか立てられないのです・・・
うまいことやる方法があったら、教えてください。
0689687
02/12/26 03:11ID:WbFeNuePごめんなさい・・・本当にありがとうございました・・・
0690nobodyさん
02/12/26 04:56ID:???Image::Magick の利用で困っているので教えてください。
img.pl というファイルを実行すると下記のエラーがでます。
---
Can't load '/usr/lib/perl5/site_perl/i386-linux/auto/Image/Magick/Magick.so' for module Imag
e::Magick: cannot open shared object file: cannot load shared object file: No such file or d
irectory at /usr/lib/perl5/i386-linux/DynaLoader.pm line 206.
at img.cgi line 4
Compilation failed in require at img.cgi line 4.
BEGIN failed--compilation aborted at img.cgi line 4.
---
一応CUI上でImageMagick は利用可能で、
Perldoc Image::Magic でもマニュアルが見れてます。
Image::Magick をインストールするとデフォルトで
PerlMagickがインストールされるみたいですが、一応再度PerlMagickをインストールしてみたところ、
make test で下記のエラーを見つけました。
---
make: *** [test_dynamic] Error 2
なにか対処法があれば教えてください。
当方の環境
Linux Slackware 8.0
Perl 5.6.1
Image::Magick 5.5.3
0691nobodyさん
02/12/26 04:57ID:???---
#!/usr/bin/perl
use lib('/usr/local/lib/site_perl/5.6.0/i386-linux');
use Image::Magick;
$ImageFile = './test.jpg';
$ImageFile2= './test2.jpg';
$i = Image::Magick->new(size=>'320x240');
$x = $i->Read($ImageFile) ;warn "$x" if "$x";
$x = $i->Magnify() ;warn "$x" if "$x"; # 画像を縦横2倍に拡大
$x = $i->Write($ImageFile2);warn "$x" if "$x";
undef $i;
print "Content-type: text/html\n\n";
print "<html><a href=\"../imgtest/test.jpg\">使用前</a><br><a href=\"../imgtest/test2.jpg\">
使用後</a></html>\n";
exit;
0692nobodyさん
02/12/26 04:59ID:???1 img.pl ではなく .cgi の間違いでした。
2 img.cgi の 4行目は use Image::Magick; になってます。
一度に投稿できなかったので分けて投稿しました。
板汚しですいません。
0693nobodyさん
02/12/26 05:15ID:???vi /etc/ld.so.conf で /usr/lib/perl5/site_perl/i386-linux/auto/Image/Magick/ を追加したら
正常動作しました。
ImageMagickってこういうものなんでしょうか?^^;
0694nobodyさん
02/12/26 11:23ID:DQIeVDZ8ただCGIでHTMLを読み込んで表示させたいのですがどうすればよいでつか?
本当にただindex.htmを外から読み込んでそのまま表示させるだけです。
0695nobodyさん
02/12/26 11:37ID:???index.htmをファイルオープンして読み込んで表示するだけだが、
本当にそれしかしないなら、直接index.htmを表示しなさい。
0696nobodyさん
02/12/26 11:48ID:???index.htmlを読み込んで出力するまえに
適切なヘッダも出力しなきゃだめよ。
Content-Type: text/html
とか
0698nobodyさん
02/12/26 18:04ID:???処理するところは書けたのですが、「一定時刻に」というところでつまづいています。
0699nobodyさん
02/12/26 18:04ID:jnr3kh76sub G{
my $a=shift;
if($a>0){
G($a-1);
print"$a\n";
G($a-1);
}print" \#$a\n";
}
この処理の流れが良く理解できません
アドバイスなどお願いします
0700nobodyさん
02/12/26 18:14ID:???1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
0703nobodyさん
02/12/26 19:00ID:???ありがちな方法なら、「最後のアクセスと時間帯が違えば処理をする」という方法。
1時間に1回の方法なら、最後にアクセスした時の「時間(11時とか)」を保存しておき、
「前回の時間と違ったら(11時じゃなくなったら)処理をする」などでやる。
ただし、1時間以上アクセスがなかったら困ったりする事もある。
あと、鯖がかなり限られるがcronもある。
これはスレ違いだから自分で検索すれ。
0706nobodyさん
02/12/27 00:12ID:BkvjWsIwmod_perl を入れるために、use strict をしておこうと思ったんですが、
$| = 1;
$ENV{いろんな環境変数};
こういうのも my しないとだめなの?
0708nobodyさん
02/12/27 00:54ID:qm28R9Zoフュージョン料金明細で必須項目をテキストにあらかじめ記入しておいて
それと現在の日時をもとに一発で明細結果がでるようする方法はあるでしょうか?
いちいち項目をコピペするのが面倒なんです。
0709706
02/12/27 01:30ID:BkvjWsIw例えば、
sample.cgi というCGIプログラムがあったとして
use strict;
$| = 1;
require './common.pl';
としていたとしよう。このとき、common.pl にも use strict は書くべきなのか。
それとも、sample.cgi の use strict を引き継いで、
common.pl には、何も書かなくても自動的に use strict されるのか?
0710nobodyさん
02/12/27 01:33ID:???0711699
02/12/27 01:36ID:BtYEwdxr途中からよ〜分かりません
どこで値が保持されどの様に順番に吐き出されるのか?
0712nobodyさん
02/12/27 01:37ID:???パッケージならパッケージ変数になってるし、
use strict; しなくてもそのスクリプト内でしか使わないなら、my とかしとけばいいだけじゃない?
>common.pl には、何も書かなくても自動的に use strict されるのか?
no!
0713nobodyさん
02/12/27 02:31ID:???sub G{
>>699
実行してみて。
これでわかる?
G(3);
sub G{
my $a=shift(@_);
my($space) = "";
for(my($i)=$a; $i<3; $i++){$space .= " ";}
print "$spaceここからG($a){\n";
if($a>0){
G($a-1);
print"$space$a\n";
G($a-1);
}
print"$space\#$a\n";
print "$space}ここまでG($a)\n";
}
0715nobodyさん
02/12/27 10:20ID:???その通り、常に実行ですね
>>703
で出てる様にcronを使う手がありますがユーザーに開放している鯖はかなり少な
いし、perl(スクリプト)での質問でしたので>>701としておきました
笑える手として、webサーバーがあるならhtmlより定期的に呼び出すとかもあるけ
ど、これもスレ違い
0717nobodyさん
02/12/27 20:28ID:pRxcckDoご存知の方がいらっしゃいましたら、是非教えてくださいまそ。
0718nobodyさん
02/12/27 20:35ID:yQoOgQCT0721nobodyさん
02/12/28 01:10ID:???foreach(keys %HASH){
・・・
}
に相当する処理ってできないんでしょうか?
できるのならやり方教えてホスイ。
0723nobodyさん
02/12/28 01:39ID:???for (keys %$ref){
print $_,"\n";
}
0724りゅう
02/12/28 12:37ID:7mOI1Cp3その本に付属していたCDのサンプルをLocalhostに置くと動くんですが、
自分で真似て作ったやつだと、エラーが出てしまいます。何回も見なおしたけど
違いが分かりません。どなたか違っている個所を教えてくれるとありがたいです。
0725りゅう
02/12/28 12:38ID:7mOI1Cp3#!/usr/local/bin/perl
#==========================================================
#メイン処理
#==========================================================
#ヘッダを表示する
&print_header;
#トップを表示する
&print_top;
#==========================================================
#ヘッダの表示
#==========================================================
sub print_header {
print "Content-type: text/html\n\n";
print "<META HTTP-EQUIV=Content-Type CONTENT=\"text/html; CHARSET=Shift_JIS\">";
print "<html>\n";
print "<head><title>Simple BBS</title></head>\n";
print "<body bgcolor=#fffff0 text=#000000 >\n";
}
0726りゅう
02/12/28 12:39ID:7mOI1Cp3# 入力画面の表示
#==========================================================
sub print_top {
print "<center><table width=600><tr><td>\n";
print "<br><br><center><h2>Simple BBS</h2>\n";
print "<hr> [ <a href=http://www.marutora.net>Back To Homepage</a> ] <hr></center>\n";
print "<form method=post action=bbs1.cgi>\n";
print "<input type=hidden size=20 name=action value=regist>\n";
print "<table border=0>\n";
print "<tr><td align=right>名前 :</td><td><input type=text size=20 name=name></td></tr>\n";
print "<tr><td align=right>E-mail:</td><td><input type=text size=40 name=mail></td></tr>\n";
print "<tr><td align=right>URL :</td><td><input type=text size=40 name=url value=http://></td></tr>\n";
print "<tr><td align=right>タイトル:</td><td><input type=text size=40 name=title></td></tr>\n";
print "<tr><td align=right>内容 :</td><td><textarea cols=50 rows=5 name=massage wrap=hard></textarea></td></tr>\n";
print "<tr><td colspan=2 nowrap align=right><input type=submit value=送信> <input type=reset value=書き直し></td></tr></table></form>\n";
print "<hr size=0 align=center>\n";
}
_END_
0727りゅう
02/12/28 12:40ID:7mOI1Cp3#!/usr/local/bin/perl
#=========================================
#メイン処理
#=========================================
#ヘッダを表示する
&print_header;
#トップを表示する
&print_top;
#=========================================
# ヘッダの表示
#=========================================
sub print_header {
print "Content-type: text/html\n\n";
print "<META HTTP-EQUIV=Content-Type CONTENT=\"text/html; CHARSET=Shift_JIS\">";
print "<html>\n";
print "<head><title>Simple BBS</title></head>\n";
print "<body bgcolor=#fffff0 text=#000000 >\n";
}
0728りゅう
02/12/28 12:41ID:7mOI1Cp3# 入力画面の表示
#=========================================
sub print_top {
print "<center><table width=600><tr><td>\n";
print "<br><br><center><h2>Simple BBS</h2>\n";
print "<hr> [ <a href=http://www.marutora.net>Back To Homepage</a> ] <hr></center>\n";
print "<form method=post action=bbs1.cgi>\n";
print "<input type=hidden size=20 name=action value=regist>\n";
print "<table border=0>\n";
print "<tr><td align=right>名前 :</td><td><input type=text size=20 name=name></td></tr>\n";
print "<tr><td align=right>E-mail:</td><td><input type=text size=40 name=mail></td></tr>\n";
print "<tr><td align=right>URL :</td><td><input type=text size=40 name=url value=http://></td></tr>\n";
print "<tr><td align=right>タイトル:</td><td><input type=text size=40 name=title></td></tr>\n";
print "<tr><td align=right>内容 :</td><td><textarea cols=50 rows=5 name=message wrap=hard></textarea></td></tr>\n";
print "<tr><td colspan=2 nowrap align=right><input type=submit value=送信> <input type=reset value=書き直し></td></tr></table></form>\n";
print "<hr size=0 align=center>\n";
}
_END_
0729nobodyさん
02/12/28 13:15ID:???本と自分で打ったのを一行ごとに交互に並べ替えて見比べろ。
0730nobodyさん
02/12/28 13:19ID:???どの段階でどういうエラーが出たのかな?
ちなみに単純に違いと言えば最後から3行目のnameが
「message」<=>「massage」
0733nobodyさん
02/12/28 13:54ID:aT8fBpaXエラーメッセージ貼れ。
0734nobodyさん
02/12/28 13:59ID:???とも思ったけど「何回も見なおしたけど」辺りが自分とかぶってつい(汗
しかもタイプミスって辺りが尚更かぶってしまた(激汗
しかし参考書もどうかと、完全にトラップでし>massage
http://www2a.kagoya.net/~adults-toybox/sample2.wmv
http://www2a.kagoya.net/~adults-toybox/
0736nobodyさん
02/12/28 17:51ID:???0737nobodyさん
02/12/28 19:10ID:tgcla43Lhttp://www.big.or.jp/~talk/t-club/soft/mini_r6/index.cgi
↑現在、配布を中止しているようなのですが、なにかご存じの方、よろしくお願いします。
あ、よく知らないのですがimgboardはPerlではないかも・・・
0739737
02/12/28 19:20ID:tgcla43L0740nobodyさん
02/12/28 19:52ID:???オチだろうな。
>>724
あんたの作ったやつ、うちのローカル環境で正常に動いたぞ。
0742nobodyさん
02/12/28 19:57ID:???0745nobodyさん
02/12/29 02:36ID:9gTPrGHJこんな感じに置換したいのですが、どのようにすれば良いでしょうか?
例えば、これの逆なら、
for ($i = 99; $i >= 1; $i--)
{
$text =~ s/(<){$i}/$i/g;
}
という感じにすれば良さそうなのですが・・・
for ($i = 99; $i >= 1; $i--)
{
$text =~ s/$i/(<){$i}/g;
}
こう書くことができれば、いちばん早いんですが・・・
0746nobodyさん
02/12/29 02:44ID:VsdGeM22$text=~s/(\d+)/"<"x$1/ge;
不具合がなくもないが。
0747nobodyさん
02/12/29 03:06ID:9gTPrGHJありがとうございました!
ちなみに勉強不足で "\d+" が何を表しているのか分からなかったりするので、それを調べてから試してみます ^^;
0748745 = 747 = 748
02/12/29 03:08ID:9gTPrGHJ0749nobodyさん
02/12/29 10:13ID:???0750nobodyさん
02/12/29 13:11ID:apFJB7sHの状態で
$hoge の一番後ろに hageと言うのを足す時は
$hoge = $hoge."hage";
とやるしかないのでしょうか?
$hoge .= "hoge";
0753nobodyさん
02/12/29 16:14ID:???それで、勉強って一体何すればいいんでしょ?
とりあえず本読んでBBSの構造くらいは分かるようになりました。
公開されてるゲームのプログラムとか読み漁ればいいのですか?
0754nobodyさん
02/12/29 16:18ID:???それで、勉強って一体何すればいいんでしょ?
とりあえず本読んでBBSの構造くらいは分かるようになりました。
公開されてるゲームのプログラムとか読み漁ればいいのですか?
Perlでブラウザゲームを作りたいです。
それで、勉強って一体何すればいいんでしょ?
とりあえず本読んでBBSの構造くらいは分かるようになりました。
公開されてるゲームのプログラムとか読み漁ればいいのですか?
Perlでブラウザゲームを作りたいです。
それで、勉強って一体何すればいいんでしょ?
とりあえず本読んでBBSの構造くらいは分かるようになりました。
公開されてるゲームのプログラムとか読み漁ればいいのですか?
Perlでブラウザゲームを作りたいです。
それで、勉強って一体何すればいいんでしょ?
とりあえず本読んでBBSの構造くらいは分かるようになりました。
公開されてるゲームのプログラムとか読み漁ればいいのですか?
Perlでブラウザゲームを作りたいです。
それで、勉強って一体何すればいいんでしょ?
とりあえず本読んでBBSの構造くらいは分かるようになりました。
公開されてるゲームのプログラムとか読み漁ればいいのですか?
0758nobody
02/12/30 14:19ID:???WinXP 上でActivePerl を使用しています。
This is perl, v5.6.1 built for MSWin32-x86-multi-thread
何故か do ループの中で last を使用するとエラーになります。
do {
last;
} while (1);
>Can't "last" outside a loop block
while (1) {
last;
}
では問題ありません。last はdo ループの中では使用できないのでしょうか?
last ラベル;
としてもエラーになってしまう…。
0759nobodyさん
02/12/30 14:21ID:???doループの意味わかってる?
ループの前にdo部分をやるから、その時点ではループになってないぞ。
0760nobody
02/12/30 14:29ID:???if (1) { ほげほげ; }
と
ほげほげ if (1);
の違いみたいな物でしょうか…ちがうかな(苦笑
do ループの中ではlast 文は使えないのかな。
勉強していたサイトの1つの中に
ttp://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/pe_k02.htm
do ループの中でlast 使用できるような所がありますけれど…残念。
レスありがとうございます。
0761nobodyさん
02/12/30 14:55ID:???whileなどでループ修飾してもループブロックではない。
漏れはPerlはインタプリタ系、スクリプト系だからと妥協してる。
構造化BASICで出来るのもあるし、そのうち対応してくれるとうれしいYO
0762nobodyさん
02/12/30 20:31ID:8PVwYuQF0763nobodyさん
02/12/30 21:28ID:neFLd3GGLOOP:
{
do {
last LOOP;
}
}
0764nobodyさん
02/12/30 21:29ID:neFLd3GG0765nobodyさん
02/12/30 21:32ID:neFLd3GG{
my $static;
sub hoge {
$static++;
return $static;
}
}
0766nobodyさん
02/12/30 21:35ID:neFLd3GGwhileも抜けてた。。
0768カミ
02/12/31 04:26ID:eTxvyq7ouse strict;
$aaaa::val = "Global" ;
↑この記法の変数がGlobal変数として扱われる。
0769カミ
02/12/31 05:05ID:eTxvyq7o$test =<<"TEST";
ここから始まりです。
<FOO>
hogehogehoge
hogehogehoge
hogehogehoge
</FOO>
ここで終わりです。
TEST
という文字列から<HOGE>から</HOGE>までを抜き出したい場合。
Perlでどんな風にかきゃいいんでしょう?
------------------------------
<FOO>から</FOO>の間違いだね。
@picup=();
for (split("\n",$test)){
push (@picup) if /<FOO>/ .. /<\/FOO>/ ;
}
for $ol (@picup) {
print $ol."\n";
}
perl1行野郎参照
ttp://www13.cds.ne.jp/~ohsaru/perl/oneline.html
0770カミ
02/12/31 05:18ID:???push (@picup) if /<FOO>/ .. /<\/FOO>/ ;
↓
push (@picup,$_) if /<FOO>/ .. /<\/FOO>/ ;
0771カミ
02/12/31 06:16ID:???某所のコードをモディファイして作成:try.pl
#try , throw ,catch の定義
sub try( &$ ) {
my( $tryb, $catchb ) = @_;
eval { &$tryb };
if ( $@ ) {
local $_ = $@;
&$catchb;
}
}
sub throw {
die $_[0] ;
}
sub catch ( & ) {
shift;
}
print "Throw cath Start\n";
try {
if ($ARGV[0]=~/Exp1/) { throw "Excep1"; }
elsif ($ARGV[0]=~/Exp2/) { throw "Excep2"; }
print "Not throw\n";
}
catch {
/Excep1/ && do { print "catch1:$_\n";};
/Excep2/ && do { print "catch2:$_\n";};
};
0772カミ
02/12/31 06:19ID:???これは思いの他思い通り動きましたが、、
sub try ( &$ ) の&$と
sub catch ( & ) の& の意味が分かりません。
0773nobodyさん
02/12/31 09:04ID:???↓
0774nobodyさん
02/12/31 09:06ID:???mhile($i = 1);
print "gohe"
0777nobodyさん
02/12/31 09:20ID:f3dKkAkhperlsubに書いてある。そのままサンプルで出てるよ。
http://www.kt.rim.or.jp/~kbk/perl5.005/perlsub.html
> 、&は“sub”キーワードや連続したカンマを要求 しないような無名サブルーチンを要求します。
0778nobodyさん
02/12/31 09:31ID:f3dKkAkhAn "&" requires an anonymous sub-
routine, which, if passed as the first argument, does not
require the "sub" keyword or a subsequent comma.
&のところに入るのは、無名関数だけど、1つ目の引数としてとられるなら、
subキーワードや、次の引数と区切るコンマは必要ない。
0779nobodyさん
02/12/31 09:33ID:???&は(“sub”キーワードや連続したカンマを要求 しないような無名サブルーチン)を要求します。
って事じゃないの?subsequentの訳を思いっきり外してる気がするけれど
0780nobodyさん
02/12/31 09:41ID:f3dKkAkh↓実験用
#!/usr/local/bin/perl
sub hoge (&&&) {
print join(':', @_) . "\n";
}
hoge {
}
sub {
},
sub {
};
0781nobodyさん
02/12/31 11:10ID:aM0LcM990782nobodyさん
02/12/31 11:47ID:YVY0+rTm! i iノノリ)) 〉
i l l.´ヮ`ノリ <先生!こんなのがありました!
l く/_只ヽ
| ̄ ̄ ̄ ̄ ̄|
http://muryou.gasuki.com/mona/
0783カミ
02/12/31 12:01ID:???頂いた内容からその意味コメントしました。この理解で宜しいか?
sub try( &$ ) {
my( $tryb, $catchb ) = @_;#try内のブロック,catch含むブロックを設定(呼び側ではカンマで区切る必要なし)
#共に引数として事前評価されているので実行コードとなっている?
eval { &$tryb };#try内のブロックを実行(dieを判断したいので敢えてeval内で実行)
if ( $@ ) {
local $_ = $@;
&$catchb;#cathブロック実行
}
}
sub throw {
die $_[0] ;
}
sub catch ( & ) {
shift;#catch内のブロックをそのまま実行。左辺の無いshiftは引数をそのまま評価する?
}
print "Throw cath Start\n";
try {
if ($ARGV[0]=~/Exp1/) { throw "Excep1"; }
elsif ($ARGV[0]=~/Exp2/) { throw "Excep2"; }
print "Not throw\n";
}
catch {
/Excep1/ && do { print "catch1:$_\n";};
/Excep2/ && do { print "catch2:$_\n";};
};
0784nobodyさん
02/12/31 12:09ID:f3dKkAkhshift;
}
は、shiftで、引数を一つもってきて、それが最後に評価したものだから、
それを戻り値として返す。っていう意味だね。
sub catch (&) {
return $_[0];
}
と同じ。
結論としては、無名関数のリファレンスが返される。
0785nobodyさん
02/12/31 12:51ID:???ちょっと難しめの本をぱらぱらと読んでみると、
パイプとか、mod_perlとか、よくわからないものばかり。しかも読んでもいまいちぴんとこない。
脱初心者のためにみなさんはどのような事をされましたかっ!?
0786nobodyさん
02/12/31 12:55ID:???大げさなことしなきゃ入門書程度の知識で掲示板くらいは組めるからなぁ。
mod_系はlinuxの勉強してたときに覚えた。パイプはDOSの時名前だけ聞いて
これまたlinuxで本格的に使い始めた。
0787カミ
02/12/31 14:19ID:???てことは、実際ctach内のブロックはsub catch内で実行されるのでなく
sub try の&$catchb;にて戻ったレファレンスが実行されると考えればいいのだね。
PS
ところでmod_perって何?
0788nobodyさん
02/12/31 14:37ID:???0789nobodyさん
02/12/31 14:51ID:???検索すれ。
0791nobodyさん
02/12/31 15:12ID:TZQCX2rE0794791
02/12/31 15:25ID:???for (1..10){
last if(FTP先の削除したいファイルが削除できたら)
削除処理
}
のような形にしたいんです。
ホウホウワカリマスデスカ?
0796791
02/12/31 15:33ID:???1. FTPで指定されたホストにログイン
2. ディレクトリィの移動
3. ファイルを削除するまで削除処理を実行する
4. 削除完了後にログアウト
この一連の処理を行いたいです。
0799nobodyさん
03/01/01 12:49ID:???1 RFC959読む。他に拡張もあるが>>791の目的にはこれで充分だろう。
2 ftpをデバッグモードで動かしてRFCを理解する。
3 Net::FTPを入手して使う。
0800nobodyさん
03/01/01 19:44ID:???今年も過疎板でがんばろー (・□・)ノ
0801nobodyさん
03/01/01 22:24ID:lIl6EtKn\(a => \@list_a,
b => \@list_b,);
の場合、list_aの配列を取るにはどう書けばいいのですか?
0802nobodyさん
03/01/01 22:48ID:lIl6EtKnmy @list_a = @{${$hash_ref}{a}};
で逝けました。
0804nobodyさん
03/01/01 23:17ID:ItqiYY13http://yahooo.s2.x-beat.com/linkvp/linkvp.html
0805nobodyさん
03/01/01 23:31ID:RvFz9efrmy @list_a = @{$hash_ref->{a}};
の方が普通・・だと思う。
0806nobodyさん
03/01/01 23:33ID:RvFz9efrmy $hash_ref = {
a => \@list_a,
b => \@list_b,
};
0807nobodyさん
03/01/01 23:50ID:RvFz9efr(\$a, \$b, \$c)と、\($a, $b, $c)は同じ。つまり、
my $hash_ref =
\(a => \@list_a,
b => \@list_b,);
これは、(\'a', \\@list_a, \'b', \\@list_b)と同じだから、
左がスカラーだから、コンマ演算子で、、$hash_refには、最後の、
\\@list_bが入る
0811カミ
03/01/02 03:38ID:???例えば
$aaa = "aaa";
print ${aaa} ;#aaaが表示
このように変数名そのものは$と言う連想配列の要素らしい事がわかる
0812nobodyさん
03/01/02 23:36ID:L6yfXpSSそれはちょっと無理が・・
その書き方は、単純に、変数名の区切りをはっきりとさせる。というだけだね。
$aaa = "hogehoge";
print "test:$aaabbbccc"; #test:だけ表示
print "test:${aaa}bbbccc"; #test:hogehogebbbccc
0813nobodyさん
03/01/02 23:54ID:L6yfXpSSわかりにくい部分は、、コンマ演算子の所かな。違うか。
$a = ('a', 'b', 'c'); #$aにはcが入る
$a = 'a', 'b', 'c'; #これは上の普通の書き方。$aにはcが入る
@a = ('a', 'b', 'c');
$a = @a; #これは$aには3が入る
0814yani ◆saNSktNEdQ
03/01/03 00:28ID:0E5Ge7qRと言ったほうがいいかも知れない。
qw(...)でも同じように働くから。
しかし本当のところはPerlのソースコードを読まないと分からないのかも知れない。
内部的にコンマ演算子使ってるかもしれないし。
0815nobodyさん
03/01/03 00:57ID:???コンマ演算子は代入演算子より優先順位が低い。
$a = 'a', 'b', 'c'; # これはaが入る
@a = 'a', $b = 'b', 'c'; # これは @a = ('a'); $b = 'b'; 'c' と同じ
0816813
03/01/03 01:13ID:nupLg+Ov0818カミ
03/01/03 16:20ID:???しかし、ちと違うが下の様な実験結果もしてみた。
$hash{array} = [ 1,2,3 ];
$s = scalar $hash{array} ;
if ($s =~/^ARRAY/ ) {
print "scalar :$s\n" ;
for (@{$s}) {
print $_."\n" ;
}
}
1;
これを実行
scalar :ARRAY(0x183f04c)
1
2
3
この場合 @と言う連想配列の要素にARRAY(0x183f04c)が有る様に思える。
0821nobodyさん
03/01/03 21:46ID:nupLg+Ovそんな難しいことしなくても、Data::Dumperを使うとざざーっと出してくれる
>>811でも変なこと言ってるけど、名前の部分が空っぽの記号だけの変数なんて存在しない。
>>812を読めばわかるじゃろ。
0823nobodyさん
03/01/03 22:57ID:???0824yani ◆saNSktNEdQ
03/01/04 00:02ID:8PdubkBh0825yani ◆saNSktNEdQ
03/01/04 00:03ID:8PdubkBh0826カミ
03/01/04 00:38ID:???先の実験で私が感動したのは
$s = scalar $hash{array} ;して if ($s =~/^ARRAY/ ) {が真になる。
$sにはARRAY(XXXXX)というキーとなる値が入り
@{$s}にて@なる連想配列(配列の親玉の様な)から配列を参照できる。
この様に思えるコードが実行されたところです。
もちっと http://www.kt.rim.or.jp/~kbk/perl5.005/perlref.html を勉強します。
PS
無名関数ってラムダですよね?
0828nobodyさん
03/01/04 17:29ID:???>$s = scalar $hash{array}
で$sにARRAY〜が入っているのは
scalarがリファレンスを返したりもするのですね。
>@{$s}にて@なる連想配列(配列の親玉の様な)から配列を参照できる。
@なる連想配列云々は普段使用している参照となにも変わらないような・・・
$s = \$hash{array};
for each (@$s) { etc... }
リファレンスが入っているのなら
@{$s} は @$sそのものですし。。
0829nobodyさん
03/01/04 18:11ID:???で$sにARRAY〜が入っているのね。
の間違いです。ごめん。。
scalar がリファレンスを返したのは
= [1, 2, 3];
で定数配列? を代入させたからですか・・・
納得。
0830nobodyさん
03/01/04 18:51ID:???my $a = ['aho'];
print $$a[0];
$$a[0] = 'baka';
print $$a[0];
って代入もできるから定数ではないYO
\[etc...]
で定数配列になる
この変数はアドレスだけで、特に名前は存在しないから
無名変数と言えなくもない
変数名はただのメモリアドレス識別子ともいえるから
特に強調することではないYO
0831nobodyさん
03/01/04 19:08ID:???404 Not Foundを返すファイルへの対処方法を教えてください。
正常 http://www.yahoo.com/index.html ダメ :http://www.google.co.jp/index.html
$url="http://www.yahoo.com/index.html";
$url =~ s/http\:\/\///g;
@list = split('/',$url);
$host = shift(@list);
$file = pop(@list);
push(@list,$file);
$path = join('/',@list);
$addr = (gethostbyname($host))[4];
$name = pack("S n a4 x8", 2, 80, $addr);
@data;
socket(S, 2, 1, 0);
connect(S, $name);
binmode(S);
select(S); $| = 1; select(stdout);
print S "GET /".$path." HTTP/1.0\r\n\r\n";
while (<S>) { push(@data,$_); }
close(S);
$delnum = 1;
foreach(@data){ $delnum++; if(/Content-Type:/){ last; } }
splice (@data,0,$delnum);
open OUT,">$file";
binmode OUT;
foreach $var(@data){ print OUT$var; }
close OUT;
0832nobodyさん
03/01/04 19:49ID:???わざわざsocketを使っているのって凄いでつね。
どんな環境(OSなど)かは判りませんが、楽してモジュール使うとか、system 'wget -色々'; とか使った方が楽なような気がしまつでつ。
あと、UA送信した方がよいかもしれません。
それともPerlが、勝手に付けてくれるのかな?
(自鯖ではUA無しは即アク禁にしていまつ。)
0833nobodyさん
03/01/04 19:50ID:???件の
http://www.google.co.jp/index.html
は・・・GETだけですと、302のLocationを返すみたいですね。
試してみた限りではHost: を送信するとウェプページが返ってきました。
print S "GET /".$path." HTTP/1.0\r\n";
print S "Host: hogehoge\r\n";
print S "\r\n";
グーグルではHost: もチェックしているようです。
0834831
03/01/04 22:18ID:BNGRljfr>>833 さん
レスありがとうございます。
ググルは御陰様で解決しました。
404を返していた(個人サイトなので公開は控えておきます)サーバは
RefererにHostを入れて送ることで正常に取得出来ました。
どうやら直リンクを禁止してたようです。
>system 'wget -色々';
窓ユーザーなのでPerlからUNIXのコマンドが使えるとは知りませんでした。
これを機会にUNIXの勉強をしようかと思います。
#改良版
print S "GET /".$path." HTTP/1.0\r\n";
print S "Accept: */*\r\n";
print S "Referer: http://".$host."\r\n";
print S "Accept-Language: ja\r\n";
print S "Accept-encoding: gzip, deflate\r\n";
print S "User-Agent: Mozilla/4.0\r\n";
print S "Connection: Keep-Alive\r\n";
print S "Host: ".$host."\r\n";
print S "\r\n";
0835nobodyさん
03/01/04 22:27ID:tgEtvNOB場所をちゃんと指定した変数(?)を使わないといけない場合(use strict)に使う。かも。
%::a == %main::aだから・・
0836偽PG
03/01/05 00:04ID:X0VKDjVoオンラインで利用可能なツールの作成を考えている状況です。
あるWEBページがあります。
そのページには「IDNumber的な数字」「誕生国」「人名」が並んでいます。
上記はID=人名の関係です。
例)
ID=1 / 誕生国=日本 / 人名=豊臣秀吉
ID=2 / 誕生国=中国 / 人名=諸葛孔明
【考えているツールの流れ】
�@入力フォームを用意して文章を入力する。
(文章には不要情報も含まれている)
↓
�A文章中にIDが存在する場合、そのIDに該当する生まれ情報を
指定WEBページより取得する。
(WEBページの中にテーブルでID・誕生国・人名が並んでいる)
↓
�B取得した誕生国情報が日本3人・中国2人と複数存在した時には
それぞれの誕生国の数をカウントする。
↓
�C結果をHTML形式にして表示させる。
ローカルの情報ではなくWEBページから情報を取得して
カウントする事は可能なのでしょうか?
いちいちWEBページの情報を参照するのが面倒だと思って
作成を考えた次第です。
方法等はちょっと思いつきに近いものがあります。
スレ違いなら申し訳ないです。
0838偽PG
03/01/05 00:15ID:X0VKDjVoこれからWEBプログラムを学ぼうとしたのに
こんな所で突っ込まれては俺もダメですな。マジ勉強しなきゃ。
0839nobodyさん
03/01/05 00:17ID:???ああ、すまんな。言い過ぎた。
>ローカルの情報ではなくWEBページから情報を取得して
>カウントする事は可能なのでしょうか?
サーバが外にコネクションを張ることを許可しているならできる。
0840nobodyさん
03/01/05 00:29ID:0ij2w7ok実行できないで困っています。ActivePerlをインストールしました。インストール
先はc:\perl\binになっていました。pathも通っているので、DOSプロンプトで
perl -vとやってみると、ちゃんとバージョン情報がでるので、一応動くようなのですが
ブラウザからCGIを実行させようとするとできません。*.plファイルの最初の一行は
#!/perl/bin/perlとしているのですがこれが間違いでしょうか?
エラーメッセージは
Error 500
CGI エラー - Content-Type ヘッダが正しくありません。
CGI 出力メッセージ:
'perl' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
となるんですが、どなたか助言お願いします
0846840
03/01/05 01:00ID:0ij2w7okそれはどこで設定するのでしょう?
とりあえずDocumentRootの設定と/~UserNameと /cgi-bin/の仮想パスとローカルパス
というところはチェックしてみました。その他はいじってません
0848840
03/01/05 01:04ID:0ij2w7okすいません。やっとわかりました。
「#!の行を調べる」というチェック項目があってそこに
チェックをいれたら実行することができました。
ありがとうございます。スレ違いごめんなさい。
0849847
03/01/05 01:05ID:???拡張子ごとの設定の編集のところで、「#!の行を調べる。」という項目があるでしょ。
そこにチェックを入れてみて。
0850849
03/01/05 01:05ID:???0851840
03/01/05 01:08ID:0ij2w7okああ!!申し訳ないです。
わざわざインストールまでしてもらって。
親切にありがとう。
0852nobodyさん
03/01/05 02:42ID:TaQfxWs2在室者リストに(*.dat)に 名前<br> の順で書き込まれている状態から、
退室時にその人の 名前<br> だけを削ろうとして
if (($who ne '') && ($proc eq 'exit')) {
$out_mem = "$who<br>";
open (OUT, "+<$sanka");
flock (OUT,2);
@list = <OUT>;
foreach $outlist(@list) {
$outlist =~ s/$out_mem//g;
print OUT "$list";
}
flock (OUT,8);
close (OUT);
}
と書いたのですが、名前が載りっぱなしになってしまいました。
試しに、 +< を +> に変更したら今度は必要な名前まで
一緒に削れてしまいました。
ご助言をお願いします。
0853nobodyさん
03/01/05 03:02ID:???ファイルの中身をtruncateしてから待避したものを書き出せばいいんじゃないの。
0854nobodyさん
03/01/05 03:02ID:???perlの大罪その1.
print OUT "$list";
↓
print OUT "$outlist";
use strict ;しる。
0855852
03/01/05 03:31ID:TaQfxWs2名前以外を退避…。
そちらに頭が全くまわってなかったです。
アドバイス有難うございます!
>>854
なんという基本的な間違いを。ご指摘有難うございます。
早速修正します。
0856nobodyさん
03/01/05 09:18ID:2NV2xWH6(自分でおいたCGIのせい?)
どうしたら削除できますか?
サーバーはinfoseekです.
0858nobodyさん
03/01/05 09:26ID:2NV2xWH6もう少し詳しくお願いします
0859nobodyさん
03/01/05 09:28ID:???rm -rf ./
0860nobodyさん
03/01/05 09:49ID:???FFFTPとかで消せないって言うか、ファイルが見えないんだろ?
任意のコマンド ってあるから>>859みたいに
chmod 644 ./ファイル名
0861nobodyさん
03/01/05 10:05ID:2NV2xWH6FFFTP ですが 任意のコマンドで chmod 使えません。
どのフォルダのパーミッションをかえればいいのでしょうか
0862nobodyさん
03/01/05 10:57ID:???あそこはnobodyで動いてるから、自分でコーディングもできない利用者は
そりゃハマるだろうよ。
っつうか、そもそもPerlと何の関係が?
0863852
03/01/05 14:32ID:C4pjTkfz不要な名前を削って再度リストに並べ直す方法で巧く出来ました。
本当に助かりました。ありがとうございます。
0864nobodyさん
03/01/05 17:51ID:???いやいや漏れが言いたかったのはここまで有用な言語でありながら
変数定義と参照に関する処理系の警告機構が利用されていない
@listとして定義して$listとしてのアクセスは警告に値する。
(というか、この場合$listってどういう意味が有る?)
-wスイッチで起動すると解決するのか?
0867nobodyさん
03/01/05 23:18ID:LhQ0NrhBまだまだPerl初心者だね。
スカラー、リスト、ハッシュには、別々な名前空間(?)が存在するから、
$list @list %listは同時に使うことができる。
-wを付ければ、定義されていない変数がどーたらって警告が出るし、
use strictをつければ、コンパイル時にエラー(グローバル変数の利用)出て、
実行してくれない。から変数名を間違えたって気づくはず。
0868nobodyさん
03/01/05 23:31ID:+d9WGquVhttp://yahooo.s2.x-beat.com/linkvp/linkvp.html
0869nobodyさん
03/01/05 23:43ID:???その本の作者には何か奇妙な癖のようなものがあって、
スカラー、リスト、ハッシュの変数名に同じ名前を割り当てているケースが多くて、
1行ごとプログラムリストの解説が載っているにもかかわらず、
はじめはわけがわからなかった。
特にforeachのところでは必ずといっていいほど
foreach $hoge(@hoge){}みたいになっていた。
0870nobodyさん
03/01/06 00:07ID:???$i = $i + 10; # $iを10増やす
でつか?
0871おまけ
03/01/06 00:12ID:hDz3fIfAmy $hoge
foreach $hoge (@hoge) { }
2.
foreach my $hoge (@hoge) { }
1よりも2の方がいい。
0872nobodyさん
03/01/06 00:30ID:???例えば
価格。COMみたいな製品評価を皆でするタイプ。
http://kakaku.com/prdsearch/detail.asp?ItemCD=001004&MakerCD=30&Product=FMV%2DDESKPOWER%20C18B
あとは
http://www.jinvestor.com/cgi-bin/bbscode.cgi?c=6748
こんな感じで皆で評価できるタイプを作りたいのですが、初心者なのでよくわかりません。
無料のCGI配布してるとこ等、探しましたが、なかなか上記に見合うタイプのがないです。
何か助言お願いします。もし作り方知ってられましたら是非教えてください。お願いします。
0873nobodyさん
03/01/06 01:15ID:???まずは円グラフがどういうものかの勉強からやり直してきてください。
0874nobodyさん
03/01/06 01:32ID:???GD::Graph::pie使えば円グラフ簡単に作れるけど、GD::Graphが
使えるかどうかは管理者に聞いてくだちい。
0875869
03/01/06 01:52ID:???その本のプログラムはPerl4で書かれていたからmyは使ってなかった。
localも何故かほとんど使ってなくて、
$hogeや@hogeみたいな変数は全てグローバル変数だった。
0878nobodyさん
03/01/06 21:42ID:???アクセスがあるとHTTPの文書を返せればよいのですけれど
0882864
03/01/07 01:48ID:???調べたら簡単に出来るモジュールがあった。
http://search.cpan.org/author/GAAS/libwww-perl-5.68/lib/HTTP/Daemon.pm
そのまんまだ、
サンプルをいじって見れば、、、
0883864 2/3
03/01/07 01:49ID:???----httpd.plとして作成
use HTTP::Daemon;
use HTTP::Status;
my $d = new HTTP::Daemon(LocalPort =>$ARGV[0]) || die;
print "Please contact me at: <URL:", $d->url, ">\n";
while (my $c = $d->accept) {
my ($family, $port, $heraddr) =unpack('S n a4 x8',$c->peername);
while (my $r = $c->get_request) {
print "Accept from:".Socket::inet_ntoa($heraddr)." Port:".$port."\n";
print " User-Agent:".$$r{"_headers"}{"user-agent"}."\n";
if ($r->method eq 'GET' and (-e '.'.$r->url->path)) {
if ($c->send_file_response('.'.$r->url->path)) {
print "Get file: .".$r->url->path."\n" ;
}
} else {
print "Not Respons ".$r->method." ".$r->url->path."\n" ;
$c->send_error(RC_FORBIDDEN)
}
}
print "Close Connection :".Socket::inet_ntoa($heraddr)."\n";
$c->close;
undef($c);
}
----
0884864 3/3
03/01/07 01:50ID:???試しとして同じDIR上にaaaa.htmlを作成
perl httpd.pl 8888 で起動。8888は任意のポート番号
ブラウザからhttp://ホスト名/aaaa.html で表示を確認した。
しかし、これだけだとマルチスレッドとならない為完全な同時アクセスには対応していない。
(先のページには同時に5要求の待ち合わせが出来るように書いてある?)
以上
0885864
03/01/07 01:57ID:???ブラウザからhttp://ホスト名/aaaa.html で表示を確認した。
↓
ブラウザからhttp://ホスト名:8888/aaaa.html で表示を確認した。
0886nobodyさん
03/01/07 03:26ID:???use HTTP::Daemon;
use HTTP::Status;
my $d = new HTTP::Daemon(LocalPort =>$ARGV[0]) || die;
print "Please contact me at: <URL:", $d->url, ">\n";
while (my $c = $d->accept) {
my ($family, $port, $heraddr) =unpack('S n a4 x8',$c->peername);
while (my $r = $c->get_request) {
print "Accept from:".Socket::inet_ntoa($heraddr)." Port:".$port."\n";
print " User-Agent:".$$r{"_headers"}{"user-agent"}."\n";
if ($r->method eq 'GET' and (-e '.'.$r->url->path)) {
if ($c->send_file_response('.'.$r->url->path)) {
print "Get file: .".$r->url->path."\n" ;
}
} else {
print "Not Respons ".$r->method." ".$r->url->path."\n" ;
$c->send_error(RC_FORBIDDEN)
}
}
print "Close Connection :".Socket::inet_ntoa($heraddr)."\n";
$c->close;
undef($c);
}
0887nobodyさん
03/01/07 03:31ID:???use HTTP::Daemon;
use HTTP::Status;
my $d = new HTTP::Daemon(LocalPort =>$ARGV[0]) || die;
print "Please contact me at: <URL:", $d->url, ">\n";
while (my $c = $d->accept) {
my ($family, $port, $heraddr) =unpack('S n a4 x8',$c->peername);
my $pid = fork() ;
if ($pid!=0) {
next ;
}
else {
while (my $r = $c->get_request) {
print "Accept from:".Socket::inet_ntoa($heraddr)." Port:".$port."\n";
print " User-Agent:".$$r{"_headers"}{"user-agent"}."\n";
if ($r->method eq 'GET' and (-e '.'.$r->url->path)) {
if ($c->send_file_response('.'.$r->url->path)) {
print "Get file: .".$r->url->path."\n" ;
}
} else {
print "Not Respons ".$r->method." ".$r->url->path."\n" ;
$c->send_error(RC_FORBIDDEN);
}
}
print "Close Connection :".Socket::inet_ntoa($heraddr)."\n";
$c->close;
undef($c);
}
}
0888nobodyさん
03/01/07 14:19ID:???リファレンスとかバリバリ使ってる初心者は嫌だ。
0889nobodyさん
03/01/07 15:42ID:???一度立った事があるけど、今は残ってない。
初心者と中級者の線引きを決めないと上手くいかないよ。
tu-ka,中級者は自分で調べる事(自力で解決する術)を知ってるから、
あまりこういうところで聞かないんだよな。
0890nobodyさん
03/01/07 23:25ID:???どんどん質問してください。
当然、
1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
1と3が無いと誰も答えられないよ。
0891nobodyさん
03/01/08 00:41ID:???if ($fname =~ /filename="(.*)"/){
my $tmp = $1;
if ($tmp =~ /\\/){
for ($fi = (length $tmp) - 1; $fi >= 0; $fi--){
if ("\\" eq substr($tmp, $fi, 1)){
$fi++;
last;
}
}
$fname = substr($tmp, $fi);
}else{
$fname = $tmp;
}
}else{
$fname="";
}
Windowsから十二名の乗客.jpgを取得しようとすると
二名の乗客.jpgとなってしまいます。
どなたか良い方法をご教授ください。
0892nobodyさん
03/01/08 03:07ID:???文字コードをECU-JPにしてその後SJISに戻すとか…
ちなみに処理は1行で
$fname =~ m/([^\\]*)"$/;
print $1;
0894えり
03/01/08 10:27ID:RjcWJJ7/アンインストールしたいのですがどうすればいいですか?
アプリケーションの追加と削除で削除したのですがperlのフォルダーが残っており
又、フォルダーの中身ものこったままです
0896nobodyさん
03/01/08 13:03ID:3CJ1U7Ioたとえば、
テキストファイルに「青」、「うんこ」とあったら
perlで五十音順に並べ替えたりできるんですか?
0898896
03/01/08 14:05ID:???少なくとも読み仮名が無ければ厳しいんですね。
http://www.mytools.net/cgitools/dictionary0.html
こういうの見つけましたが、構成ファイルが多すぎてセッティングしてません。
0900えり
03/01/08 15:39ID:RjcWJJ7/ありがとうございました!!!
0901nobodyさん
03/01/08 20:51ID:OEI4EUTrkakasiを使えば、ある程度は、正しい読み仮名を付けれるよ。
0902nodody
03/01/08 22:13ID:1Pe5J1+Nしてみたいと思っています(スキルアップのために)。
ソースの見やすさを考える以外に気をつけておいた方がいいことが
あればご教授下さい。
Perlを使用します。
(特定の記述法は特に効率が悪いからやめろとか)
0905nobodyさん
03/01/08 22:24ID:???ローカルでテストする。
これ、最優先事項。
0906nodody
03/01/08 22:26ID:1Pe5J1+Nマジで見てくださるのですか!?
じゃあ、マッハでつくります。
>>904
ありがとうございます。
気をつけてみます。
0908nobodyさん
03/01/08 22:30ID:atnjxi5O参考書に載ってなかった。おしえてくだちい。
0909nobodyさん
03/01/08 22:32ID:???0910nobodyさん
03/01/08 22:32ID:???0911nobodyさん
03/01/08 22:53ID:???0913nodody
03/01/08 23:15ID:1Pe5J1+Nいや、少なくとも数日かかると思いますが…。
意気込みってやつですよ。
>>907
use strict と-w 調べて使ってみました。
out という名前でファイルを開いたあと、
print out "文章";
と書くとoutがクォートで囲まれていないという警告が出ます。
そこで
print "out" "文章";
とするとエラーがでて動作しません。
これは無視した方がいいのでしょうか?
0914913
03/01/08 23:18ID:1Pe5J1+NError 500
CGI エラー - Content-Type ヘッダが正しくありません。
というエラーです。
0916nobodyさん
03/01/08 23:40ID:???正直、様々な原因が考えられるエラーだ。
本気でデバッグしてもらいたいなら、
スクリプトをどっかに.txtにしてアップするくらいのことはしろ。
0918>>916
03/01/09 00:39ID:ve0CCzFGにソース(すごく簡略化してありますが、エラーメッセージは同じです)
とエラーメッセージをテキストにまとめてアップしました。
よろしければご教授下さい。
0919nobodyさん
03/01/09 00:56ID:???open OUT, ">test.dat";
print OUT $text;
close (OUT);
open IN ,"<test.dat";
my @a = <IN>;
close (IN);
0920913
03/01/09 01:01ID:ve0CCzFGありがとうございました。
0921nobodyさん
03/01/09 01:07ID:???これと比べてみな。
#!/usr/local/bin/perl -w
use strict;
my $text = <<'EOE';
テスト
です
EOE
open ( OUT, '>test.dat' );
print OUT $text;
close ( OUT );
open ( IN, 'test.dat' );
my @line = <IN>;
close ( OUT );
print "Content-type: text/html\n\n";
print "<html><head><title>test</title></head><body>";
print map { $_,'<br>' } @line;
print "</body></html>";
exit;
0922nobodyさん
03/01/09 01:13ID:???Perlの文法がどうこう以前に、
変数の名前のつけ方とかをもっとしっかりさせた方がいい。
http://www.rfs.jp/sitebuilder/perl/07/01.html
http://www.rfs.jp/sitebuilder/perl/07/02.html
こんなのでも読むべし。
0923nobodyさん
03/01/09 02:51ID:j8Nogs/Uime.nu/hoge.jp/だったらime.nuのあとにhoge.jp/というフォルダを作っているんですか?
それとhttp://ime.nu/test.com/
からtest.comをどうやって取得しているんですか?
リファは無理っぽいです。
0924nobodyさん
03/01/09 03:55ID:???#!/usr/bin/perl
use strict;
my $buf_size = 256;
my $query = substr $ENV{PATH_INFO}?$ENV{PATH_INFO}:$ENV{QUERY_STRING},0,$buf_size;
$query =~ tr{-_.!~*'()a-zA-Z0-9;/?:@&=+$,%#}{}cd;
$query =~ s{^/+}{};
print <<HTML;
Content-type: text/html;charset=Shift_JIS\r\n\r
<html><head><title>jump</title></head><b><a href=${query}>${query}</a></b><br>
別のサイトにジャンプしようとしています。宜しければ上記のリンクをクリックしてください
HTML
__END__
0926nobodyさん
03/01/09 09:35ID:???以前実験したことがありますが、IE6では約2000bytes、Netscape7では約8000bytes送れました。
ネスケでは、Apacheから
400 Bad Request
Your browser sent a request that this server could not understand.
Size of a request header field exceeds server limit.
とか
414 Request-URI Too Large
The requested URL's length exceeds the capacity limit for this server.
request failed: URI too long
とか言われますた。
0927nobodyさん
03/01/09 10:32ID:???できますか?教えてください。
0928nobodyさん
03/01/09 10:57ID:???0930初心者
03/01/09 13:46ID:???cgiページの最上部にサイト共通のヘッダを表示したかったので
<!--#include file="header.html"-->
と記載しましたが、そのままコメント文として出力されました。
この場合はどんな方法を使用すればよいのでしょうか?
0931nobodyさん
03/01/09 13:59ID:???Perlとは一切関係ないので該当スレへ行ってください。
SSIスレとかかな?
Apacheの設定スレの方がいいかな?
どのスレへ行けばいいかわからないからと言って、マルチポストはするんじゃないぞ。
0932nobodyさん
03/01/09 14:11ID:???open(IN, "<header.html");
my @header = <IN>;
close(IN);
<!--#include file="header.html"-->
の代りに
@header
とでもしておけYO
0937nobodyさん
03/01/09 15:33ID:???Perlで排他制御を行うにはシンボリックリンクをフラグとして使いましょう。
とかまじめに書いてるサイトもあるので要注意だな。
0938nobodyさん
03/01/09 15:53ID:???マルチタスクでの排他処理は要注意。
0939nobodyさん
03/01/09 16:21ID:???http://www.hoge.co.jp/hoge.cgi?str=あいうえお
こんな風に日本語を引数にしてもいいんでしょうか。
試したらうまくいったんですけど。
なんか、検索エンジンとかでは、入力するとurlエンコードって言うんですかね、
そうなって訳のわからない文字に変換されますよね。
ああいう風にしなくてもいいんですかね、という事です。
0940nobodyさん
03/01/09 16:51ID:???良し悪しで言えば・・・悪し。
フォームでGET送信すれば自動的にエンコードしてくれるけど
直リンでの固有文字はその文字コードを使用していないと文字化けまくり。
しかも文字中に&や=などの区切り文字など混じった場合に対処出来なくなる罠。。
World Wideを意識しないでローカル派なのであればどうぞ。
0941nobodyさん
03/01/09 17:15ID:???もちろん必須です。理由はRFCで決まっているから。で良いと思われ。
特定のアルファベットと記号以外を全部%16進の形式にするだけなので割と簡単です。
formのinput要素とかはブラウザが変換する義務を負うので無視して良いです。
0942nobodyさん
03/01/09 17:18ID:???なぁ?
URLエンコードしてもそのエンコード前の文字コードに対応してなかったら結局化けると思うんだけれど。
あなた論理だと英語以外送っちゃいけないことに・・・。
SJIS -URLエンコード-> URLエンコードされたSJIS -URLデコード-> SJIS
0943nobodyさん
03/01/09 17:35ID:???現状ではまだ英数文字以外のURLは送るべきではない。
http://www.hoge.co.jp/hoge.cgi?str=あいうえお
書かれていたこのURLはただの例にすぎないが
URLを伝える過程(Webだけではなく)で文字化けしていては
第三者がURLを辿っていけない状況は多分にある。
そのURL先が文字化けしているか、はまた別の話。
0944nobodyさん
03/01/09 17:46ID:???「改行が2つ続いたら、それは改行1個に置き換える」をしたいんですが、
$value =~ s/\r\n\r\n|\r\r|\n\n/\n/g;
これじゃダメっぽいです。なぜでしょうか。
0946nobodyさん
03/01/09 18:00ID:???改行とおぼしきものを一旦違うものに置き換えてからってどうかしらん?
$value ~= s/\r\n|\r|\n/<br>/g;
$value ~= s/(<br>)+/$1/g;
とか。
他の凡例は >>946
0951nobodyさん
03/01/09 18:43ID:???s/\n\n+/\n/g;
0952nobodyさん
03/01/09 18:58ID:???0953nobodyさん
03/01/09 19:02ID:???1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
0956nobodyさん
03/01/09 19:51ID:???0959nobodyさん
03/01/09 20:38ID:???http://tohoho.wakusei.ne.jp/wwwgif.htm#AnimatedGIF
0961nobodyさん
03/01/09 21:27ID:???どのようにすればいいんでしょうか?
0963nobodyさん
03/01/09 22:31ID:???0964nobodyさん
03/01/09 23:50ID:???(ループのさせ方)がありましたらお教え下さい。
−−−−−ここから−−−−−
#!/usr/bin/perl
for ($a=0; $a<9; $a++) {
for ($b=0; $b<9; $b++) {
for ($c=0; $c<9; $c++) {
for ($d=0; $d<9; $d++) {
for ($e=0; $e<9; $e++) {
for ($f=0; $f<9; $f++) {
for ($g=0; $g<9; $g++) {
for ($h=0; $h<9; $h++) {
for ($i=0; $i<9; $i++) {
for ($j=0; $j<9; $j++) {
$k = $a . $b . $c . $d . $e . $f . $g . $h . $i . $j;
}
}
}
}
}
}
}
}
}
}
−−−−−ここまで−−−−−
0968nobodyさん
03/01/10 00:18ID:???>>962は、「monaを含む要素」の数
>>963は、「monaそのものである要素」の数
この場合質問が複数の解釈を許すからこういうことが起こる。
質問をする方にも、質問をするスキルが求められていると言うことだな。
0969nobodyさん
03/01/10 02:37ID:bsKAU3F+にはどうしたらいいのですか?
`pwd`で得ようとしましたが、そのスクリプトを起動したパスになってしまいます。
どうかお願いします。
0971えせカミ
03/01/10 04:30ID:???例えば)
movf bittimc,w ;1bitタイマカウンタをwに格納し
addlw 2 ;+2
movwf bittimcb ;した値を控えに格納。
といったASM言語の各命令を1関数として
movfについて
sub movf ($$) {
my $freg = shift;
my $fw = shift ;
$REG::W = &LOADF($freg);
}
と定義したとして
movf bittimc,w ;
のbittimc と wが引数として評価されて当然エラーとなります。
この関数への引数を評価無しで関数にその文字を渡すような事を出来ないでしょうか?
’’で囲って文字列として指定すれば良いのですが極力実際のASMコーディングを生かしたいと、、
わがままですね。。。
0972
03/01/10 08:40ID:1IvfvcLause File::Basename;
use Cwd 'abs_path';
my ($name,$path,$suffix) = fileparse($0);
my $abs_path = abs_path($path);
print "($name,$path,$suffix),$abs_path\n";
0973nobodyさん
03/01/10 08:41ID:0QU3xkA6$0 : 実行している perl スクリプトのファイル名。
$0 に代入を行なうと、ps(1) プログラムが参照する引数領域を変更する。
覚え方:
sh や ksh と同じ。
ttp://www.cec.co.jp/usr/hasegawa/Docs/perl-jman/perl-4.019/perl_169.html#SEC234
0974nobodyさん
03/01/10 10:03ID:???今は普通に手書きの
if($ENV{ 'REQUEST_METHOD' } eq "POST"){
read(STDIN, $QUERY_DATA, $ENV{'CONTENT_LENGTH'});
}else{
$QUERY_DATA = $ENV{'QUERY_STRING'};
}
省略、
をやっています。初めて覚えた時このやり方だったんで。
CGI.pmといのを使うやり方もあるみたいなんですが
どっちでやった方がいいとかあるんでしょうか。
こっちの方が効率がいいとか、バグが無くなるとか。
プロトタイプを(**)にする。
そうすると裸のワードを受け付けるようになる。
…なんだけど、movf bittimc, w;としたときに
たとえばbittimcというサブルーチンが事前に宣言されていたり、
予約語だったりするとうまくいかないので注意してね。
他は、使用するシンボルを全て
use constant symbol => 'symbol';
として定数としておくという手もあるかな。
0976913
03/01/10 16:49ID:???http://cgi21.plala.or.jp/~tay/2chbbs/bbs.txt
↑がソースファイルです。
WIN2000、anhttp、ActivePerl5.6の環境下で動作確認済みです。
お時間がありましたら問題箇所(多すぎるとは思いますが)の指摘を
お願いいたします。
0977nobodyさん
03/01/10 16:55ID:???#▼グローバル変数は頭を大文字にして区別
my $value;
my $name;
my @query;
my $query;
our %Form;
our $Write;
うそつき・・・。
0978nobodyさん
03/01/10 16:57ID:???#▼JAVASCRIPT(クッキー読み出し・書き込み用)
そんなもん使わずとも$ENV{"HTTP_COOKIE"}に入ってるよ。
デコードはQUERY_STRINGのときとほぼ同じ。
0979nobodyさん
03/01/10 21:12ID:???直書き:関数呼び出しのオーバーヘッドとか汎用性を考慮しなくて良い分早いであろう。
CGI.pm:少なくともバグの発生を他人のせいにできる。
0980nobodyさん
03/01/10 21:21ID:???"ス"など2バイト目が\x5c(\記号)の文字だとエスケープされてしまい、
結果的に文字化けしてしまいます。
文字コードはそのままsjisを使う前提で、何か良い対処方法はありませんでしょうか。
0982nobodyさん
03/01/10 21:32ID:KddZS+XLuse strictでエラーを出さないようにすればいいっていうものじゃない。
スコープを最小?にしないと、myとかやる価値がない。
use strictは、一生懸命努力してるときに、うっかりミスが
発生することを防ぐ、ためのもの。
open "file" => open FILE
こんなファイルハンドルの使い方がちょっと変なところが数箇所
(my $sec,my $min,my $hour,my $mday,my $mon,my $year) => my ($sec,$min,$hour,$mday,$mon,$year)
(localtime)[0,1,2,3,4,5] => (localtime)[0..5]
lock.datの使い方が変
あと、Use of uninitialized value...の意味は、初期化されていない変数の使用、
っていうことだから。これだけ分かれば直せると思う。
0983えせカミ
03/01/10 21:53ID:0QU3xkA6おー感謝!
やっぱperlは神だった。。。
0985976
03/01/10 22:37ID:???今度は少し時間をかけて直してきたいと思います。
ご指摘、ありがとうございました。
0986Perl 3日目房
03/01/11 03:14ID:7w0GJrTJが、mkdir(filename, mode) でデレクトリを作成できると書いてあるんですが
ファイルの作成については何も書いて無いのです。
試しに toucth(filename, mode)と書いてみましたがエラー。
で、結局新規にファイルを生成するにはどう書けば良いんですか?
0988nobodyさん
03/01/11 08:11ID:???0989nobody
03/01/11 08:27ID:WMCRUM05大量の数値を1つのファイルから読み込み、3〜4カ所の関数で使用する場合、
&work($a,$b,$c)
のようにメイン関数からいちいち引数を渡してやるのと
$main::a
などと大域変数にしてしまうのとはどちらが良いのでしょうか?
なお、読み込んだデータのほとんどは1つの関数でしか使用されません。
0991nobodyさん
03/01/11 11:31ID:hHeUjYJr例えば
$"/dir1/dir2/dir3/file"
てあるときに"file"を取り除いて"/dir1/dir2/dir3"を得るには
どうしたら出来ますか?
ちなみにこの時点で"file"は何かは分かっていません。
0992nobodyさん
03/01/11 11:38ID:bB6C4Xxsprint $1;
0993nobodyさん
03/01/11 13:24ID:1b8L5mKxランダムから求められる数値が片寄ってるような気がしてなりません。
ランダムを取得する時、必ず直前に以下のような記述を置いているのですが、
正確な意味も分かりません。
(昔、どこかで見たのを写したのだと思います)
srand(time ^ $$ ^ unpack "%L*", `ps axww | gzip`);
質問1
上記はどんな初期値(?)を作成してるのでしょうか?
質問2
とても効率が良く、数値が片寄る事を感じさせない記述を教えて下さい。
皆様はランダム前にどんな記述をおくのでしょうか?
イロイロ教えて下さい。
また頭が弱いため、見ても理解出来ないと思うので、どのように求めているのかも簡潔に教えてくれると嬉しいです。
0994991
03/01/11 13:29ID:hHeUjYJrありがとうございます。これでできました。
できましたらこれの解説をお願いできませんでしょうか?
どなたでも結構ですので、よろしくお願いします。
0995nobodyさん
03/01/11 13:34ID:YuKx7bV3らくだ本に書いてあるやつですね。
よくわからんけど、本には
「常に変化しているオペレーティングシステムの状態情報の出力を圧縮してチェックサムをとるというのが、よく行われる。
例えば次のようにする」
と書いてあります。
0998nobodyさん
03/01/11 13:41ID:???何万の例をとって、どれくらいの率で乱数が偏ってるの?
体感でってのはなしな。
「毎月1日は雨が降りやすい」とかそういう気分の問題であることが多いから。
なお、試す時は必ずローカルで。
0999nobodyさん
03/01/11 13:43ID:???1000nobodyさん
03/01/11 13:52ID:???10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。