Perl コーディング初心者質問コーナー Part30

このエントリーをはてなブックマークに追加
1nobodyさん
いらっしゃーい、Perlのコーディングで困ってる人のスレです。

【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。

1: 自分はこう言う事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。

最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。

過去ログやお勧めサイトは >>2-10
2nobodyさん:03/11/26 20:29 ID:AOnvIohs
関連スレ
【Perl上級者コーナーPart01】
http://pc2.2ch.net/test/read.cgi/php/1024741312/l50
CGI: Common Gateway Interface part 11
http://pc2.2ch.net/test/read.cgi/php/1055597189/l50
【Perl,CGI】参考書籍 第三版
http://pc2.2ch.net/test/read.cgi/php/1030209573/l50
【 スクリプト改造工房 PART 7 】
http://pc2.2ch.net/test/read.cgi/php/1063780103/l50
△▲ WebProg 初心者の質問 Part5 ▼▽
http://pc2.2ch.net/test/read.cgi/php/1060263267/l50
【Perl】ファイルロック(排他処理)について語ろう
http://pc2.2ch.net/test/read.cgi/php/1024795138/l50
★負荷軽減対策委員会(Perl、PHP)★
http://pc2.2ch.net/test/read.cgi/php/1034645635/l50
【Perl】掲示板を使ろう!
http://pc2.2ch.net/test/read.cgi/php/988890976/l50
Perlモジュールについて
http://pc2.2ch.net/test/read.cgi/php/997829243/l50
CGIに依存しないPerlの話題一般/Part2
http://pc2.2ch.net/test/read.cgi/php/1030548610/l50
3nobodyさん:03/11/26 20:32 ID:???
4nobodyさん:03/11/26 20:32 ID:???
5nobodyさん:03/11/26 20:33 ID:???
[総合]
 ・http://www.excite.co.jp/world/ # 英文のページ多いから一応
 ・Perl Com: http://www.perl.com/
 ・CPAN.com: http://search.cpan.org/
 ・ActivePerl: http://www.activestate.com/
 ・CGI-ML:http://forest.ne.jp/cgi-ml/

[お薦め]
 ・Perlメモ: http://www.din.or.jp/~ohzaki/perl.htm ★読んどけ
 ・Perl Recipes: http://www.effectiveperl.com/recipes/ # 死んでるか?
 ・Randal's WebTechniques columns: http://www.stonehenge.com/merlyn/WebTechniques/
 ・Perlの部屋: http://www.cc.rim.or.jp/~midorin/mad-p/perl/index.html
 ・Perl初心者の部屋:http://www.harukaze.net/~mishima/perl/
 ・Perlリファレンス:http://www.big.or.jp/~mio/ga/pl/plref/pl_ref.htm
 ・Perlのページ:http://homepage1.nifty.com/nomenclator/perl/
6nobodyさん:03/11/26 20:33 ID:???
 [Document&Tutorial]
 ・Home - Japanized Perl Resources Project: http://perldocjp.sourceforge.jp/
 ・Perl Monks: http://www.perlmonks.org/
 ・use Perl; : http://use.perl.org/
 ・Learn Perl - Perl Education: http://www.devdaily.com/perl/edu/index.shtml
 ・Perldoc.com: http://www.perldoc.com/
 ・Using Perl5 in Web: http://docs.rinet.ru/Using_Perl5_in_Web/
 ・Rex Swain's Home Page: http://www.rexswain.com/
 ・Robert's Perl Tutorial: http://www.netcat.co.uk/rob/perl/win32perltut.html
 ・Perl Tuts: http://savage.net.au/Perl-tutorials.html
 ・Beginning Perl Tutorials: http://www.pageresource.com/cgirec/index2.htm
 ・jcode.pl の私的な解説書: http://www.mikeneko.ne.jp/~lab/kcode/jcode.html
 ・Logical Choice Software, Home Page: http://www.logsoft.com/perltips/
 ・Perlfect Solutions: http://perlfect.com/
 ・The Perl Archive : http://www.perlarchive.com/
 ・Perl6 & Parrot VM についての情報: http://dev.perl.org/perl6/
 ・use Object; : http://perl.infoware.ne.jp/
[Module]
 ・河馬屋二千年堂's Page: http://member.nifty.ne.jp/hippo2000/index.htm # お勧め
 ・PPMPackages: http://www.activestate.com/PPMPackages/

[Security]
 ・安全なプログラミングのためのガイドライン:http://www.FreeBSD.org/ja/security/#spg
 ・Perl security:http://www.perldoc.com/perl5.6/pod/perlsec.html
 ・Perl security和訳:http://www.kt.rim.or.jp/%7ekbk/perl5.005/perlsec.html
 ・CGI and Security http://www.ansi.co.jp/tech/cgi/security/
 ・The Unofficial Web Hack FAQ:http://secinf.net/websecurity/The_Unofficial_Web_Hack_FAQ/
 ・How to Write Secure Code:http://www.shmoo.com/securecode/
 ・Safe CGI Programming :http://www.improving.org/paulp/cgi-security/safe-cgi.txt

[OS]
 ・Linux日本語マニュアル:http://www.linux.or.jp/JM/
 ・FreeBSD日本語マニュアル:http://www.jp.freebsd.org/man-jp/
8nobodyさん:03/11/26 20:56 ID:???
$ENV{'HTTP_USER_AGENT'}からOSとブラウザ名をはじき出すライブラリ
のようなものはどこかにありませんか?PerlでもPHPでもかまいません。
9nobodyさん:03/11/26 21:17 ID:???
>>8
「perl HTTP_USER_AGENT」でググれば一発目に
出てくるサイトを見つけられないあなたに。
http://www.futomi.com/subroutine/ua.html
108:03/11/26 21:38 ID:???
まさにこれを探していた!
118:03/11/26 21:43 ID:???
ついでにお聞きしたいのですがこのサブルーチンの引数で$remote_hostは意味あるのでしょうか?
12nobodyさん:03/11/26 22:13 ID:???
>>11
意味不明
138:03/11/26 22:18 ID:???
いや、>>9のサブルーチンで

sub User_Agent {
my($user_agent, $remote_host) = @_;

となっておりますが、$remote_hostは特に何の役目も果たしてないようですが。
14nobodyさん:03/11/26 22:27 ID:???
果たしておりませんな。
158:03/11/26 22:40 ID:???
NetscapeNavigator5とか出てきちゃうし、SafariとかFirebirdとかの最近の
ブラウザにも対応してないのね。
168:03/11/26 22:41 ID:???
あとロボットとかも。
17nobodyさん:03/11/26 22:58 ID:???
そんなのは自分で保守していくしかないだろ
188:03/11/26 23:06 ID:???
了解しますた。
19nobodyさん:03/11/26 23:11 ID:???
まあ、誰かは保守してる人間いるんだろうな。
それを公開してる人がいないか探して回るのもいいかもしれない。
見つからなかったら、自分でそういうサイトを立ち上げてみよう。
そうすれば君が神だ。

神は冗談にしても、そういうサイトを開いて掲示板とか置いておけば
色んな情報が集まってくれたりする。
そうすると保守が楽になったりもする。
情報のギブアンドテイク。
一つの理想系だ。
20997:03/11/27 00:39 ID:???
ごめん、巣でボケてた・・・
21nobodyさん:03/11/27 18:16 ID:mfagzuaL
qq("W"クヲーテーチョン);
みたいに
@arry = (は,い,れ,ち,ゅ);
でクヲーテイションを省略できますか?
22nobodyさん:03/11/27 18:30 ID:???
>>21
試せばわかる
23nobodyさん:03/11/27 18:30 ID:???
qw(は い れ ち ゅ);
24nobodyさん:03/11/27 18:30 ID:???
それぐらいやってみろよ
2521:03/11/27 18:59 ID:???
なるへそ。
サンクスでつ。
26nobodyさん:03/11/28 01:50 ID:JTGzFPsT
すみません
template toolkit
ttp://theoryx5.uwinnipeg.ca/CPAN/data/Template-Toolkit/README.html
について語ってるスレありませんでしょうか?
27nobodyさん:03/11/28 10:09 ID:???
読んだファイルの複数行を置換するにはどうすれば良いんでしょうか。

my $foo = <<'EOM';
*******
*****
*********
EOM

open(FILE, "+>$file");
my @filedata = <FILE>;
@filedata =~ s/$foo//go;

とかやったのですが全く置換されませんでした……。
28nobodyさん:03/11/28 10:36 ID:???
=~の左側はスカラー値じゃないとダメなわけだが。
29nobodyさん:03/11/28 11:28 ID:???
>>27
置換文字列に改行が含まれてるから、一工夫必要。
あとそのopenの仕方だと読み込み時にファイルが空になってしまう。
とりあえず一例。

{
 local $/; # 入力セパレータを無しにする(デフォルトは\n)
 open(FILE, "$file"); # 読み込みモードでファイルオープン
 my $filedata = <FILE>; # ファイル全体が変数$filedataに入る
 $filedata =~ s/$foo//g; # 置換
 close FILE;
}

これで多分できると思う。一行目はlocalじゃなきゃだめ
30nobodyさん:03/11/28 12:06 ID:???
>>29
あー、$/って言う手があったか
今までこんなことしてたよ

open(FILE, "$file");
@filedata = <FILE>;
$filedata = join('',@filedata);
$filedata =~ s/$foo//g;
close FILE;
31nobodyさん:03/11/28 12:10 ID:???
>>27
s/$foo//go for @filedata;
32nobodyさん:03/11/28 12:45 ID:???
>>31
それじゃ無理
33あぼーん:あぼーん
あぼーん
34あぼーん:あぼーん
あぼーん
35あぼーん:あぼーん
あぼーん
36あぼーん:あぼーん
あぼーん
37あぼーん:あぼーん
あぼーん
38nobodyさん:03/11/28 14:30 ID:IcoS5W50
perlマンセー
39nobodyさん:03/11/28 16:08 ID:???
>28
初めて知りました…。

>29-30
読み込みモードは書き込んだ後に気付きました。

最初
my $filedata = <FILE>;
とやって駄目だったのですが$/を調べてみて納得。

無事出来ましたヽ(´ー`)ノサンクス
40あぼーん:あぼーん
あぼーん
41nobodyさん:03/11/28 17:20 ID:???
>>40

Perlマンセー
42nobodyさん:03/11/28 20:17 ID:???
アフォにレスすんなヴォケ
43nobodyさん:03/11/28 23:14 ID:izcmLwd7
テンプレート式掲示板を作っています。
テンプレートHTML内の<!-- start_log -->から<!-- end_log -->までの範囲を抜き出す方法が分かりません。
start から end までは数行あります。
どなたかご教授ください。
44nobodyさん:03/11/28 23:19 ID:???
>43
>27以降が参考になる。
45nobodyさん:03/11/28 23:37 ID:???
@log=grep((/<!-- start_log -->/ .. /<!-- end_log -->/ and $_), <IN>);
46nobodyさん:03/11/28 23:54 ID:???
>>44,43
有難うございました。これから頑張ってみます。

# プログラミングPerl買うべきかなぁ?
47nobodyさん:03/11/28 23:56 ID:???
本を買うのが勉強になるとは限らない。
もちろん知識は上積みされるがそれがプログラミングの発想力に繋がるとは限らない。
自分で考えながら色々なプログラムを組んでみるのが一番の近道。
4843:03/11/29 00:02 ID:???
すいません、45さんもありがとうございます。

>>47
その通りですね。精進します。
49nobodyさん:03/11/29 01:33 ID:AmPBCTmU
パンチ5分の2と、キック2分の1をおしえてください!
50あぼーん:あぼーん
あぼーん
51あぼーん:あぼーん
あぼーん
52あぼーん:あぼーん
あぼーん
53nobodyさん:03/11/29 03:23 ID:???
>51
女にもてて童貞も捨てられるような言語があれば教えて下さい。
54nobodyさん:03/11/29 03:35 ID:???
>>53
そいつにレスするのマジでやめて。
コピペ荒らしはほっとけば即削除されるんだからさ。
55あぼーん:あぼーん
あぼーん
56あぼーん:あぼーん
あぼーん
57あぼーん:あぼーん
あぼーん
58nobodyさん:03/11/29 09:48 ID:???
>>54
釣れた(藁
59nobodyさん:03/11/29 10:07 ID:???
複数ある空行を削除する方法ってありますか?

s/(?:^$)+//gm ってやったけどダメでした。
s/(?:\n|\r|\r\n)+//gm って手があるんですけど、他にスマートな正規表現ってありますか?
60nobodyさん:03/11/29 10:42 ID:???
>>59
それで十分スマート
61nobodyさん:03/11/29 13:14 ID:???
<!--start-->あいうえお<!--end-->
かきくけこ
<!--start-->さしすせそ<!--end-->

ってテキストがあるときに、
ある条件では<!--start-->〜<!--end-->部分を表示して、
それ以外では<!--start-->〜<!--end-->部分を表示しないってのを考えてるんだけど、
上手い方法ありますか?

if ( $text =~ m/<!--start-->(.*)<!--end-->/si ) { $area = $1; }
これじゃ一個しかいかんし。。
62nobodyさん:03/11/29 15:42 ID:???
>>61
>>27以降が参考になる
6331:03/11/29 16:18 ID:???
>>32
自らやってみての発言か?

$ cat test.pl
#!/usr/bin/perl
@foo=qw(a b c d e);
s/(.)/uc $1/e for @foo;
print "@foo";
__END__

$ perl test
A B C D E
64nobodyさん:03/11/29 16:44 ID:???
>>63
>>27をよく読め。下のスクリプトで本当にうまくいくのか?

@filedata = ("abcde\n", "fghij\n", "klmno\n", "pqrst\n");
$foo = "fghij\nklmno\n";
s/$foo//go for @filedata;
print @filedata;

65nobodyさん:03/11/29 17:05 ID:???
>>63
複数行の中の複数行を置換えだぞ?
6631:03/11/29 18:38 ID:???
        ┌┐
       んvヘゝ
       i   i
       ノ (;゚Д゚) <ハッ…!?もうね、ボケナスかと。
      / (ノ   |)
      |     !
        ゙:、..,_,.ノ
        U U
67nobodyさん:03/11/29 21:30 ID:???
WinのActivePerlに関連付けたplファイルが黄色の丸い顔のようなアイコンになりました。
これは何の絵なのでしょうか?
68nobodyさん:03/11/29 21:35 ID:6217YKmG
うんこ
69nobodyさん:03/11/29 22:33 ID:???
コマンドマテリア
70nobodyさん:03/11/29 22:48 ID:???
>67
出来そこないの真珠
71nobodyさん:03/11/29 23:45 ID:???
きんたま
72nobodyさん:03/11/29 23:48 ID:???
恐らくPL学園と関係が
73nobodyさん:03/11/30 00:55 ID:yiCtHQ+E
質問っす。
grep(/文字列/,@_);

grep(/[^文字]/,@_);
みたいに、マッチした文字列を含まないもの。
を返してほしいんですが、どう書けばよいのでしょうか?
教えてくださいでつ。
7467:03/11/30 01:04 ID:???
みなさんはPLファイル、CGIファイルのアイコンは何にしてますか?
エディタに関連付けてますか?
Winの話ですが。
75nobodyさん:03/11/30 01:08 ID:???
>73
grep(!/文字列/,@_);
76nobodyさん:03/11/30 01:29 ID:???
>>75
有難うデス
77nobodyさん:03/11/30 01:48 ID:???
>>74
俺は両方とも秀丸にしてる
78nobodyさん:03/11/30 02:02 ID:???
関連づけはPERL。
アイコンはうんこ。
エディタは秀丸。
79nobodyさん:03/11/30 04:49 ID:ube7xmI2
すいません、
@NAIYOU=(1+2+3+4+5);

@NAIYOU=(1,2,3,4,5);
に置き換えたいのですがどのように記述すればいいのでしょうか?
80nobodyさん:03/11/30 05:17 ID:???
>>79
まさか本当に(1+2+3+4+5)って直で書いてるの?
81nobodyさん:03/11/30 05:42 ID:???
>>80
これは例えです。とりあえず+を,に変えたいんです。
82nobodyさん:03/11/30 05:47 ID:???
意味わかんね
83nobodyさん:03/11/30 06:05 ID:???
>>81
ほんと、意味わからん。
@NAIYOU=(1+2+3+4+5); を@NAIYOU=(1,2,3,4,5);に書き換えるんじゃなくて
( )に入れる前に変えなきゃならないだろ.
わからなくて質問してるんだからどう書いているのか晒せよ。
84nobodyさん:03/11/30 06:08 ID:???
多分文字列"1+2+3+4+5"をsplitして配列にしたいだけだと思うけど。
85nobodyさん:03/11/30 06:32 ID:???
>>84
それは誰でもわかるけどあれじゃ答えようがない
86nobodyさん:03/11/30 06:43 ID:???
つーか、暗算でできるだろ
87nobodyさん:03/11/30 06:46 ID:???
もう放置でいいか(゚听)メンドクセ
88nobodyさん:03/11/30 07:04 ID:???
>>79
#配列にいれたいなら
@NAIYOU = split /\+/, "1+2+3+4+5";

#"+"を","に置換するなら
($NAIYOU = "1+2+3+4+5") =~ s/\+/,/g;
89nobodyさん:03/11/30 11:40 ID:???
tr というものがある。

tr/+/,/ 便利だよ
90nobodyさん:03/11/30 12:35 ID:???
perlでのファイル入出力について質問です。
ひとつのファイルハンドルを使い回してファイル入出力を行うと意図した結果が得られないことがあります。
例えば、
open(OUTFILE, 'a.txt') or die("$!");
while ( $filename = shift @filelist) { #@filelistはファイル名のリストです
  open(FILE, $filename) or die("$!");
  while ( $buff = <FILE>) {
print OUTFILE $buff;
}
close FILE;
}
などとして複数のファイルを結合するスクリプトを実行してみると、結合されたファイルのサイズがまちまちです。
以前ファイルハンドルの使いまわしにおける不具合を記述したページを見たことがあったのですが、失念してしまい
ました。そこではファイルハンドルを動的に生成してしたように記憶しているのですが、具体的にどうやればいい
のか分かりません。
このスクリプトの不具合の原因はファイルハンドルの使いまわしによるものなのでしょうか?
よろしくお願いします。
91nobodyさん:03/11/30 12:46 ID:???
>このスクリプトの不具合の原因はファイルハンドルの使いまわしによるものなのでしょうか?
これだけじゃわからんが、おそらく違う。
92nobodyさん:03/11/30 13:26 ID:???
>>90
OUTFILEがリードモードでオープンされている。書けるわけ無い。
9390:03/11/30 13:54 ID:C7124nYA
>>92
すみません。記述ミスです。
open(FILE, ">>filename)
でした。
引き続きよろしくお願いします。
94nobodyさん:03/11/30 14:04 ID:???
>>84
その通りです。文字列を配列に入れたかったのです。
文字列の扱う時のクウォート入れるのを忘れていました・・・。すいません。

>>88
ありがとうございます。うまく動作しました!

>>89
trの場合はどのように記述するのですか?
@NAIYOU ="1+2+3+4+5";
@NAIYOU =~ tr/+/,/;
ではうまくいきませんでした・・・
95nobodyさん:03/11/30 14:19 ID:???
やっぱ、自分で調べようとせんやつか。
9690:03/11/30 14:46 ID:???
すみません。原因は別のところにありました。ファイルを追加モードで書きこんでいるためサイズが違ってしまって
当然ですね.....くだらないことを質問してしまい申し訳ございません。
ファイルハンドルを動的につくることは、
$hd = "FILE" . "$number"
open($hd, $filename) or die("$!);
$number++;
とすることでファイルハンドルFILE+$numberをつくることができました。
ただファイルハンドルを使いまわしても各個生成しても結果に差異はありませんでした^^;
最後にひとつだけ、
今回のスクリプトをuse strictとしてしまうと、open($hd, $filename)のところでエラーになってしまいます。
Can't use string ("FILE") as a symbol ref while "strict refs" in use at ...
変数は$hdも含め全てmy宣言しているのですが、どうすればエラーなく実行することができるでしょうか?
97nobodyさん:03/11/30 14:57 ID:???
>>96
ふつー
use IO::File;
98nobodyさん:03/11/30 16:36 ID:???
リモートホストだけを記録するアクセスログを作りたいのですが、
どうすればいいのですか?
(数値だけのIPは記録しない)
99nobodyさん:03/11/30 16:40 ID:???
>>98
出せる金額とメールアドレスを提示して暫し待つ。
100nobodyさん:03/11/30 16:43 ID:???
>>99
金額なんて出さないし
101nobodyさん:03/11/30 16:56 ID:???
102nobodyさん:03/11/30 17:27 ID:???
103nobodyさん:03/11/30 17:50 ID:???
>>102
出してきたぞ
104nobodyさん:03/11/30 18:42 ID:???
お前があの大馬鹿者か。帰っていいよ。二度と来るなよ。
105nobodyさん:03/11/30 18:43 ID:???
>>103
ていうかさぁ、君バカでしょ・・・
そんなので削除になるほどのカキコミじゃないし。
ホスト見てニヤニヤしたい糞房>>102に釣られるなよ
106nobodyさん:03/11/30 18:45 ID:???
>>104
まぁ〜、そう怒らないで、マタ−リと
107nobodyさん:03/11/30 18:54 ID:???
108nobodyさん:03/11/30 19:09 ID:???
109nobodyさん:03/11/30 19:31 ID:???
小学生並みのバカさにワロタ
110nobodyさん:03/11/30 20:36 ID:p9pdSEtx
【  サーバ 】 ローカル鯖(Apache 2.0.48、perl 5.6.1)
【 質問内容 】 
ローカルでCGIのテストをしたのですが、
表示されません。
同じフォルダ内のhtmlファイルは表示されます。
ANHTTPで実行したときは正常に表示されたのですが、Apacheにしてから表示されなくなりました。
もう小8時間格闘中です。
よろしくお願いします。

エラー : 500 Internal Server Error
Apacheのエラーログ  : 指定されたパスが見つかりません。
問題のCGIスクリプト :
     #!usr/local/bin/perl
     print "Content-type: text/plain\n\n";
     print <<"HDOC";
     <HTML>
     <HEAD>
     <TITLE>テスト画面</TITLE>
     </HEAD>
     <BODY>
     テスト。これが表示されてればOKだぜ!
     </BODY>
     </HTML>
     HDOC
     exit;
111nobodyさん:03/11/30 20:37 ID:???
>>110
OS書いてないが、、、
#!usr/local/bin/perl

#!/usr/local/bin/perl
にかえたらどうなる?
112110:03/11/30 20:48 ID:???
すいません、WindowsXPです。

usrの前に/を付け加えてみたのですが、やっぱりエラーが出ます。
同じく 500 Internal Server Error です。
113nobodyさん:03/11/30 20:56 ID:???
apacheのhttpd.confの記述を要確認
114110:03/11/30 21:00 ID:???
分かりました
もう1回確認してみます。
115nobodyさん:03/11/30 21:01 ID:???
つーか、スレ違いじゃないか?
116nobodyさん:03/11/30 21:05 ID:???
anhttpdと違ってapacheだと一行目の#!〜を評価したような気がする。
一行目を真面目にperlへのパスにしたほうがいいかもしれない。
117nobodyさん:03/11/30 21:09 ID:???
>>116
いや、あの・・・
評価するんにきまってんだろヴォケ。てめぇApache使ってないのかよ?
つーか>>110も糞みたいな質問すんなヴォケ
118110:03/11/30 21:13 ID:???
>>116
ありがとうございます!
それでできました!
119nobodyさん:03/11/30 21:14 ID:???
>110
Perlへのパスをドライブレター(C:/とかD:/とか)から始める絶対パスにするとか。
なんかそれくらいしか思いつかん。



まさかExecCGIオプション附加してないだけってオチは……。
120nobodyさん:03/11/30 21:15 ID:???
おっとすれ違った。
121nobodyさん:03/11/30 21:16 ID:???
>>109
謝罪しろ、小学生に失礼だ。
122nobodyさん:03/11/30 21:19 ID:???
>>119
そんな必要ないよ。
C:\usr\bin\perl.exeだったら
#!/usr/bin/perlでいける。
その辺はホストに合わしましょう。

って、>>119さんに言ってるみたいだね・・・
123nobodyさん:03/11/30 21:22 ID:???
環境変数に登録しておけば#!perlだけでもいい。
124nobodyさん:03/11/30 21:23 ID:???
それだとホストが(ry
125123:03/11/30 23:53 ID:???
あくまでもローカルで実行させる場合の話だよ。
僕はCGIとしてよりもHTMLの生成などでPerlを使うことが多いので。
126nobodyさん:03/11/30 23:59 ID:c5YjETLc
文字列の末尾を参照するにはどうすればよいのでしょうか?
127nobodyさん:03/12/01 00:21 ID:???
substr($mes, length($mes)-1, 1)
$mes =~ m/(.)$/;
128nobodyさん:03/12/01 01:12 ID:???
>>126-127
substr($str, -1);
129nobodyさん:03/12/01 01:36 ID:???
発言行数の設定ってどうするのでしょうか?
130nobodyさん:03/12/01 01:40 ID:???
お前の脳内はお前にしかわからないわけだが
131nobodyさん:03/12/01 02:36 ID:???
>>129
$MAX_LINES = 50;
132nobodyさん:03/12/01 02:49 ID:???
取り合えず注意書き用意しとけ。
133nobodyさん:03/12/01 03:30 ID:vdpLgcUB
こんばんは。質問です。
ローカル環境でapacheを入れてperlでcgiを作っているんですが、
perlのソースに変更を加えて、ブラウザで動かそうとするとInternal Server Errorが出ます。
ところが何度かリロードを繰り返すと、それ以降はちゃんと動きます。
また変更を加えてロードすると、エラーが出ます。これも何度かリロードすると動きます。
なぜこのような現象がでるのか、わかる人いましたら教えてください。
134nobodyさん:03/12/01 03:34 ID:???
mod_perl使ってる?
135133:03/12/01 03:39 ID:vdpLgcUB
httpd.confの、AddModule mod_perl.cという行でしょうか?
現在はコメントアウトされています。これが原因でしょうか。ちょっとやってみます。
136133:03/12/01 03:41 ID:???
えー、デーモンを再起動したところ、そんなモジュールは無いよと言われました。
apacheのスレで聞いた方がいいですかね。
137nobodyさん:03/12/01 03:55 ID:???
いや、使ってないならいいんだ
んじゃ、エラーが出たらApacheの再起動してみて
なんらかのモジュールが入ってるような気がしないでもないが・・・
138133:03/12/01 04:28 ID:???
perlをモジュールにしたらちゃんとできました。どうもありがとうございました。
それにしてもなぜこのような現象が起きたのか不思議です。
139nobodyさん:03/12/01 04:31 ID:???
その前に、サーバーのエラーログにはなんて書かれてある?

自分も似たような経験あるんだけど、
CGI::関連のモジュールが利用しているFile::Specの不具合でそうなった事がある。
その時は、ソースの変更とかは関係なしにreloadすると時々エラー。
でも、他の環境では全くエラー出ない。なんて事があった。

変更後にのみエラーなら、
キャッシュの効いていない状態で実行すると、処理に時間がかかり過ぎてエラーとか。
なんて事もあり得るかな?
140nobodyさん:03/12/01 04:36 ID:???
エラーが変わるのは、おそらくそのときのサーバ側のプロセスの
状態によるんじゃないかな。
httpd が複数起動しているわけだが、そのどれにあたるかで変わってくる、と
php以外のモジュールはデバッグ中はこういうことがよくある
141133:03/12/01 04:39 ID:???
ログは次のようになっていました。どういう意味なのかはよく分かりません。

[error] (26)Text file busy: exec of /home/takahiro/public_html/test.cgi failed
[error] [client 192.168.1.1] Premature end of script headers: /home/takahiro/public_html/test.cgi
142133:03/12/01 04:53 ID:???
原因が分かりました。原因はSambaでした。
私はWindows上で開発を行い、実行はLinuxで行い、ファイル共有にSambaを使っているんですが、
Sambaのファイルのロック時間が長いか、無線LANを使っているため遅いのか、原因はわかりませんが、
ロック時間が長いため、それで弾かれるんですね。
smbstatusで見てみると、確かにロックされています。
143133:03/12/01 04:54 ID:???
まったくスレ違いの質問だったわけですね。どうもご迷惑おかけしました。
14490:03/12/01 05:58 ID:???
>>101
できました。ありがとうございました!
145nobodyさん:03/12/01 07:20 ID:???
>>129の人物です。

http://tak2ch.jp/programing/index.cgi
上までできたのですが、記録行数を指定したいです。教えてください。
146nobodyさん:03/12/01 07:39 ID:???
>>145の訂正

どこに表示行数指定の数値等を入れればいいでしょう?


#!/usr/bin/perl

$max_lines = "3";

$host = $ENV{'REMOTE_HOST'};
if ($host eq "" || $host eq $host) {
$host = gethostbyaddr(pack("C4", split(/\./, $host)), 2) || $host;
}

open(OUT, ">> rh.html");
print OUT "$host<br>\n";
close(OUT);

print "Content-type: text/html\n\n";
print "$host\n";
exit;
147nobodyさん:03/12/01 07:42 ID:???
氏ね
148nobodyさん:03/12/01 07:47 ID:???
スレ違いに回答するからこうなるんだよな
149nobodyさん:03/12/01 10:20 ID:yiZEHlFP
配列の第3項目 $List[$i][2]の値で降順ソートしたいのですが
どのようにすればよいですか?
150nobodyさん:03/12/01 13:14 ID:???
>>149
@index = sort { $List[$b][2] <=> $List[$a][2] } 0 .. $#List;

@indexにソート順が入る
151149:03/12/01 14:28 ID:yiZEHlFP
>>150さま
ご教授ありがとうございます。
しかし、出力された配列は1次元になるのですね。

@list={['011',zzz,'333'],['022',yyy,'222'],['033',xxx,'111']}
これを3項目でソートして同じような2次元の配列にしたいのです。

説明不足ですみませんでした。
よろしくお願いいたします
152nobodyさん:03/12/01 15:00 ID:???
@index = @List[ sort { $List[$b][2] <=> $List[$a][2] } 0 .. $#List ];
153nobodyさん:03/12/01 15:11 ID:???
@list= (['011',zzz,'333'],['022',yyy,'222'],['033',xxx,'111']); # { → (

@list = sort { $b->[2] <=> $a->[2] } @list; # ASCIIなら <=> → cmp

print "@$_\n" for @list;
154nobodyさん:03/12/01 15:14 ID:???
@sorted_list =
 map { $_->[0] }
 sort { $b->[1] <=> $a->[1] }
 map { [ $_, $_->[2] ] }
 @list;
155154:03/12/01 15:21 ID:???
>>153
すまん俺がバカだった
156nobodyさん:03/12/01 15:30 ID:???
print "a";
だらだらと時間のかかる処理;
exit;
としたとき、だらだらと時間のかかる処理が終わるまでaが表示されません。
最初にaが表示されてからだらだらと時間のかかる処理をしたいのですが、どうすればよいでしょうか?
また、
print "a";
だらだらと時間のかかる処理 {
 while (...) {
print "b";
}
まただらだらと時間のかかる処理;
eixt;
とした場合は、だらだらと時間のかかる処理の途中で同時にabbb...という風に表示されてから
まただらだらと時間のかかる処理が続きます。
何故上の処理だと処理終了まで文字列の表示がまたされるのに、下のだと途中で表示されるのでしょうか?

ぐぐってみたけどさっぱりです・・・・
だれかたすけてーーー
157nobodyさん:03/12/01 15:34 ID:???
CGIを使わず、コマンドプロンプトで実行する。
158nobodyさん:03/12/01 15:39 ID:???
そのぐぐったキーワードを知りたい
159nobodyさん:03/12/01 16:00 ID:???
>>156
print "a\n";
だら処
exit;

とか
{
  $|=1;
  print "a";
}
だら処
exit;

でどうかすぃら?
160nobodyさん:03/12/01 16:00 ID:???
>>158
perl
161156:03/12/01 16:07 ID:???
>>159
できました。ありがとうです。
でも、$|については理解できたのですが、\nするだけで即時表示されるのはどうしてですか?
>>158
ぐぐったなんてつよがりですよ!わかってるくせにいじめないでよ!!いじわる!!!
162149:03/12/01 16:07 ID:???
>>152さま
>>153さま
>>154さま
>>155さま
perlの記述は難解です。
時間も無かったので一次元配列にしてソートして項目切り出しました。

一旦上手くいったのですが153さまのcmpであっさり出来たので
それで書き直しました。
ご教授いただいた皆様に感謝いたします。 喜
163159:03/12/01 16:33 ID:???
>>161
あ、まちがえた。local $|=1;だ・・・と思ったらもうレスが。
えー、最初のがうまくいくのは、バッファは改行でもフラッシュするから。

今回のはキーワード思いつきにくいだろうから気持ちはわかるけど、
ぐぐってないのに逆切れはイクナイよ。
164nobodyさん:03/12/01 17:05 ID:???
回答者の同情を誘うための「ぐぐった」なのか。
よく覚えておくよ。
165nobodyさん:03/12/01 17:46 ID:OFjsl1+y
ふと思ったんだが$や|なんてどうやってググるんだ?
166nobodyさん:03/12/01 18:01 ID:1E2TBaXO
的外れなワードでぐぐってたんなら、それについてアドバイスもできるが、
最初から検索もせずに「ぐぐった」なんて言ってたら殺意も覚えるわな。
167nobodyさん:03/12/01 18:08 ID:???
誰か >>146 に返事出してやれよ、かわいそうだろうが
168nobodyさん:03/12/01 18:27 ID:???
なんか殺伐としてますね・・・・
ちょっと分からないとこあるので教えてくださいませ。
デスクトップにあるファイルを読みこもうと

open ( DFILE, 'c:/windows/デスクトップ/hoge' );

とやったのですがうまくいかず、デスクトップをデスクトップにしたらうまくいきました。
と、ここまではよかったのですが、ネット上でperlはEUCで書くべしというのをみかけたので、
早速コードをEUCに変換しました。するとうまくいきません。エラーコードを調べてみると、
ファイルがないと書かれていました。どうやらWindowsはEUCの文字をうまく認識してくれない
みたいです。そこでjcode.plを使ってデスクトップの部分をShiftJisに変換したのですがそれでも
うまくいきません。変換した部分が%a%ls%みたいな感じにぐちゃぐちゃになってしまいます。
半角カナがいけないのだなと思い、同じくjcode.plで全角にするとうまくいきました。
でも今度はそれをいちいち半角に戻さなければいけません。
で、実際のコードは↓なのですが、なんだか不毛なことをやっているような気がします。
もっとスマートに解決する方法はないものでしょうか?もちろんShiftjisにするってのはなしで・・・・
お願いしますm__m

#!/usr/bin/env perl
require 'jcode.pl';
$str = 'c:/windows/デスクトップ/hoge';
jcode::h2z_euc(\$str);
jcode:convert(\$str,'sjis');
jcode:z2h_sjis(\$str);
open ( DFILE, $str);
...
169nobodyさん:03/12/01 18:35 ID:???
>168
なぜEUCで書いた方がいいと言われているかを考えるべき。
全ての環境においてEUCがベストなわけではない。
敢えて言う、Sjisにしなさい。
170nobodyさん:03/12/01 18:37 ID:???
>146
何をしたいのかが伝わってこない。
これじゃ答えようはない。
自分の考えを伝える方法をまず学んできなさい。

>167
これでいいか?
171nobodyさん:03/12/01 19:36 ID:???
>>146
>if ($host eq "" || $host eq $host) {
最高に意味不明
if文使う必要ねーじゃねーか
172nobodyさん:03/12/01 19:38 ID:???
>>168
SJISで書いていると、マッチングが正常にいかないことがある。
そういうときに何故「EUCで書け」というのか分かる。
173nobodyさん:03/12/01 20:02 ID:???
>>168
簡単なこと。
「ファイルをデスクトップに置いて扱うな」
174nobodyさん:03/12/01 20:14 ID:???
>>173
確かにスマートな解決法だ。
175nobodyさん:03/12/01 20:31 ID:???
そういえば漏れも厨だった頃、デスクトップに保存してたなぁ。。。。。。
昔のスクリプトを引っ張り出してみました。

# データディレクトリ
my $datadir = 'C:\Documents and Settings\Administrator\デスクトップ\data';
jcode::convert(\$datadir, 'sjis', 'euc');

これでいいか?
でも>>173がいいぞ。
176nobodyさん:03/12/01 20:40 ID:gWfIK9kD
ある一定の時間事に特定の変数をクリア(簡単なタイムアウトみたいなもの?)しようと思って
$Start_time = time if !$Start_time;
if (time > $Start_time + 5){
#$tokuteiが特定の変数です。
undef $tokutei;
undef $Start_time;
}
としたのですがうまく動いてくれません。
う〜ん何度考えてもこれで動いてくれると思ってしまうのですが
いくら考えても原因がわかりません。
アドバイス頂けると幸いです。
177nobodyさん:03/12/01 20:47 ID:???
>176
どういう環境で実行させていますか?
178nobodyさん:03/12/01 21:04 ID:???
>173
'(略)\スクリプト\data'
179176:03/12/01 21:06 ID:???
どういう環境ってどういうことだろ?すいませんパッと思いつかなかったんですが
windowsXP
ActiveParl 5.6

サブルーチンの中のif文の中のif文って環境です。
うわぁ・・分かりづらくてすいません。
180nobodyさん:03/12/01 21:10 ID:???
>179
一回行動の終わったスクリプトの変数が、次に起動した時に受け継がれるとか思っていますか?
181168:03/12/01 21:23 ID:???
う〜〜んみなさんいろいろとさんくすです。
総括して、とりあえず>>172さんのいうそういうときになるまでSjisでやっていくってことにします。
>>168 目から鱗です
で、>>175さんのでうまくいきました。ども。てことはjcode::convertが半角カナを自動認識してくれないって
ことが原因ということでよろしいでしょか?
う〜〜んperlでの日本語の扱いって難しいです。
とりあえずざっとみたかんじ、
use strict;
・5.8系はunicodeに対応してるから日本語の扱いについては問題なしunicodeに対応してないOSについては
Encode使うべし
・5.6系はunicodeに対応しきれてないからjcode.plからpmを使うべし
・現状では5.6系の方がシェアあるんだから統一して日本語処理に関してはjcodeに総まかせ

perl -w 168.pl
182176:03/12/01 21:25 ID:???
>>180
それはないです。う〜ん文法的にはあってますよね?
183nobodyさん:03/12/01 21:40 ID:???
実は正しく動いているのだが、確認する手段が間違っているという可能性も考えられる。
184nobodyさん:03/12/01 21:43 ID:???
>>168
デスクトップのPATHはc:\windows\デスクトップとは限らないぞ。
正式にはCOM使って取得する。嫌なら>>173
185nobodyさん:03/12/01 21:50 ID:???
Windows2000とかじゃユーザごとに用意されとるな。
186nobodyさん:03/12/01 22:04 ID:???
うん、環境依存になるね
187nobodyさん:03/12/01 22:19 ID:???
とりあえず AcitvePerl ならこれでいける模様。
use Win32;
print Win32::GetFolderPath(CSIDL_DESKTOPDIRECTORY);
188nobodyさん:03/12/01 22:29 ID:???
>181
いや、と言うかWinのファイル名に使われてる文字コードはSJISってだけ。

EUCで書いたスクリプトのデスクトップって文字と
ファイル名に使われてるデスクトップって文字は見た目は一緒でも中身が違う。
189nobodyさん:03/12/01 23:24 ID:???
>182
>176の前がどうなってるか次第だろ。
それだけでわかるはずもない。
「ある一定の時間毎に」という記述ではないな。
190nobodyさん:03/12/02 02:19 ID:???
>>187
スクリプトもデスクトップにおいてしまうなら、何も問題はなくなるんだけどな……。
191nobodyさん:03/12/02 09:00 ID:???
perl2exeを探しているのですがどこへいけば手に入りますか?
検索してもリンクぎればっかりで見つかりません。
192191:03/12/02 09:35 ID:???
すみません。みつかりました・・・・さっきはつながらなかったのに、なんでだろう。
で、このperl2exeの最新版て以前報告された純粋なソースコードが抽出される
セキュリティホールは解消されたのでしょうか?
193nobodyさん:03/12/02 21:43 ID:???
文字列の先頭何文字かを削りたいんですが、

$str = reverse($str);
$tmp = 0;
while($tmp < 2){
chop($str);
$tmp++;
}
$str = reverse($str);

このような処理をしてるんですが、もっと能率の良い処理方法はないでしょうか。
アドバイスいただけると幸いです。
194nobodyさん:03/12/02 21:53 ID:???
わろた
195nobodyさん:03/12/02 21:53 ID:???
substr
196193:03/12/02 22:23 ID:???
>>195
上手く行ったようです。
ありがとうございます
197nobodyさん:03/12/03 00:06 ID:???
>193
forじゃないんだなとか別のところが気になってしまった。
198nobodyさん:03/12/03 05:25 ID:qZsuT39+
Perlが圧開ける数の最大値と最小値(小数第何位)はいくつなのでしょうか?

自分でトライしようと思ったのですが・・・
最大値は、

1000000000000000 * 1(0が15個)だと1e+15と表示され、
1000000000000000 * 1 - 1だと、999999999999999(9が15個)と表示されたから、
最大値は999999999999999(9が15個)なのかなとも思ったのですが、
そもそも、「1000000000000000 * 1」となってる時点で、数値が狂うはずでは、、と思い、わかりませんでした。

最小値は、トライのやりかたもわからず。。。

また、Perlのバージョンによってもことなってくるのでしょうか?

どなたか、教えて頂ければ幸いです。
199198:03/12/03 05:26 ID:qZsuT39+
すいません。>>198の1行目、
「圧開ける」でなく「扱える」の間違いでした。
200nobodyさん:03/12/03 10:13 ID:???
コンパイルした時の設定でかわる
それぞれの型は何ビットかがわかれば
上と下もわかる
201nobodyさん:03/12/03 11:08 ID:???
しつもそでつ。

Perlで、リモートサーバーのコマンドを実行したいです。
ローカルだと、system( "ls -l" ); でいけますが、
例えば、IPが 192.168.1.1 のマシン上の ls -l の戻り値を
192.168.1.2 で処理させたいのです。
202nobodyさん:03/12/03 11:16 ID:???
system('./remote.sh');

./remote.shにはリモートサーバーのコマンドを実行して結果を返すシェルスクリプトを。
203nobodyさん:03/12/03 12:24 ID:eSyaEdUC
$str = "aiueo ";
変数に入ってる文字列のあとに半角スペースがいくつか入ってるんですが、
それを取り除くにはどうしたらいいですか。
正規表現の書き方は。
204nobodyさん:03/12/03 12:47 ID:???
>>203
>>1 ぐらい読んで出直してこい。
205しょしんしゃ:03/12/03 12:52 ID:???
(\s.)+$かな
206nobodyさん:03/12/03 13:13 ID:eSyaEdUC
$a = " aiu eo ";

while($a =~ /\s$/g){
$a =~ s/\s$//g;
}

print "$a\n";

一応これで出来ましたが、while無しで出来ないのでしょうか。
207しょしんしゃ:03/12/03 13:29 ID:???
$a = " aiu eo ";


$a =~ s/\s+$//;

print "$a\n";

ではうまくいかない?
208nobodyさん:03/12/03 13:49 ID:???
あ、いきました。
どうもすんません。
209nobodyさん:03/12/03 13:50 ID:???
正規表現の基礎くらい自分で勉強しなさい。
検索すればゴロゴロ見つかるし、正規表現専門のスレも立ってるだろう。
210 ◆MbpwKgPmhw :03/12/03 16:21 ID:???
print "Content-type:Image/gif\n\n";
print "\x47\x49\x46\x38\x37\x61\x01\x0\x1\x0\x80\x0\x0\x0\x0\x0\xff";
print "\xff\xff\x2c\x0\x0\x0\x0\x1\x0\x1\x0\x40\x2\x2\x44\x1\x0\x3b";

このようにすれば、ブラウザで見れば1×1のGIFが出力されますが、

open(GIF, "sample.gif");
@gif = <GIF>;
close(GIF);


として、読み込んだgifファイルを次のようにソースコードとして
画面出力する方法を教えて下さい。

\x47\x49\x46\x38\x37\x61\x01\x0\x1\x0\x80\x0\x0\x0\x0\x0\xff
\xff\xff\x2c\x0\x0\x0\x0\x1\x0\x1\x0\x40\x2\x2\x44\x1\x0\x3b

試行錯誤してみましたが、「\x01」、「\x0」、「\x1」、「\x80」等でエラーが起きてしまいます。

#!/usr/local/bin/perl

$gif ="\x47\x49\x46\x38\x37\x61\x01\x0\x1\x0\x80\x0\x0\x0\x0\x0\xff";

for($i=0;$i<100;$i++){
$gif =~ s/\x$i/\\x$i/g;
}

print "Content-type:text/plain\n\n";
print "sample:\n";
print $gif;
211nobodyさん:03/12/03 16:28 ID:???
binmode
212 ◆MbpwKgPmhw :03/12/03 16:55 ID:???
>>211

、でぐぐるんですな
213nobodyさん:03/12/03 17:00 ID:SgEDdsu6
って言うか、バイナリファイルは普通binmodeで開くのが常識だろ
214 ◆MbpwKgPmhw :03/12/03 17:02 ID:???
でどうやって出力するとソースコードになるんですか(´・ω・`)ションボリ

実行結果変わらなかった・・・・
215nobodyさん:03/12/03 17:21 ID:???
放置?
216 ◆MbpwKgPmhw :03/12/03 17:26 ID:???
>>215
何故(´・ω・`)ションボリ
217nobodyさん:03/12/03 17:32 ID:???
binmode?開く?( ´,_ゝ`)プッ
218nobodyさん:03/12/03 17:46 ID:???
open GIF,"|hexdump sample.gif";
219nobodyさん:03/12/03 18:06 ID:???
#!/usr/bin/env perl

$gif='\x47\x49\x46\x38\x37\x61\x01\x0\x1\x0\x80\x0\x0\x0\x0\x0\xff';

print "Content-type:text/plain\n\n";
print "sample:\n";
print $gif;

でどう?
220 ◆MbpwKgPmhw :03/12/03 18:24 ID:???
>>219


すごいですね・・・
それだけで文字列は読み込まれました

だけどやっぱりgifファイルからだとダメポ(´・ω・`)ションボリ
結構難題なんだな・・・・
221nobodyさん:03/12/03 19:14 ID:???
16進数ダンプしたいだけじゃなかったの?
ord/hex とか pack/unpack, printf のフォーマット指定とか

222 ◆MbpwKgPmhw :03/12/03 19:28 ID:???
>>221
イマイチよく分からないです。とりあえず

Gif=>ソースコード

っていうのが最終目標なんですが・・・
223nobodyさん:03/12/03 19:43 ID:???
$a =getc(FILEHANDLE);
$b = ord($a);
$c ="\\x".sprintf("%lx",$b);
print $c;

みたいな?
224nobodyさん:03/12/03 19:46 ID:???
>>222
#--- hd.p ---
#!/usr/local/bin/perl
use strict;
my $buffer_size = $ARGV[1] || 4096; # byte
-f $ARGV[0] or die "No such file: $ARGV[0]";
open BIN, '<' . $ARGV[0] or die $!;
binmode BIN;
print map '\x' . unpack('H2', $_), split //
  while read BIN, $_, $buffer_size;
close BIN;
__END__

usage: perl hd.p file [ buffer_size ]

http://www.google.co.jp/search?q=perl+16%E9%80%B2%E3%83%80%E3%83%B3%E3%83%97
225nobodyさん:03/12/03 19:53 ID:???
ソースコードってのがよくわかんないんだけど。

while (my $c = getc(GIF)) {
printf("\\x%02x", $c);
}
226nobodyさん:03/12/03 19:56 ID:???
TIMTOWTDIってことでもういっちょ。

open my $fh, "<:raw", "giffile.gif" or die $!;
while(my $c=getc($fh)){
    printf "\\x%x", (unpack "C",$c);
}
close $fh or die $!;
227nobodyさん:03/12/03 20:04 ID:???
ソースコードって要はバイナリを文字列として出力したいだけっしょ?
228226:03/12/03 20:24 ID:???
3分差で負けてるし _| ̄|○
229nobodyさん:03/12/03 20:24 ID:???
まずは用語をなんとかしてくれ・・・
230nobodyさん:03/12/03 20:32 ID:???
そのまんまテキストモードで開けばバイナリ文字列になるだろうが!
231 ◆MbpwKgPmhw :03/12/03 20:44 ID:???
すみません。
皆さんが教えて下さったものはどれも何故か動作しませんでした。(´・ω・`)ションボリ
なぜだらう・・・

よく分からないと言われたので・・・

>print "Content-type:Image/gif\n\n";
>print "\x47\x49\x46\x38\x37\x61\x01\x0\x1\x0\x80\x0\x0\x0\x0\x0\xff";
>print "\xff\xff\x2c\x0\x0\x0\x0\x1\x0\x1\x0\x40\x2\x2\x44\x1\x0\x3b";

>このようにすれば、ブラウザで見れば1×1のGIFが出力されます

で、この逆をやりたいわけです。

例)
1×1のGIFから

\x47\x49\x46\x38\x37\x61\x01\x0\x1\x0\x80\x0\x0\x0\x0\x0\xff
\xff\xff\x2c\x0\x0\x0\x0\x1\x0\x1\x0\x40\x2\x2\x44\x1\x0\x3b

というものを再現する、と言うことです。
232nobodyさん:03/12/03 21:38 ID:???
233 ◆MbpwKgPmhw :03/12/03 21:40 ID:???
>>232

心遣いありがとうございます。
ですが、Perlの環境もありますし、他のCGIはちゃんと動きますよ。
234nobodyさん:03/12/03 22:39 ID:???
>>231
>皆さんが教えて下さったものはどれも何故か動作しませんでした。(´・ω・`)ションボリ
>なぜだらう・・・
本当に疑問に思うのなら、どう動かないのか情報を出してくれ。
235nobodyさん:03/12/03 22:52 ID:???
>>233
ローカル (手元のマシンのコマンドライン) でやれという意味だと思う。
その上でうまくいかなかったのならエラーメッセージを書くべき。
236 ◆MbpwKgPmhw :03/12/03 23:33 ID:???
>>235

>>226をやってみたんですが
Unrecognized character \x81 at watch.cgi line 4.

とでてきます。
237nobodyさん:03/12/03 23:47 ID:???
そのままコピペしたのかよ。
238 ◆MbpwKgPmhw :03/12/03 23:51 ID:???
>>237

ち、違うの・・・?(;・∀・)
239nobodyさん:03/12/04 00:01 ID:???
自分は>>226でちゃんと\x47…と表示されたよ

コマンドラインでやってる?
全角スペースは取った?
ファイル名を適宜かえた?
240 ◆MbpwKgPmhw :03/12/04 00:09 ID:???
>>239

全角スペースにやられた・・・・

でもやっぱり今度は実行時に
Unknown open() mode '<:raw' at watch.cgi line 2.

と出る罠
241nobodyさん:03/12/04 00:15 ID:???
配列に入れると処理が面倒だからスカラに入れなよ
>>29を応用してやってみたが

{
 local $/;
 open(IMG, "./img/new.gif") or die "ファイルが読込できません:$!";
 $img = <IMG>;
 close(IMG);
}
print "Content-type: text/plain\n\n";
$size = length($img);
$byte = 0;

for ($i = 0; $i < $size; $i++){
 printf ("\\x%02x", vec($img, $byte, 8));
 $byte++;
}
242 ◆MbpwKgPmhw :03/12/04 00:46 ID:???
>>241

すごい・・・
できました。。。
ありがとうございました!
243nobodyさん:03/12/04 01:04 ID:???
いくつかのディレクトリを中身のファイル有る無しにかかわらず、
削除したいんですがうまくいきません。

ググってみるとコマンドってのが良く出てくるのですが、
私はコマンドってコマンドプロンプトとかみたいな感じにとらえてて、
perlによるcgiを作成している私には関係ないと思いまして・・

それは置いといて、
頭の中では削除するディレクトリの中身を調べ
全てのファイルをunlink後、rmdirでできると思うのです。
(この考え方だとディレクトリの中にディレクトリがあると削除されないと思いますが、今回は無いです)
で、書いてみたのですが、、消えてくれませんご教授願えませんでしょうか?

foreach $dir($adir,$bdir,$cdir) {
 opendir (DIR,"$dir");
 while ($file = readdir(DIR)) {
  unlink ("$dir/$file");
 }
 rmdir ("$dir");
}
244nobodyさん:03/12/04 01:05 ID:yWko/Od0
age忘れましたすいません。
245nobodyさん:03/12/04 01:11 ID:???
close忘れましたすいません





というのは?
246nobodyさん:03/12/04 01:12 ID:???
>245 =~ s/close/closedir/;
247nobodyさん:03/12/04 01:15 ID:???
>>243
消される側のファイルのパーミッションは?
248nobodyさん:03/12/04 01:28 ID:???
消すためには消されるファイルやディレクトリ自身ではなく、
それが含まれているディレクトリのパーミッションが使われる
249243:03/12/04 01:33 ID:???
レス有難うございます。
えっと、パーミッションのことは考えて無かったです。
でもいまwin上でテストしてるだけなんですけど、
パーミッション関係なかったですよね?
あとディレクトリ閉めるの忘れてましたすいません。
250nobodyさん:03/12/04 06:22 ID:???
お騒がせしました。意図したとおりに動きました。
えっと、書いたコードの直前のところでミスってました。
なんで>>243は問題じゃないと思います。 #スマートかどうかは別として

で、当然なんですが、
自分のディレクトリと親のディレクトリを示すでしたっけ?
「.」と「..」がunlink失敗しているようなんですが、
コレはほっといても特に問題ないでしょうか?
251nobodyさん:03/12/04 06:40 ID:???
>>250
それは親ディレクトリが作成されると勝手に用意されるものだから、削除できないよ。
ファイル名をチェックしてうまくスルーすべし。ディレクトリ削除に影響はない。

ディレクトリを含む場合は再帰処理をするか、シェルコマンドを使うかかな。
252nobodyさん:03/12/04 07:38 ID:???
>>251
有難うございます。これでいくことにしました。

皆さんお騒がせしましてすいませんでした。
253nobodyさん:03/12/04 14:44 ID:???
つーか、「..」を特別扱いしてなくて再帰処理したらやばい・・・
254nobodyさん:03/12/04 16:19 ID:???
先ほど似たようなスレで同様のカキコしたのですが…本スレはこちらだったのですね。
ご迷惑おかけしてしまいすみません…

同様の質問をこちらにカキコします。お許しください…
Perlを用いてn個の整数乱数を発生させ配列に収めたいのですが…
例えば n = 5 の場合、
3
2
5
1
4

…みたく、1からの乱数が重複することなく出力されるプログラムを作りたいのですが、
どうもつまづいてしまいます。

皆さんが作るとすればどのように作りますか?
255nobodyさん:03/12/04 16:43 ID:???
>>254

$num = '9';
$count = '5';
$roop = '1';
@data = ();
@value_his = ();

until ($count < $roop) {
push(@value_his, $value);
$value = int(rand($num));
$entercheck = 0;
foreach (@value_his) { if($value eq $_) { $entercheck = 1; } }
if($entercheck == 0) { push(@data, $value); $roop++; }
}

理解しやすいよーにこー書く。
$nにあたるのが$count。$numは整数の範囲。
$countより$numが小さいと無限ループする。(条件の重複無しを満たさなくなるため)
@dataに重複の無い数字が入る。
過去に出た数字を@value_hisに保存して置いてフラグ$entercheckをチェックしてるだけ。
過去に出た数字と$valueが一緒になると$entercheckに1が入るため@dataにデータはpushされない。
高速化キボンなら、重複した時点でforeach抜ければOK。
256nobodyさん:03/12/04 16:49 ID:???
>>254

$count = '5'; $num = '9';
# $countはn個の整数乱数キボン $numは得たい数字の範囲0〜$num

$roop = '1'; @data = (); @value_his = ();
until ($count < $roop) {
push(@value_his, $value);
$value = int(rand($num));
foreach (@value_his) { if($value eq $_) { goto end; } }
push(@data, $value); $roop++;
end:
}


こーゆーコトね
257nobodyさん:03/12/04 17:15 ID:???
>>254
俺はこうやっちゃうかな

$count = 5;
while ($#array + 1 < $count) {
 $ran = int ( rand ($count)) + 1;
 if (grep (/^$ran$/, @array)) { next; }
 push (@array, $ran);
}
258nobodyさん:03/12/04 17:20 ID:???
unelss (grep (/^$ran$/, @array)) { push (@array, $ran); }
259nobodyさん:03/12/04 17:21 ID:???
http://www.din.or.jp/~ohzaki/perl.htm#ArrayRandom
これ使っても出来るね。

my $n = 5;
my @num = ( 1..$n );
srand;
for ( my $i = @num; --$i; ){
my $j = int(rand($i+1));
next if $j == $i;
@num[$i, $j] = @num[$j, $i];
}

print join "\n", @num;
260nobodyさん:03/12/04 17:27 ID:???
>>258
そりゃそうだw
261nobodyさん:03/12/04 17:28 ID:???
$count = 5;

while ($#array + 1 < $count) {
 $ran = int(rand($count)) + 1;
 unless (grep (/^$ran$/, @array)) { push (@array, $ran . "\n"); }
}
print @array;

こうか
262nobodyさん:03/12/04 17:52 ID:???
my $n = 5;
my @r = map $_->[0], sort { $a->[1] <=> $b->[1] } map [ $_, rand ], 1 .. $n;

print join "\n", @r;
263nobodyさん:03/12/04 18:35 ID:???
@r = sort { (rand) < 0.5 } 1..$n ;

これでもよくね?
264nobodyさん:03/12/04 18:41 ID:???
ベンチとってみますた
Benchmark: timing 500000 iterations of 255, 256, 259, 261, 262, 263...
   255: 32 wallclock secs (29.91 usr + 0.00 sys = 29.91 CPU) @ 16719.61/s (n=500000)
   256: 30 wallclock secs (28.06 usr + 0.00 sys = 28.06 CPU) @ 17817.05/s (n=500000)
   259: 8 wallclock secs ( 7.19 usr + 0.00 sys = 7.19 CPU) @ 69570.06/s (n=500000)
   261: 0 wallclock secs ( 0.56 usr + 0.00 sys = 0.56 CPU) @ 889679.72/s (n=500000)
   262: 15 wallclock secs (13.58 usr + 0.00 sys = 13.58 CPU) @ 36821.56/s (n=500000)
   263: 6 wallclock secs ( 5.25 usr + 0.00 sys = 5.25 CPU) @ 95238.10/s (n=500000)

>>261早杉
265263:03/12/04 18:41 ID:???
まちがえた。
@r = sort { (rand) <=> 0.5 } 1..$n ;
266nobodyさん:03/12/04 19:53 ID:IdERYeTN
use List::Util qw/shuffle/;
shuffle 1..10
267nobodyさん:03/12/04 20:33 ID:???
Benchmark: timing 500000 iterations of 255, 256, 259, 261, 262, 265, 266...
   255: 32 wallclock secs (30.95 usr + 0.02 sys = 30.97 CPU) @ 16145.18/s (n=500000)
   256: 31 wallclock secs (29.70 usr + 0.00 sys = 29.70 CPU) @ 16833.32/s (n=500000)
   259: 7 wallclock secs ( 7.41 usr + 0.00 sys = 7.41 CPU) @ 67512.83/s (n=500000)
   261: 1 wallclock secs ( 0.50 usr + 0.00 sys = 0.50 CPU) @ 1000000.00/s (n=500000)
   262: 15 wallclock secs (13.66 usr + 0.00 sys = 13.66 CPU) @ 36613.94/s (n=500000)
   265: 4 wallclock secs ( 4.92 usr + 0.00 sys = 4.92 CPU) @ 101584.72/s (n=500000)
   266: 2 wallclock secs ( 3.02 usr + 0.00 sys = 3.02 CPU) @ 165782.49/s (n=500000)

最速賞 >>261
ベストコストパフォーマンス賞 >>265
そんな便利なモジュールが!知らなかった…賞 >>266
あんた、Lisperだな?特別賞  >>262

審査員:Perl v5.8.0 built for cygwin-multi-64int @Cel2.0GHz
268nobodyさん:03/12/04 20:35 ID:???
259が一番速いと思った。。。
269nobodyさん:03/12/04 20:39 ID:???
「偶数」を表す方法はないものでしょうか?

今は(($min eq "2")or($min eq "4")or($min eq "6")or($min eq "8")・・
と60までやってますが、もっとシンプルにしたいです。
270nobodyさん:03/12/04 20:40 ID:???
if(!($min&1))
271nobodyさん:03/12/04 20:41 ID:???
($number % 2) != 0
272nobodyさん:03/12/04 20:42 ID:???
>>267
どういうベンチの取り方してんだ?
261が速いわけないじゃんどう見ても
273nobodyさん:03/12/04 20:45 ID:???
Perlのベンチを取るソフトってあるんだ…知らなかった。
274nobodyさん:03/12/04 20:46 ID:???
>273
use Benchmark;
275268:03/12/04 20:46 ID:???
time関数を使って測ったけど
259が圧倒的に速かったですYo
276272:03/12/04 21:05 ID:???
use Benchmark;
timethese(-5, {
'261' => q{
my $count = 5;
my (@array, $ran);

while ($#array + 1 < $count) {
$ran = int(rand($count)) + 1;
unless (grep (/^$ran$/, @array)) { push (@array, $ran ); }
}
},

'265' => q{
my $n = 5;
my @r = sort { (rand) <=> 0.5 } 1..$n ;
},
});

Benchmark: running 261, 265 for at least 5 CPU seconds...
261: 5 wallclock secs ( 5.27 usr + 0.00 sys = 5.27 CPU) @ 7230.58/s (n=38069)
265: 4 wallclock secs ( 5.14 usr + 0.00 sys = 5.14 CPU) @ 181097.06/s (n=931020)

by ActivePerl 5.8.0.806 WinXP AthlonXP 2400+

何回取ってもこんな感じで265の方が断然速いんだけど、オレの方がおかしい?
277nobodyさん:03/12/04 21:07 ID:???
266は259とほぼ同じアルゴリズムをxsでやってるからとても速いはず。
実際、うちでは266が最速でした。
278267:03/12/04 21:07 ID:???
>>272
コードをコピペして、use Benchmarkしてtimetheseしますた。
ただし、srandはtimethese前に一度行い、計測コードからは削除、
それと結果を表示させる部分がある場合はそれも削除しました。

>>268
259は僕なんですけど、僕もそう思ってました。
なによりもPerlメモが負けるはず無いと(w。
でも測り方かえるとダントツですかー、うーん。

>>269
print $num % 2 ? "$numは奇数です\n" : "$numは偶数です\n" ;
279nobodyさん:03/12/04 21:17 ID:???
>278
小数があっても奇数と言われないか?
280nobodyさん:03/12/04 21:18 ID:???
>269
($min && $min <= 60 && !($min % 2))
281nobodyさん:03/12/04 21:19 ID:???
>280はキャンセル。
負の数まで入れちまう。
(2 <= $min && $min <= 60 && !($min % 2))
282nobodyさん:03/12/04 21:24 ID:???
ていうか>=60じゃないの?
283nobodyさん:03/12/04 22:23 ID:???
>>254
出遅れたが、条件を揃えた各方法のベンチコード。
ttp://boobar.hp.infoseek.co.jp/bench/randlist.txt
検証は各自でやって下され。
284283:03/12/04 22:25 ID:???
あと >>263 のやり方は偏り過ぎるので実用的ではないよ。
285267:03/12/04 22:43 ID:???
ちょっと実験してみました。
>>271を実行すると僕の環境でも同じ結果になりました。ここで、
261のコード冒頭のmy (@array, $ran);をコメントアウトすると
>>267に近い結果になりました。

どうも@arrayの初期化でかなり時間がかかってるみたいなので
265もはじめにmy @r;と宣言すれば時間がかかるようになるかと
修正を行いましたが、なぜか結果にほとんど影響は無いようです。

もうなにがなんだか。

>>279
うわ、なるほど。
print $num % 2 ? "$numは奇数です\n" : "$numは偶数です\n" unless $num =~ /^\d+$/;

>>283
乙です。
286267:03/12/04 22:45 ID:???
× >>271を実行すると
○ >>276を実行すると

でした。
287nobodyさん:03/12/04 22:47 ID:???
>unless $num =~ /^\d+$/;
逆じゃ?
288267:03/12/04 22:56 ID:???
逆ですた _| ̄|○ モウダメポ
289nobodyさん:03/12/04 22:59 ID:FibJq+lJ
Perlで分数の計算って出来ないのでしょうか?
290nobodyさん:03/12/04 23:07 ID:???
>289
最小公倍数と最大公約数の算出をすればあとは適当に組めるでしょ。
そこから先は自分で考えて。

まんま分数を扱うような関数は俺は知らない。
291nobodyさん:03/12/04 23:26 ID:6im5KJL0
>>265
それ前にほかの言語でもやってみたことあるけど結構偏りがあるよ

10000回ループさせて各要素の平均をとったもの
7.5931 7.1856 6.3047 5.4192 5.1705 5.6356 6.0816 5.0735 3.6279 2.9083

数学的に偏りがないようにするのも結構難しい
292nobodyさん:03/12/04 23:36 ID:6im5KJL0
>>259も偏りがあるみたい
6.0174 5.8564 5.8291 5.7008 5.547 5.4471 5.3008 5.2178 5.0824 5.0012
293nobodyさん:03/12/05 00:21 ID:???
>>279
%演算子はオペランドを整数に変換して演算するから大丈夫。
294nobodyさん:03/12/05 00:58 ID:???
へー、変換するんだ?
オペランドが整数じゃなかったらエラーになるのはCだけ?
295nobodyさん:03/12/05 01:07 ID:???
>>289
とりあえず Math::BigRat ってモジュールがあるみたい。
ActivePerl だとインストールされてる。
使い物になるのかどうかは分からないから確かめてみてくれ。
296nobodyさん:03/12/05 01:13 ID:???
>>285
>261のコード冒頭のmy (@array, $ran);をコメントアウトすると

if ($#array == 4) { die }
while ($#array + 1 < $count) {
297nobodyさん:03/12/05 07:12 ID:???
my $count = 5;
my @data = ();
my @tmp = 1..$count;
1 while $count > push @data, splice @tmp, int rand @tmp, 1;
print "@data";

個人的には>>265が好きだなぁ。
298nobodyさん:03/12/05 10:36 ID:???
完全にばらつくのはそれはそれで不自然
299265:03/12/05 12:15 ID:???
>>291
あらら、やっぱり。。
randが出す値が十分にランダムな場合、sortを
sort { ($t[$a] ||= rand) <=> ($tmp[$b] ||= rand) } LIST
こうすればきちんとランダムになると思うけど、
見にくいし、おそいし、メモリも使う。
任意のリストに対応させてハッシュにしたらなおさら。

やっぱりList::Utilがいいすね。
300265:03/12/05 12:17 ID:???
みすばっかりTT
$t[$a] → $tmp[$a]
301nobodyさん:03/12/05 13:48 ID:???
(´-`).。o(…List::Util::shuffle は基本だろ…)
302nobodyさん:03/12/05 14:25 ID:???
>>301
(´-`).。o(…スレタイ見ろよ…)
303nobodyさん:03/12/05 14:58 ID:???
それぞれのルーチンで偏りを見てみた。
サイコロを10万回振って、それぞれが吐く配列先頭要素の出目合計。

>>259 (Perlメモ) 1が全く出ないサイコロ…(゚Д゚;)
   1   2    3    4    5    6
   0 20156 19938 19855 19986 20065
>>265 (sort) 5,6が異常に出やすいサイコロ
   1   2    3    4    5    6
12368 12492 12556 12480 25092 25012
>>266 (List::Util) 綺麗なランダム
   1   2    3    4    5    6
16451 16560 16794 16818 16610 16767
>>299 (sort改) 綺麗なランダム
   1   2    3    4    5    6
16848 16863 16645 16612 16532 16500

Perlメモたんが一番酷いという結果に。(゜∀゜)
304nobodyさん:03/12/05 15:03 ID:???
テキストファイルから特定行だけを抜き出したいのですがうまくいきません。
テキストファイルの内容は、
#Editstartあいうえお
あいうえお
あいうえお
#Editend
かきくけこ
かきくけこ
といったものです。
このテキストから#Editstartから#Editendまでを抜き出したいと思い以下のようにしたのですが全ての行が抜き出されてしまいます。
#!/usr/bin/env perl
$flag = 'false';
open(F,'taget.html');
open(F2,'keka.html');
while ($in = <F>) {
if ($in =~ m/\#Editstart/ && $flag == 'false') {
$flag = 'true';
print F2 $in;
}
elsif ($flag == 'true') {
print F2 $in;
}
elsif ($in =~ m/\#Editend/ && $flag == 'true') {
$flag = 'false';
print F2 $in;
}
}
いくら考えても原因がわかりません。
どうやればいいのでしょうか?よろしくお願いします
305304:03/12/05 15:04 ID:???
すいません。open(F2,">keka.html");でした。
よろしくです
306nobodyさん:03/12/05 15:10 ID:???
Perlでの文字列判定は
× $変数 == '文字列'
○ $変数 eq '文字列'
307304:03/12/05 15:17 ID:???
>>306
ありがとうございます
なぜこんなことに気付かなかったのか・・・
308297:03/12/05 16:16 ID:???
ごめん、intいらないみたい。

@array = qw/x y z/;
print join "\n", $array[log 2], $array[sqrt 2], $array[exp 1];
309nobodyさん:03/12/05 16:29 ID:???
>>303
悪いのはメモたんじゃなくあなた・・・
310303:03/12/05 16:33 ID:???
なんかおかしいと思ったら、>>283 に載ってる 259のコード
に間違いがあってそれそのまま使ってたせいだった。
× my $j = int rand $i;
○ my $j = int rand ($i + 1);

直したらPerlメモたんのコードは偏りのない綺麗なランダムを吐きました。
すまそ。(;´Д⊂)
311303:03/12/05 17:03 ID:???
けど、おかげでミスったコードは元の要素の位置に同じ要素を入れないという
特殊なシャッフルが出来ることがオマケで分かった。なにかに使えるかw

お詫びにList::Util以外で偏りのないランダム化では
最速かもしれないコード晒しておきます。
my @data = (1..5);
@data = map splice(@data, rand @data, 1), (0) x @data;

Perlメモたんよりちょと速く、List::Utilより2.5倍ほど遅い。
312nobodyさん:03/12/05 17:13 ID:yvNQmC4D
すいません。他スレで質問したのですが、荒れてそうなのでこちらで質問させて下さい。マルチすまそ。

Cookieにタブ(\t)や改行(\n)を使ってもいいのでしょうか?
色々とリファレンスを調べたのですが、ここだけ出てきませんでした。
w3cでは許可してないけど、実際は使っても問題ないとか、そいうことってありますか?
313nobodyさん:03/12/05 17:25 ID:???
314nobodyさん:03/12/05 17:46 ID:???
>>312
>>1
> いらっしゃーい、Perlのコーディングで困ってる人のスレです。
315nobodyさん:03/12/05 18:10 ID:???
>>312
よく知らないけどRFC2109にはこう書いてあるから、原則的にはだめなんじゃ?
...token (informally, a sequence of non-special, non-white space
characters) from the HTTP/1.1 specification [RFC 2068] to describe
their syntax.
316nobodyさん:03/12/05 19:13 ID:t+5mLj9n
Perl勉強&コーディング中なのですが、
「PerlでつくるCGI入門応用編」に載ってたの元に作りましたが、
0バイトのファイルは作成されますがファイルに書き込まれません。
どうしたらいいでしょうか。

#!/usr/bin/perl
file::lockopenW(FILE,"temp.txt");
print FILE "test\n";
file::unlockcloseW(FILE);
exit(0);

package file;
sub lockopenW{
local(*FILE,$name) = @_;
if( !open(FILE,">>$name") ){return(0);}
flock(FILE, 2);
truncate(FILE, 0);
}
sub unlockcloseW{
local(*FILE) = @_;
close(FILE);
}
317nobodyさん:03/12/05 21:06 ID:???
>>310
あぁ、ごめんなさい。 origin 揃える時にヘマしたみたい。
ここまでの結果反映しときました。

>>316
#!/usr/bin/perl
file::lockopenW(*FILE,"temp.txt");
print FILE "test\n";
file::unlockcloseW(*FILE);
exit(0);

でもこんなサンプル載ってるような本は捨てた方がいいよ。
318nobodyさん:03/12/05 21:32 ID:???
ダサンプル
319303:03/12/05 21:35 ID:???
>>317
いえいえ、一見ランダムだけど規則性がある面白いコードがでけたので逆に感謝したいw

そこでみんなにクイズ!

下記のコードを実行すると、

ATGCACTGACTGCTAGCTAGTCGATGACATGCACTGTCGATGACCTAGACTGATGCACTGTCGAATGCATGCCGTATCGA

という出力が得られました。
? ? ? ?に何が入っていたか順番も当てなさい。

my @DNA = qw(? ? ? ?);

for (my $i=0; $i<20; $i++) {
print eserand(@DNA);
}

sub eserand {
my @data = @_;
for (my $i = @data; --$i;) {
my $j = int rand $i;
next if $j == $i;
@data[$i, $j] = @data[$j, $i];
}
return @data;
}
320nobodyさん:03/12/05 21:39 ID:???
>>319
他所でやってくれませんか。
321303:03/12/05 21:46 ID:???
>>320
ごめんよ(´・ω・`)ショボーン
322nobodyさん:03/12/05 21:54 ID:???
>>304
それをやるなら、
while(<F>) {
print F2 if ( /\#Editstart/ .. /\#Editend/ );
}
だけでできるよ。
ただ、どっちもそうだけど最後までパースしちゃうので効率わるいけどね。
323nobodyさん:03/12/05 21:57 ID:???
>>317
いや、そこは自分で書いたんですが・・・
324nobodyさん:03/12/05 22:25 ID:???
ほぉ。。。
325nobodyさん:03/12/05 22:29 ID:???
おまいらにファイルを開く術を伝授する。

open(FH, $file);

$file は変数だ。開きたいファイルのパスを入れておけ。
326304:03/12/05 23:32 ID:???
>>304
効率の良い方法って例えば?
327nobodyさん:03/12/06 00:10 ID:???
>>304 のコードだけどさ、== を eq に直したところで $flag == 'true' になった時点で
elsif ($flag == 'true') {
に引っかかって
elsif ($in =~ m/\#Editend/ && $flag == 'true') {
に来ないと思うんだが。

328nobodyさん:03/12/06 00:11 ID:???
>>325
開くと何かいいことが起きるんですか?
329nobodyさん:03/12/06 00:20 ID:???
そりゃあお前いいことだらけだろ。
あんなことや、こんなことや
うまくいけば、あんなことまで出来ちゃうんだぜ?
もうウハウハよ。チンコ乾く暇もねーよ
330nobodyさん:03/12/06 05:43 ID:HLCvLYhk
CGIを使ったperlでサイト内検索を作ってるのですが、
body内に引っ掛けたく無い文字があります。
どのように設定しればいいか教えてもらえませんか?
331nobodyさん:03/12/06 11:27 ID:???
質問。
htmlファイルから特定の文字が含まれる行だけを抽出するスクリプトについて、
htmlファイルはsjisで書かれています。コマンドラインから引数に'ナース'を与えると、
正規表現エラーがでてしまいます。仕方なくいまはhtmlファイルと引数をjcode.plでeuc
に変換して処理しているのですが、これに結構時間がかかります。
なんとかファイルも引数もsjisのままやりたいのですが、どうすれば?
環境はWin98SE+Activeperl5.8.0です。
perlメモとかShif-JISを正しく扱うとかのページを読んだのですが、
さっぱり理解できませんでした。。。。
宜しくお願いいたします。
332nobodyさん:03/12/06 11:35 ID:???
>331 =~ /\Qナース\E/;
このやり方には問題もあるので、詳しくはPerlメモ参照。
333nobodyさん:03/12/06 12:41 ID:???
>CGIを使ったperl
ワロタ
334330 :nobody:03/12/06 13:24 ID:???
>>333
笑ってないで教えて下さいよ。
なんと表現するんですか?宜しくお願います。
335nobodyさん:03/12/06 13:41 ID:???
実に滑稽だ
336nobodyさん:03/12/06 13:44 ID:???
ネタとしてイマイチなんで流します




























337nobodyさん:03/12/06 14:28 ID:???
CGI(と言う規格)を使ったPerlって言いたかったと考えれば表現的には別に変ではないような。
実際どういう意味で言ったか知らんけど。
338nobodyさん:03/12/06 14:37 ID:M7qmj3xY
大きな数値は指数付きで表現されてしまいますが
これを元の数値に戻すことって出来るんでしょうか?
339330 :nobody:03/12/06 14:40 ID:???
>>337
そう言いたかったのです。ありがとうございます。
340nobodyさん:03/12/06 14:57 ID:???
アノソコイジノワルサ アンナニンゲンニダケハナリタクナイモンダ
341nobodyさん:03/12/06 15:00 ID:???
perl で 1000分の1秒までの精度の時刻をとりたい。
time じゃできんよね?
342330 :nobody:03/12/06 15:27 ID:???
>>335
PCも初心者なのですいません。

サイト内検索で、htmlのファイル名も拾ってしまいます。
<body>〜</body>だけの文字を引っ掛けるようにするか、
<body>〜</body>内を引っ掛け無いようにする方法
どっちか教えて下さい。お願いしますm(__)m
343nobodyさん:03/12/06 15:29 ID:???
system関数で適当なコマンドを実行して、
もしミスったらその原因を配列に入れて die させたいです。

@return_value = system( "ls hoge" );

だと、hogeファイルが無いときにエラーコードしか帰ってこないのですが、
"ls: hoge: no such file or directory"
みたいな文字列は取得できないのでしょうか?
344nobodyさん:03/12/06 15:47 ID:???
systemじゃ無理
345nobodyさん:03/12/06 15:56 ID:???
まじっすか。。。
system以外でどうすればとれそうでしょう。。
346nobodyさん:03/12/06 15:57 ID:???
>>341
Active Perlなら、Win32::GetTickCount()っていうのがあるみたいです。
 Returns the number of milliseconds elapsed since the last system boot.
らしいです。でも、
 Resolution is limited to system timer ticks (about 10ms on WinNT and 55ms on Win9X).
なんで、NT系でも100分の1秒までみたい。

>>343
こんな感じでどうですか。
open FOO, "ls foo 2>&1 |" or die $!;
@status = <FOO>;
print join "だよもん\n", @status;
close FOO;
347nobodyさん:03/12/06 16:04 ID:???
>>341
Time::HiResは?
348nobodyさん:03/12/06 16:28 ID:???
>342
このスレを10回くらい見返して、自分で使えそうな部分がないか探してみ。
349343:03/12/06 17:49 ID:???
>>346

ありがとうございます。

ただ、
open FOO, "ls foo 2>&1 |" or die "hoge $!";
ってしたときに、
hoge no such file or directory
とは出せないですね。

意図としては、perl からシェルコマンドを実行して、
その結果を、エラーであっても正常終了であっても取得して加工したいのです。

イメージは、
$return = system( "ls hoge" ) or die "エラー: $!";
で、正常終了の時は、lsの結果が文字列で $return に入り、
エラーだった場合は、「エラー: no such file or directory」としたいです。
350nobodyさん:03/12/06 17:50 ID:???
>>346, 347
やっぱモジュール必須かぁ…thx
351nobodyさん:03/12/06 17:55 ID:???
1: 自分はヒアドキュメントを使いたい
2: それでこんな風にやってみたが・・・
printf 'なにかー';
print<<__HTML__;
hello world<br>
__HTML__

今まで動いてた perl のソースに追加してみた。

3: こんなエラーが出て上手く行かなかった。
ページを表示できません
検索中のページは現在、利用できません。Web サイトに技術的な問題が発生しているか、ブラウザの設定を調整する必要があります。
352nobodyさん:03/12/06 17:58 ID:???
そのエラーは何の参考にもなりません。
353nobodyさん:03/12/06 18:00 ID:???
>>351
エラーログを見てください。
354338:03/12/06 18:00 ID:M7qmj3xY
(つД`)
355nobodyさん:03/12/06 18:04 ID:???
winで
httpdのサーバ で
Perlやってるんだけど
(´・ω・`) ログがどこに出てるかわからないや
356nobodyさん:03/12/06 18:13 ID:???
for文を使ってログ行数指定をする方法ってありますか?
357346:03/12/06 18:23 ID:???
>>349
>意図としては、perl からシェルコマンドを実行して、
>その結果を、エラーであっても正常終了であっても取得して加工したいのです。

えーと、とりあえずウチでは>>346のでそうできてます。
ただエラー時に'だよもん'が出なかったのでちょっと修正。
open FOO, "ls foo 2>&1 |" or die $!;
while (<FOO>){
chomp;
print "$_だよもん\n";
}
close FOO;

 これで、
$perl dayomon.pl
ls: foo: No such file or directoryだよもん

 open FOO, "ls test*.pl" にすると
$perl dayomon.pl
test.plだよもん
test2.plだよもん

こんな感じになります。
358nobodyさん:03/12/06 18:35 ID:???
>355
httpdなんてのは当たり前なのだが。
anhttpdの事を言っているなら、オプション>一般>ログ>エラー。
オプション>一般>一般>CGI出力を検査、でも可。
これはperlのコーディングと関係ないので、あとは別の場所で聞いて
エラーを読めるようになってから出直してきてください。
359nobodyさん:03/12/06 19:09 ID:???
>>338
use Math::BigInt;
360338:03/12/06 20:11 ID:M7qmj3xY
>>359
Math::BigIntは自分も試したのですが、
自分の場合、すでに代入してある値を指数無しで
表示させたいのでうまく出来ませんでした。。

$test = 12345678901234567890;
use Math::BigInt;
$test = Math::BigInt->new("$test");
print "$test";

とやってみたのですが。。
361356のアフォ:03/12/06 20:15 ID:???
誰かfor文を使ってログ行数指定ができるか教えてください!
362nobodyさん:03/12/06 20:57 ID:???
>>360
use Math::BigInt;

$test = Math::BigInt->new('12345678901234567890'); # 文字列で与える
$test->bdec; # デクリメントしてみるテスト
print $test, "\n";
363338:03/12/06 21:17 ID:M7qmj3xY
>>362
すでにある変数に対して行いたいのですが。。
364338:03/12/06 21:33 ID:M7qmj3xY
自分の場合、変数に代入されている値を
指数無しにそのまま表示するだけでいいのですが。。
365nobodyさん:03/12/06 21:44 ID:???
>>364
>>360で誤差も含めてちゃんと変換できてる。
値を誤差なく扱いたいなら、最初から最後までMath::BigIntで扱ってみるしか。

$test = 12345678901234567890;
print $test, "\n";

use Math::BigInt;
$test = Math::BigInt->new("$test");
print $test, "\n";
366338:03/12/06 22:14 ID:M7qmj3xY
なるほど。
はじめの$testの値と変わってしまうのは仕様ということですか。
それも含めていろいろ考えてみます。ありがとうございました
367nobodyさん:03/12/06 22:39 ID:???
>>361
何が言いたいんだかさっぱりわからん。
368338:03/12/06 23:09 ID:M7qmj3xY
あらら、、鯖(xrea)にうpして動かすと"NaN"になってしまう。。
ローカルでは動くんだけど。。バージョン?の違いとかなんだろーか。。
369338:03/12/06 23:12 ID:M7qmj3xY
>>365さんのも"NaN"となってしまう。。
どうしよ。。回避策は無いのかな…
370nobodyさん:03/12/06 23:26 ID:98DplNHW
$_SERVER['HTTP_REFERER'] は一つ前のページの URL ですが、
二つ前のURLを取得したい場合はどうしたらいいですか?
371nobodyさん:03/12/06 23:28 ID:???
>>370
アクセスした人に聞く。
372nobodyさん:03/12/06 23:43 ID:???
>>370
そんなもんわかったらやばいだろ。
373nobodyさん:03/12/06 23:55 ID:???
ブラウザのバグで、JavaScriptで10個前まで取れたことがあるみたい。
374nobodyさん:03/12/06 23:56 ID:???
>>361
ログ行数指定って何のことか書けば教えてやる。
375nobodyさん:03/12/07 00:11 ID:???
nobodyさんがいっぱい
376nobodyさん:03/12/07 00:25 ID:???
>>370
セッション管理でぐぐる。
377nobodyさん:03/12/07 00:34 ID:???
>>369
5.6以前のMath::BigIntは指数表現を許さない模様。

my $val = 1.23456789012346e+019;
if ($val =~ /(\d+)\.(\d+)e\+(\d+)/i){
$val = $1.$2.'0'x($3-length($2));
}
print $val, "\n";

やっつけ(かなり適当)だから問題あるかも。
378初心者さん:03/12/07 00:47 ID:???
あまりにも初心者ですみませんが教えてください。あと、正確に言うとperlスクリプト
じゃなくて、シェルスクリプトの分野になるかもしれませんが、適当なスレッドが見当たらなかったので
ここに挙げました。すみません。

/export/home/aaa/というフォルダ内にa1.pl、a2.pl、……のperlスクリプトを配置して、
cronで自動化しようとしているのですが、cronが動いてくれません。

cronで指定してるのはstart.shというもので、
中身は
#!/bin/sh
/usr/loca/bin/perl /export/home/aaa/a1.pl


a1.plで、a2.pl,…を
use 'a2.pl';
などしてるのですが、エラーを見ると、a2.pl等が見つからない、パスがとおってないようでした。

で、教えて欲しいのはaaaユーザのcronを実行するために、シェルスクリプトでそのaaaユーザになる書き方なんですが。

よろしくお願いいたします。

379nobodyさん:03/12/07 01:00 ID:/OU0n//S
「||=」というのをあるスクリプトの中で見かけたのですが、
どういう意味なのでしょうか?
Googleで「Perl "||="」ってなかんじで検索したものの、
どうも、「||=」が載ってないサイトばかりでてきてしまって・・・
380338:03/12/07 01:01 ID:f7FmGnDh
>>377
>5.6以前のMath::BigIntは指数表現を許さない
ふむふむ。。

>my $val = 1.23456789012346e+019;
>if ($val =~ /(\d+)\.(\d+)e\+(\d+)/i){
>$val = $1.$2.'0'x($3-length($2));
>}
>print $val, "\n";
>やっつけ(かなり適当)だから問題あるかも。
うわー。わざわざありがdございます。
試してみたらちゃんと動きました。
本当にありがとうございましたー
381nobodyさん:03/12/07 01:15 ID:???
$val が未定義・空文字・0 のような偽のときに代入する方法を伝授する。
$val ||= 'hoge';
382nobodyさん:03/12/07 01:18 ID:???
>>379
$hoge ||= "fuga";
$hoge = $hoge || "fuga";

$hogeが真なら$hogeを、偽なら"fuga"を代入。
同じ事をここ2chの「名前」にも使っているから、名前に0と入れると
偽=デフォルトの名前になる。
383nobodyさん:03/12/07 01:20 ID:???
@INC にセットしてパスを通す方法を伝授する。
use lib qw(/usr/loca/bin/perl /export/home/aaa);
use 'a2.pl'; # require 'a2.pl';

クーロンでaaaユーザになる方法を伝授する。
su - aaa -c 'command'
384379:03/12/07 01:20 ID:/OU0n//S
>>381-382

なるほど、ありがとうございます。
385nobodyさん:03/12/07 01:20 ID:???
普通にかぶりましたな。
まぁこの質問はここかムのほうで既出なんだけどね
いつか名前に0を入れてテストする人がいたから
googleで|みたいな特殊文字は検索できないらしく、不便だね
386nobodyさん:03/12/07 01:42 ID:5aqMPCZX
トリップを作成するためのコードを教えてください
387nobodyさん:03/12/07 01:43 ID:???
>>386
ぐぐるか互換スクリプトのソースでも見ろ
388初心者さん:03/12/07 01:59 ID:???
>>383さん
ご回答いただきましてありがとうございます。やってみます。
389386:03/12/07 02:25 ID:5aqMPCZX
2ch系スクリプトのトリップ作成関数のとこ見ても意味がさっぱり解りません
cryptを使うとこまではわかったんだけど全くの初心者なもんで。。。
誰か1から教えて下さい。よろしくお願いします
390nobodyさん:03/12/07 02:26 ID:???
氏ね
391nobodyさん:03/12/07 02:46 ID:???
>>389
お前には絶対無理。

>>390
禿同
392nobodyさん:03/12/07 02:47 ID:???
>>389
if($tripkey){
$salt = substr($key."H.", 1, 2);
$salt =~ s/[^\.-z]/\./go;
$salt =~ tr/:;<=>?@[\\]^_`/ABCDEFGabcdef/;
$trip = substr(crypt($key, $salt),-8);
$name .= "◆".$trip;
}

後は適当に
393nobodyさん:03/12/07 02:58 ID:???
初心者スレでわざわざ「初心者です」と言うこともないだろう。
かえって反感買うぞ。

見返りも無く赤の他人に1から教えようというヒマな人はめったにいない。
分からないなりに実践してみて、その上でどこが分からなかったのか具体的に
書いてくれれば、一緒に考えてみてもいいと考えている人はけっこういる。

ちょっとは過去レスも読んでみれ。具体的なソースを出した質問には、よってたかって
ソースを最適化してたりする。みんな答えを考えること自体は面倒じゃないんだよ。
394nobodyさん:03/12/07 03:31 ID:???
http://www.zdnet.co.jp/enterprise/0312/06/epn01.html

こんなこといわれてますが、
PHPのほうがいいの?
395nobodyさん:03/12/07 03:48 ID:???
>>394
初めて書くなら入りやすいってことだろ
どっちにしてもスレ違いだから
396386:03/12/07 04:24 ID:???
どこから覚えていいかわからず抽象的な質問してスミマセン
cryptとsaltの意味まではわかりました
あとは具体的な質問が出来る位まで自分なりに勉強してみます
>>392ありがとうございます。参考にさせて頂きます
>>390-391絶対やってみせるからな

また来るよ!!ヽ(`Д´)ノ
397nobodyさん:03/12/07 04:29 ID:???
>>396
がんばれよ。応援してるぞ。
398nobodyさん:03/12/07 04:33 ID:???
>396
なんか若いな。
うちの若手社員にもこういう意気込みがほしいのお。
ちょっとしかるとすぐしょげるからな。あいつらは
399nobodyさん:03/12/07 04:59 ID:???
最初はみんな解らんことだらけだ
君も勉強してチョットはperl弄れるようになったら、
ここで叩かれた意味もよーく解ると思う。
がんばれ。見返してやれ
400nobodyさん:03/12/07 05:28 ID:???
質問!
変数と変数をくっ付けて新たな変数名にしるってことを考えて松
for (my $i=0;$i<11;$i++){
for (my $j=0;$j<10;$j++){
${"data$i"} .= "$i$j" . '/';
}
}
これでうまくいき松
print "$data0\n"; としると、希望どおり「00/01/02/03/04/05/06/07/08/09/」が表示され松
が、use strictをしると,$data0がグローバルだといわれ松
でもってmy $data0;ってしても「Can't use string ("data0") as a SCALAR ref while "strict refs"」っていわれ行き詰まりますた

漏れの前に立ちふさがっているこの大きな壁を誰かぶち破ってくさい


401nobodyさん:03/12/07 06:01 ID:???
>>400
配列じゃだめなの?
402nobodyさん:03/12/07 07:06 ID:7k6pnaM4
2chのように半角カタカナが使える掲示板を設置するにはどうすればいいでしょうか?
403nobodyさん:03/12/07 08:06 ID:???
404400:03/12/07 09:14 ID:???
>>401
あれはあくまで例文なので、配列を使わない方向でやってみたいのです
405nobodyさん:03/12/07 10:04 ID:???
406nobodyさん:03/12/07 11:32 ID:gfqXEEBE
質問させてください。
JavaScriptから得た値をCGIに取り込みたいのですが、
例えば
<script language="JavaScript"><!--
document.write( navigator.appCodeName);
document.write( navigator.platform);
// --></script>

↑のJavaScriptで得た「navigator.appCodeName」と「navigator.platform」
の値をPerlでtxtファイルに書き込むようにするにはどうしたらよいですか?
407nobodyさん:03/12/07 12:58 ID:???
>>406
Perlコーディングに関係無い。
408nobodyさん:03/12/07 13:19 ID:???
**************秒 を
(**世紀)**年**日**時間**分**秒
というふうに変換したいのですがどのようにやると効率がいいのでしょうか?
409nobodyさん:03/12/07 13:28 ID:???
>>408 localtime
410nobodyさん:03/12/07 14:03 ID:YpZVNXgY
質問です。
隠しカウンターを埋め込みたいのですが、
<input type=hidden>を使ってcgiを動作させるためには
どうしたらよいのですか?

(フレームを埋め込まない形式のものとします。)
411nobodyさん:03/12/07 14:38 ID:???
>>410
Perlコーディングに関係無い。
そもそも CGI というものについて誤解しているような気がする。
隠しカウンターとは何か、そのスクリプトは自作か?どんな処理をするのかを明示して↓で聞けば?

△▲ WebProg 初心者の質問 Part6 ▼▽
http://pc2.2ch.net/test/read.cgi/php/1066318233/
412nobodyさん:03/12/07 14:39 ID:???
いらっしゃーい、Perlのコーディングで困ってる人のスレです。

【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。

1: 自分はこう言う事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。

最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。

過去ログやお勧めサイトは >>2-10
413nobodyさん:03/12/07 16:25 ID:???
どうにかしてヒアドキュメンドの中でコメントを使う方法はありませんか?
414nobodyさん:03/12/07 16:49 ID:???
ドキュメン「ド」ですか。

HTMLなら<!-- -->使いなさい。
415nobodyさん:03/12/07 16:51 ID:???
ヒアドキュメントを使わない。
416nobodyさん:03/12/07 16:52 ID:???
PODならヒアドキュメント内でも効果あるんかな
417416:03/12/07 16:54 ID:???
んなこたぁないか。sage
418nobodyさん:03/12/07 18:42 ID:???
>>413
こんな感じでどうよ?
| 前半の正規表現は # から始まってる行を改行込みで削除するために入れてる。
空行が残ってもいいなら ($hoge = <<EOF)=~s/#.*//g; で OK。

($hoge = <<EOF)=~s/^#.*\r?\n|#.*//mg;
abcdef #hoge
#hoge

ghijkl
EOF
print $hoge;
419nobodyさん:03/12/07 18:42 ID:P5pNf3iB
フォームからの送信データを、そのままファイルに書き込むとUTF-8に
なり、そのデータをローカルに持ってきてJcode.pmでEUCに変換すること
はできるのですが、送信データを受け取るCGIスクリプト内でUTF-8から
EUCに変換するコードを加えるとファイルに保存されたデータが文字化け
してしまいます。

どういった原因が考えられるでしょうか?
420nobodyさん:03/12/07 18:59 ID:???
>>419
間違ってるからしかないだろ
そのコード晒して聞けよ
421nobodyさん:03/12/07 19:20 ID:???
晒すっても
$hoge=$formdata

$hoge=Jcode->new($formdata)->euc
にしてるだけ
422nobodyさん:03/12/07 21:11 ID:???
423nobodyさん:03/12/07 21:17 ID:???
>421
前後がなければわからないよ。
ファイルに保存する前に文字化けしているのは確かなんだろうけど
だとしたらどこかの処理でそれが行なわれているはず。
その辺のソースが全くないじゃないか。
こまめにprintしてどこで文字化けしてるか確認するとかしたのか?
424nobodyさん:03/12/07 21:20 ID:???
>>418
スッゲー!出来ました!正規表現でエスケープするとよいのですね。
長年の夢が実現しますた。後、ヒアドキュメント内で関数を使用する場合は、
ヒアドキュメントの外で戻り値を変数に格納して、ヒアドキュメント内で展開
する、という方法がBESTなのでしょうか?

$aaa = &sub_aaa;

($hoge = <<EOF)=~s/^#.*\r?\n|#.*//mg;
abcdef #hoge
#hoge

$aaa

ghijkl
EOF
print $hoge;

な感じです。
425nobodyさん:03/12/07 22:49 ID:???
>>409
引数が大きいとちゃんと動いてくれないようです。
localtimeを使わないでやるにはどうやればいいですかね…。
なかなかうまい方法が思いつかないので…。
426nobodyさん:03/12/07 22:51 ID:???
>>425
>引数が大きいとちゃんと動いてくれないようです。
どんなコード書いて、どんな値入れたの?
427nobodyさん:03/12/07 22:59 ID:???
2038年が限界?
428408,425:03/12/07 23:42 ID:???
>>426
$time = 1000000000;
($sec, $min, $hour, $mday, $mon, $year) = localtime($time);
$year -= 70;
--$mday;
$hour -= 9;
print "$year年$monヶ月$mday日$hour時間$min分$sec秒";

こんな感じです
429nobodyさん:03/12/07 23:53 ID:???
>>428
$year -= 70;
--$mday;
$hour -= 9;

この不思議コードはなんだ?
430nobodyさん:03/12/07 23:54 ID:???
標準出力する方法を伝授する。

print STDOUT "hoge\n";
431408,425:03/12/07 23:55 ID:???
>>429
自分の目的(>>408)ではlocaltimeだと誤差が出るんですよ。
432nobodyさん:03/12/08 00:05 ID:???
>>431
誤差が出るって、2038年を超える値はlocaltimeでは正しく得られないが。
>>428の$timeで言うとおおよそ2139******以上かな。
さっきみたいな不思議コードでどうこうできるものじゃないぞ。
433408,425:03/12/08 00:15 ID:???
>>432
スンマセン。説明が足りなかったみたいですね
自分は今の時間の値を得るとかそういうのじゃなくて
>>408で言ってるように単純に
**************秒 を(**世紀)**年**日**時間**分**秒
というふうに変換したいだけなんです。
たとえば、1000秒なら0年0ヶ月0日0時間16分40秒というように。
紛らわしくてスマソ。
で、単にlocaltimeに秒数をぶっこむだけでは例のようになってくれないので
不思議コードで調整をしてたわけです。
434nobodyさん:03/12/08 00:21 ID:kLlTEKlc
質問させてください。
カウンターとか表示させる時、
<img src="counter.cgi?order=1">とかにしたら、
スクリプト内でどうすりゃいいのですか?
435nobodyさん:03/12/08 00:29 ID:???
>>434
ちょっとでいいからぐぐれ。お願いだから・・
436nobodyさん:03/12/08 00:34 ID:???
>>433
……不思議なバカな感じ。
時差が出るのは、localtimeが鯖に設定してある時間帯見て時間決めてるからだろ?
・$ENV{TIME_ZONE}いじって時差を修正するか、
・localtimeのかわりにgmtime使ってグリニッジ標準時刻を得てそれを加工するかしろよ。

それと、yearの数値は、1900を足すと西暦になる数字だろ?

で、ここからが非常に重要な質問なんだが、
オマエは月や年の定義をどう考えてるんだ?
localtimeやgmtimeで得られる数値は、全て修正されたグレゴリオ暦による日付だろ?
だから、うるう年のややこしいルールとかもあるから、
秒数を単純に変換しただけでは正しくない可能性があるだろ?

もう、単純に力技で計算したら?
$t = time
$t を 60*60*24*30*12*100 で割って世紀にする。端数を$tに代入。
$t を 60*60*24*30*12 で割って年にする。端数を$tに代入。
(以下省略)

まあ、逆にしてもいいだろうけどさ。

437nobodyさん:03/12/08 00:40 ID:???
まったく、>>436が得意気に糞知識をばら撒きだしたじゃないか!
438nobodyさん:03/12/08 00:42 ID:???
何気に>>436>>433の意図をつかめていない感じ。
439nobodyさん:03/12/08 00:47 ID:???
そもそも>>436の力技って奴もおかs(ry
440nobodyさん:03/12/08 00:48 ID:???
>>433もへんなのに当たっちゃったな
441434:03/12/08 00:52 ID:???
>>435
いえ、ぐぐったんですけど、わからなかったです・・・
442nobodyさん:03/12/08 01:00 ID:???
まぁ単に >>433 が算数苦手な上に各単位の定義を
はっきりさせていないだけなんだが。

my($time, @x, @time) = ($ARGV[0], 1);
unshift @x, $_ * $x[0] for 60,60,24,30,12,100;
for (@x) {
  my $num = int($time / $_);
  push @time, $num;
  $time -= $num * $_;
}
printf '(%d)世紀%d年%dヶ月%d日%d時間%d分%d秒', @time;
443nobodyさん:03/12/08 01:11 ID:???
じゃあ>>442と対照的に四則演算を並べ立てたやり方で

$time = 3153686400;

$sec = $time % 60;
$time2 = ($time - $sec) / 60;

$min = $time2 % 60;
$time3 = ($time2 - $min) / 60;

$hour = $time3 % 24;
$time4 = ($time3 - $hour) /24;

$day = $time4 % 365;
$time5 = ($time4 - $day) / 365;

$year = $time5 % 100;
$sen = ($time5 - $year) / 100;

print "(".$sen."世紀)".$year."年".$day."日".$hour."時間".$min."分".$sec."秒";
444nobodyさん:03/12/08 01:20 ID:???
先輩!うるう年が考慮されていませんぞ!なんてね。
445nobodyさん:03/12/08 01:21 ID:???
ごめんなさい。既出でした。
446nobodyさん:03/12/08 01:30 ID:???
>>441
ふーん
447nobodyさん:03/12/08 01:47 ID:oHyCVQZy
すいません、ファイルをアップロードできません。

OS … WindowsXP
鯖  … Apache 1.3.29(ローカル鯖)
CGI … perl 5


<<スクリプト>>

#--ブラウザ(IE6)からinputタグで画像のパスを送信。
#--クライアント側の画像のパスを取得。
#--パスの「\」を「/」に変換、「+」は「 」に変換。
#--$getpic=クライアント側の画像パス
open (IMAGE,">image.jpg");
print IMAGE $getpic;
close (IMAGE);


ファイルをアップロードしようとすると、71Byteだけ保存されて終わります。
当然は見られません。(毎回71Byteぴったり)
拡張子も合ってます。
サーバーのエラーログには何も記録されていませんでした。
ググったり、画像アップロード掲示板のソースを参考にしてもみたのですが、
皆このやりかたでアップロードしています。

何がいけないのでしょうか。
よろしくお願いします。
448nobodyさん:03/12/08 01:55 ID:???
449nobodyさん:03/12/08 04:22 ID:???
$hoge = ($foo <=> $bar);
↑これはどういう意味ですか?fooとbarを比較して
どっちかを代入してるのはなんとなくわかるんですが
大きい方を入れるのかなと憶測してるんですがあってますでしょうか?
正直こういうのはぐぐれないんで痛いです・・。
450nobodyさん:03/12/08 04:32 ID:???
演算子だとわかるんだからリファレンス見れ。
if ($xx <=> $yy) # 比較結果を -1, 0, 1 のいずれかで返す
451nobodyさん:03/12/08 04:39 ID:???
452nobodyさん:03/12/08 04:47 ID:???
あ、どっちかを代入してるんじゃなくて、比較結果なんですね。
すいません、有難うございました。
453nobodyさん:03/12/08 06:04 ID:???
・・・>>436のいいぶん、そんなにおかしいか?
454nobodyさん:03/12/08 11:43 ID:???
1年が360日になってしまってる時点でかなりおかしいと思うが。
455nobodyさん:03/12/08 11:59 ID:???
$ENV{TIME_ZONE}
456ヽ(´ー`)ノ:03/12/08 12:15 ID:???
>>453
いや、どう考えてもオカシイ。

>>436
地球の公転ってのは 365 日って言われてるけど、実際には 365 と 1/4 日なのね。
ただ、実際に生活していく上で、毎年毎年 1/4 日も時間が狂ったら困るから、
1/4 * 4 で四年に一度だけ一年が 366 日になる、うるう年が作られたんだけど、
この考え方はグレゴリオ暦の考え方なのよ。
// 他に同じようにうるう年を導入した暦があったかもしれんが、俺は知らん。

君の言うように localtime や gmtime はグレゴリオ暦に従ってるわけだが、
そうであるが故に localtime や gmtime が提供する値は「正しい」。

まぁそれは本質的な問題じゃないのでこの際置いといて。
>>433 よ。ちみは具体的にどうなって欲しいのよ。
こういうデータを localtime や gmtime に突っ込んだらこういう結果が出ました。
自分が望んでいる結果はこのデータだとこうです、って例示してくれんと
アスタリスクだけじゃ答えてる香具師もどうしたら良いのか分からんよ。
457nobodyさん:03/12/08 12:19 ID:???
正確には97/400日だっけ?
458nobodyさん:03/12/08 12:23 ID:GM+CQ6+7
365.2422日って以前読んだ記憶がある。
1/4にちょっと満たない  ので100年に1度もう一度修正する
で、400年にいちどまた修正すると
459nobodyさん:03/12/08 12:44 ID:???
Googleたんによると1年は365.242199日
http://www.google.com/search?q=a+year+in+days
460nobodyさん:03/12/08 16:04 ID:???
先週オレがつまづいたせいで少し回転が早くなっているだろうがキニスルナ
461nobodyさん:03/12/08 16:35 ID:???
(´゚c_,゚` ) プッ
462408,425:03/12/08 18:31 ID:???
すみません。自分のやりたいことは>>442-443の通りでした。
ありがとうございました。

しかし、>>442は難しくてどういうふうに動いてるのかよく分からないなぁ…。
463nobodyさん:03/12/08 21:27 ID:???
phpならunixtimeを一発でyyyy/mm/dd(w) mm:hh:ssに変換できるのだが。
464nobodyさん:03/12/08 21:40 ID:???
perlだってunixtimeから一発で変換できるだろ(localtime)。

ただ>>408は1970年1月1日0時0分からのunixtimeじゃなくて
西暦0年1月1日0時0分からの秒数を変換したいんだろうな。

しかし>>433で言ってるような○ヶ月という表現は難しいんじゃないのか?
たとえば1月1日から2月1日は一ヶ月であり、31日だが、
2月1日から3月1日はやはり一ヶ月だが、29または30日だから、
この辺を考慮しようものならすさまじく複雑になると思う。
465464:03/12/08 21:41 ID:???
ん、西暦0年は存在しないか。
466nobodyさん:03/12/08 21:58 ID:???
>>463-465
終わった話を蒸し返すなよ。しかも勘違いしてるし。
経過時間じゃなくて秒を上の単位に変換したいってことだろ。
467nobodyさん:03/12/08 22:29 ID:???
(^Д^)
468nobodyさん:03/12/09 00:17 ID:i1j5vGrf
open(STDOUT, "| tee ${sname}.html") || &errorpage("teeのバグ");
open(STDOUT, "| tee ${bname}.html") || &errorpage("teeのバグ");

print "Content-type:text/html\n\n";


(&errorpage()はまんまエラーページ表示のやつで、$sname・$bnameは名前の文字列っす)
でCGIプログラムエラーが起きてしまいます・・・
問題箇所は間違いなくココなんすけど。
教えてくださいッ!!
469468:03/12/09 00:30 ID:???
あ、1を忘れていた・・・
このCGI内で表示したものと同様の内容を、
${sname}.htmlと${bname}.htmlの両方に書き出したいのです。
470nobodyさん:03/12/09 01:20 ID:???
>>468-469
もう向こうで答えたよ。
471nobodyさん:03/12/09 07:05 ID:???
>>470
もっとさっさと答えろ。わざわざマルチしてやってるのによ
472nobodyさん:03/12/09 09:05 ID:???
>>468
どういうエラーが出るの?
473468:03/12/09 12:02 ID:???
500エラーにきまってるだろ
474468:03/12/09 12:45 ID:???
CGI1エラーに決まってるだろ。
内容はてめぇで考えろ
475nobodyさん:03/12/09 13:03 ID:b0uD2YDo
次期P2Pの仕様 part7
http://tmp2.2ch.net/test/read.cgi/download/1070647427/

まとめサイト(Wikiへの直リンク禁止)
 http://s2net.s41.xrea.com/

ダウソの馬鹿どもがなんかやってるぞ、からかってやろうぜ!
476nobodyさん:03/12/09 14:23 ID:JkIM3Ehk
すいません、
このタグでcぎに画像を転送しようとしても、
Cgiファイルのダウンロードになってしまうのですがなぜでしょう?
PCがIEが壊れたのでしょうか?

<form method="POST" action="./pictup.cgi">
<input type="text" name="aa">
<input type="file" name="pifi">
<input type="submit" value="GO">
</form>
477nobodyさん:03/12/09 14:30 ID:???
Perl に関係ない話はヨソで。
Content-Type について調べてみれ。
478nobodyさん:03/12/09 14:33 ID:JkIM3Ehk
>>477
あ、そうか。
すまん。
479nobodyさん:03/12/09 21:21 ID:???
>>475>>477 に同じく。
480468:03/12/10 00:34 ID:???
>>470
あー、$!という手がありましたか・・・
試みてみます!
481nobodyさん:03/12/10 00:56 ID:???
>>456
> 地球の公転ってのは 365 日って言われてるけど、実際には 365 と 1/4 日なのね。
> ただ、実際に生活していく上で、毎年毎年 1/4 日も時間が狂ったら困るから、
> 1/4 * 4 で四年に一度だけ一年が 366 日になる、うるう年が作られたんだけど、
> この考え方はグレゴリオ暦の考え方なのよ。
> // 他に同じようにうるう年を導入した暦があったかもしれんが、俺は知らん。

 をいをい。「4年に1回が閏年」というのは、グレゴリオ暦の前に使われていた
ユリウス暦の話なの。ユリウス暦が数百年に渡って使われた結果、日がずれている
という問題が生じたから、グレゴリオ暦が作られたの。グレゴリオ暦は、
 400で割り切れる年は閏年である。
 それ以外の100で割り切れる年は閏年ではない。
 それ以外の4で割り切れる年は閏年である。
というものなの。
482nobodyさん:03/12/10 10:18 ID:???
質問者はもういないだろうけど、8月が30日間だった期間もあったりして、面倒くさそうだね。
http://ja.wikipedia.org/wiki/%E3%83%A6%E3%83%AA%E3%82%A6%E3%82%B9%E6%9A%A6
483ヽ(´ー`)ノ:03/12/10 12:39 ID:???
>>481
分かってるけど、うるう年自体はグレゴリオ暦で許容されてるだろ?

>>436
> だから、うるう年のややこしいルールとかもあるから、
って言ってるから、そこにだけ反応したんだが。
484nobodyさん:03/12/10 13:15 ID:/scbZ0TM
>>482
そんな時代もあったのか。
避けて通ることを考えたくなるな。
485nobodyさん:03/12/10 13:18 ID:???
デロリアンの中の人も大変だな。
486nobodyさん:03/12/10 14:57 ID:???
昔にさかのぼる場合、グレゴリオ暦切り替えの時期も
問題になるけどな。
昔のカレンダー表示できるソフトで
1582年10月や1752年9月を表示させてみるといい
487nobodyさん:03/12/10 16:03 ID:???
>>485
デロリ庵の中の人などいない♪
488nobodyさん:03/12/10 18:34 ID:???
デロリアンって、昔のSF作品に出てくる
すごいハイテク車の名前ですよね?
「だめですマイケル!距離が足りません!」
とかなんとかしゃべるやつ。たしかマイケル・
J・フォックスが出てたからこれで間違いないと
思うんですけど・・・。
489nobodyさん:03/12/10 19:00 ID:???
やあドク、スレの調子はどうだい?
490nobodyさん:03/12/10 19:07 ID:???
>>488
デロリアンはback to the futureに出てくるタイムマシンで、「マイケル...」と話すのはナイト2000。
491nobodyさん:03/12/10 19:38 ID:???
print FH <<__EOF__;
<html>
<head>
<title>hogehoge</title>
</head>
<body>
__EOF__

ということをしたいのですが、

print FH "…";
で一行づつ書いてくしかないのですか?
492nobodyさん:03/12/10 19:47 ID:???
>>491
沸けワカラン
493nobodyさん:03/12/10 19:56 ID:???
すみません、ヒアドキュメントでできました。
494nobodyさん:03/12/10 20:44 ID:???
>>493
お前誰だよ
495nobodyさん:03/12/10 21:34 ID:???
俺だよ、俺?
496nobodyさん:03/12/10 21:40 ID:???
まさと?
497nobodyさん:03/12/10 22:38 ID:???
そうそう、俺だよ
498nobodyさん:03/12/11 00:06 ID:???

P e r l だ け は カ ゙チ
499nobodyさん:03/12/11 01:17 ID:???
perlの質問です。俺おれ詐欺の書き方教えて下さい
if (!$money) { &oreore; }
exit;

sub oreore {
while($baachan ne "hurikomi") {
print "俺だよ俺";
}
}

この辺まで考えたんですけどなんかこうパンチがないってゆうか、
もうちょっとインパクトが欲しいんです
500nobodyさん:03/12/11 01:36 ID:???
$ore = 500000;
501nobodyさん:03/12/11 01:50 ID:axDB0KAJ
>>499
× if (!$money) { &oreore; }
○ if($money > 500000){ &oreore }

一割よこせよw
502nobodyさん:03/12/11 03:06 ID:???
ふと思ったんですがサブルーチンの外にある変数って
my宣言する意味あるんでしょうか。
503nobodyさん:03/12/11 04:00 ID:???
>>502
use strict;
my $key = 'fuga';
{
  my $key = 'hoge';
  my %hash = (foo => 1, bar => 2, baz => 3);
  while (my($key, $value) = each %hash) { print "$key:$value\n" }
  print "$key\n";
}
print "$key\n";
504nobodyさん:03/12/11 04:01 ID:???
>>502
しなかったらどうなると思う?
505nobodyさん:03/12/11 12:03 ID:???
いえなんていうか外側の変数って事実上のグローバル変数では無いですか。
バージョン情報とか設定情報とか。
なのでstrictモジュールを通す以外に特に意味があるのかなと。
506nobodyさん:03/12/11 12:07 ID:???
>>505
ちょっとコード書いてみて試してごらん。
507nobodyさん:03/12/11 12:53 ID:???
どのようなコードが良いでしょうか。

>503のような物でも fuga が代入されている $key は my 宣言しなくても
結果は同じですよね。
#当然 use strict は外さないと駄目ですが

あと、例えばそこらに落ちてる掲示板とかには
$version = '1.05'; # 開発バージョン
$locktype = '0'; # 0 = flock, 1 = rename みたいな
とか言う変数が与えられてたりしますが、
こういうのって他のブロック内で同名の変数が作られる事が無いって解るようなものですよね。
例え作られるにしてもブロック内の変数のみ my 宣言していれば良いし。

と言う経緯があって、use strict の為以外に外側の変数を my 宣言する意味って
何かあるのかな? と思った次第であります。
508nobodyさん:03/12/11 13:02 ID:???
>507
お前はタイプミスしないのか?
509nobodyさん:03/12/11 13:27 ID:???
グローバル変数ってパッケージ名を修飾するもんじゃないの?
$main::hoge (または $::hoge)みたいに。
んで、他のパッケージから呼び出すこともできる。
myはそのパッケージ限定で、他からは呼び出せない。
510nobodyさん:03/12/11 16:19 ID:???
掲示板でトリップ機能をつけようとしてるんですが、
名前の中に"◆"があった時に"◇"に変える処理を

$FORM{'name'} = s/◆/◇/g;

としたのですが、名前の中に"あー"という文字列があるとそこにもマッチしてしまいます。
文字コードはEUCです。
回避索はないでしょうか。
511nobodyさん:03/12/11 17:05 ID:???
じゃあEUCを使わなければいいだろ
512nobodyさん:03/12/11 17:07 ID:7rVUcdTM
お邪魔します。
今週になって初めてPerlとjavaスクリプトに取り組んでいるんですが、
PerlでURLエンコードして書き出したcookieを
javaScriptのunescape()でデコードしても文字化けしてしまい、うまくデコードできません。

【1.Perl側でのURLエンコード】
  $value = 'テスト太郎';
  $value =~ s/([^0-9A-Za-z_])/"%" . unpack("H2",$1)/ge;

【2.吐き出された結果】
  %83e%83X%83g%91%be%98Y

【3.上をunescape()で囲んで得られた結果】
  ?e?X?g???Y

java側でのcookie読み込み抜き出しでバイトズレとかはないです。
unescape()する前の値をテスト表示とかさせて、その時点ではちゃんと3の内容が入っていました。
もうこれでかれこれ三日悩んでます。
諸先生方、アドバイスのほどをよろしくお願いいたします。
513nobodyさん:03/12/11 17:25 ID:???
>>512
JavaScriptのunescapeはブラウザ依存。escapeも同様。
ネスケならescapeでテスト太郎が%83e%83X%83g%91%be%98Yになるが、
IEのescapeでは%u30C6%u30B9%u30C8%u592A%u90CEになる。
だからunescapeもネスケなら正しく戻るがIEではダメ。
自前のunescapeを書けばいい。
514nobodyさん:03/12/11 17:26 ID:???
補足

>正しく戻るが
perlでエンコードしたもののことね
515nobodyさん:03/12/11 17:29 ID:???
http://www.zapthedingbat.com/security/ex01/vun1.htm
unescape()といえば最近こんなものが。

>512
JavascriptをJavaと略すのは止めて下さい。
516nobodyさん:03/12/11 17:48 ID:???
>JavascriptをJavaと略すのは止めて下さい。
(´゚c_,゚` ) プッ まだこんな自治房いたのか
517nobodyさん:03/12/11 17:52 ID:???
べつにあんたのためじゃないと思うが?
518nobodyさん:03/12/11 17:55 ID:T5LU5YVt
お年頃ってやつだろう
519nobodyさん:03/12/11 18:03 ID:???
>>509
そうも使える。
520nobodyさん:03/12/11 18:09 ID:???
>>517>>518
自演乙っ旦
521nobodyさん:03/12/11 18:18 ID:???
>>515
それ面白いな。2ch2を2chに偽装するとか、、、あまりパッとしたのが思いつかないけど。
522nobodyさん:03/12/11 18:27 ID:???
>>520
いや、オレオレ、オレだよ

>>521
ふつうにクレカの番号とか入れさせるんだろ
カード決済のアドとか偽装して
523nobodyさん:03/12/11 18:33 ID:???
おまいらPerlコーディングスレッドですよ。
524nobodyさん:03/12/11 18:48 ID:???
>>523
さっきペヤング喰ったんだが、プラケースに熱湯を入れても熱くないなと思ったら、
容器が二重になってたんだよ。








それだけ。
525nobodyさん:03/12/11 18:56 ID:???
>>513
ありがとうございました。
ためしにネスケでやったらうまくいきました。
原因はわかりましたが、解決方法がまだよく飲み込めてないので、これからまたじっくり腰すえてがんばります。
>>515
気をつけようと思っていたのですが、ついうっかりそう書いてしまいました。
申し訳ありませんでした。
>>524
私の場合は、ペヤングじゃないですが、フタが2重にはりついてたときがありました。
ちょうどフタを集めて懸賞に応募できる時期で、一個買わずに得したと思った記憶があります。
526nobodyさん:03/12/11 19:05 ID:???
>>515
興味津々で本当は行ってみたくてしょうがないのに
行く度胸が無いのと病気が恐いのとで行けないヤシが、
実際にソプで楽しんでる人間に対して「憎悪」を抱いてるんだろう・・・
まぁ要するに「嫉妬」でしかないわけだが、「オレは正しいことをしてるんだ」と正当化してるんだな。
527nobodyさん:03/12/11 19:12 ID:???
ああ、ああだこうだとルサンチマン語る奴が一番重症だな。
528nobodyさん:03/12/11 20:49 ID:???
ちょっと質問なんだけど

例えば変数
$test = "/aaaaa/bbbbb/ccccc/ddddd/eeeee/";

があるとしてここから最後の「eeeee/」これだけを取り除きたいんだけど何かいい方法ないですか?
取り除いたあとは
$test = "/aaaaa/bbbbb/ccccc/ddddd/";

こうなる予定なんだけど・・・

今のところ
@temp = split(/\//,$test);
$test =~ s/$temp[-2]\///g;

こんな感じのをやってみたんだけど、これだと途中に同じ文字列(eeeee/)が含まれてるとそれまで消えちまう
あくまで最後の文字列だけを取り除きたいんだけど
誰かご教授お願いします
529nobodyさん:03/12/11 20:53 ID:???
>528
$
530nobodyさん:03/12/11 20:54 ID:???
$test =~ s|\w+/$||;
531nobodyさん:03/12/11 20:56 ID:???
>>529
その回答で正解なのだが、>>528にはわからないと思う。でもガンガレ>>528
532528:03/12/11 21:06 ID:???
>>529-530
即レスサンクス
しかし531のいう通りさっぱわからん(´・ω・`)
そんなわけで適当に検索してきまつ
パターンマッチはどうも苦手だ(;´Д`)
533nobodyさん:03/12/11 23:50 ID:???
>>530より
$test =~ s|[^/]+/$||;
の方がいい。
534nobodyさん:03/12/12 07:41 ID:oOX796Ak
70文字で改行させるようなことってどうしたらいいんでしょう?
140バイトで改行にしたら化けまくり。どうも2倍と文字のバイト目で
改行されてるみたいです。
日本語と英語混じってるとどうやって判定していいやら・・・
535nobodyさん:03/12/12 08:02 ID:???
536nobodyさん:03/12/12 09:47 ID:???
537534:03/12/12 15:19 ID:???
なるほど。こんな方法があるんですね。
これを利用してみます。ありがとうございました。
538nobodyさん:03/12/12 17:32 ID:HHKbpfwW
時間取得の仕方が良くわかりません。
下のようにやってもうまくいかず(isweb,ローカルhttpd+activeperl共に)こまっています

# タイムゾーン設定
$ENV{'TZ'} = "JST-9";
# 時間を取得
local($min,$hour,$mday,$mon,$year,$wday) = (localtime($time))[1..6];
@w = ('Sun','Mon','Tue','Wed','Thu','Fri','Sat');
$date = sprintf("%04d/%02d/%02d(%s) %02d:%02d",
$year+1900,$mon+1,$mday,$w[$wday],$hour,$min);

で取得しても必ず1970/01/01(Thu) 09:00になってしまいます。
他に記述するべきことがあるのでしょうか?
539nobodyさん:03/12/12 17:43 ID:HHKbpfwW
ちなみに$dateで呼び出してます。
540nobodyさん:03/12/12 18:03 ID:???
一番大切な$time = time();を忘れました・・・ご迷惑をおかけしました。
541未承諾広告※ ◆aiY4htt2.2 :03/12/12 21:19 ID:???
>>540
もっと餅付いてみましょうね。

♪何事も慌てることはないはず。
542あぼーん:あぼーん
あぼーん
543あぼーん:あぼーん
あぼーん
544あぼーん:あぼーん
あぼーん
545あぼーん:あぼーん
あぼーん
546あぼーん:あぼーん
あぼーん
547nobodyさん:03/12/14 02:46 ID:SP0sm32T
パンチ5分の2がわかりません
誰か1から教えてくれる人はいませんか?
特に693の人は教えろ!!
548あぼーん:あぼーん
あぼーん
549nobodyさん:03/12/14 08:52 ID:???
$$alias = $HOGE{$alias};
return($$alias);
ってコードをみかけたんですが、
$$aliasって、どういう使い方なんでしょうか?
たんに「$$」ならプロセス番号ってことは、知ってるんですが。。。
550nobodyさん:03/12/14 10:09 ID:???
>>549
変数をデリファレンスする時に使う。

$a = 'test';
$s_ref = \$a;
print $$s_ref, "\n";
551あぼーん:あぼーん
あぼーん
552あぼーん:あぼーん
あぼーん
553nobodyさん:03/12/14 14:54 ID:???
よく3つの要素を比較して被っていたらエラールーチンへ
・・・みたいな分岐をしたいときがあるのですが、
例えば@listに3つの値が入っているとして

if (($list[0] eq $list[1]) || ($list[0] eq $list[2]) || ($list[1] eq $list[2])) {
&error("被ってまっせ");
}

これで動くとは思いますけが、もうちょっと楽にっていうかきれいに書けませんでしょうか?
554nobodyさん:03/12/14 15:36 ID:???
>>553
3つぐらいならそれが一番素直だと思う。ちなみにカッコは要らん。
if($list[0] eq $list[1] || $list[0] eq $list[2] || $list[1] eq $list[2]) { error() }

$list[0] eq $list[1] || $list[0] eq $list[2] || $list[1] eq $list[2]
and error();

無理にまとめず並べた方が分かりやすい場合もある。
$list[0] eq $list[1] and error();
$list[0] eq $list[2] and error();
$list[1] eq $list[2] and error();

数がもっと多いならこういうやり方も。
$y - $x + 1 == keys %{{ map { $list[$_], 1 } $x..$y }} or error();
555nobodyさん:03/12/14 16:11 ID:???
掲示板のCGIプログラム(perlで書いてある)を某サイトから頂戴して
して利用してるんですが、ブラウザがIEだとエンターキーを押すだけで
記入内容が送信されてしまい、記入途中での誤送信が頻発しています。
エンターキーの押下では送信できないようにする方法を教えてください。
556nobodyさん:03/12/14 16:13 ID:???

%check= ();
scalar(grep($check{$_}++, @list)) and &error();
557nobodyさん:03/12/14 16:32 ID:???
sub has_dup (\@) {
my %x;
my $arr = shift;
@x{@$arr} = ();
keys %x != @$arr;
}

if (has_dup(@list)) {
&error("被ってまっせ");
}
558nobodyさん:03/12/14 16:38 ID:???
>>555
擦れ違い。JavaScriptでも使ってみては?
559nobodyさん:03/12/14 16:39 ID:???
my %hash;
@hash{@list} = 0;
(scalar keys %hash < scalar @list) and &error();
560nobodyさん:03/12/14 16:44 ID:???
>>555
内容確認ページでも設けたら?
561nobodyさん:03/12/14 16:45 ID:???
>555
submitボタンを2つ用意する
Perlのコーディングの問題じゃないからヒントはここまで
CGIスレで聞いて
562553:03/12/14 16:47 ID:???
みなさん有難うございます。参考にさせていただきます。
563549:03/12/14 18:00 ID:???
>>550
なるほど、ありがとうございます。
564555:03/12/15 08:02 ID:???
どうも。
565nobodyさん:03/12/15 09:51 ID:???
ちょっと失礼します。
cgiとしてブラウザで表示するときに、クエリが何もない場合(ex.cgi)でアクセスしたら「あ」
クエリがiの場合(ex.cgi?i)でアクセスしたら「い」と表示をさせるスクリプトはどのように書くのがいいのでしょうか?

ヘッダ等略

print("あ");
if(${'QUERY_STRING'} eq 'i'){print("い");}
なんてするとクエリがiのときには「あい」ってなっちゃいますよね?
それで、現在は
if(${'QUERY_STRING'} eq ''){print("あ");}
elsif(${'QUERY_STRING'} eq 'i'){print("い");}
なんてやってるんですがこんなことしてる人いませんよね?
みなさんどうやってるんでしょうか?
よろしくお願いします。
566nobodyさん:03/12/15 09:55 ID:???
perlって大変なんだなあ。
567nobodyさん:03/12/15 09:56 ID:87xH8KUy

if(${'QUERY_STRING'} eq '')[{print("あ");}elsif{print("い");}]

これですむだろうが、カスが!!おまえは板違いなんだよ!死ね!!
もう、二度と来るなよ!!
568あぼーん:あぼーん
あぼーん
569あぼーん:あぼーん
あぼーん
570nobodyさん:03/12/15 10:00 ID:87xH8KUy
誰だか知らないけど、やめてください
パンチ5分の2と、キック2分の1のPerlの作り方を知って
いる人はいないでしょうか?いたらお願いします。
571あぼーん:あぼーん
あぼーん
572あぼーん:あぼーん
あぼーん
573nobodyさん:03/12/15 14:28 ID:???
$_ = "hoge<>foo<>bar<>hage<>hige<>wakige<>chinge";
このとき、1個目と7個目を繋げた文字列を$strに代入したいとき、
($temp1,$temp2) = (split(/<>/,$_))[0,6];
$str = $temp1.$temp2;
とすると可能なのですが、もっと簡単に、つまり
splitからの返り値にそれぞれの変数や配列を代入するのじゃなく
追加で代入?できませんでしょうか
574nobodyさん:03/12/15 14:43 ID:???
>>573
$str = join '', (split /<>/, $_)[0,6];
575nobodyさん:03/12/15 15:30 ID:???
>>574
レス有難うございます。だいぶすっきりしました。これでいかせてもらいます。
576あぼーん:あぼーん
あぼーん
577nobodyさん:03/12/15 20:18 ID:???
splitで、多次元配列に代入する場合はどうすればいいか教えてください
578nobodyさん:03/12/15 20:26 ID:???
1: 自分はこう言う事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。

最低でも1と3が無いと誰も答えられないよ。
579577:03/12/15 20:33 ID:???
すいません。

1.1行に複数個あり、それが複数行あるファイルデータを1つの配列に格納したい。
(ファイルデータの例)
1<>2<>3<>4<>5
11<>22<>33<>44<>55

こういうデータがあるとします。
それを、@data[0] = (1,2,3,4,5) @data[1] = (11,22,33,44,55)
になるようにしたいんです。

$i=0;
open(DATA, "data.txt");
@all = <DATA>;
foreach(@all){
@data{$i} = split(/<>/,$_);
$i++
}

とやってみたのですが、うまく配列に代入できません。。。
ご教授お願いします。
580577:03/12/15 20:35 ID:???
追加

@data{$i} = split(/<>/,$_);
これは、@data[{$i}],(@data[{$i}])等やってみたのですが、うまくいかなくて・・・
581577:03/12/15 20:47 ID:???
@data[0] = (1,2,3,4,5) @data[1] = (11,22,33,44,55)
すいません。よく考えたらこれもありえないですね。。。
$data[0][0] > 1
$data[0][1] > 2
$data[0][2] > 3
$data[0][3] > 4
$data[0][4] > 5
$data[1][0] > 11
$data[1][1] > 22
$data[1][2] > 33
$data[1][3] > 44
$data[1][4] > 55
こうでした。
何度もすいません。
582577:03/12/15 20:58 ID:???
いろいろ自分で試したところ

foreach(@data){
@temp = split(/<>/,$_);

for($s=0; $s<$#temp; $s++){
$stat[$i][$s] = $temp[$s];
}
}
こうすればできました。
これをスマートに(tempを介さないで)できないでしょうか?
いろいろ書き込みしてすいません。
583577:03/12/15 20:58 ID:???
$i=0;

foreach(@data){
@temp = split(/<>/,$_);

for($s=0; $s<$#temp; $s++){
$stat[$i][$s] = $temp[$s];
}
$i++;
}
こうでした。ほんますいません_| ̄|○
584nobodyさん:03/12/15 21:00 ID:???
>577
foreach(@all){
$data[$i] = [ split(/<>/,$_) ];
$i++
}

こうすれば$i不要。
foreach(@all){
push @data, [ split(/<>/,$_) ];
}
585nobodyさん:03/12/15 21:19 ID:???
>>565
if($ENV{'QUERY_STRING'} eq ''){print("あ");}
elsif($ENV{'QUERY_STRING'} eq 'i'){print("い");}
で、いいんじゃない?
# スタイルは、おいておいて。

>>577
http://www.kt.rim.or.jp/%7ekbk/perl5.005/perldsc.html#LISTS_OF_LISTS
586577:03/12/15 22:29 ID:???
英語なんか読めるかっつーの
587nobodyさん:03/12/15 22:50 ID:???
>>585のどこが英語サイトなんだ?
586は偽者か?
588577:03/12/15 23:05 ID:???
直訳したサイトきらい。
つーか意訳できんのならするなと
589nobodyさん:03/12/15 23:48 ID:???
>>588
技術文書を意訳する必要がどこにあるのかと。
おまえのごく個人的な好き嫌いを表明する必要もないぞ。
590577:03/12/16 00:16 ID:???
>技術文書を意訳する必要がどこにあるのかと。
ネタか?
591nobodyさん:03/12/16 00:24 ID:???
次の方どうぞ
592nobodyさん:03/12/16 00:32 ID:7IuKYSUw
1: パンチ5分の2と、キック2分の1をしたい
2: CGIにのせてみたが動かなかった
3: インターネットエラー
593あぼーん:あぼーん
あぼーん
594あぼーん:あぼーん
あぼーん
595あぼーん:あぼーん
あぼーん
596あぼーん:あぼーん
あぼーん
597あぼーん:あぼーん
あぼーん
598nobodyさん:03/12/17 00:52 ID:???
簡単なカウンタを作っている(コピペしてる)んですけど
#!/usr/local/bin/perl
require "gifcat.pl";
$cnt_file = "count\.dat";
open(CFILE,"$cnt_file");
$count = <CFILE>;
close(CFILE);
$count++;
open(CFILE,">$cnt_file");
print CFILE $count;
close(CFILE);
$fig = 6;
while (length($count) < $fig) { $count = '0' . $count; }
$length = length($count);
foreach (0 .. $length-1) {
$n = substr($count,$_,1);
push(@GIF, "$n\.gif");
}
print "Content-type: image/gif\n\n";
binmode(STDOUT);
print &gifcat'gifcat(@GIF);
exit;

これ、自サバ(Win)では動いたんですが、HPにUPして実行しても
「GIF89aZ」とわけのわからない文字が表示されます。なぜですか?
599nobodyさん:03/12/17 03:12 ID:???
>>598
どこのサーバを使ってるのかという情報が書かれてないけど、
たぶん広告の自動挿入が原因。
どうすればいいのかはサーバのサポートページを自分で調べて。
600nobodyさん:03/12/17 10:27 ID:???
AAACafeあたりだろ。超FAQだ。
601558:03/12/17 12:22 ID:???
>>599
広告が表示されないようにしたらちゃんと表示されました!
ありがとうございます。

>>600
xreaです。
602あぼーん:あぼーん
あぼーん
603あぼーん:あぼーん
あぼーん
604あぼーん:あぼーん
あぼーん
605nobodyさん:03/12/17 15:56 ID:j4zMUCkL
パンチ5分の2の動かし方がわかりません。誰か教えてください
606あぼーん:あぼーん
あぼーん
607あぼーん:あぼーん
あぼーん
608あぼーん:あぼーん
あぼーん
609nobodyさん:03/12/17 17:33 ID:???
おいおい、アク禁にされるぞ
610nobodyさん:03/12/17 20:56 ID:Kabr7znc
チャット用のアクセス制限CGIで、
最初にログインする時は、
print "[<a href=\"$ipkill?retime=$in{'retime'}&line=$in{'line'}&root=$in{'pas'}\" target=log>アクセス制限</a>]\n";
で問題なく入れるのですが
アクセス制限IPを追加してリロードした時に
print "<form action=\"$ipkill?retime=$in{'retime'}&line=$in{'line'}&$in{'pas'}\" method=$method>\n";
だとパスワードが渡せてないらしく、エラーが起こります。
同じファイルに値を渡すときはこれでは無理なんでしょうか?
分かりづらくてすいません。
611nobodyさん:03/12/18 00:02 ID:???
>>610
板違い。
Perlよりも先にHTMLの勉強をしてくれ。HTML リファレンスでググってみ。
そうすれば自然に自分のどこがまずかったのかわかるから。
612nobodyさん:03/12/18 00:11 ID:???
>>610
root=$in{'pas'} がなぜか root= が抜けてるから?
613nobodyさん:03/12/18 03:20 ID:???
>>612
それがどう影響するかわからんが、とりあえず君にも>>611
614nobodyさん:03/12/18 06:32 ID:???
615610:03/12/18 07:21 ID:2yKZUvIa
>>611
ありがとうございます。さっそく調べてきます。
616nobodyさん:03/12/18 12:23 ID:hkTBELl/
あるhtmlから、タグの内容を抽出したいのですが、
正規表現が間違っているようでうまくいきません。
正規表現にマッチした箇所をすべて配列に代入したいのですが。

$testの中身
<li>hoge1</li>
<li>hoge2</li>
<li>hoge3</li>
<li>hoge4</li>

perlのコード
@hoge = ($test = /<li>/ .. /<\/li>/);
だと@hogeに何も代入されないのです。
617nobodyさん:03/12/18 12:32 ID:???
=じゃなくて=~
618nobodyさん:03/12/18 12:33 ID:???
というか、
/<li>/ .. /<\/li>/
これ何だ?
619nobodyさん:03/12/18 13:00 ID:v15Wnfrq
>>617
それでもダメでした。

>>618
オライリーの本に載っていたのですが、
左辺と右辺の範囲をマッチを判定する範囲演算子だそうです。
620nobodyさん:03/12/18 13:49 ID:???
>>616
@hoge = $test =~ m|<li>(.*?)</li>|g;

範囲演算子の使い方を思いっきり勘違いしてるようだから
もう一度読んで理解し直した方がいいよ。
621nobodyさん:03/12/18 14:00 ID:???
/<li>/ .. /<\/li>/
やばい猫あ睨んでるように見えてきた・・・ってかなんやコレ
622nobodyさん:03/12/18 14:01 ID:???
猫が
623nobodyさん:03/12/18 15:04 ID:abcaX48o
>>620
助かりました。ありがとうございます。
こんなことで2日以上なやみました。
ラクダ本もいっかい読んで勉強しなおします。
624あぼーん:あぼーん
あぼーん
625nobodyさん:03/12/18 18:03 ID:???
FWPモジュールを使ってgetでファイルの内容を取得するプログラムを作ったけど、getの内容を$でやったらアクセスが出来ませんでした。
get($abc);
$abcがURLです。もしかして変数だとアクセス出来ないのかな?
626あぼーん:あぼーん
あぼーん
627あぼーん:あぼーん
あぼーん
628あぼーん:あぼーん
あぼーん
629あぼーん:あぼーん
あぼーん
630nobodyさん:03/12/18 18:08 ID:???
もうすぐ年が明けるね
631あぼーん:あぼーん
あぼーん
632nobodyさん:03/12/18 18:12 ID:Elgjx4Ia
来年の目標
1、ここの常連をころそう
2、新しく来たやさしい人にパンチ5分の2を学ぼう

さて、来年もよろしくな!!
633nobodyさん:03/12/18 18:31 ID:???
成長できなかったんだね
634nobodyさん:03/12/18 18:45 ID:???
>625
LWPか?
変数でもできるが。
こういう時の基本は、まずちゃんと変数の中身が入っているかprintしてみる事だ。
635nobodyさん:03/12/18 18:57 ID:???
>>634
確認は出来ました。変数なしの絶対パスだとアクセス出来るけど、同じ内容を変数にするとアクセスが出来なくてprintしてもURLが確認出来ません。
変数でもアクセスが出来る事がわかっただけでも助かりました。もう一度試してみます。
636nobodyさん:03/12/18 19:18 ID:???
ニュー速からきました。
殺人予告現場はここですか?
637nobodyさん:03/12/18 19:35 ID:???
>635
>printしてもURLが確認出来ません。
変数の中身がないって事?
それじゃあ取得できるわけないじゃない。
その前後のソースを見せてくれなきゃ。
638nobodyさん:03/12/18 19:42 ID:W179xBgA
>>636
板どころかスレまで違うし
639nobodyさん:03/12/18 19:52 ID:???
and と && ってどう違うのでしょうか?

たとえば

$A < 3 and $B = 5;

ではエラーが出ないのに

$A < 3 && $B = 5;

だとエラーが出るとか、

$A < 3 && ($A = 5);

括弧で括ると大丈夫だったり

$A < 3 && print "a";

こういうのは問題なかったりとか
もうワケワカメなのですが、この辺の解説をしてもらえないでしょうか…?
640nobodyさん:03/12/18 19:56 ID:???
結合順位が違う
641nobodyさん:03/12/18 20:00 ID:???
>639
優先度が違う。
>639の例なら「<」「&&」「=」「and」の順に優先度が高い。
つまり、()でくくると
$A < 3 and $B = 5;

(($A < 3) and ($B = 5));
と判断されるが
$A < 3 && $B = 5;

((($A < 3) && $B) = 5);
となってしまう為、こっちではエラーになる。
だから、明示的に()でくくればエラーが出なくなる。
詳しくは「Perl 演算子 優先順位」とかの単語で検索しる。
642nobodyさん:03/12/18 20:00 ID:???
$B = 5; か?
$B == 5; じゃないの?
643nobodyさん:03/12/18 20:06 ID:???
>>642
最近では&&とともに使うと$B==5と同じものだとみなされる。
644nobodyさん:03/12/18 20:07 ID:???
比較演算子はand, &&どちらよりも優先度が高いので
そもそも問題にされることがありえないのでは。
645nobodyさん:03/12/18 20:23 ID:???
>>643
どういうケースで = が == と見做されるのか教えて下さい。
Perl 5.8.2 では以下のようになりました。

my($A, $B) = (1, 3);
print $A == 1 && ($B = 5) ? "true\n" : "false\n"; # true
print $A == 1 && $B = 5 ? "true\n" : "false\n"; # compilation errors
646nobodyさん:03/12/18 20:31 ID:???
>643が真実だとしたら逆に不便に感じるのは俺だけ?
647nobodyさん:03/12/18 20:41 ID:???
>>643
Perl6からそんな風になるのか?
648nobodyさん:03/12/18 20:53 ID:???
>>641
なるほど、優先順位というものがあったのですね。
ありがdございました
649nobodyさん:03/12/19 01:07 ID:A5qOMnWK
某スレから誘導されて参りますた。

海外の掲示板スクリプトで、
投稿した内容が文字化けする、って場合には
どんな風にスクリプトを修正すればいいんでしょうか?
たぶんjcode.pl を使うと思うんでつが、イマイチわからなのでつ
650nobodyさん:03/12/19 04:04 ID:???
>>649
【 スクリプト改造工房 PART 7 】
http://pc2.2ch.net/test/read.cgi/php/1063780103/375
が君と同じ質問じゃないかな?
彼(女)は解決したみたいだからそれを参考にしる
651wt-l3swcx01s.skyweb.jp-c.ne.jp:03/12/19 07:56 ID:4xnhTPUj
あのさぁ、ケータイから見てるからでかいAA貼るのやめてくれる?
652nobodyさん:03/12/19 09:13 ID:???
print "Content-type: text/html\n\n";

print "<html>\n";
print "<head><title>test</title></head>\n";
print "<body>\n";

print "<a href=\"test.wrl\">ここ</a>を";
print "クリックするとVRML画像が見れます。\n";

print "</body>";
print "</html>";

_END_

これをやると画像ではなくVRMLコードが出てきてしまいます・・・。
VRMLコード自体は正確でブラウザにそのままぶち込むとみれます。
なぜなんでしょう;;
653nobodyさん:03/12/19 09:26 ID:???
>>652
それがperlの質問ですか?
654nobodyさん:03/12/19 13:24 ID:YamKZvpp
バイトをキロバイトに簡単に変換する方法はありますか?
1,626B => 1.58KB
のように。
655nobodyさん:03/12/19 13:27 ID:???
>>654
おまえもたいがいにせいよ。
656nobodyさん:03/12/19 13:34 ID:???
いらっしゃーい、 Perlのコーディング で困ってる人のスレです。
657nobodyさん:03/12/19 14:51 ID:???
>>655
お知りあい?
てか「たいがいにせいよ」って言葉久しぶりに聞いたんだが…ひょっとして同郷か?
658nobodyさん:03/12/19 14:57 ID:???
>>654
1024で割れよ。割ったか?割ったら回線切ってもう二度とここへは来るな。
ていうか今すぐ吊ってこいやヴォケ
659nobodyさん:03/12/19 15:39 ID:EwncRd+a
>>45

2行目に
open (IO,"+<$logfile");
5行目に
while (<IO>){
 if ($_ =~ /<>$ip/){
  @y2=split(/<>/,$_);
  if ($y2[6] ne $ip){
   push(@log,$_);
  }else{
   $y2[0] = 'All Clear (^-^)v';
   $y2[5] = 'All Clear (^-^)v';
   push(@log,"$y2[0]<>$y2[1]<>$y2[2]<>$y2[3]<>$y2[4]<>$y2[5]<>$y2[6]<>$y2[7]<>\n");
  }
 }else{
  push(@log,$_);
 }
}
を入れると直ります。
660あぼーん:あぼーん
あぼーん
661あぼーん:あぼーん
あぼーん
662nobodyさん:03/12/19 15:44 ID:???
ちょっと思ったんだが、荒らしタン又吉コラに使えs(ry
663あぼーん:あぼーん
あぼーん
664あぼーん:あぼーん
あぼーん
665あぼーん:あぼーん
あぼーん
666nobodyさん:03/12/19 16:18 ID:???
>>652
perlの話じゃなくて鯖の設定の話やね。
VRML MIME その鯖の名前でググってみ。
667649:03/12/20 04:21 ID:rln982gr
>>650
なるほろ、参考になりました。
ただ、jcode.pl は使わないんですかね?
リンク先の方法だと、一時しのぎ的な感じがするんですが、
そうでもないんでしょうか?
668あぼーん:あぼーん
あぼーん
669nobodyさん:03/12/20 13:48 ID:???
(:.´.:ж:.`.:)

                  ・・・。
670nobodyさん:03/12/20 20:02 ID:???
sub test {
 print "test";
}

&test; と test(); どっちで呼び出すのがいいんでしょう?
671nobodyさん:03/12/20 20:08 ID:???
test;
672nobodyさん:03/12/20 21:44 ID:???
&test();じゃ駄目なのか?
673nobodyさん:03/12/20 21:53 ID:???
>>670
test(); # Perl5 での「普通」の呼び方
&test(); # プロトタイプ宣言が無効になる
&test; # @_ を引き継ぐ
test; # 先に宣言されているならこれでも可

http://perldoc.com/perl5.8.0/pod/perlsub.html
http://www.kt.rim.or.jp/%7ekbk/perl5.005/perlsub.html
674nobodyさん:03/12/20 22:11 ID:???
>>673
なるほど。。では、特に不都合がない場合は『「普通」の呼び方』の
test(); が無難ですかね。
675nobodyさん:03/12/20 23:04 ID:nvaGG63Y
$table1begin$
あいうえお<tab>かきくけこ<tab>さしすせそ
まみむ
め<tab>がぎぐ<tab>さしす
まめ<tab>がぐ<tab>しす
$tableend$

と言う文字列
(上記例は、3行3列の表です。セルの中に改行もありえます。
$はそのままダラー、<tab>はタブ(\t)の意味です)
があるとき、これをhtmlのテーブルタグに変換したいのですが、
どうすればいいのでしょうか?
なお、行数や列数は可変ですが、
colspanやrowspanはあり得ません。

自分でいろいろやってみたのですが、
まめ<tab>がぐ<tab>しす

<tr><td>がぐ</td><td>しす</td></tr>
とするくらいならできるものの、
セルの中に改行がある場合の、
やりかたが思いつきません。
(逆に、これだけ分かれば、万事解決なのですが。。。)

どなたか、教えていただければ幸いです。
676nobodyさん:03/12/20 23:17 ID:???
>675
行の区切りは改行で固定じゃないの?
だとしたら、>675の例では

<tab>さしすせそ
まみむ
め<tab>

↑この部分が一つの要素なのかどうかの判断はどうやって行なうの?
保存形式から考え直す事を勧める
677nobodyさん:03/12/20 23:19 ID:???
>>675
>>676 に同意だが敢えて「セルの中に改行もある」という仕様通り組むなら

my $table = "あいうえお\tかきくけこ\tさしすせそ\nまみむ\nめ\tがぎぐ\tさしすまめ\tがぐ\tしす";
my @cell = split /\t/, $table;
while (my @line = splice @cell, 0, 3) {
  print "<tr><td>$line[0]</td><td>$line[1]</td><td>$line[2]</td></tr>\n";
}
678nobodyさん:03/12/21 00:30 ID:???
>>675
どうせHTMLで使う分なら最初から要素内の改行を<br>にしておいていいんじゃないのかと思ったり。

それではいかんのかな?

679nobodyさん:03/12/21 00:40 ID:???
1234005600058090

1234兆56億5万8090

というようなことをやりたいんですが、
どうやるのがうまいんでしょうか?
680nobodyさん:03/12/21 00:55 ID:???
>>679
10進数がわからないの?
681nobodyさん:03/12/21 00:55 ID:???
$money = 1234005600058090;
$money =~ s/1234005600058090/1234兆56億5万8090/;
682nobodyさん:03/12/21 01:06 ID:???
>>680
いや、、どうもスマートな方法が分からなくて、、
683nobodyさん:03/12/21 01:06 ID:???
効率を考えると

$money == 1234005600058090 and $money= '1234兆56億5万8090';

684nobodyさん:03/12/21 01:08 ID:???
気は確かか680
685679:03/12/21 01:17 ID:???
あ、このスレの>>443をちょっと変えてみたらうまくできました。
686nobodyさん:03/12/21 01:19 ID:???
>>679
クソコードだ。もってけ。

my $num = "1234005600058090";
print &num($num);

sub num{
my $num = shift;
$num =~ s/^0+//;
my @num = ('万','億','兆','京');
my $i = 0;
while($num =~ /[0-9]{5}/){
$num =~ s/([0-9]+)([0-9]{4})($|[^0-9])/$1$num[$i]$2$3/;
$i++;
}
$num =~ s/(^|[^0-9]+)0+([^0])/$1$2/g;
return $num;
}
687nobodyさん:03/12/21 01:29 ID:???
こんなのは?Perlメモ「数字を 3桁ごとにコンマで区切る」の応用

$num=1234005600058090;

@kurai=qw(万 億 兆 京);
$keta=shift @kurai;

while($num =~ s/^([-+]?\d+)(\d{4})/$1$keta$2/){
    $keta=shift @kurai;
}
$num =~ s/([^\d])0+/$1/g;

print $num;
688679:03/12/21 01:32 ID:???
>>686-687
ありがとうございます。
参考にさせてもらいますー
689nobodyさん:03/12/21 02:05 ID:???
便乗質問させて頂きます。

「一 十 百 千 万 億 兆 京 垓 禾弟 穰 溝 澗 正 載 極
 恒河沙 阿僧祇 那由他 不可思議 無量大数」
のうち、万までは10倍づつ、万以上恒河沙までは万進、恒河沙以上
無量大数までは万万進となるのですが、どうすればいいでしょうか?
690nobodyさん:03/12/21 03:12 ID:???
>どうすればいいでしょうか?

まず、なにをしたいのかを書かないとね。
691あぼーん:あぼーん
あぼーん
692あぼーん:あぼーん
あぼーん
693あぼーん:あぼーん
あぼーん
694あぼーん:あぼーん
あぼーん
695あぼーん:あぼーん
あぼーん
696あぼーん:あぼーん
あぼーん
697あぼーん:あぼーん
あぼーん
698nobodyさん:03/12/21 12:35 ID:BzT608LT
本当に初歩的な質問ですみません。1.htmlの以下のような
フォームで、2.cgiにAの場合えーBの場合びーと出力させた
い場合、2.cgiにはどんな記述をしたら良いでしょうか?
ネタじゃありません、よろしくお願いします。Perlへのパスは#!/usr/bin/perlです。

<FORM action="2.cgi">
<SELECT name="test">
<OPTION value="a">A
<OPTION value="b">B
</SELECT>
</FORM>
699nobodyさん:03/12/21 12:58 ID:???
>>698
「初歩的な」というより「基本的な」のような気がします。
>>5 あたりを読んで理解してみましたか?
700nobodyさん:03/12/21 14:28 ID:???
>>509
久々覗いたので激悪阻レスで申し訳ないけど
myのスコープはパッケージじゃないっしょ。
{}で決まるレキシカルなものじゃない?

package P1;
my $test = "P1";

package P2;
print $test, "\n";#P1
701nobodyさん:03/12/21 14:30 ID:???
package P1;
my $test = "P1";
{
my $test2 = "P1";
}
package P2;
print $test, "\n";#P1
print $test2, "\n";#なし夫
702nobodyさん:03/12/21 16:03 ID:P177ftmV
ファイルを1行ずつ読み取ってデータベースに追加する処理で、
1行読み取るごとにデータベースに追加するのでは、遅すぎるので
1000行ずつ処理すれば早い聞いたのですが、1000行ずつ
処理するには、どんな方法があるのでしょうか。
703nobodyさん:03/12/21 16:16 ID:???
>>702
そのまんま配列あたりに
1000行読み取って→DB更新
を繰り返せばいいんじゃない?
704nobodyさん:03/12/21 16:36 ID:???
>702
while(<>) 文に対してPerl インタプリタは別に1行づつ読み取って
いるわけではない。バッファに溜め込んで、1行づつ処理に渡しているだけ。
データベースの操作に時間を取られているだけだと思われ。
705nobodyさん:03/12/21 18:00 ID:FyNOPbG5
Perlが計算できる数の最大値と最小値(小数第何位)を知りたいのですが、
(以前にこのスレで質問したところ、Perlコンパイル時の設定によって異なってくると聞きましたので)
これらを知るためにはどうすればいいのでしょうか?

Perlのスクリプトを組んで、それらを取得することはできるのでしょうか?

どなたかお答え頂ければ幸いです。
706675:03/12/21 18:18 ID:???
>>676-677さん、ありがとうございます。おっしゃる通りですね。

カラムに改行なしの場合、
>>677さんのを試してうまくいきました。

で、Excelの表をコピーしてテキストエディタにペーストして試してみたところ、
改行があるときは、そのセルはダブルクオーテーションでくくられるようです。
(以下、その例。2行3列)

aaaiiiuuueeeooo
kkkjjj"hh
h"ggggg

もしこの形式対応させるとしたら、どうすればいいのでしょう。

Perlメモの「値に改行コードを含む CSV形式を扱う」
http://www.din.or.jp/~ohzaki/perl.htm#CSVwithCRLF

が参考になるかなとも思ったのですが、
そこに載ってる説明文はわかるものの、コードのほうを見ても、ちんぷんかんぷんでして・・・

どなたかお助けねがえれば幸いです。
707675:03/12/21 18:20 ID:???
>>706(自己レス)
すみません、タブコードをそのまま入れてしまいました。&一部記述ミスがありました。

誤:
(以下、その例。2行3列)
aaaiiiuuueeeooo
kkkjjj"hh
h"ggggg

正:
(以下、その例。2行5列)
aaa   iii   uuu   eee   ooo
kkk   jjj   "hh
h"ggg   gg

です。すみません。
708nobodyさん:03/12/21 18:51 ID:???
>>705
数値の絶対的な(大きさ|小ささ)はあんまり気にしなくていいけど、
有効桁数は15桁だかその辺。コンパイル時の設定は perl -V で分かる。

>>706
何が分からんのか分からん。
演算子: http://perldoc.com/perl5.8.0/pod/perlop.html
関数: http://perldoc.com/perl5.8.0/pod/perlfunc.html
正規表現: http://perldoc.com/perl5.8.0/pod/perlre.html
709705:03/12/21 19:59 ID:???
>>708
ありがとうございます。「 perl -V 」知らなかった・・・
710702:03/12/21 20:16 ID:P177ftmV
>>703
すみません。1000行そのまま配列にするにはどうしたらいいんでしょうか

>>704
確かにDB分を除いてprintだけさせるとあっという間に処理が終わるので
DBに時間がとられているようです。たぶん連続してDBにinsertすると
DB分の処理時間も短くなるので1000行分まとめて処理したほうがいいと
いうことだと思うのですが。
711nobodyさん:03/12/21 20:18 ID:???
>>710
1行ずつpushしてはどうか
712nobodyさん:03/12/21 21:17 ID:???
質問です。
@file = <IN>;
とする代わりにPerlメモを参考に
read(IN,$buf,-s IN);
@file=$buf=~/[^\x0D\x0A]*\x0D?\x0A?/g;
としてみました。
狙いはreadによる読み込み速度のアップと
メモリ消費低減です。
狙い通りになっていますか?それとも全く違いはありませんか?
もしくはもっと有効なやり方がありますか?
713nobodyさん:03/12/21 21:19 ID:???
@file= split(/\n/, $buf);
714nobodyさん:03/12/21 21:25 ID:???
>>713
最後が空行だった場合困りません?
715704:03/12/21 21:59 ID:???
>>710
> たぶん連続してDBにinsertすると
> DB分の処理時間も短くなるので1000行分まとめて処理したほうがいいと
> いうことだと思うのですが。
 そんなことやったところで、何も変わらん。
 だいたい、何千行(レコード)ものデータをPerlを使って1行づつテー
ブルに突っ込もうという発想自体がDQNだと思われ。
 DB に何を使っているか知らないが、MS SQL Server やオラクルなら、
大量のレコードを一気にテーブルに挿入する「バルクインサート」という
機能があったと思うが。
 ここまでくると、Perlの話題ではなくなるから、あとはそのDBの専門の
スレにでも逝って聞いてちょ。
716nobodyさん:03/12/21 22:16 ID:???
@file = <IN>;
じゃなくてっていってるのに
>>713
っていうのは意味不明だw

>>712
ベンチマークとってみれば?
正規表現使ってる時点で速度落ちちゃうような気もするけど。
まぁ
@file = <IN>;
のコードが内部で同じことをやってるかもしれないし、どうなんだろう
717712:03/12/21 22:48 ID:???
>>716
すいません、ベンチの取り方わからなかったもんで…
@file = <IN>;よりはpush@file,$_ while<IN>;の方がよかった気もしますが
718nobodyさん:03/12/21 22:58 ID:???
>>717
http://perldoc.com/perl5.8.0/lib/Benchmark.html

処理速度とメモリ消費量はトレードオフ。配列に丸々突っ込んで
OK な程度のファイルサイズなら、小細工するだけ無駄。
719712:03/12/22 03:45 ID:???
>>718
まぁperlで扱う時点で長大なファイルではありえないわけで、そうなると
perlで小細工すること自体全て無駄という結論に達してしまうわけですが…

でも例え体感できなくても、数値で比較した場合に2倍も3倍も速度に差が
出るようなら、効率のいいやり方で自己満足に浸りたかったわけです

とりあえず今度時間があるときにでもベンチの取り方を覚えて試してみます
720nobodyさん:03/12/22 04:02 ID:???
なぜありえないと思うのかは知らんが、自己満足で好きな結論に達してくれ
721nobodyさん:03/12/22 04:33 ID:???
遅いからだろ・・
722nobodyさん:03/12/22 08:38 ID:???
>>702
RDBMSによると思うが,バインド変数使うだけでも劇的に違うと思う
723nobodyさん:03/12/22 16:34 ID:Vo1mSSkN
perlってCみたいにコンパイルする事って出来ないんですか?
そうすれば実行速度も速くなると思うのですけど
724nobodyさん:03/12/22 17:06 ID:???
>>723
だったら最初からCで書けやフォルァ
725nobodyさん:03/12/22 17:07 ID:???
一応 perlcc てのもあるが、実行速度・実用性の両面で結構微妙

Cみたいな感じで完全に静的なコンパイラにすると
eval あたりが問題になると予想される

parrot については parrot スレを見れ
726723:03/12/22 17:43 ID:Vo1mSSkN
>>725
サンクスです

>>724
なぜにフォルア?
727nobodyさん:03/12/23 10:09 ID:iQ6yBH41
多次元配列の指定した行番号の要素数、もしくは最後の添字?を知るにはどうすれば良いのでしょう?
例えば
$hoge[2][123] = "a";
とあれば
$#hoge[2]   #これじゃ駄目ですが。。

123
が返ってきて欲しいのです。
お願いします。
728nobodyさん:03/12/23 10:17 ID:???
>>727
$hoge[2][61] = 'foo';
$hoge[2][123] = 'bar';

print @{$hoge[2]}, "\n";
print ${$hoge[2]}[123], "\n";
print $#{$hoge[2]};
729nobodyさん:03/12/23 10:28 ID:???
>>728
おぉ〜できました!
どうもありがとうございました!
730nobodyさん:03/12/23 10:41 ID:???
Perlってプログラム初心者にはお勧め出来ない言語だなと
Perl−>C/C++と勉強してみた初心者は感じましたとさ
731nobodyさん:03/12/23 11:06 ID:???
>730
同じ順序で学んだ俺は、初心者にはPerlの方がわかりやすいと思ったね。
型とかポインタとか気にせずに作れるし。
変数や配列の頭にマーク($や@)が付いてて、見た目にもわかりやすい。
全くの初心者には、Perlもいいと思うね。

その後、他の言語に移行するのは苦労するけど。
732nobodyさん:03/12/23 11:20 ID:???
>>731
他言語へ移行も大変かもしれないけど,Perlの習得そのものも他言語知識がないと難しくない?
OOPの要素とか関数型の要素まで入ってたりするし.
Cから入った人ならPerlの多次元配列の実現方法も容易に理解できるだろうし
>>728
の質問なんかは自己解決できちゃうと思う
733nobodyさん:03/12/23 12:43 ID:???
>732
731だけど、俺はそう感じなかった。
というか、初心者の頃はそんな込み入った事なんて考えもしなかったし。
ちなみに俺は他言語知識なしでPerl覚えたよ。

Perlが初心者向きと言える理由の一つにはサンプルソースの多さもあるよ。
配布BBSなんかいっぱいあるし。
実際に自分が使っているBBSのソースを見る事もできるから、理解も早くなる。
734nobodyさん:03/12/23 15:37 ID:???
動けばいい程度のものを作るにはperlは楽かもな
735nobodyさん:03/12/23 16:11 ID:???
>その後、他の言語に移行するのは苦労するけど。
正直、これに尽きる。ホント大変
736nobodyさん:03/12/24 00:39 ID:???
>>735
俺、PerlでOOP覚えたんだけど、そのままJavaに移行できると思う?
すっげー心配。
Javaの初心者本とか読んで意味がわかるのは確かなんだけど。
737nobodyさん:03/12/24 01:00 ID:???
>>736
聞く前にやれば?Javaやるのに金はかからんわけだし。
738nobodyさん:03/12/24 01:02 ID:???
>>736みたいな引け腰では無理だと思うな
739736:03/12/24 01:20 ID:???
>>737
>>738
どうせただでリスクがないんなら実際やってみるべきだわな。
ありがと。少し目が覚めた。

……と、今Javaをする必要性がないことに気付いた。
CGIと、ローカルでのちょこちょこだけならPerlで充分用が足せるんだよな。
740nobodyさん:03/12/24 02:40 ID:???
雑談は他で
741nobodyさん:03/12/24 12:46 ID:???
my $obj = foo();

if (! $obj->can('bar')) {
$obj->bar = sub {
....;
};
}

みたいなことをやりたいんだけど、どのモジュールを使えばいいのか分かりません。
CPAN にこのようなことを実現するライブラリはありますか?

742nobodyさん:03/12/24 13:51 ID:???
>>741
use strict;
use CGI;

my $obj = new CGI;

if (! $obj->can('bar')) {
no strict 'refs';
*{ref($obj) . '::bar'} = sub {
my $self = shift;
print "[", $self->version, "]\n";
};
}

$obj->bar;
__END__

ライブラリは知りません。
743nobodyさん:03/12/24 14:00 ID:???
>>741
AUTOLOAD 書くのはダメ?
744nobodyさん:03/12/24 14:07 ID:???
回答ありがとうございます。

>>742
その方法は思い付いたんですけど、それだと同じクラスの他のインスタンスにも
影響与えてしまいませんかね?

>>743
CPAN ライブラリなんで、改変できないのれす。
745nobodyさん:03/12/24 15:05 ID:XZhPkoAv
SENDMAIL
GA
TSUKAERU
SABA
TTE
ARIMASUKA?
MOCHIRON
FREE
DE
ONAGAISHIMASU

なんだかしらないけど日本語入力ができません
746nobodyさん:03/12/24 15:06 ID:???
できとるやん
747nobodyさん:03/12/24 15:07 ID:XZhPkoAv
TEIKI
AGE
748nobodyさん:03/12/24 15:09 ID:???
自演乙
749nobodyさん:03/12/24 15:16 ID:???
>>745
スレ違い、板違い
レンタルサーバ板へでも逝ってください
750nobodyさん:03/12/24 15:16 ID:???
>>744
他のインスタンスに影響与えない方法ですか。
Perlはシンボルテーブルを見てメソッドを探すから、
普通のメソッドコールの書き方では無理なんじゃないかな。

if (! $obj->{'bar'}) {
$obj->{'bar'} = sub {
my $self = shift;
print "[", $self->version, "]\n";
};
}
$obj->{'bar'}->($obj);
751nobodyさん:03/12/24 15:20 ID:???
>>744
同じクラスの他のインスタンスにも影響与えるって
どういうこと?
752nobodyさん:03/12/24 15:45 ID:???
>他のインスタンスにも影響
1つのスクリプトで複数のインスタンスを使う場合に、
あるインスタンスが追加したメソッドが
他のインスタンスからでも使える。
のは困るって事なんじゃないかな?
753nobodyさん:03/12/24 15:59 ID:???
>>752
それが困るってことは
同クラスの同名メソッドに
インスタンスの属性値かなんかで多態勢を持たせようとしてる
ってことなのかなぁ

754nobodyさん:03/12/24 16:00 ID:???
>>753
多態勢じゃなくて多態性
755nobodyさん:03/12/24 19:20 ID:???
クリスマスにソースとにらめっこするという、かわいそうなヤツなんですが、
サンタさん教えて下さい。

@sampleの中にはいくつかのurlが入ってまして、それを
1)$sampleに","で連結したものを入れ、
2)$sample2にはアンカーリンクで1から@sample分の連番にリンクを貼ったものを連結して入れたい
んですが、1だけをクリアするには
$sample = join ",",@sample;
だけでおkなんですが、
2も同時にするために私の頭では↓コレくらいしか思いつきませんでした。
my ($j,$i,$sample) = ("",0,"");
foreach (@sample) {
 $sample .= $j.$_; $j ||= ",";
 $sample2 .= "<a href=\"$_\">[".++$i."]</a>";
}
もっといい方法ないでしょうか?
ってかコレくらいが妥当でしょうか?
756nobodyさん:03/12/24 19:49 ID:???
>>744
改変できないクラスの名前空間を荒らすのはお行儀が悪いな。
何か目的に対して間違った手段を模索しているように思える。

>>755
二回に分けられない理由は何?
my $sample = join ',', @sample;
my $sample2;
for (my $i = 0; $i < @sample; $i++) { $sample2 .= qq|<a href="$_">[$i]</a>| }
757744:03/12/24 19:56 ID:???
>>756
元のモジュールがお行儀悪いので、add-hook 的に解決しようと思ったんですが…。
素直にラッパークラス作ります。
758755:03/12/24 20:04 ID:???
>>756
正直その通りだと思いました。2回に分けます。
759暇人:03/12/24 22:53 ID:m+ofAFON
my ($sample1, $sample2);
foreach my $i(0..$#sample) {
$sample1 .= qq|$sample[ $i ],|;
$sample2 .= qq|<a href="$sample[ $i ]">[$i]</a>|;
}
chop $sample1;
760nobodyさん:03/12/25 04:47 ID:???
hoge.cgi?test

等の場合、$ARGV[0]で「test」が取れるのは分かったのですが
2chみたいに

hoge.cgi/test

みたいに/で区切ってる場合はどうやって取得すればよいのですか?
お願いします。
761nobodyさん:03/12/25 05:27 ID:???
$ARGV[0]
( ゚д゚)ポカーン

お前、コマンドラインとブラウザの区別くらいつけようや
762nobodyさん:03/12/25 06:02 ID:???
あ、そうでしたか。
無知で申し訳ないです。

で、どうすればいいですか?
763nobodyさん:03/12/25 06:40 ID:???
REQUEST_URI
764nobodyさん:03/12/25 08:46 ID:???
PATH_INFO
765nobodyさん:03/12/25 09:31 ID:???
my ($dummy,$Bbs,$Key,$Opt) = split(/\//, $ENV{'PATH_INFO'});
if(-e "../$Bbs/dat/$Key.dat"){&mainlog($Ver,$Bbs,$Key,$Opt,$Url);}
elsif(-e "../$Bbs/pool/$Key.dat"){&error(100,$Ver,$Bbs,$Key);}
elsif(-e "../$Bbs/kako/$Key.html"){&error(101,$Ver,$Bbs,$Key);}
else{&error(102,$Ver,$Bbs,$Key);}
766sage:03/12/25 09:54 ID:???
@sage2 = <SAGE>;
push (@sage, @sage2);



push (@sage, <SAGE>);

このように置き換えて、ファイルをpushしても
とくに問題はないでしょうか。
767nobodyさん:03/12/25 10:45 ID:???
@sage=<SAGE>;
768nobodyさん:03/12/25 11:24 ID:???
>>760-761
hoge.cgi?foo+bar+baz で @ARGV = qw(foo bar baz); となるのは
保証された動作 (CGI プログラムに対する引数渡し) 。

>>766
それは「質問」じゃなくて「確認」だね。確認なら自分で試してくれ。
769nobodyさん:03/12/25 13:46 ID:???
問題があるとPCが爆発します。
770LISHEA:03/12/25 17:21 ID:BgAdFMzy
はじめまて。質問です。
web上に公開されている為替情報を取得して、その数値を使ってシステムを作るということをやっているのですが、どうやったらweb上の情報をむき出すことができますか??
かなりの初心者なので行き詰っています。
webの取得はLWP;;Simpleのジュールを使ってでききるそうなのですが、実行しても何も変化がありません。
どうすればよいか、アドバイスお願いします。
771nobodyさん:03/12/25 17:29 ID:???
>>770
むき出しについてはこの辺が参考になるかも
ttp://www.muichaimashita.com/
772nobodyさん:03/12/25 17:30 ID:???
>>770
まず、どのようにコーディングしてダメだったのかを示すべきじゃないかと思う
773nobodyさん:03/12/25 21:32 ID:0bAeHLiJ
初めまして。くじ引きをしたいです。
A
B
C

Z
みたいなせいぜい20行くらいの元ネタファイルからランダムに1行引いて
引いた後はその行を元ネタファイルから削除したいなあと思います
open (LF,$lf_file);
flock (LF,2) if $FLK;
@lf_list = <LF>;
$lf_count = @lf_list;
srand;
$hit_count = int (rand($lf_count));
$disp_list = @lf_list[$hit_count];
chop $disp_list;
print "$disp_list\n";
unshift(@lf_list,$disp_list);
seek (LF,0,0);
truncate (LF,0);
print LF @lf_list;
close (LF);
flock (LF,8) if $FLK;
ランダムに引くのは何とか出来ましたが、引いた行だけを元ネタファイルから
削除が出来ません。数日悩んでます助けてください。
774nobodyさん:03/12/25 21:41 ID:???
$lf_list[$hit_count] = '';
775nobodyさん:03/12/25 21:49 ID:???
>773
splice
776nobodyさん:03/12/25 21:51 ID:???
>774
すみませんいろんな所に代入して試してみましたが
使い方がわかりません。つなぎ合わせのコーディングなので
呆れているとは思いますがもう少しヒントいただけませんか?
777nobodyさん:03/12/25 22:03 ID:???
777get, zuzaa
778nobodyさん:03/12/25 22:04 ID:???
>>776
7行目($disp_list = $lf_list[$hit_count];だと思うが)の下に
$lf_list[$hit_count] = '';で削除できるんじゃ?
でprintで格納(unshiftがよくわからんけど)
779nobodyさん:03/12/25 22:13 ID:???
>>776
君のつなぎ合わせたコードがやっている事を、この辺で
調べてみてはどうか。
http://www.rfs.jp/sitebuilder/perl/05/
780nobodyさん:03/12/25 23:05 ID:hr2zYcYz
クラスの関数が返す値を元に、多次元配列に格納された
クラスをsortするにはどうすれば良いのでしょう?

具体的には
$ary[1][23]->GetNum()
で返す値を元に
$ary[1][x]
xの部分の配列をsortしたいです。
$aryに格納されているのは全て同じクラスです。
781773:03/12/25 23:10 ID:???
できました!
775さんのspliceを779さんのサイトで調べて
774さんのは高度でよくわかりませんでしたが
助言に従いunshiftを削除したら完成
ありがとう〜感謝!
782nobodyさん:03/12/25 23:11 ID:???
質問です。
CGIから別のCGIの実行結果を読み込む場合はどうすればいいのですか?
open (TEST,"test.cgi");ではtest.cgiの中身よ読み込んでしまいますよね?
783nobodyさん:03/12/26 00:09 ID:???
>>780
# Schwartzian Transform
$ary[1] = [ map $_->[0], sort { $a->[1] <=> $b->[1] } map [ $_, $_->GetNum ], @{$ary[1]} ];

# 作業変数を使って負荷を減らした方法
my @tmp = map $ary[1][$_]->GetNum, 0..$#{$ary[1]};
$ary[1] = [ @{$ary[1]}[ sort { $tmp[$a] <=> $tmp[$b] } 0..$#tmp ] ];

>>782
http://member.nifty.ne.jp/hippo2000/perltips/LWP/Simple.html
784nobodyさん:03/12/26 00:12 ID:???
>>780
my %t;
@{$ary[1]} = sort {
($t{$a} ||= $a->GetNum()) <=>
($t{$b} ||= $b->GetNum())
} @{$ary[1]};

# オブジェクトがハッシュキーってマズー?

>>782
$response = `test.cgi`;

# こういう問題じゃないに10perl。
785nobodyさん:03/12/26 00:15 ID:???
>>782
PurePerlなら
use 'test.cgi';
とでもしたら?
786780:03/12/26 01:18 ID:???
>>783-784
できました。どうもありがとうございますm(_ _)m
787785:03/12/26 01:25 ID:???
>>786
いえいえ
788nobodyさん:03/12/26 01:58 ID:???
>>784
アドレスが付くから一意性は保たれると思う。
Orcish Maneuver は簡潔に書けていいけど、||= 演算子が
重たいかも知れない。気になるならベンチしてみて。
789nobodyさん:03/12/26 14:14 ID:???
>>788
ベンチするまでもなく
毎回$a->GetNum()を評価するよりは||= 演算子の方があからさまにマシな気がするが...
ところでOrcish Maneuverってなに?
790nobodyさん:03/12/26 16:34 ID:???
>>789
http://www.google.com/search?q=Orcish+Maneuver

>>783 の二つも >>784 も、各要素について GetNum() が呼ばれる回数
は一回ずつだけど?

但し Schwartzian Transform だと頻繁なデリファレンスが負荷になり、
Orcish Maneuver だと ||= 演算 (キャッシュされていようがいまいが真偽
判定は必ず入る) が負荷になる。もちろんどれが最適かはケースバイ
ケースだから一概には言えないけどね。
791nobodyさん:03/12/26 18:40 ID:???
hogehoge = 2
fugafuga = 10
magemage = 3
hiroyuki = 2
という内容のファイルがあって、それを右の数字の大きい順にソートしたいです。
とりあえず、ファイルを読み込んで%hashに左の文字をキーにして
ぶち込んでみましたが、その後にどうしたらソートされるのかさっぱりわかりません

教えてください
792nobodyさん:03/12/26 18:48 ID:???
%hash = sort { $a <=> $b } %hash;
793nobodyさん:03/12/26 19:00 ID:???
>>791
my @sorted_key = sort { $hash{$b} <=> $hash{$a} } keys %hash;
print map "$_:[$hash{$_}]\n", @sorted_key;
794nobodyさん:03/12/26 19:13 ID:???
>>792-793 dクス!

ずばりsortなんてものがあったんですね。

一度調べてみたら$aと$bはmy関数で宣言しちゃだめなんですね。
で、$aと$bを入れ替えるだけで、降順・昇順ソートが切り替わると。

手持ちのリファレンス本のサンプルコードを少し弄ったら望みどおりになりました。

foreach $key (sort { $hash{$b} <=> $hash{$a} } keys %hash ) {
print "${key} = $hash{$key}\n";
}
795784:03/12/26 19:58 ID:???
単純なクラスでベンチ取ったら、素の方がまだ軽かった。(オブジェクトの数は1000程度。)
$ary[1] = [sort{ $a->GetNum <=> $b->GetNum } @{$ary[1]}];

ありゃりゃん。
796nobodyさん:03/12/26 20:15 ID:???
unless( $data =~ /abc/ );

if( $data !=~ /abc/ );

上の書き方を下の書き方にすると動かないんですけど、
これって根本的に間違ってますか?
797nobodyさん:03/12/26 20:16 ID:???
!~
798796:03/12/26 20:17 ID:???
一部訂正。。
unless( $data =~ /abc/ ){

if( $data !=~ /abc/ ){
799nobodyさん:03/12/26 20:18 ID:???
>>797
あ、なるほど。
ありがとうございますー。
800nobodyさん:03/12/26 22:04 ID:???
unless( $data =~ /abc/ ){

unless(index($data, 'abc')>=0){
801nobodyさん:03/12/26 22:15 ID:???
unless(index($data, 'abc')>=0){

if(index($data, 'abc')<0){
802?O?????|?X:03/12/26 22:17 ID:GT8UmBX+
こんにちは。始めて自作に向けて、簡単なスクリプトを作って練習しています。今は、半角カナから全角カナに変換する
のを作っています。何度やっても出来ないので、こちらへやってきました。
スクリプト

#!/usr/bin/perl
require 'jcode.pl';
$kana = 'ルース';
&jcode::h2x_sjis(*kana);
print $kana,"\n";

*ルースは変換前の文字
803nobodyさん:03/12/26 22:20 ID:???
h2z
804nobodyさん:03/12/26 22:35 ID:???
list.txtから読み出して表示するというスクリプトなんですが
うまく動きません。文法チェッカーによるとsyntax error at your CGI line 4, near ");"
と出ます。

#!/usr/bin/perl

open(LOG, "<<list.txt");
while($linedata =<LOG>);
($name_data, $mail_data, $url_data) = split(/<>/, $linedata, 3);
$mail_data = "<a href=\'mailto:$mail_data\'>$mail_data</a>";
$url_data = "<a href=\'$url_data\+'>$url_data</a>";

$tabledata .= "<tr>\+n";
$tabledata .= "<td>$name_data</td><td>$mail_data</td><td>$url_data</td>\+n";
$tabledata .= "</tr>\+n";

close(LOG);

print "本文略
805nobodyさん:03/12/26 22:38 ID:???
while($linedata =<LOG>);
806?O?????|?X:03/12/26 22:41 ID:GT8UmBX+
Internal Server Error
がまた出ました。
807nobodyさん:03/12/26 22:42 ID:???
whileの後は括弧で括れよ・・・
808?O?????|?X:03/12/26 22:45 ID:GT8UmBX+
途中経過
#!/usr/bin/perl
require 'jcode.pl';
$kana = 'ルース';
&jcode::h2z_sjis(*kana);
print $kana,"\n";
809nobodyさん:03/12/26 22:47 ID:???
型グロブって早く絶滅すべきだよねえ...
810nobodyさん:03/12/26 22:49 ID:???
$tabledata .= "<tr>\+n";

\+n => \n
811804:03/12/26 23:01 ID:???
ありがとうございます。以下のように修正しましたら読み込み成功しました。
ですが次に問題が出ました。list.txtに以下の書き込みがあるんですが
aaa<>aaa<>aaa
bbb<>bbb<>bbb
読み込みして表示されるのはなぜかbbbだけになってしまいます。
aもbも表示できないのはどこに原因がありますか?
#!/usr/bin/perl

open(LOG, "<list.txt");
while($linedata =<LOG>){
($name_data, $mail_data, $url_data) = split(/<>/, $linedata, 3)};
$mail_data = "<a href=\'mailto:$mail_data\'>$mail_data</a>";
$url_data = "<a href=\'$url_data\+'>$url_data</a>";

$tabledata .= "<tr>\n";
$tabledata .= "<td>$name_data</td><td>$mail_data</td><td>$url_data</td>\n";
$tabledata .= "</tr>\n";

close(LOG);

print "Content-type: text/html\n\n";

print "略
812nobodyさん:03/12/26 23:22 ID:???
while(<LOG>)
だっつーの
基本中の基本だろ・・
813nobodyさん:03/12/26 23:23 ID:???
>>811
open(LOG, "<list.txt");
while($linedata =<LOG>){
($name_data, $mail_data, $url_data) = split(/<>/, $linedata, 3);
$mail_data = "<a href=\'mailto:$mail_data\'>$mail_data</a>";
$url_data = "<a href=\'$url_data\+'>$url_data</a>";

$tabledata .= "<tr>\n";
$tabledata .= "<td>$name_data</td><td>$mail_data</td><td>$url_data</td>\n";
$tabledata .= "</tr>\n";
}
814nobodyさん:03/12/26 23:44 ID:???
815nobodyさん:03/12/27 00:02 ID:???
>>814
いやいや・・・
普通に$_でええやん、と
816nobodyさん:03/12/27 00:13 ID:???
817nobodyさん:03/12/27 00:25 ID:???
>>812>>814>>815>>816
お前ら無能の集まりか
とっとと逝け
818804:03/12/27 00:26 ID:???
ありがとうございます。
ちょっとしたところでミスをしていました。
819nobodyさん:03/12/27 00:45 ID:???
すいません。質問です
掲示板を作成していて、「11番めのログから20番目のログまで表示」という時、
やり方が良くわかりません。(1〜11を破棄というのは無駄ですし)
seek関数というものは知っていますが、バイトごとなのでよくわかりません。
「同バイトにしてseek」すればよいのはわかりますが、「同バイト」という所がわかりません。
どういうことなのでしょうか。

うまく一行ごとに読み込んでくれるんでしょうか。
820nobodyさん:03/12/27 00:53 ID:???
open(LOG,nantoka.log);
@log=<LOG>;
close;

print @log[10..19];
821nobodyさん:03/12/27 00:54 ID:???
破棄するほうが実用的だろうね。
$i=1;
while(<DATA>){
if($i<=11){print "$_\n";}
$i++;
}
822nobodyさん:03/12/27 08:15 ID:CWnXd3vL
while(<$log>){
if($. >= 11){
print ;
last if $. == 20;
}
}
823nobodyさん:03/12/27 11:13 ID:???
while(<LOG>){
(11..20) and print;
}
824819:03/12/27 15:49 ID:???
>>820-823
返答有難うございます。やはり破棄のほうが楽ですか…。わかりました。諦めます。

ところで>>823の方のスクリプトはどういう原理なんですか?あまり見ない形なんですが…。
825nobodyさん:03/12/27 16:08 ID:???
>>823
ここまで来るともはや何をやってるか意味不明だな(w
826nobodyさん:03/12/27 16:11 ID:???
左が正のとき右を実行
827nobodyさん:03/12/27 16:33 ID:???
初歩的な質問ですが、
FORMに記述した情報をmain.cgiの中にある sub GetFORM に送るには
HTMLでどのような記述をすればいいのでしょうか?
828nobodyさん:03/12/27 16:40 ID:???
>>827
shohotekisugiru.sirabetekoi.
hitonosukuriputodemo,yondekoi.
829nobodyさん:03/12/27 17:13 ID:???
>>824
http://www.harukaze.net/~mishima/perl/man/perlop.1.html

>スカラの ".." の被演算子が数値リテラルであるときは、
>その被演算子は暗黙に、変数 $. (現行番号)と比較されることになります。
>例:
>
>スカラ演算子として:
>
>if (101 .. 200) { print; } # 101 行目から 200 行目を印字
830nobodyさん:03/12/27 19:12 ID:???
@data = (
[1069846177,"yamada","22歳","男"],
[1069845374,"tanaka","20歳","女"],
[1069846478,"19歳","男"]



)
以上のようないくつかの時間,名前,年齢,性別の入ったデータがあるときに
時間の古い順でデータを吐かせたいのですがソートの部分がわかりません

print テーブル部略;
foreach() { #この部分をどのようにかけばいいのかが・・・
print <<EOD;
<tr>
<td>$data[$_][1]</td>
<td>$data[$_][2]</td>
<td>$data[$_][3]</td>
</tr>
}
print テーブル部略;

おしえていただけませんか?
831nobodyさん:03/12/27 20:21 ID:???
>>830
sort{ $data[$a][0] <=> $data[$b][0] } 0..$#data
832ヽ(´ー`)ノ:03/12/27 20:21 ID:???
my @data = (
[1069846177,"yamada","22歳","男"],
[1069845374,"tanaka","20歳","女"],
[1069846478,"suzuki","19歳","男"],
);


foreach my $i (sort { $a->[0] <=> $b->[0] } @data) {
print << "__END__";
<tr>
<td>$i->[1]</td>
<td>$i->[2]</td>
<td>$i->[3]</td>
</tr>
__END__
}

こういうデータはハッシュで管理した方がイイと思うがね。
833830:03/12/27 20:46 ID:???
有難うございます
834nobodyさん:03/12/28 00:26 ID:???
2ちゃん互換のトリップの生成はどうすればいいでしょうか?
835nobodyさん:03/12/28 00:59 ID:???
何度この質問が出てくるのだろう・・・
2004年はでませんよーに
836nobodyさん:03/12/28 01:14 ID:???
837nobodyさん:03/12/28 04:14 ID:???
>>835-836
ごめんなさい。ありがとう。
838nobodyさん:03/12/28 15:09 ID:???
perlにC言語のポインタみたいな物はあります?
839nobodyさん:03/12/28 15:36 ID:???
ある。
840nobodyさん:03/12/28 15:43 ID:???
教えていただけませんか?
841nobodyさん:03/12/28 15:58 ID:???
$foo = "hello";
$ref = \$foo;
$bar = $$ref;
とすると、$bar に"hello"が代入される。$refは、$fooのポインタ。
ポインタの指標する値を取り出すには、$を2つつける。
842841:03/12/28 16:02 ID:???
 そうそう。perlでは「ポインタ」と呼ばず「リファレンス」と呼ぶ。
843nobodyさん:03/12/28 16:04 ID:???
ありがとうございました。
844nobodyさん:03/12/28 16:24 ID:???
スミマセン。少々質問があります。
write.cgiというファイルに以下の記述
open(LOG, ">>log.txt");
print LOG(内容
があり、本来はindex.htmlからFORMデータをwriteに送って書き込みをするのですが、
write.cgiに直接アクセスしただけで、情報が入っていないままlog.txtに書き込まれてしまいます。
直接アクセスしたときに「error」などを表示させて、FORMからのデータだけを
受け付けるにはどうしたらよいでしょうか?ご指南お願いします。
845nobodyさん:03/12/28 16:31 ID:???
リファラーがindex.htmlじゃ無かったらエラーにしる
846nobodyさん:03/12/28 16:43 ID:???
>>845サマ ありがとうございます。
参考にして以下の文を書いて見ましたがうまく動作しません。

$url='フォームがあるhtmlのアドレス';
if($ENV{'HTTP_REFERER'} ne /$url/){
print "Content-type: text/html\n\n";
print "直アクセス禁止"
exit;
}
847844:03/12/28 16:46 ID:???
neではなく、!~で正常動作しました。

ありがとうございます。
848819:03/12/28 17:17 ID:VlzEY3kS
遅くなりましたがありがとうございました。
849nobodyさん:03/12/28 19:24 ID:???
>>838-842
perlでポインタ(リファレンス)を使うメリットってありますか?
850nobodyさん:03/12/28 19:33 ID:???
open(AA,"$aafile");
@aa = <AA>;
close(AA);
open(BB,"$bbfile");
@bb = <BB>;
close(BB);
push(@aa, @bb);

foreach(@aa){
($a, $b, $c, $d) = split (/<>/, $_);
if($a eq $ip){ &error('重複してます'); }
}



open(AA,"$aafile");
@aa = <AA>;
close(AA);
foreach(@aa){
($a, $b, $c, $d) = split (/<>/, $_);
if($a eq $ip){ &error('重複してます'); }
}

open(BB,"$bbfile");
@bb = <BB>;
close(BB);
foreach(@bb){
($a, $b, $c, $d) = split (/<>/, $_);
if($a eq $ip){ &error('重複してます'); }
}

どちらが負荷が少ないですか?
851nobodyさん:03/12/28 19:33 ID:???
>>849
配列を関数に渡すときとか
852nobodyさん:03/12/28 20:11 ID:???
>>850
> どちらが負荷が少ないですか?
なぜ自分で調べないのですか?
853nobodyさん:03/12/28 20:35 ID:???
いちいち必要のない配列にぶっこんでるぐらいだから、調べ方もわからないに一票。
こういう場合、負荷を調べるにはどのようにしたらよいか、という質問のほうが相手にしてもらえたと思われ。
ま、「ググれ」で済まされるかもしれんけどな。
854nobodyさん:03/12/28 20:40 ID:???
どうでもいいが$aと$bは安易に使うんじゃねーぞと逝って億か
855nobodyさん:03/12/28 21:06 ID:???
>>844-846
リファラーなんぞ偽造できるし、ノーdで切れるがな(プ
856nobodyさん:03/12/28 21:21 ID:???
>>855
じゃあどうしろと?
857nobodyさん:03/12/28 22:08 ID:???
>>849
なんか「Cでポインタを使うメリットありますか?」と質問されてるような気分だ
858nobodyさん:03/12/28 22:16 ID:???
>>854
その理由は?
もっとも自分は特に明確な理由はないが実験用の簡単なスクリプトでしか
$aや$bとかは使用しないようにしているが。
859nobodyさん:03/12/28 22:17 ID:???
Cのポインタでも大半は参照渡しがしたいだけだから。
メリットはシャンプーだがなー
860nobodyさん:03/12/28 22:26 ID:???
>>856
つーかなんでリファがでてくるん?
データが何かあるときだけ書き込むって仕様でいいんじゃねーの?
しかもなんで正規表現なん?

$hoge = 送られてきたデータ;
&error('データありまへんで') if $hoge eq '';
open(LOG, ">>log.txt");
print LOG $hoge;
close (LOG);
861nobodyさん:03/12/28 22:27 ID:???
>>858
特別な変数だから
862nobodyさん:03/12/28 22:43 ID:???
>>861
$a,$bってソート比較ブロックの中でローカル化されるんじゃないの?
比較ブロック内で参照しようとしたら意図した結果は得られないくらいの問題のような気がする
863861:03/12/28 22:50 ID:???
ま、俺は>>854じゃないんで、
別に使ったところで問題あるのかどうかはしらない。
でも俺は使わないし、基本は使わないっしょ。
$a1とかにみんなしてんじゃねーの?
864nobodyさん:03/12/28 22:53 ID:???
$a,$bはこのスレではよく指摘されるが、DATAファイルハンドルはほとんど指摘されないな。
865nobodyさん:03/12/28 22:54 ID:TGOsRW2X
$a, $bはuse strictのチェック対象外だから。
866nobodyさん:03/12/28 22:56 ID:???
俺は独断のルールで、変数は三文字以上。これ適用してる。なんとなく。
867nobodyさん:03/12/28 23:17 ID:???
>>844
書き込みをPOSTメソッドで行い、
その他のメソッドだった場合はerror表示。
868nobodyさん:03/12/28 23:46 ID:???
>844
情報が空ならエラーにする。
もしくは、入力フォームにhidden属性でチェック項目を入れておき、それがなければエラーにする。
869nobodyさん:03/12/28 23:55 ID:???
変数、ファイルハンドル、ヒアドキュメントの開始終了など
使用不可能な予約語などについてきちんとした情報はないのだろうか?
870nobodyさん:03/12/29 00:23 ID:???
ファイルを移動したいのですがどうすればいいのでしょうか?
出来ればモジュールなどは使わずにやりたいのですが…
871nobodyさん:03/12/29 00:24 ID:???
>>869
変数は小文字で2文字以上、ファイルハンドルは大文字、とかそーゆー一般的なルール守るべす。
て言うか、特殊な名前はけっこう覚えれるよ。
872nobodyさん:03/12/29 00:26 ID:???
>>870
今あるファイルを他の場所にコピーするてことか?
ファイル読みこんで、写したい場所に書きこんで、古いの消す。
いっぱいファイルあったらループ。
873nobodyさん:03/12/29 00:30 ID:???
>>872
なるほど。サンクスです
874nobodyさん:03/12/29 00:39 ID:???
ターゲットのリストとしてcsvファイルを指定し
$data_view[0]や$data_view[1]などと変数にできたのですが
$target = $data_view[0]などとした場合に変数の名前の数字をカウントアップさせる事は可能でしょうか?
$target = ${'data_view['."$number".']'} と無理矢理やってみたのですが、$targetが空っぽになってしまい
うまくできませんでした。
875nobodyさん:03/12/29 00:47 ID:???
>870
コピーじゃなくて移動か?
移動ならrename

>874
$target = $data_view[$number]って事じゃなくて?
876874:03/12/29 00:54 ID:???
>>875
できました!
なんだか調子が悪かったらしくて、書き直したらOKになりました
ありがとうございます
877nobodyさん:03/12/29 01:58 ID:???
DB使えないのでデータをテキストファイルにして掲示板を造ろうと思うのですが、
今のところデータは2000件ほどあります。これを1個のファイルに収めるのと
100件くらいずつ切り分けるのとではどちらがオススメでしょうか?
878nobodyさん:03/12/29 02:09 ID:???
>>877
データ構造とサイズと更新頻度に依る。
879nobodyさん:03/12/29 02:11 ID:UgDxJvBw

─────‐||────────‐──────────────────────
─────‐ ||───────────────−───────────
─────−||─────────────────────―───
────── ||──────────‐─────−───────      ∧_∧
──────(_)─、────────‐─────────- ( ヽ       (; ´Д`)       ノ )
─────‐─(_)_ \────────‐──────‐──  \ \     _/  /_ ___/ /
───────/  \ ∧_∧,〜 ──‐───────‐────   \  ̄\ \      / /    /
─────−─\   \   )\────────────────  ̄ ̄| \ \   / / | ̄ ̄
─────−──ヽ    ̄ `ヽ |─────‐───────‐───── |  \ \/ /  |
──―──────\   `ー'ヽ, -'⌒\─‐────────────   |____\ /____| ←>>52
―─‐─―─―──‐  |    ,     _/⌒──────────────  ___    _
──────────\     /\/ ──────────‐───‐─  |    / /\\|
─────‐∧ ∧,〜 /  /  )  `ヽ、 ──────────‐────  |   / /  \____
──−──(Д゚(⌒ ̄ `ヽ'   _/     )───────────‐──  (  / /____  )
──―───‐\  \ `ー'"´, -'>__ノ ─────────────   / /       / /
―‐――──‐ /∠_,ノ    _/.__)──) )──‐────────‐─    / /      __//
─────‐ /( ノ ヽ、∧ ∧,〜──(__ノ ───‐───‐────−  //       ( /
────‐ 、( 'ノ(    (゚Д゚,,)⌒ ̄`ヽ、 ────────────  //         )/
───‐‐/` ―\__(  ー\  _」_,∠⌒`ヽ──────  __//          し′
───/───―‐/__〉\   、 ( ノ 、ー'⌒`  \──‐─    ( /


880nobodyさん:03/12/29 02:13 ID:UgDxJvBw
          )    ))     ((     )
         /::::)(:::)(:::::::::::)(::::::^::::::::::\(  
       ))(::::::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::\〜
      /::::::::::/ノ::::::::ノ::::::::ヽ:人::::::::::ヽ:::::::::::::::)))
      (::::::::::/  ):::ノ::::ノ ) ソ ヾ::::::::::::丶::::ヽ
     ((::::::::::./ 彡  ノ 自 ノ  :: 彡:/)) :::::::::):)    ぷ〜〜ん
    (::::::::::/彡彡彡彡彡.大 ミミミミミミミ :::::::::::)〜  
  〜((:::::::// ̄ ̄ ̄ ̄ヽ===/ ̄ ̄ ̄ ̄ヽ |:::::::::)))
     |==ロ   -=・==- ‖ ‖ -===・- ロ===
  /⌒ |:/ ‖    / /ノ  ヽ \     ‖  ヽ|ヽ⌒ヽ      _________
 〈   |/  ヽ`======/  .⌒ ` ========ノ.   ..| |    〉  /
  ヽ  .( 。 ・:・‘。c .(●  ●) ;”・u。*@・:、‘)  /  /  おれはPerlは一流なんだぞ、おれを敬え!! 
  | ( :。・;%:・。/::: ::::::| |::::::ヽ  ; 8@ ・。:% ) | <   
  \( 。;・0”*・o;/::::::::::l l::: ::: \ :。・;%:・。. )/   \ 男子やうんこが大好き!
    (; 8@ ・。:/ ̄ ̄ ̄ ̄ ̄ ̄\: ”・:。;・’0.)((     \_________     
    ( 0”*・o|            | 0”*・o:c )::))
   . (。・:%,:)|.   ̄ ̄ ̄ ̄ ̄   | :(: o`*:c)::((    
    (::(; 8@・。|            |; 8@ ・。: ):::)))
    )::::\ :::o :::::\______/  ::::::::::/:::::::))
  〜((:::::::::ヽ  ヽ:::: _- ::::: ⌒:: :::::::: -_   ノ::::)):::::::::::(
      ((:::::::::\丶\_::_:::::_:::: :::::_/:/:::::: ::::::::)))〜
881nobodyさん:03/12/29 02:14 ID:UgDxJvBw
ぶりゅぶりゅぶりゅぶりゅぶりゅぶりゅぶりゅぶりゅぶりゅぶりゅぶりぶりー
ぶりゅ              ∬   ∬            ぶりゅ
ぶりゅ             __,,....) , 。  ∫          ぶりゅ
ぶりゅ         ∧∧'´   );'・ミ∵;,、 。 ;,         ぶりゅ
ぶりゅ       と(*゚ワ゚)Uてノ゙`;ヾ;,、`●;.'';,,         ぶりゅ
ぶりゅ                 ""''`゙∵";;゙'         ぶりゅ
ぶりゅぶりゅぶりゅぶりゅぶりゅぶりゅぶりゅぶりゅぶりゅぶりゅぶりゅぶりー
______∧________________
今、しぃたちはぶりゅぶりゅぶりゅぶりにあっていますぶりゅぶりゅぶりゅぶりー
虐殺されたり糞を食わされたりぶりゅぶりゅをねだらされたりぶりゅぶりゅぶりゅぶりー
けれどしぃたちがそのようなことぶりゅぶりゅぶりゅぶりしたわけではぶりゅぶりゅぶりゅぶりー
虐殺厨、モララー厨などのぶりゅぶりゅぶりゅぶりなどですぶりゅぶりゅぶりゅぶりー
でもそのようなぶりゅぶりゅ達が描いたしぃが定着していますぶりゅぶりゅぶりゅぶりー
ぶりゅぶりゅぶりゅぶりしぃ作品の代表『ぶりゅぶりゅぶりゅぶり』などはぶりゅぶりぶりー
そのイメージをぶりゅぶりゅする画期的なものでしたぶりゅぶりゅぶりゅぶりー
でもイメージが変わることを恐れたぶりゅぶりゅぶりゅぶり同盟はぶりゅぶりゅぶりゅぶりー
そのスレを徹底的にぶりゅぶりゅぶりゅはじめましたぶりゅぶりゅぶりゅぶりー
このままではぶりゅぶりゅぶりゅぶりの描いたしぃがしぃと思われてしまいますぶりゅぶりゅぶりゅぶりー
ぶりゅぶりゅぶりゅぶりのみなさん、しぃ達をぶりゅぶりゅぶりゅぶりしてくださいぶりゅぶりゅぶりゅぶりー
おながいぶりゅぶりゅぶりゅぶりしますぶりゅぶりゅぶりゅぶりー
882nobodyさん:03/12/29 02:15 ID:UgDxJvBw

   /     _     \
  /     (※)     |
  |       ̄       |
  ヽ  /_____ヽ  /
   ヽ_|0l二二二二l0|_ノ
     |vヽ___ノv|
   (d| ・=ゝ ・=ゝ|b)    / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
   Z/   ( _ )   ヽフ  < Perl使う奴は 死刑!!
   / @      @ ヽ   \________
   (ー――〜〜 ―――)
   \ ______/
  てヽ_/   lo//
   /(  て二/l__
  (┃ ⌒ 二 )_O―┴┐
   |┐ー┤ | |\O O|
   |   |_n_)┘  ̄ ̄
883nobodyさん:03/12/29 02:16 ID:UgDxJvBw
                      /⌒ヾ⌒ヽ.
                     /   丿  ..ヾ
                   /   。 人    )
                  (。...。_ .ノ 。ヾ。...丿
                   ( _ .  .. ノ   )
                  /        /
                  / ノ し   /
     三 ̄ ̄ ̄ ̄\    / ) と   /
     /  ____| .  /      /
     /  >     |   /      /
    /  / ⌒  ⌒ |  /     /
    |_/---(・)--(・) |  /     /
    | (6    つ  | /  ..  /  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
     |    ___ |/   . /  < 誰かアナルファっクさせてくれ!!
    \  \_/ / /   /    \_パンチ5分の2だよ W
 シコ  \___/   /   /
      /     \ / .  /
 シコ  ( ) ゚ ゚/\ゝ 丿.../
      \ ヽ、 (  /  ⊂//
        \ ヽ / ⊂//
        ( \つ  /
        |  |O○ノ \
        |  |    \ \
        |  )     |  )
884nobodyさん:03/12/29 02:17 ID:UgDxJvBw
     彡ミミミヽ ノ彡ミミ)))
    ((彡ミミミミ)(彡彡)))彡)
   彡彡゙゙゙゙゙"゙゙" """"ヾ彡彡))
   ミ彡゙ .._    _   ミミ彡
  ミミ彡 '´ ̄ヽ '´/ ̄ ` ,|ミ)))
  ミ彡  ' ゚̄ ̄' 〈 ゚̄ ̄ .|ミミ))
  ((彡|      | | `    |ミ彡
   (彡|    ´-し`)\  |ミミ    / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
    ゞ|      、,!  」  |ソ   < Perlなんていいから、嬢ちゃんまたしゃぶってよ、仲直りのしるしに
     ヽ '´ ̄ ̄ ̄'ノ /       \_________________
   /⌒ \____/ ⌒\
\ /     ¬         \            / ̄ ̄ヽ
  \            /⌒⌒ヽ         /      \
   \   ・  | \ (   人  )       /        ヽ
     \   /     ゝ    ヽ \   /          |
      \        |;;    |   \/    |       |
        \     l  |;;  ;;;  |\__/      |      |
         \ ̄  ―|;;  ;;;  |-/        |      |
          \   |;;  ;;;  |/         |     |
           \  |;;   | |/          |     |
             | |;   ;; ;;|          /|    |
                ;;            /  |
\          /    ;;          /
885nobodyさん:03/12/29 02:19 ID:UgDxJvBw
           /././././ .ノ""" /####|
          ../////./"   "///##|
       ._._./  ヽ.ノ    ヽ""///#ノ
      /'  ,    |      ../""彡
     ./    ;    \...>' ̄
    .../          ''';;;ヽ
    ./    ,,,       '';;|
    /   ./        ..|          .____
   ./   ./      '   .|         /"__,")
  .../   /          ..|        .| ""A
  ./   /|           |      __..-´ ..ノ
 /  ../  |          : | ___....--'"  .-'"
...|   ./   |         ; |"   __..-''"
 |   ..|   .|         ; |;:--''"
 .|   .|   .|        ..("|
 ..|   .|  ../          |    .-' ̄`--,,,,
  ..|   |  ../           |   /((((((((((((((`-,,,
  ...|  .| .../           .|   ノ ,,, ヽ)))))))))))))))
  ..|  | ..| ..ヽ         /;' ̄`' ,°" ((((((((((((((((ヽ
  ...|  .| .|        ;  ノ / .,く    ((((((((((((((((((ヽ
   |  .ヽヽ       γ ,`--..)">   .ヽ((((((((((((((;
   .|   ..ヽ      ..ι,-μ''"#..("______  ..>)))))))))))))
   ヽ.._ .ヽ.ヽ      |    "|::;ヽЩヽ ((((((((((((((((
      "`-ヽ|      .|    ...|:;ヽ;;;#| |/:::::::::::::ヽ))))))
        ..|      .|:    ...|:;ヽ;;#/:::::::::::::::::::::::::::ヽ)))
        .|      ..|:    ..| "'-,//:::::::::::::::::::::::::::::::ヽ))
        ..|      .|;:    |  .|ШШ,,,;;:::::::::::::::::::::::::|)
        ...|      |;:    |  (..γヽ,,, ヽ:::::::::::::::::::::::ノ
        ...|     .|;;:    | ../..(:::::::::..\:::::::::::::::::::::|
886877:03/12/29 02:45 ID:???
>>878
普通の追記型の掲示板でデータは1書き込み1行ずつにしようと思ってます。
サイズはわかりませんがごくふつうの掲示板と思ってください。
書き込みは1日で最高でも10件くらいです。
887nobodyさん:03/12/29 02:52 ID:???
今どきの鯖スペックだったら1000・2000件くらい楽勝だしょ。
888nobodyさん:03/12/29 02:54 ID:???
1枚でいい気はすっけど
分けるにしても1000件ごとでいいと思うし
889nobodyさん:03/12/29 03:01 ID:???
2chのdatファイル考えてみれば・・・
890nobodyさん:03/12/29 03:37 ID:???
同じサイズなら、複数のファイルより1つのファイルのほうがいいんじゃない?
さらにシーク位置と長さを記録したインデックスを用意して、それを使って
目的のデータへ直接アクセスすればさらに効率的だと思われ。
891nobodyさん:03/12/29 03:45 ID:???
1日10件の書き込みしかない個人掲示板でそこまでやってたら
正直、きもいと思う。
892nobodyさん:03/12/29 03:52 ID:???
まぁ、そんなことで悩むより、
表示部をHTMLにしたりする方が先決だと思われ。
893nobodyさん:03/12/29 04:16 ID:???
>>851 >>857
いや、Cの場合とPerlの場合は違うと思うけど・・・
Perlで本格的なオブジェクト指向っぽいプログラム組みますか?
割とスクリプトとして使っているから、変数はガンガンglobalにしてます。
意識してれば変数名がぶつかることはあんまり考えられないと思うのですが?
もしプログラマーが把握できなくなる規模なら、Rubyの方がいいとか?

また慇懃無礼って言われそう・・・
894nobodyさん:03/12/29 06:09 ID:???
>>893
サイズのでかいデータを関数に渡すとき、値渡しだと馬鹿でかいデータを丸々$_[0]などにコピーすることになる。
メモリ効率を考えると、参照渡しのほうがいい場合もある。ストリームを渡したいときなんかも。
895nobodyさん:03/12/29 09:24 ID:???
>>893
オブジェクト渡すだけの方が、後々メソッドのインターフェイスとか買えずに済むから、幸せになれる気がするんだ。
896nobodyさん:03/12/29 10:34 ID:???
>>895
逆に厳密なデータ構造の決定ができない諸刃の刃
897nobodyさん:03/12/29 11:24 ID:???
つーかオブジェクトってのがblessされたハッシュへのリファレンスやん。


ところで俺がCでポインタ使う場面って、まあ参照渡しを脇に置くと、
リストやツリーみたいなデータ構造作るときに、
mallocしてポインタでつなぐ、てのが基本だと思ってるんだが、
他の人はそういうことしない?

同じことを perl でやるとき、リストは配列があるからそれでいいんだけど、
ツリーはやっぱリファレンスでつなぐよね?
まあ、実際にはツリーのコードはCPANとかから引っ張ってくるのかもしれないけど、
例えば LWP で取ってきた HTML/XML をパースしてDOMツリー作ってもらったとして、
ツリーの中をトラバースするときはリファレンスを辿るよね?
898nobodyさん:03/12/29 12:19 ID:???
>>897
アドレスの演算ができないならポインタなんてイラネ。普通に参照使うよ。
899897:03/12/29 12:37 ID:???
参照って、C++の参照型のこと?
あれ、俺がK&R必死に読んでた頃はまだ無かったんだよなあ。

perl のリファレンスは、CのポインタよりもC++の参照型の方に近いよね。
900nobodyさん:03/12/29 12:50 ID:???
>>899
誓いもへったくれも

参照 -訳-> referrence
901nobodyさん:03/12/29 14:05 ID:WBgkItFP
>>893
>意識してれば変数名がぶつかることはあんまり考えられないと思うのですが?
なんで意識してまで安全でないグローバル使わなきゃならんの?
902nobodyさん:03/12/29 15:13 ID:???
あるスクリプトで

my $check = '(?:^|[\0-\200\240-\337])(?:[\201-\237\340-\374]{2})*';
$FORM{'FROM'} =~ s/($check)(?: | )+$/$1/g;

というのがあったのですが、"?:"というのはどういう意味なんでしょうか?
903nobodyさん:03/12/29 15:19 ID:???
>>902
マニュアルに書いてあるよ。回線切って首吊って(ry

s// の中で使ってるから正規表現関係だってすぐに分かるものだと思うんだが…。
904nobodyさん:03/12/29 15:27 ID:???
>>903
すみません。マニュアルといえるマニュアルは持ってないもので…。
ぐぐっても検索できないし…。
905nobodyさん:03/12/29 15:40 ID:???
ttp://www.kt.rim.or.jp/~kbk/perl5.005/perlre.html
あたりを見るのがよいかねえ

それでもわからなければ正規表現道場へGO
906nobodyさん:03/12/29 16:32 ID:FenPkq2L
BBSスクリプトを作っているのですが、削除処理がうまくいかずに困っております。
具体的には「投稿の際、削除パスワードを書かないとその記事は誰でもどんなパスでも削除できてしまう」というものです。
削除パスを必須にすればいいのでしょうができるだけ投稿者さんの負担を減らすためにもあくまで削除パス記入は任意という前提の下で考え、いろいろ調べてみたらどうやた投稿されたパスをDATファイルに渡す処理のところで引っ掛かってるようでした。
以下がその部分のコードなんですが、

if($pass) {
@code=qw|a..z A..Z 0..9|;
$ps_key=$code[int(rand(@code))].$code[int(rand(@code))];
$angou=crypt($pass, $ps_key);
}

これに対してelseで
「削除パス欄に何も書かれずに投稿された場合、DATファイルには管理人用マスターパス($password)を渡す」
という処理にするにはどう書けばよいでしょうか。
何卒ご教授の方宜しくお願いいたします。
907nobodyさん:03/12/29 16:38 ID:???
else {
$angou = $password;
}

こーゆーこと?
908nobodyさん:03/12/29 16:48 ID:FenPkq2L
>>907さん
ありがとうございます!

else{
$angou=crypt($password);
}
というのを前提に考えてました・・・すみませんどうしようもない質問で・・・
おかげでうまくいきました!
ほんとありがとうございます。
909nobodyさん:03/12/29 16:50 ID:???
瑣末なことだけど、変数名に日本語使うのは止めたほうがいいよ。
angou -> crypted とか。
910902,904:03/12/29 16:52 ID:???
>>905
いまいちわからなかったので正規表現道場の方に行ってみます。
ありがとうございました
911nobodyさん:03/12/29 17:02 ID:FenPkq2L
>>909さん
御指摘ありがとうございます。
確認したら確かに、セキュリティ面でどうかなぁと思いましたので、

f($pass) {
@code=qw|a..z A..Z 0..9|;
$ps_key=$code[int(rand(@code))].$code[int(rand(@code))];
$angou=crypt($pass, $ps_key);
}
else{
@code=qw|a..z A..Z 0..9|;
$password=$code[int(rand(@code))].$code[int(rand(@code))];
$angou=$password;
}

こういう風にしてみました。
たぶん知識ある方が見たら「なんじゃこりゃ」って書き方だとは思いますが・・・
とりあえずcryptの意味を理解しないとダメですね、もっと勉強しなければ・・
でも今回はほんと助かりました。丸二日間悩んでたもんで・・・
>>907さん>>909さんにはほんと感謝です。良いお年を迎えられますように。
912nobodyさん:03/12/29 17:07 ID:???
>>909
揚げ足取り申し訳ないが「日本語」ではなく「ローマ字」
では?
913nobodyさん:03/12/29 19:17 ID:???
>>911
それじゃあ if 文使ってる意味がないような…。

あと、qw|a..z| だとリスト中身が展開されないと思うけど、いかが?
914nobodyさん:03/12/29 20:38 ID:???
>>909に対しての>>911がわけわからん。
変数名を日ローマ字から英略語とかに変えたほうが・・って話じゃないのか?
ま、俺は日本語ローマ字は使わんが、
別にローマ字でもええやんってな気はするが。
915914:03/12/29 20:48 ID:???
つまり、削除処理のときにdat内を見て、パスの部分が管理用パスだったら、
どんなパスでも削除を許すってことですかい?
ん〜なんかよくわからん、意味のなさげな処理なんですが・・

書き込みのときにパスがなんも入ってなかったら、
そのままパスの部分は何もいれずdatに書き込んで、
削除処理側でdatを覗き、空ならどんなパスでも削除を許す。
でいいんじゃないの?

しかも911の変数passwordは種だから、
そのまま種だけを$angouに入れてることにならんか?
どんな意味があるの?
916nobodyさん:03/12/30 10:01 ID:???
変数名に日本語ってこーゆーの?

${'りすと'} = ('漢字', 'カタカナ');

そしてさらにこうとか?

foreach my $neme (@{'りすと'}){
 no strict 'refs';
 ${"$name"} = '(・∀・)';
}



こんな使い方にくらべりゃローマ字のがまだマシだぬ。
917nobodyさん:03/12/30 10:04 ID:???

(・∀・)やっぱこうする

@{'りすと'} = ('漢字', 'カタカナ');
918nobodyさん:03/12/30 10:50 ID:???
こういうことじゃないのか。

use utf8;

if ($パス) {
 @コード = ('a'..'z', 'A'..'Z', 0..9);
 $ぴーえすキー = $コード[int(rand(@コード))].$コード[int(rand(@コード))];
 $暗号 = crypt($パス, $ぴーえすキー);
}
919nobodyさん:03/12/30 11:21 ID:???
$aa $aaa $aaa1 $aaa2 $ab $ab_2 とか使われまくるよりは
$pasuwaado $kagi $angou の方がまだマシ。
920nobodyさん:03/12/30 14:05 ID:???
>916
勘違いしてる気が。
日本では普通、単にローマ字って言う場合は日本語のローマ字表記って意味だ。

あんごう ← 日本語の平仮名表記
angou ← 日本語のローマ字表記

で、今の変数名に日本語を使うなって流れは後者を使うな(使わない方が良いんじゃないか)という事かと。
仮名漢字とローマ字の問題じゃなくて、英語と日本語のどっちを使うかって話……だよね?
#いきなり自信無くす
921昨日の906です:03/12/30 14:21 ID:???
あわわ・・・なんか流れが違う方向に行ってる・・・
ワケのわからないレスしてしまって申し訳ありませんでした。
>>913-915さん
藁にもすがる思いでババっと書いたので今読み返してみたら最初の>>906の文章も誤解を招くような書き方でした。
正しくは、
「投稿の際、削除パスワードを書かないとその記事は誰でもどんなパスでも削除できてしまう」
という動作だったので、それがいやなので
「削除パスなしの投稿は、管理人マスターパスでしか消せないようにしたい」
ということです。
>>906ではまるで前者の処理を目指してるように見えますよね・・・重ね重ねすみませんでした。
922昨日の906です:03/12/30 14:29 ID:???
長くなったので二回に分けます。連続投稿すみませんです。
で、>>907さんの御指摘のもと、

if($pass) {
@code=qw|a..z A..Z 0..9|;
$ps_key=$code[int(rand(@code))].$code[int(rand(@code))];
$angou=crypt($pass, $ps_key);
}
else {
$angou = $password;
}

こうしたらうまくいったんですが、このままだとDATファイルに書き込む際にマスターパスがそのまま書き込まれるので、
万一何かの拍子にDATファイルを第三者にDLされた場合パスが漏れるんじゃないかと思い、それじゃあ管理パスも暗号化してやろうってことで
>>911のような書き方をした次第です。
>>909さんの御指摘=こういうことだと勘違いして>>911>>909さん宛てのアンカーをつけました。
>>909さんのおっしゃる「変数名に日本語使うのは止めたほうが」というのは変数名angouのことだったんですね・・・それ今気づきました。
ほんとご迷惑おかけしました。
スレ汚しすみませんです。
923914:03/12/30 15:29 ID:???
>>922
で、911で期待した通り動くのかい?
管理パスで消せるかテストしてみたのかい?
絶対消せないと思うのだが・・

↓これでだめかい?テストしてないけどね。
コメント部分は書かなくていいよ。ってわかるか・・

@code = qw|a..z A..Z 0..9|;
#↑この部分がどうなのかって指摘があったが、メンドイからいけるものとする。
$ps_key = $code[int(rand(@code))].$code[int(rand(@code))];
#↑cryptの種をランダムで作成
$pass ||= $password;
#↑$passに何も入ってなければ管理用パス$passwordを代入
$angou = crypt($pass, $ps_key);
#↑$passをcryptで暗号したものを$angouに代入
924nobodyさん:03/12/30 15:36 ID:???
$angou = crypt defined $pass ? $pass : $password, sprintf qq(%s%s), (0..9,A..Z,a..z,'.','/')[rand 64, rand 64];

別に変数名は好きなものを使えばいいと思うけれども、 Perl さん、他の人に見せるのであるなら人様が混乱しないようにすればよろしいかと。
925nobodyさん:03/12/30 15:45 ID:???
Perlソースの暗号化のためにも

$aa $aaa $aaa1 $aaa2 $ab $ab_2 を使いなされ
926nobodyさん:03/12/30 15:46 ID:???
printf "%s\n", join ' ', qw|a..z A..Z 0..9|;
# a..z A..Z 0..9
printf "%s\n", join ' ', (a..z,A..Z,0..9);
# a b c 〜 7 8 9

>>925
感動した(w
927nobodyさん:03/12/30 15:56 ID:???
「明日の自分は他人」だと思ってソース書いておかないと
間を空けた修正の時に地獄が待ってますよ。
928nobodyさん:03/12/30 16:03 ID:???
>>925
文字にならないビットを置いた方がより暗号的だよw
バイナリエディタで作る。
929nobodyさん:03/12/30 16:11 ID:GqTrOM1j
そういえば漏れも最近
$passwordが
$pwordになって
$pwdになって来ているような気がする
だめぽ
930nobodyさん:03/12/30 16:23 ID:???
$pasward_result = $password;
$pasward_result1 = &henkan($pasward_result);
$pasward_result2 = &henkan2($passward_result);
$pasward_result3 = &Newhenkan($passward_result1);

こういうのも割と凶悪。
931nobodyさん:03/12/30 16:53 ID:???
$l も凶悪。$|と見分けにくかったりして。

$l00oO100ll
932nobodyさん:03/12/30 16:59 ID:???
ハッシュのキーの変数名に値を入れたいのですが、うまくいきません。

%hash = (
aaa => 'hoge',
bbb => 'fuga'
);

というハッシュから、

$aaa = 'hoge';
$bbb = 'fuga';

の代入を行いたいです。

${$key} = $value while( my ($key, $value) = each %hash );

これではダメでした…
933nobodyさん:03/12/30 17:16 ID:???
>>932

foreach (keys %hash){ ${$_} = $hash{$_} }
934932:03/12/30 17:35 ID:???
>>933
ありがとうございます。
早速使ってみたのですが、、

#! /usr/bin/perl
my %hash = (
aaa => 'hoge',
bbb => 'fuga'
);
my ( $aaa, $bbb );
foreach ( keys %hash ) { ${$_} = $hash{$_} }
print qq(Content-Type:text/html\n\n);
print qq(aaa: $aaa<br>\n);
print qq(bbb: $bbb<br>\n);
exit;

すんません、これではダメですた…。
935932:03/12/30 17:39 ID:???
自己レスです。
すいません、$aaaと$bbbの my を取ったらいけました。。
ありがとうございましたー
936nobodyさん:03/12/30 18:23 ID:???
$aがだめならforループで$i使うのもだめ?
937nobodyさん:03/12/30 18:29 ID:???
使えばええやん
938nobodyさん:03/12/30 18:41 ID:???
>>936は勘違い君?
939nobodyさん:03/12/30 18:46 ID:???
>>936
$aはソートで使う特殊な変数だべ
940nobodyさん:03/12/30 21:47 ID:???
そっか。アがだめだからイもやばいと思ってた。
941nobodyさん:03/12/30 21:52 ID:???
ループ変数にiを使う習慣って、永久になくならないんだろうな。
942ヽ(´ー`)ノ:03/12/30 22:06 ID:???
俺はほとんど i 使わなくなったなぁ。
943nobodyさん:03/12/30 22:09 ID:???
>>942
そりゃiなんて使えませんからね
944nobodyさん:03/12/31 00:00 ID:???
945nobodyさん:03/12/31 00:02 ID:???
そこに i は無いのかい?
946nobodyさん:03/12/31 00:39 ID:???
>>943
> そりゃiなんて使えませんからね

 ぷ。本当に i (勿論 $i じゃないよ)を使えないと思ってるの?
947nobodyさん:03/12/31 01:14 ID:???
>>946
使ってみろよ(勿論 $i じゃないよ)
948nobodyさん:03/12/31 03:16 ID:???
なんか話が違う方向に行ってないか

大晦日だというのに
949nobodyさん:03/12/31 03:18 ID:???
$!
950nobodyさん:03/12/31 04:00 ID:???
$l $| $i $! $I
951nobodyさん:03/12/31 05:12 ID:???
そういえば、$a,$bの他に$nもヤバイんじゃ無かったっけ?
952nobodyさん:03/12/31 10:26 ID:???
>>951
もしかして \n ?(^-^)
953nobodyさん:03/12/31 13:09 ID:???
$u

URLじゃなかったっけ(;´д`)?
954nobodyさん:03/12/31 13:11 ID:???
『うろ覚えだけど変数の話をしてみよう』スレになってきたな
955nobodyさん:03/12/31 16:33 ID:iz4Gmtql
テキストファイルに保存されている151,241といったような数字を
151だけ$number1などに代入するのはどのようにすればよいですか?

何から手をつけてよいのかちんぷんかんぷん。
956nobodyさん:03/12/31 16:37 ID:???
>>955
漏れらも君がどこでつまづいているのかちんぷんかんぷんだ。
957955:03/12/31 17:05 ID:???
例えばcnt.txtというファイルの中に「151,241」とデータがあって
それを
open(IN,"cnt.txt");
@log = <IN>;
close(IN);

という形で読んだとして
@logの151,241という数字をどのように
$number_1→151 $number_2→241
とそれぞれに割り当てるのかがちんぷんかんぷんなんです。
958nobodyさん:03/12/31 17:09 ID:???
>1は読んだ?
959nobodyさん:03/12/31 17:20 ID:???
>>957
こういう例でいいっすか

$str = "151,241";
($number_1,$number_2) = split(',',$str);
print "number1 = $number_1 : number2 = $number_2 \n";
960nobodyさん:03/12/31 20:17 ID:???

外部fileを読み取りたい場合はそのフォーマットを述べなさい。
それだけで充分。

while(<IN>){
no strict 'refs';
$num++;
${'number_' . $num} = split (/,/$_);
}

一番手っ取り早いのはこれだけどあまり勧められた方法じゃない。
961nobodyさん:03/12/31 20:18 ID:???
↑やっぱすごく間違えた。流して。
962nobodyさん:03/12/31 20:32 ID:???
>>960

while(<IN>){
 my @log = split (/,/$_);
 my $num = 0;
 foreach my $logs (@log){
  no strict 'refs';
  $num++;
  ${'main::number_' . $num} = $logs;
 }
}

これを書きたかったのかな?
てかスカラーに入れる意味がなさげな典型な悪寒。
963nobodyさん:03/12/31 20:37 ID:???
つか俺も間違えてる……………鬱
my $num = 0;
これループの外で…。あー、こんな時にPCに向かってるから頭バグったっぽい。
964nobodyさん:03/12/31 23:13 ID:???
ファイルオープンせずにファイルを空にする方法ってあります?
965nobodyさん:03/12/31 23:44 ID:???
>>964
理解 分解 再構築
966nobodyさん:04/01/01 00:31 ID:???
錬金術でつか?
967nobodyさん:04/01/01 01:58 ID:???
>>964
truncate
968nobodyさん:04/01/01 02:48 ID:???
>>967
> ファイルオープンせずに
969nobodyさん:04/01/01 02:53 ID:???
>>964
touch and rename
970967:04/01/01 03:26 ID:???
>>968
http://www.harukaze.net/~mishima/perl/man/perlfunc.1.html
>truncate FILEHANDLE,LENGTH
>truncate EXPR,LENGTH
> FILEHANDLE 上にオープンされたファイルか、EXPR で名前
> を表わしたファイルを、指定した長さに切り詰めます。
> システム上に truncate がインプリメントされていなけれ
> ば、致命的エラーとなります。

truncate('test.txt', 0); # test.txtファイルを0バイトに切り詰める
971nobodyさん:04/01/01 03:28 ID:???
そろそろ次スレ立てない?
972nobodyさん:04/01/01 03:36 ID:???
そだね。
part28 http://pc2.2ch.net/php/kako/1063/10635/1063562491.html
part29 http://pc2.2ch.net/php/kako/1066/10662/1066286828.html
過去ログ化早い。
変更はこれぐらい?
973nobodyさん:04/01/01 03:46 ID:???
立てました。
Perl コーディング初心者質問コーナー Part31
http://pc2.2ch.net/test/read.cgi/php/1072896288/
974nobodyさん:04/01/01 06:47 ID:???
975nobodyさん:04/01/01 10:33 ID:???

ところでエディタのタブはみんな何文字にしてる?

ちなみに俺は8文字で、タブ文字も表示させてる。
最近4文字でタブ非表示に切り替えようと思ってるだけど見にくい。。。全然慣れない。
976nobodyさん:04/01/01 11:01 ID:???
タブを入力すると自動的に必要なインデント分のスペースに変換される。
ちなみに4桁インデントだから1タブ=4空白だな。
977964:04/01/01 11:05 ID:???
>>970
できました。多謝。
978nobodyさん:04/01/01 12:37 ID:???
1tab = 4space タブ、改行、EOF表示。
場合によっては全角スペースも表示。
979nobodyさん:04/01/01 16:12 ID:???
>975
4
8だと横に長くなりすぎて読み難い。
980nobodyさん:04/01/01 17:41 ID:KSdPAoW/
#!/usr/bin/perl -w
の最後に -w 付けるのと付けないのではどう異なるんでつか?
981nobodyさん:04/01/01 17:58 ID:???
>>980
Perlの機嫌がよくなる

会話で「〜w」って使うでしょ?
アレのこと
982nobodyさん:04/01/01 18:02 ID:???
983975:04/01/01 18:17 ID:???
みんな4なんだなー。
やっぱ俺も早く4になじもう。周囲との互換性のために。

>>978
改行まで表示させたらウザくない?
俺は左側に行番号表示させてるから普通にしてても改行分かる。
俺はタブ、EOF、全角スペースは常に表示させてる。
4で表示させる時はタブ消す。


ちなみに秀丸でした。
984nobodyさん:04/01/01 19:51 ID:???
4のほうがイイヨー
8は横行き過ぎだ
2重ネストで見にくくない?3重になると・・・
985nobodyさん:04/01/01 19:53 ID:???
中級になるとネストしないように書けるようになるよ。

それがPerlの醍醐味
986nobodyさん:04/01/01 20:24 ID:???
上級になるとループすら使わずに書けるようになるもんなぁ。
987984:04/01/01 21:02 ID:???
>>985>>986
そうか・・・
俺はまだ未熟者なんだな。
精進します
988nobodyさん:04/01/01 21:04 ID:K8LfWOde
慣れると2重くらいぜんぜんきにしない。
コードの部分が必要な機能満たしているかどうかきにするだけで。。。
989nobodyさん:04/01/02 00:21 ID:???
>>987
grep map $_ @_ とりあえず、これらの使い方を覚えてみるといい。
驚くほどコードが短くなる。
引数を省略した時の動作とかを覚えるのも手だろう。
990nobodyさん:04/01/02 00:57 ID:???
>>823 とか流石なくらいに短いよな。

しかしコードの長さと可読性は量子力学的に反比例の関係になるので、
自分の身の程をわきまえつつ、ほどほどにな。
991nobodyさん:04/01/02 01:23 ID:???
>>990
> しかしコードの長さと可読性は量子力学的に反比例の関係になるので、
それは一概に言えないと思うけど...
perlじゃないけど関数型言語なんかコードが短くて可読性の高い例。
で、量子力学的に反比例ってどういう意味?量子力学的にって
992nobodyさん:04/01/02 01:37 ID:???
不確定性原理に基づいた結論なのだろう。
993nobodyさん:04/01/02 01:37 ID:???
量子力学的にっていう言葉がなぜ出てくるか分からないが
・読みやすければ長い
・短くすれば読みにくい
つまり、
可読性∝コードの長さ/1
ということではないだろうか!!!!












・・・
994984:04/01/02 01:40 ID:???
grepを見るとELTのGrip!を連想してしまう俺って・・・
995nobodyさん:04/01/02 01:41 ID:???
そんなあなたに連想配列(ププラッチョ
996nobodyさん:04/01/02 01:41 ID:???
禿しくワラタ(ゲラプップー
997nobodyさん:04/01/02 01:42 ID:???
>>995>>996
ワラタ
998nobodyさん:04/01/02 01:43 ID:???
>>997
だろ?
999nobodyさん:04/01/02 01:43 ID:???
>>998
ですな
1000nobodyさん:04/01/02 01:46 ID:???
1000!
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。