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

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

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

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

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

過去ログやお勧めサイトは >>2-10
2nobodyさん:03/09/15 03:01 ID:???
関連スレ
【Perl上級者コーナーPart01】
http://pc2.2ch.net/test/read.cgi/php/1024741312/
CGI: Common Gateway Interface part 11
http://pc2.2ch.net/test/read.cgi/php/1055597189/
【Perl,CGI】参考書籍 第三版
http://pc2.2ch.net/test/read.cgi/php/1030209573/
【 スクリプト改造工房 PART 6 】
http://pc2.2ch.net/test/read.cgi/php/1047806915/
△▲ 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/09/15 03:04 ID:???
4nobodyさん:03/09/15 03:05 ID:???
5nobodyさん:03/09/15 03:05 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/09/15 03:06 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/
7nobodyさん:03/09/15 03:07 ID:???
 [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/09/15 03:13 ID:???
9nobodyさん:03/09/15 03:44 ID:BiFx7sod
ttp://member.nifty.ne.jp/hippo2000/perltips/dbimemo.htm
>カラムをハッシュの内側の値に結びつけるという、さらにすごい例を示します(H.Merijn Brandに感謝):
> $sth->execute;
> my %row;
> $sth->bind_columns( \( @row{ @{$sth->{NAME_lc} } } ));
というのがあるんだが、これをサブルーチン化して、この%rowに結びつけるんじゃなくて、サブルーチンの外側からハッシュのリファレンスを渡して、それに結びつけて外側で使うって、可能?
イメージとしては、
main:
my %hoge;
$obj->exec_bind(\%hoge);
while($obj->next){
print $hoge{'NAME'}."\n";
}

######
sub exec_bind{
my $class = shift;
my $hash_ref = shift;
my %hash = %$hash_ref;
#略。prepare やら execute やら
$sth->bind_columns( \( @hash{ @{$sth->{NAME_lc} } } ))
}
sub next{
my $class = shift;
#クラスにひも付いているsthに対してfetchするだけ(略してます)
return $sth->fetch;
}

で、NAMEの一覧が表示される、という。
現状、改行がそのSQLの結果行の数だけ表示されています。
要するに、$hoge{'NAME'}のところにうまくバインドされていないのだけれど、SQLの実行はうまくいっているのです。
bind_columnsのところはどうかいたらうまくいくのでしょう??
10nobodyさん:03/09/15 04:27 ID:???
>>9
%hash(%$hashrefからのコピー)の内側に結び付けられてるね、きっと。
$hashrefの内側のリファレンスの配列は取れた。
bind_columnsでうまくいくかわからんけど。

use strict;
my @name=qw(a b c d e);
my %hash=();
my $hashref=\%hash;
my @refs=\(@$hashref{@name}); #hashrefだけ使って結び付け
${$refs[0]}='a';
print join ",",$refs[0],\$hash{a};
print "\n";
print join ",",$refs[1],\$hash{b};
print "\n";
print ${$refs[0]},$hash{a};
11nobodyさん:03/09/15 06:27 ID:OyC65Kol
>>9

3行目に
open (IO,"+<$logfile");
11行目に
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,$_);
 }
}
を入れると直ります。
129:03/09/15 16:47 ID:BiFx7sod
>>10

前述のソースで、
$sth->bind_columns( \( @hash{ @{$sth->{NAME_lc} } } ))

$sth->bind_columns( \( @$hash_ref{ @{$sth->{NAME_lc} } } ))
に変えたら、できました。

勉強になりました。多謝。
13前スレ993:03/09/15 17:59 ID:???
>>前スレ999さん、ありがとうございます。
やりたい事は、あるクラスに2種類の振る舞いを与えたいのですが、
その振る舞いの違いが、組み込み関数のいずれを使うかといった違いのため
その関数のリファレンスを取って処理を切り替えようとしたところ、
"Not a CODE reference at ..."と言われてしまいました。

ソースで言うと以下のようなことをやろうとしております。
{ package Link;
  sub Switch {
    ・・・略・・・
    if ($flag) { $self->{create_func} = \$link; }
    else { $self->{create_func} = \$symlink; }
  }
  sub Create {
    ・・・処理・・・
    &{$self->{create_func}}($src, $dst);
    ・・・処理・・・
  }
}

なので、Filter::Simpleはちょっと違うかもです。
うーん。sub {} とか、eval で逃げちゃうのが楽かなぁ。
14nobodyさん:03/09/15 21:56 ID:???
15nobodyさん:03/09/15 22:34 ID:???
$hoge{$hoge}
ってどういう意味ですか?
16nobodyさん:03/09/15 22:45 ID:???
キー$hogeで取り出せる、ハッシュ%hogeに含まれる要素。
1716:03/09/15 22:48 ID:???
訂正。キー$hogeと対を成す、ハッシュ%hogeに含まれるバリュー。
18nobodyさん:03/09/15 23:35 ID:W9KyN8NY
DBD-Oracleをインストールしたいのですができません。
Error: PPD for 'DBD-Oracle.ppd' could not be found.
ってでてしまいます。パッケージダウンロートしてきてReadmeに書いてあるとおりに
展開したディレクトリで
ppm install DBD-Oracle.ppd とかやってみたんですけどこちらもだめでした。
ActivePerl 5.8.0をつかっています。どなたか知恵を貸してください
1918:03/09/15 23:37 ID:W9KyN8NY
すいません。二行目のエラーは
ppm install DBD-Oracleとやったらでました。
20nobodyさん:03/09/16 00:03 ID:???
2118:03/09/16 00:24 ID:???
>>20
うう。ちろっと見てみたけど全然わからんです。
どこらへんみればいいんだろうか・・・
22nobodyさん:03/09/16 00:59 ID:???
23あぼーん:あぼーん
あぼーん
24あぼーん:あぼーん
あぼーん
25あぼーん:あぼーん
あぼーん
26あぼーん:あぼーん
あぼーん
27あぼーん:あぼーん
あぼーん
28あぼーん:あぼーん
あぼーん
29あぼーん:あぼーん
あぼーん
30あぼーん:あぼーん
あぼーん
31あぼーん:あぼーん
あぼーん
32nobodyさん:03/09/16 10:08 ID:???
IPアドレスからHNを返すサブルーチンは、次のうちどちらが効率的ですか?

sub getHNfromIP {
  my $IP = @_[0];
  if ( $IP eq "111.11.11.11"; ) { $HN = "Aさん"; }
  elsif ( $IP eq "111.11.11.22"; ) { $HN = "Bさん"; }
  elsif ( $IP eq "111.11.11.33"; } { $HN = "Cさん"; }
  …
  else { $HN = "?"; }
  return $HN;
}

sub getHNfromIP {
  my $IP = @_[0];
  %HN = ('111.11.11.11'=>'Aさん','111.11.11.22'=>'Bさん',111.11.11.33'=>'Cさん' … );
  return $HN{$IP};
}

33nobodyさん:03/09/16 10:12 ID:???
>>32
ハッシュを使え。ソースも短くてすむ。
?が抜けてるけど。
3432:03/09/16 10:14 ID:???
>>33
おお、そうですか。どうもです。
急いで書いたので抜けがありました。
35nobodyさん:03/09/16 10:33 ID:???
0014の形式(整数に対して、0で4桁にそろえてる)
を、14(もとの整数)に変換するにはどうすればいいのでしょうか?
36nobodyさん:03/09/16 10:36 ID:???
>>32
つか、バグがあるぞー。
それに、実行の度にハッシュを作るのもなんだかなあと思える。
大した差はないかも知れないけど。

use strict; # つけたほうがいいだろ?
%Main::IP2HN = ('111.11.11.11'=>'Aさん','111.11.11.22'=>'Bさん',111.11.11.33'=>'Cさん' … );
sub getHNfromIP {
  my $IP = $_[0];
  return ( exists ( $Main::IP2HN{$IP} ) ? $Main::IP2HN{$IP} : '?';
}
3732:03/09/16 10:44 ID:???
>>36
確かに。実行の度にハッシュというのは私も少し不安でした。
「return ( exists…」という書き方かっこいいですね。
こちらでやってみます。
3832:03/09/16 10:50 ID:???
あと、36の書き方のでgetHNfromIPを色んなスクリプトで使いまわしたい場合、
パッケージにすれば良いのですか?
39nobodyさん:03/09/16 11:10 ID:???
# 下記のモジュールの使い方
package Main;
my $ip = $ENV{REMOTE_ADDR};
my $handle = IP2HN->getHNfromIP($ip);
$handle ||= 'IPがないよ!';

# IPを登録したハンドルに変換するモジュール
# 引数:IPアドレス
# 返値:対応するハンドル。
# 備考:引数を与えないと、undefを返す。IPに対応するハンドルがないと、?を返す。
package IP2HN;
use strict;
%IP2HN::list = ('111.11.11.11'=>'Aさん','111.11.11.22'=>'Bさん',111.11.11.33'=>'Cさん' … );
sub getHNfromIP {
  my $invocant = shift;
  my $IP = shift;
  return undef unless ( $IP );
  return ( exists ( $IP2HN::list{$IP} ) ? $IP2HN::list{$IP} : '?';
}

こんな感じかー。
1.呼び出し方に注意。# $handle = IP2HN->getHNfromIP($ip);
2.なんかサブルーチンの名前とか長いから、もうちょっと短くなるように考えてみるとか。
3.ハンドルの登録はハッシュで実装するのがいいだろうけど、
リストをソースにベタ書きするのもアレだから、外部ファイルを読み込むようにしてはどうか。
40nobodyさん:03/09/16 11:11 ID:???
>>35
$num = sprintf '%04d', 14;
print $num, "\n"; # 0014
print $num + 0; # 14

>>38
#--- Conf.pm ---
package Conf;
use base 'Exporter';
our @EXPORT = qw(get_HN_by_IP);
my %HN = (...);
sub get_HN_by_IP { return $HN{$_[-1]} || '?' }
1;
#--- script ---
use Conf;
my $HN = get_HN_by_IP($IP);
41nobodyさん:03/09/16 11:19 ID:???
>>35
頭に0が並んでる数値は、内部的には文字列として扱われている。
文字列なんだけど、強引に数の計算をしてしまえば、
内部で暗黙のうちに数値への変換がなされる。
これを利用して、0を足す(引くでもいいけど)と、文字列から数値になる。

CGI的な使い方になるが、「このフォームからは数字しか受け取りたくない」と
思った時には、フォームの内容に0を足したりすると、簡単な入力チェックになる。
どんな風に変換されるかは、らくだ本を読んでしっかり確認すること。
あくまで簡単チェックだから。
4239:03/09/16 11:22 ID:???
>>38の方が、呼び出し方は簡単になっていい。反省。

ただ、>>38のやり方だと、存在しないハッシュキーを与えるたびに、
どんどんハッシュが増えていくんだよな。
ま、たいしたメモリ消費じゃないか。
4339:03/09/16 11:23 ID:???
違う。>>40のやり方だ。ごめん。
4432:03/09/16 11:29 ID:???
>>39-40
ありがとうございます。
40は高度過ぎて私には理解できなかったのでとりあえず39でやってみます。
4540:03/09/16 11:58 ID:???
>>32
「ハッシュが増えていく」ってのはどういう意味でしょうか?
少なくとも
%foo = ();
$foo{'foo'};
print exists $foo{'foo'} ? 'exist.' : 'undef.';
は undef が返ってくるので、存在しないキーを評価しただけで
ハッシュの要素が増えるわけではないようですが、内部的には
メモリを食っていくんでしょうか?
またそれはどうやって確認できますか?
4639:03/09/16 12:49 ID:???
>>45
失礼しました。私の思い違いでした。

技術評論社 CGI&Perlポケットリファレンス 初版 1999.04 P269 より
「リリース5.005_02では、
 if (exists $ref->{"x"}{"y"}{$key} ) { ... }
のような複雑なレコードのハッシュキーの存在テストを行った場合、
$ref->{"x"}, $ref->{"x"}{"y"}が存在しておらず、ハッシュキー$keyが存在していないケースでも、
$ref->{"x"}, $ref->{"x"}{"y"}が自動的に生成されてしまいます。
これは将来のリリースで対処される予定です。


この一文を読んだ当時の私は
「ハッシュのキー回りについては(バグがありそうなので)厳密にやった方がよさそうだ」
と考えてしまったようです。
それがいつのまにかハッシュキーに関する誤解になっていました。

同じコードをこちらでも確認しましたが、同じ結果になりました。
# v5.6.1 built for MSWin32-x86-multi-thread
ですので、この点に関しても>>40氏のコードの方が優れていることになります。
勉強になりました。ありがとうございます。

>>32氏へ。
>>40氏のコードの方が全ての面で私のよりも優れています。
そちらを使う方をおすすめします。
47nobodyさん:03/09/16 13:34 ID:???
>>46
多次元ハッシュにいきなりアクセスした場合は、中間のみ動的に
生成されます。

my $ref = {};
my $key = 'z';
print 'z' if exists $ref->{'x'}{'y'}{$key};
print 'y' if exists $ref->{'x'}{'y'};
print 'x' if exists $ref->{'x'};
print 'z' if exists $ref->{'x'}{'y'}{$key};
# yx

5.005_03 でも 5.8.0 でも同じ結果になったので、これは仕様だと考えて
いいと思います。こういう構造で疎な場合は確かに注意が必要ですね。
48nobodyさん:03/09/16 14:55 ID:???
>>47
確かに中間は生成されますね。末端は生成されない、と。

……Perl6では修正されるんでしたっけ?
49nobodyさん:03/09/16 18:12 ID:???
あるディレクトリに、ip****.txt
という名前のファイルが多数ある。(**は月日を書いてある)
そして、すべてのip****.txtを開いて一つの配列に入れたい。
ファイルの中身は
123.123.456.7
234.567.7.8



という風に一行に1個IPがある。
一個のファイルを開いて配列に入れるのは問題ないんですが、
ディレクトリ内で、条件に当てはまるファイルすべてを開く、というのが
分かりません。ご教授お願いします。
50nobodyさん:03/09/16 18:19 ID:???
>>49さま、>>1を目にお入れください。
「条件」が抜けとる。
51nobodyさん:03/09/16 18:25 ID:???
>>49
glob()でファイルリストを取得して、あとはforeachでぶん回せばよい。
5249:03/09/16 18:26 ID:???
>>50
条件、と言いますと?
ip***.txtというファイルをすべて開いて配列に格納したい、ということです。
本読んで今、ちょっと自分なりに考えてみました。

opendir DIR, ".";
@files = readdir DIR;
foreach $file (@files){
 if($file_=~ /ip*.txt){
  open(FILE, "$_");
  foreach $ip (<FILE>){
   push(ip,$ip);
  }
 }
}

これは効率が悪いですか?
もう少しスマートなのがあったらお願いします。
5349:03/09/16 18:27 ID:???
すいません。
×open(FILE, "$_");
○open(FILE, "$file");
です。
54nobodyさん:03/09/16 18:27 ID:???
わかって使う分には便利な機能だし、修正はされないだろう

ちなみに、自動生成されないとかなり面倒なことになる

my %h;
my $has_x_y = exists $h{x}{y}; # Runtime error: Not a HASH reference
$h{x} = {};
$has_x_y = exists $h{x}{y}; # OK: false

my $has_x_y_z = exists $h{x}{y}{z} # Runtime error
$h{x}{y} = {};
$h{x}{y}{z} = 1;
$has_x_y_z = exists $h{x}{y}{z}; # OK: true
55nobodyさん:03/09/16 18:39 ID:???
>>52
それでいいんじゃないの?
できればちゃんとclosedirするようにね。
56nobodyさん:03/09/16 18:48 ID:???
>>52
読み込まれるファイルの末尾が、IPで終わってるのか、改行で終わってるのか、
判断しなくていいのかね?
何も考えずそのままpushしていくと、
xxx.xxx.xxx.xxxyyy.yyy.yyy.yyy
なんてーのができるかも。
5749:03/09/16 19:05 ID:???
とりあえず上のソースは即席で間違いだらけだったの動くように書き直しました。

$dir="D:\iplist";

opendir DIR, "$dir";
@files = readdir DIR;
close DIR;

foreach $file (@files){
 if($file =~ /ip/){
   open(FILE,"${dir}/$file");
   foreach(<FILE>){
     push(@ip,"$_");
   }
   close(FILE);
 }
}

foreach(@ip){
print "$_\n<br>";
}


>>56
改行で終わっていた場合はどうなってしまうのですか?
詳しく教えていただけないでしょうか?
5849:03/09/16 19:05 ID:???
また間違えました。スイマセン
×$dir="D:\iplist";
○$dir="D:/iplist";
59nobodyさん:03/09/16 20:33 ID:???
vvvvvvvvvv
aaaaaaaa
22222222
44444444
11111111
55555555
bbbbbbb
3333333

これをソートして
11111111
22222222
3333333
44444444
55555555
aaaaaaaa
bbbbbbb
vvvvvvvvvv
こうしたい。
しかしならない。
やってみたのは文字列、数字、二つの配列に分けた。
1つの配列で数字、文字の順でソートするようにできないでしょうか?
60nobodyさん:03/09/16 20:48 ID:???
>>59
ただ sort したらそうなったけど…?
61nobodyさん:03/09/16 21:08 ID:???
www.www.www.www
xxx.xxx.xxx.xxxyyy.yyy.yyy.yyy
zzz.zzz.zzz.zzz

ってなるって事?
62nobodyさん:03/09/16 21:31 ID:???
>>57
ん、ちょっとこっちも誤解があったな。その点は謝るです。

まず、IPが入ってるテキストは、IPが改行区切りで入ってるんだよね。
だとしたら、「一行取り出した」場合は、最後の改行もその行にくっついてくる。
従って、@ipに入っているのは、「IPアドレス+\n」の文字列ばかりの配列。

心配なのは、最後に改行がついていても構わない、気にしないのかどうか。
もしついてたら、普通にIPと比較した場合引っかからなくなるだろ?
それはそっちの立場としてまずくはないだろうか?

まあ、さておき。

$dir = 'ディレクトリ';
opendir ( DIR, $dir );
@files = grep { /^ip.+\.txt$/ } readdir ( DIR );
closedir ( DIR );
foreach $file ( @files ) {
  open ( FILE, $file );
  while ( <FILE> ) {
    chomp; # これですっきり。
    push @ip, $_;
  }
  close ( FILE );
}
こんな感じじゃね?
6362:03/09/16 21:34 ID:???
あ、openとこ間違ってたか。

正しくは、こう。
open ( FILE, $dir.'/'.$file );
6449:03/09/16 22:17 ID:???
>>62>>63
あーそうでした。
chomp忘れてました・・・
ありがとうございました。
65nobodyさん:03/09/16 23:18 ID:R8eB7Ifo
<input type="submit" value="合計" class="button1">
というボタンを小さくしたいのですが、
どうやったら出来るでしょうか?
66nobodyさん:03/09/16 23:20 ID:???
Perl コーディング初心者質問コーナー Part28
1 名前:nobodyさん 03/09/15 03:01 ID:hl+VfJ8P
いらっしゃーい、Perlのコーディングで困ってる人のスレです。
67nobodyさん:03/09/16 23:21 ID:???
>>65
とりあえず、Perlじゃできないとだけ。
6865:03/09/16 23:29 ID:R8eB7Ifo
タグじゃないよね?
6965:03/09/16 23:32 ID:???
でもさあ、知ってるんならぱっと答えれば良い事だし、
煽ってる奴は結局知らないだけなんだろうな。
70nobodyさん:03/09/16 23:34 ID:???
>>65
とりあえずマジレスしとくと、
Javaスクリプト池
71nobodyさん:03/09/16 23:39 ID:???
うん、知らないよ。
72nobodyさん:03/09/16 23:39 ID:eIqFz7x6
print qq(<input type="submit" style="width:5px">);
7332:03/09/16 23:41 ID:???
>>65
デスクトップ上で右クリックして解像度を最大に上げてみてください。
74nobodyさん:03/09/16 23:44 ID:???
>>65はAA荒らし。気付けよおまいら。
75nobodyさん:03/09/16 23:57 ID:???
なかなか愉快なスレですね。
76nobodyさん:03/09/17 00:46 ID:???
>>65
ボタンの大きさとかどうでもいい。
そんな枝葉末節にこだわる奴が作るもにロクなものはなさそうだ。
ついでに、スタイルシートの本が一冊あれば全て解決するようなことを聞く奴も、
ロクなもんじゃない。
77nobodyさん:03/09/17 00:47 ID:???
スレ違いでも悪びれずに、煽って答えを催促するのはDQNの常套手段。
78nobodyさん:03/09/17 00:55 ID:???
放置もできずにこぞって餌をやる奴もよっぽど迷惑だがな
79nobodyさん:03/09/17 01:13 ID:???
人が良いな・・・おまいら。
80nobodyさん:03/09/17 02:43 ID:???
あのー。かなり初歩的で初心者な質問なんだけど…。
sjisで「ー」を使うとエラーになるのはなぜでしょう??
正規表現でも使えないし、
以下のように書いただけでもエラーになるんですが…。

$main::ref = {
 q[ティーカップ] =>
 {
  #略
 },
};

まぁ、普段はEUC使ってるんだけどね。
81nobodyさん:03/09/17 03:08 ID:???
>>80
「ー」の2バイト目が [ と同じ文字コードだから。
82nobodyさん:03/09/17 03:24 ID:???
>>80
次のコードを実行してみ。

#!/usr/bin/perl
$_ = <<'EOF'; # $_に「ティーカップ」を代入
ティーカップ
EOF
tr/\x7f-\xff//d; # 8ビットコードを除く
print; # 表示

<<'EOF' は、デリミタ以外のどんな文字列でもエスケープせずに代入できるから、
どうしてもShift_JISでやりたいなら覚えておくと便利かもな。
まぁどのみち初心者にお勧めはしないけど。
8380:03/09/17 03:25 ID:???
(´Д`;)

>>81
ありがとう。
sjisなんてもう使わないよ。sjis使うとイツーモ起きるんだよね、こゆーの。
ホントはwinでパパッと動かす時はsjis使うのが手っ取り早いんだけどなぁ。。
8480:03/09/17 03:29 ID:???
>>82
時間差。ありがとう。
でも、そんなめんどくさいの嫌いだし、文字コードもめんどいから全然覚えてないんだよね。
「\」になるsjisは少し覚えてたけど。イツの間にか。
8582:03/09/17 03:30 ID:HZ7eFLYT
>>83
必要のない半角カナコードを残すために、無理矢理ASCII領域に片足を突っ込むような
無理矢理な文字コード体系を思いついた某マイクロソフト社が全て悪い。
・・・ということにしとけ。

>>84
全部の文字の前に入れとくと吉かも。それでもエラーが出る場合は、文字の後にも。
86nobodyさん:03/09/17 03:31 ID:???
全部の文字の前に「\」をな。分かると思うけど。
8782:03/09/17 03:50 ID:HZ7eFLYT
ちと作業待ちでヒマなので余計だとは思うが、知らない人もいるかもしんないので追伸。

Shift_JISの2バイト目で、ASCII領域に引っかかってるのは、\x40-\x7Eの範囲。
この中で、記号に属するのが、

@ [ \ ] ^ _ ` { | } ~

とこれだけ。だからq[..]を使うのはちょっと危険かもな。

クオートや「$」が混じる心配しなくて良い。ダブルクオートで囲むと
「@」と「\」が問題になるが、シングルクオートなら問題になるのは、「\」だけ。

んで、2バイト目が「\」の場合、どうやってエスケープするかというと、
その後ろに「\」を連ねれば、2バイト目を含めて「\\」となりちょうど
エスケープされた状態になるので、うまく行く。かなり強引な解決方法。

<<'EOF'ならその問題もないが、コードが読みにくくなるのが難点。
88nobodyさん:03/09/17 06:43 ID:???
>>80-86
Shift-JISに関する話題は呆れるくらい繰り返されてるよな。
どうしてもShift-JISじゃなきゃダメな時はgettextやResourceBundleのようなものを作れと言いたい。

ところでShift-JISじゃなきゃダメな時ってどんな時?
ActivePerlはEUCやUTF-8じゃダメなの?
89nobodyさん:03/09/17 09:46 ID:???
・エディタがEUC対応してない
・シフトJIS出力なのでシフトJISで書いたほうが変換とかしなくてすむ
・めんどくさい
・わからない

どれも本人の努力なり工夫なりでなんとかできる。
90nobodyさん:03/09/17 10:17 ID:???
2番目の「変換しないですむ」と、
3番目の「めんどくさい」って理由はけっこう正当だと思われ。

ビシッした物じゃなくて、
数分で作って1回使ってポイ。なんてコトもあるしねー。(さらにそれを連打で繰り返しってコトもあるし)
あとは、クウォートした文字列のビットまでイチイチ考えなきゃならないのもやってられん。

結論:だからEUC使え。WINだと手っ取り早くなくて嫌ならUNIX使え。Mイクロ死ね。
91nobodyさん:03/09/17 10:36 ID:???
ちゃんとわかってSJIS使えるならそれでいいと思うよ

imodeなどの携帯サイトもあるしね
92nobodyさん:03/09/17 12:40 ID:???
というかJcode使うのだ。
93nobodyさん:03/09/17 13:45 ID:???
Encode使えよ
94nobodyさん:03/09/17 14:57 ID:???
どれでもいいじゃん
95教えて君:03/09/17 15:18 ID:oNybdODB
http://www.geocities.co.jp/SiliconValley/8428/annevote.txt

配布CGI改造について聞きたいのですが、
このプログラムで、記事を古いもの順に上から表示するには
どこを改造すればよいのか教えて下さい。
デフォルトでは、新しい記事から順に上から表示されます。
よろしくお願いします。
96sage入れるとこ間違えた馬鹿:03/09/17 15:32 ID:???
>>95
改造スレの新スレ立てたんでこっちでどうぞ

【 スクリプト改造工房 PART 7 】
http://pc2.2ch.net/test/read.cgi/php/1063780103/
97あぼーん:あぼーん
あぼーん
98nobodyさん:03/09/17 16:58 ID:VZUOb5JF
print おーばーらいどしたら?
99あぼーん:あぼーん
あぼーん
100あぼーん:あぼーん
あぼーん
101あぼーん:あぼーん
あぼーん
102あぼーん:あぼーん
あぼーん
103あぼーん:あぼーん
あぼーん
104あぼーん:あぼーん
あぼーん
105あぼーん:あぼーん
あぼーん
106nobodyさん:03/09/17 18:03 ID:???
たまには回答しろよなコピペヲタクちゃん(w
107nobodyさん:03/09/17 18:26 ID:???
>>106
if文すら理解できない小学生に無理難題を押し付けちゃ駄目だよ
108nobodyさん:03/09/17 19:00 ID:???
バカの後に不必要な>>xxでリンクつけないほうがいいよ。
109nobodyさん:03/09/17 19:50 ID:???
新入社員キタアアアー(=゚ω゚)ノ
女の子とは無縁だと思ってたうちの職場に、つっここついに花が咲いたよ!!
つうか、22歳でPerl、PHP、JSPサラサラ書いてるんですが…。僕負けてますが…。
ここまできたらPerlマスターになるしかないか(つд`)
110nobodyさん:03/09/17 19:54 ID:???
>>109
オメー&ガンガレ!
111nobodyさん:03/09/17 20:30 ID:???
    ┌────┐ / ̄\ 「全部彼氏に教わったらしい・・」
    │┌──┐│|    | と>>109がうなだれてる夢をみますた。
    │|    ││ \_/
┌─┘│    ││
└──┘    └┘
112nobodyさん:03/09/17 20:38 ID:???
>>111
奇遇だな。俺も同じ夢見たよ。
113nobodyさん:03/09/17 22:47 ID:uqvgNz0w
おれに答える知識があるわけねーだろ!ヴォケ!!それより下げろよ、コノヤロー!
                                (巛ミ彡ミ彡ミ彡ミ彡ミ彡)ミ彡ミ彡)ミ彡)
                             ,,从.ノ巛ミ    彡ミ彡)ミ彡ミ彡ミ彡)ミ彡)''"
                           人ノ゙ ⌒ヽ         彡ミ彡)ミ彡)ミ彡)''"
  ∧_∧              ,,..、;;:〜''"゙゙       )  从    ミ彡ミ彡)ミ彡,,)
√(:::.`∀´)アヒャヒャヒャヒャヒャ!_,,..、;;:〜-:''"゙⌒゙          彡 ,,     ⌒ヽ   彡"__∧ あ゛〜
| (:::..、===m==<|::::::゙:゙                    '"゙          ミ彡)彡'>>109
|_=|:::. |::. | '    ``゙⌒`゙"''〜-、:;;,_              )   彡,,ノ彡〜''"  ,,ミつ つ
 (__)_)              ゙⌒`゙"''〜-、,,     ,,彡⌒''〜''"人 ヽノ,,ミ  人 ヽノ   熱いよ〜
                            "⌒''〜"し(__)  し(__)"''〜し(__)助けて〜
    ∧                                     ママーン     
/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
| Perl使うアホどもを抹殺完了!!
114nobodyさん:03/09/17 23:13 ID:???
>>113
ハァ?氏ねよバーカ
115nobodyさん:03/09/17 23:23 ID:???
いくら放置しろっつっても頭ポッポーな馬鹿がいるからなあ
116nobodyさん:03/09/17 23:41 ID:???
115とかな。
117nobodyさん:03/09/18 00:14 ID:???
Perl標準の暗号化する関数としてcryptがありますが、復号が可能な
強度な暗号化関数というものは通常どういったものがあるのでしょ
うか。

初心者質問ですみません。
118nobodyさん:03/09/18 00:20 ID:???
>>117
暗号化のアルゴリズムはPerlとは直接関係ないので、
暗号化スレに行くべし。
プログラム技術板か、セキュリティ板にないか?
119nobodyさん:03/09/18 00:25 ID:???
>>118
Perlにそういう関数がないか聞いているんですが。
120nobodyさん:03/09/18 01:13 ID:???
>>119
リファレンス見るだけで済むようなことを聞く奴は嵐も同然。
121nobodyさん:03/09/18 01:27 ID:???
標準関数じゃないけどCPANにモジュールが幾つかあったな。あとは自分で探せ
122nobodyさん:03/09/18 03:00 ID:t5UOEVw8
掲示板の書き込みで、禁止ワードを
作って、その言葉は書き込めない様
に設定したいんですが、
perl でどう書けば良いんでしょうか?
123nobodyさん:03/09/18 03:42 ID:???
>>122
if ($input =~ /$ngword/){&error;}
こんな感じ?
124nobodyさん:03/09/18 04:34 ID:???
>>89
カメレス気味かもしれんが、
おいらは、ありがちなコードは単語登録してる。

プリコン⇒print "Content-type: text/html\n\n";
ジェイコン⇒&jcode::convert(\$in{$key}, "euc");
みたく。

ウリャ⇒&jcode::convert(\$HTMLALL, "sjis");
みたくポリシー決めときゃ、らくじゃない?

ただ、print "Content-type: text/html\n\n"; を忘れて、そらで言えなくなってしまうが・・・
125nobodyさん:03/09/18 05:51 ID:???
あのーーーーーー。

{
 if(my $aaa){
 }
}

こーやって書いたら、$aaaはドコのスコープで有効カナ?
ifブロックの中が俺の期待値なんだけど。
126nobodyさん:03/09/18 06:30 ID:???
>>124
俺もそれやってる。
そけっと -> socket(SOCK, PF_INET, SOCK_STREAM, getprotobyname('tcp'));
とかね。

ビジネス文章もかなり登録してある。

へいおせ -> 平素お世話になっております。xxのxxでございます。
さしゅけん -> 以上ご査収の上、宜しくご検討下さいますようお願いいたします。

関係ないのでsage
127nobodyさん:03/09/18 06:31 ID:???
>>125
やってみりゃいーじゃん。フック入れるのがそんな面倒か?
128nobodyさん:03/09/18 06:51 ID:???
>>125
my $aaa = 1;
{
  my $aaa = 2;
  if (my $aaa = 3) { print "if1: $aaa\n" }
  if ($aaa) { print "if2: $aaa\n" }
  print "in: $aaa\n";
}
print "out: $aaa\n";
129nobodyさん:03/09/18 08:54 ID:???
この板ばかり構わないで他の板も見て欲しいな。
130nobodyさん:03/09/18 13:02 ID:???
優しくね!!
131nobodyさん:03/09/18 20:28 ID:uVnVZUjf
DB_Fileってのが便利そうだったから、とりあえずRECNOを試してみたらプロバイダでうごかねー。
MT動いてるのになぜだと思ってよく調べたらHASHとBTREEしか使ってやがらねー。
RECNOって使えないもんなん?マジ時間無駄にしたよー!!
132nobodyさん:03/09/18 20:52 ID:???
>>131
最低30〜50メガくらい(目安)の規模にならないと、DB_File自体無駄。
そこまでやるなら、DBMS使おうぜ。
133nobodyさん:03/09/18 23:48 ID:???
1. A.pl から B.pl を 1 分おきに実行させたい。
2. 以下のようにしてみた。
A.pl の内容
open (PID,">./A.pid") or die "Can not touch 'A.pid' :$!";
print PID $$;
close(PID);
chmod 0600,"./A.pid";
for(;;){
 unless(-e "./A.pid") { exit; } # ./A.pid が存在しなければ終了。
 if (time % 60 == 0 && not -e "B.pid") { system "./B.pl &";}
 ほかの処理(数秒で終了)
}

B.pl の内容
open (PID,">./B.pid") or die "Can not touch 'B.pid' :$!";
print PID $$;
close(PID);
chmod 0600,"./B.pid";
処理(数秒で終了)
unlink("./B.pid");
exit;

3. B.pl の終了を待たずに A.pl の作業を続けたいのですが、このような礼儀作法でよいのでしょうか?個人的には少々強引すぎるように感じているのですが。
134age:03/09/19 00:18 ID:6y2Z5YTQ
HTML出力が途中で止まる現象が起きています。
サブルーチンsub1,sub2があり、
MAIN:からsub1を実行するとちゃんと出力されるのですが、
sub2で条件分岐してsub1を呼び出すとHTMLが途中までしか出力されません。
sub1を呼び出すときに引数は無く、またsub1の最後でexitしています。

コードがないと何とも言えないと思いますが、
「これが原因では?」ってのありましたらお願いします。
135nobodyさん:03/09/19 00:23 ID:???
>133
sleep 60; した方が。
別に *.pid 作らなくてもpsの結果見た方がファイル操作なくて楽な気がするし。
>134
とりあえず、
$| = 1; しとけ
136134:03/09/19 00:53 ID:???
>>135
ググってみたんですけど、理解できんかった・・・
出力をバッファリングしなくなる???
どこに書いたらいいのかもワカリマセン。
137nobodyさん:03/09/19 01:02 ID:???
>>136
コード晒したほうが早いと思うが

ま、$| = 1; はわからないならコードの先頭に書いておけば
138nobodyさん:03/09/19 01:02 ID:???
>>136
プログラムの一番最初(とは言っても#!/usr/bin/perlとかのあと)に、

BEGIN{
print "Content-Type: text/html\r\n\r\n";
open(STDERR, ">&STDOUT");
$| = 1;
}
$SIG{__DIE__} = sub { print @_; exit }

って書いてやってみろ。詳しくは面倒だから省略。
139136:03/09/19 01:09 ID:???
Scalar found where operator expected at hoge.cgi line 24, near "$Conf" (Missing semicolon on previous line?)
syntax error at hoge.cgi line 24, near "$Conf " BEGIN not safe after errors--compilation aborted at hoge.cgi line 31.

こんなん出ました。どういうことでしょう?
140138:03/09/19 01:11 ID:???
>>139
やっぱエラーで止まってたか。

みての通りだ。24行目が間違ってる。前の行のセミコロンがないのでは?
とか言ってやがる。あとは自分で調べれ。
141139:03/09/19 01:14 ID:???
>>140
えぇと、24行目より前はコメント行と上記のコードしか無いんです。
う〜んもうちょっと調べてみます。
ありがとうございました。
142138:03/09/19 01:35 ID:???
つーか、セミコロンがねーの俺のコードじゃねーか。
俺のバカバカバカ。

BEGIN{
print "Content-Type: text/html\r\n\r\n";
open(STDERR, ">&STDOUT");
$| = 1;
}
$SIG{__DIE__} = sub { print @_; exit };

何回もスマンが、これでもっかいやってみてくれ。
143141:03/09/19 01:42 ID:???
>>142
上記コード入れましたが、エラー出ませんでした。

で、自分なりに色々調べてみて、KCatchていうモジュール
http://www.kawa.net/xp/index-j.html
を入れてみました。
んで実行したところ、
[hoge.cgi:20:die] Global symbol "$Admin_password" requires explicit package name.
Global symbol "$Send_BCC" requires explicit package name at (eval 1) line 10, <DATA> line 2392.
Global symbol "$Conf" requires explicit package name at (eval 1) line 16, <DATA> line 2392.
Global symbol "$Jcode" requires explicit package name at (eval 1) line 17, <DATA> line 2392.
Global symbol "$Mime" requires explicit package name at (eval 1) line 18, <DATA> line 2392.
BEGIN not safe after errors--compilation aborted at (eval 1) line 23, <DATA> line 2392.

といろいろ出ました。
これは変数名が悪いってことでしょうか?
144138:03/09/19 01:44 ID:???
お手数取らせたので、お詫びといっちゃなんだが、

>>143

プログラムのどこかで、 use strictしてるからだと思う。

use strict;を入れてると、全てのユーザー変数は$main::Conf のように、明確にパッケージを指定するか、
使う前にmy宣言をする必要がある。
145141:03/09/19 01:49 ID:???
本体、requireしてるファイルなどなど調べてみましたが、
use strictしてないですねぇ・・・
試しに変数名変えてやってみます。
146nobodyさん:03/09/19 01:50 ID:???
>>133
00秒ジャストでチェックを通らないと、b.plを起動できない罠。
どっかに分を記録して、それを比較しる。
147141:03/09/19 02:08 ID:???
変数名変えてもダメでした。

少し進展。
$Admin_passwordなどのMAIN:以前で宣言してたのを、
MAIN:の中に入れたら上記のようなエラーが沢山出た・・・
(Global symbol...ってやつ)
これ全部パッケージ指定しないと・・・だめですか?
148nobodyさん:03/09/19 02:47 ID:???
%hash = ('a' => 1, 'b' => 2 ...);
とこれが200個くらい続くのですが、何か効率の良い書き方が
ありましたら教えてください。
149nobodyさん:03/09/19 03:09 ID:???
$_[0]=~s/(\W)/sprintf("%%%02X", ord($1))/eg;

$_[0]=~s/(\W)/'%'.unpack("H2", $1)/ego;}

urlエンコードの違いについて教えて下さい。
150nobodyさん :03/09/19 03:46 ID:???
>>149
処理が違ってて、結果は一緒。
処理速度は当然違ってくるけど、問題にはならんじゃないかねぇ
151nobodyさん:03/09/19 03:50 ID:???
>>148
my $i = 0;
my %hash = map{$_ => $i++} ('A'..'Z', 'a'..'z', '0'..'9', '+', '/');

>>149
アルファベットが大文字か小文字かぐらい?
下のoオプションはいらないと思う。
152nobodyさん:03/09/19 07:41 ID:???
>>148
%hash = qw(
a 1
b 2
c 3
d 4
e 5
);

qw()で囲むと、split /\s+/したような結果になる。
153nobodyさん:03/09/19 10:23 ID:???
>>148
別解。

my @a = ('A'..'Z', 'a'..'z', '0'..'9', '+', '/');
@hash{@a} = (0 .. $#a);

>>151の方が余分な変数使わない分すっきりしてるけどね。
154nobodyさん:03/09/19 11:08 ID:???
>>151
>>153
入ってる内容が200くらい続くって言ってるけど、どう続くのか、確認したの?
155nobodyさん:03/09/19 11:36 ID:???
>>154
ログ見れば分かるだろ。馬鹿かこいつは。
156nobodyさん:03/09/19 13:23 ID:???
>>134
> MAIN:からsub1を実行するとちゃんと出力されるのですが、
> sub2で条件分岐してsub1を呼び出すとHTMLが途中までしか出力されません。
> sub1を呼び出すときに引数は無く、またsub1の最後でexitしています。
  ここまでのレスを読んでいると、134は変数のスコープも知らないと
思われる。
 言うまでもないことだが、何も宣言せずにsub1,sub2 で同じ名前の変数
を使うと、同じ変数として扱われる。
 「sub1で使用する変数をsub2でいじってしまった」ということがオチ
だと思われ。
157nobodyさん:03/09/19 13:58 ID:???
>>156
それじゃ、途中で止まっちゃうことの理由が説明つかないじゃん。
変数の内容を間違っていじったくらいで、>>142のフック入れて
何も表示されずに途中で終わるような現象が起きるとは考え難いんだが。
158147:03/09/19 14:40 ID:???
>>157
>何も表示されずに途中で終わるような現象が起きるとは考え難い
補足ですが、HTMLの途中までは表示されるんです。
で、ブラウザのステータス部分には「ページを開いています」と。
$|=1;した場合はページは全て表示されますが、「ページを開いています」と出続けます。
159nobodyさん:03/09/19 14:52 ID:???
もうソース出しましょうや
160nobodyさん:03/09/19 14:53 ID:???
>>158
だからそのおかしいコード晒せよ
ここはクイズコーナーじゃないんだよ
161nobodyさん:03/09/19 15:05 ID:CWu85PEx
>>158
> で、ブラウザのステータス部分には「ページを開いています」と。

おいおい、なんでそういう一番大事なところを黙ってるかなあ。
そりゃどっかで無限ループしてんだよ。ソース、特にループ部分を最初から見直せ。

> $|=1;した場合はページは全て表示されますが

おいおい、それ早く言えよ。なんでそんな大事なことを書かずにほっとくんだよ。
症状が変わるかどうか確かめるために、みんな$| = 1しろって言ってるんじゃん。
「エラーがでない」だけじゃ症状変わらなかったんだと思うだろ?

俺はてっきりどっかでcore dumpでもしてんのかと思ったよ。
162158:03/09/19 15:20 ID:???
すいませんでした。ループ部分見直します。
163156:03/09/19 15:50 ID:???
>>158
 やっぱりソースを見せてもらえないとわからないね。
 しかし、その前にプログラムを単純化してね。
 最も単純化したプログラムというのは、つぎのようになると思うが、
ここまで単純化する以前に正常に動くようになるだろう。
 その時点で、正常に動くようになった前後のプログラムの違いを明確にして
もらえると、アドバイスしやすいと思うが。
MAIN:{
 sub2;
}
sub sub1{
 # 何かhtmlファイルを出力するルーチン
 exit;
}
sub sub2{
 sub1;
}
164148:03/09/19 15:55 ID:???
>>151-155
ごめんなさい、説明不足でした、、、
%hash = ('a' => 1, 'b' => 2, 'f' => 4, 's' => '#' ...);
こんな感じで不規則なんです。

雰囲気壊してしまいましてごめんなさい。
ただ、お答えいただいた方々のご意見は非常に非常に
勉強になりました。
これらを参考に、さらにいろいろ勉強したいと思います。
本当に有難うございました。
165nobodyさん:03/09/19 16:11 ID:???
じゃあ>>152のやり方で良いんじゃない
166133:03/09/19 16:20 ID:???
返事が遅れまして申し訳ありません。

>>135
sleep 60; だと微妙にずれては来ないでしょうか?
・・・といっても、ずれたからといって実害は出ないから大丈夫かもです。
*.pid は、将来的には A.pl の起動スクリプトを作ろうかと考えていまして。
init.d の起動スクリプトのような。

>>146
なるほど。
脳内では「スカポンタンしない」で考えてみましたが、そうなることも考えられますよね。
こちらは対処してみようかと思います。

あと、気になっているのが「system "./B.pl &";」のようにバックグラウンド起動する点です。
バックグラウンドで起動させる実行制御関数というものはあるのでしょうか?
do、eval、require、use、``、qx()では実行結果を待っているようなので。
167nobodyさん:03/09/19 16:23 ID:???
200以上あるんなら、下のようにしてファイルの尻に引っ付けるのも
手だけどね。

while(<DATA>){
  chomp;
  my($key, $value) = split;
}

…別のコード…

__DATA__
a 1
b 2
c 3
d 4
f 8
* z
 :
 :
 :
168nobodyさん:03/09/19 16:42 ID:???
>バックグラウンドで起動させる
fork で
169nobodyさん:03/09/19 17:16 ID:???
> do、eval、require、use、``、qx()では実行結果を待っているようなので。

全然関係ないものが多数混じってる気がするが。
170nobodyさん:03/09/19 19:58 ID:AgTkEqqe
ねぇねぇ、最新10を表示させるにはどうするの?
171nobodyさん:03/09/19 20:40 ID:???
>>166
forkして子プロセスでexec。
172nobodyさん:03/09/19 20:46 ID:???
>>170
print "最新10";
173nobodyさん:03/09/19 20:54 ID:???
>>172
ワロタ
174nobodyさん:03/09/19 20:57 ID:???
>170
新しいところから十回回してプリント汁。
175nobodyさん:03/09/19 20:59 ID:???
??????
176nobodyさん:03/09/19 21:05 ID:???
>133,166
for(;;){ something if (time %60 == 0); }
だと、CPU常に100%使ってる気がするんだけど?
nice値下げとくとかしないとつらい気が。
ところで、cronじゃだめなのか?
177nobodyさん:03/09/19 21:15 ID:???
176追加
配布とかしたりするんでなければ、daemontools使えばよろし。
178148:03/09/19 21:39 ID:???
>>165, >>167
有難うございます。

最終的に、
my %string = qw(a I b u c p ...);
こんな感じで決まりました。
これでもちゃんと a=>I, b => u とやってくれるんですね。ちょっと驚きました。

いろいろなご意見、本当に有難うございました。
179nobodyさん:03/09/19 21:56 ID:???
$moji = 'abcde';

の$mojiをそのまま@mojiにして$moji[0]がaとなるような
効率の良いやり方はないでしょうか。
1文字ずつ処理するしかないですかね。
これが一番速度的に速ければこしたことないのですが
180133:03/09/19 22:18 ID:???
>>168,171
fork すると自分自身が親プロセスなのか子プロセスなのかの判定が必要になってきますよね?
鯖プログラムではないのでそこまでは考えていませんでした。

>>169
ちょっと範疇を広げすぎたかもしれませんですm(_ _)m

>>176,177
nice 値が低いので、別プロセスが動くと CPU 稼働率が下がることは確認できました。
現状では crond で動かしているのですが、止めたり再稼働したりするのが不便なので >>133 のような機構をやってみた次第です。
ゆくゆく安定して稼動するようになれば、/service に放り込んでみたいと思います。
181nobodyさん:03/09/19 22:19 ID:???
>>179

my $moji = 'abcdef';
my @moji = split '', $moji;

print $moji[0];
182133:03/09/19 22:19 ID:???
>>179
@moji = split(/ */,$moji);
ってのは如何でしょう?
183133:03/09/19 22:21 ID:???
見事に被ってしまいましたね(恥)
184nobodyさん:03/09/19 22:35 ID:???
>179
ぱっと思いつくのだと、(split以外で)
--
for (my $i; $i < length($moji); $i++) {
push @moji, substr($moji, $i, 1);
}
--
while (length($_ = chop $moji)) {
unshift @moji, $_;
}
--
@moji = ($moji =~ /./g);

試してみたけど、上の2つはsplitより遅くて、
正規表現はsplitよりちょっとだけ早い
185nobodyさん:03/09/19 22:50 ID:???
>133
気持ち悪いかもしれないけど、すでにcron使ってるなら
A.pl で起動時に -e A.pid だけして、
起動スクリプトで/var/run/A.pid の作成だけやる
B.pl は
ps ax| awk '{print $5}'| grep '^B.pl'| wc -l
な感じ。
pid使わない+起動スクリプトな方向で考えてたら、よけいややこしくなったw
186nobodyさん:03/09/19 22:53 ID:???
>>179
@moji = unpack 'A' x length $moji, $moji;
187185:03/09/19 22:55 ID:???
133見直したら、A.plは常駐してB.plを監視するのが目的なのね。
A.pl を cron してたら意味ないじゃん。
185はむしって
188nobodyさん:03/09/20 00:29 ID:???
>>181-184, >>186
みんな、どうもありがとう!
本当に勉強になった!
やさしい人ばかりだねここは。とにかく感謝です
189nobodyさん:03/09/20 01:28 ID:???
qwって、
qw( ! " # $ % & ' ( ) = ~ ^ | \ ` @ { [ + ; * : } ] < , > . ? / _)
こんなふううにつかうと、もちろんエラーが返ってきますが、
正規表現でいう\Q\Eのようなものとうまくあわせて使う
良い記述方はありませんか。

質問わかりにくくてスマソ
190nobodyさん:03/09/20 02:47 ID:???
qwがどういうものか理解できていないのでは・・・
191名無し募集中。。。:03/09/20 05:37 ID:???
>>189
qw( ! " # $ % & ' ( )
で終わっちゃうから無理っしょ
大人しくsplit使うのがいいと思われー
192nobodyさん:03/09/20 05:48 ID:???
エスケープ無しで全てのアルファベットと記号をリストにするって可能?
193nobodyさん:03/09/20 08:27 ID:???
qw( ! " # $ % & ' = ~ ^ | \ ` @ { [ + ; * : } ] < , > . ? / _) ,qw[( )]
194193:03/09/20 08:28 ID:???
素直にエスケープしろ
195nobodyさん:03/09/20 08:33 ID:???
逃げちゃだめだ
196nobodyさん:03/09/20 08:42 ID:???
>>192
@chr = map chr, 32..126;
197nobodyさん:03/09/20 11:18 ID:???
>>191
POSIXなshならecho $(echo $(pwd))とかできるんだから、ちゃんとパースしないのは怠慢。
198nobodyさん:03/09/20 11:42 ID:???
つーか>>189問題なく動くが。
199nobodyさん:03/09/20 13:13 ID:???
>>198
いや、それは変だ。動くだけで、意図した結果にはなってないんじゃないか?
200nobodyさん:03/09/20 13:30 ID:???
print join ",", qw(! " # $ % & ' ( ) = ~ ^ | \ ` @ { [ + ; * : } ] < , > . ? / _);

--結果

!,",#,$,%,&,',(,),=,~,^,|,\,`,@,{,[,+,;,*,:,},],<,,,>,.,?,/,_

なんか問題あるのか?
201nobodyさん:03/09/20 14:37 ID:???
スペースは?
202nobodyさん:03/09/20 14:58 ID:???
スペースも入れようとしてたん?
「全てのアルファベットと記号」にゃスペースは入らんと思ったけど。

スペースは無理だろうね。エラーはでらんけど
203nobodyさん:03/09/20 16:33 ID:???
>perl -e "@a=qw(! \" # $ % & ' ( ) = ~ ^ | \ ` @ { [ + ; * : } ] < , > . ? / _);"
> の使い方が誤っています。

windowsは糞
204nobodyさん:03/09/20 17:28 ID:???
別に qw((((()))));でも動くぞ。

>>191
>>197
>>199
おまえら試してから書けよ。

qw()の中にShift_JIS入れてハマってるヤツが別スレにいたなあ・・・。
205nobodyさん:03/09/20 17:54 ID:???
>201
デリミタに日本語使うとか。
やった事無いから出来るか知らんが。
206nobodyさん:03/09/20 17:57 ID:???
Perlの場合、シングルクオート中に含まれて特別な意味を持つ文字って、
\\ \' '

の2つだけですよね?ということは、Shift_JISは「'」を含まないので、Shift_JISをクオート中に
含ませた場合に出る問題というのは、最後のクオートの前に「\」が含まれる文字が出た
場合だけだと考えて良いでしょうか?

だとすると、常に 「\」はきちんとエスケープして「\\」と書くようにし、chop($abc = "シフトJIS文字列 "); のように、
一文字余分に書いておけばエラーはでないということで良いでしょうか?

#正規表現などでも問題がでるのは知っていますが、今回は変数に代入することだけ考えています。
207nobodyさん:03/09/20 17:59 ID:???
> の2つだけですよね?
2つじゃなくて3つの間違い
208nobodyさん:03/09/20 18:36 ID:???
>>206
人に聞く前にぐぐれないようじゃShift_JISを使おうなどとは思わない方がいいぞ
http://homepage1.nifty.com/nomenclator/perl/shiftjis.htm
209nobodyさん:03/09/20 18:39 ID:???
>>206
>シングルクオート中に含まれて特別な意味を持つ文字
んなもんありません
210nobodyさん:03/09/20 18:44 ID:???
211nobodyさん:03/09/20 18:53 ID:???
212nobodyさん:03/09/20 19:00 ID:???
馬鹿はほっとけ
213nobodyさん:03/09/20 19:33 ID:???
>>208
いや、そこは知ってるんですが、「シングルクオートで囲って、最後の1文字を空白にしてchopする」
という解決策がどこにも見当たらないので、その正当性について質問してる次第です。
214nobodyさん:03/09/20 19:58 ID:???
まずそんなアフォなコードを書かなくてすむようにしたほうがいいんでないか?
215nobodyさん:03/09/20 20:08 ID:???
use strict使うと、

${"test$num"}[$a]

これでどうしても引っかかってしまいます。
何か良い方法はないでしょうか。
216nobodyさん:03/09/20 20:17 ID:???
use strict;
no strict 'refs';

でOKだけど、そんなモン使わずに済む方法を考えた方が良い。
217nobodyさん:03/09/20 20:22 ID:???
>>214
自分が書く時は常にEUC-JPで書いてます。
「Shift_JISを使う場合、シングルクオートで囲って、最後の1文字を空白にしてchopする」
が正しく動作するかどうか単に興味があるだけです。
218nobodyさん:03/09/20 20:31 ID:???
>>217
自分で試してみればいいじゃん。
219nobodyさん:03/09/20 21:02 ID:???
>>218
とりあえずkakasiで分割した文を適当にパースさせて回してみた結果、大丈夫なようには
見えるんだけど、こういう方法って意図的にやらないと再現しないような欠陥があったり
するじゃない。
まぁ手法自体に対する批判がつかないところを見ると、客観的に見ても致命的な欠陥は
見当たらないってことなんだろうけど。

理屈としては上手くいくはずですが、こんなに単純な方法なのに、
提示されている場面を見たことがなかったので、イマイチ自信が持てないのです。
220nobodyさん:03/09/20 21:29 ID:???
理由がない限りはchopなんか使うな。
chompの方が安全だろ?
221nobodyさん:03/09/20 21:31 ID:???
>>220
ほほう。>>217の場合、どう安全なのか聞かせてもらおうか。
222nobodyさん:03/09/20 22:00 ID:???
>>219
リテラルなら、エラーが出るか、テストしていれば分かる問題で、
その場で対処できれば、問題ないから。
223nobodyさん:03/09/20 22:55 ID:???
>>206
'表\' '
これは?
224nobodyさん:03/09/20 23:36 ID:???
>>217
そもそも、何のためにそんな処理してんの?
想像できないんだけど。
225nobodyさん:03/09/20 23:46 ID:???
テンプレートを読み込んで置換して表示と言うのをやろうとしているのですが、
表とかリストみたいにタグ自体の数(と言うか行数)が変わってしまうときってどうやってますか?

--出力--
<ul>
<li>str1</li>
<li>str2</li>
</ul>

--テンプレート--
<ul>
<li><!--str--></li>
</ul>

<ul>
<!--str-->
</ul>
とか。
後者が楽なんですがスクリプト中から完全にタグを取り去ってないと言うところが引っかかって
前者の方法でやりたいなとか思ってるのですがどうにもやり方が思いつきません…。
226nobodyさん:03/09/20 23:49 ID:???
>>220
chompだと動かないと思いますが……。

>>223
あ、それがありますね。ありがとうございます。
EUCでの
'表\' '
と同じ動作にしようと思った場合、Shift_JISだと
'表\\\\' '
としないと文字化けしてしまいますね。

>>224
>>206
227nobodyさん:03/09/20 23:54 ID:???
>>225
HTML-Templateモジュール使え。
--テンプレート--
<ul>
<!-- TMPL_LOOP name="loop" -->
<li><!--TMPL_VAR name="str"--></li>
<!-- /TMPL_LOOP -->
</ul>
228nobodyさん:03/09/21 00:05 ID:???
>>225
個人的には、sprintf で追記しちゃう。。。
$tmp =<<"EOS";
--テンプレート--
<ul>
%s
</ul>
EOS

ループ〜
$str .= qq(<li>いろいろ</li>\n);
〜ループ

printf $tmp,$str;
みたいな・・・
229nobodyさん:03/09/21 00:31 ID:???
>>226
なんか禿しく勘違いしてるようだけど、特別な意味を持つ2バイト目の“\”をエスケープ
しなけりゃ駄目だろ。

×'表'
△'表\ ' ←結果的には\225\\になるけど、2バイト目をエスケープしているわけではないから△
230nobodyさん:03/09/21 00:48 ID:???
>>226
Shift_JISなら
'表\\' '
では?

この問題は、Shift_JISに対応していなくて、文字リテラルで\が特別な意味を持つ
プログラミング言語すべてにあてはまると思うけど、他の言語ではどうやってるんだろうね。
231nobodyさん:03/09/21 01:27 ID:???
>>230
あ、そでした。[表\' ]という文字列をぶちこもうとしてました。失礼。

てことは、'表\\\' 'の場合も引っかかりますね。この場合は>>226に書いたように、
'表\\\\' 'としないとNG。
232nobodyさん:03/09/21 02:01 ID:???
HTML::Templateって標準モジュールじゃないのね…
と言うわけでこれからインスコしてみます。

#どうでも良いが perl -MCPAN でインストール出来なかった…
233nobodyさん:03/09/21 06:18 ID:???
Shift_JISの話題、スマートな解決法は浮かばなかった・・・
まぁ2バイト目が\なのは
http://www.psl.ne.jp/perl/pdojo00c.html
だけみたいなんで覚えときゃいいっしょ
234nobodyさん:03/09/21 12:10 ID:???
>>232
実は、特別にインストールしなくても使える罠。
荒っぽいけどねー。

鯖に置くなら、鯖の中にHTMLディレクトリを作って、その中にTemplate.pmを置く。
楽なのは、HTML::Templateを使うスクリプトと同じディレクトリにHTMLディレクトリを置いて、
スクリプトの方からuse HTML::Template;することだな。
use libした方が、後々便利かも知れないが。
235nobodyさん:03/09/21 12:38 ID:???
一度CPANのセットアップを済ますと、もうそれしか使えない。
236nobodyさん:03/09/21 12:54 ID:???
>>235
それならそれでいいじゃないか。
CPANが使えないレン鯖ならどうする?
237nobodyさん:03/09/21 13:10 ID:???
そうだったのか・・・。勉強になった。
レンタルサーバで動かすかもしれないから、という理由で使ってこなかったなあ
238nobodyさん:03/09/21 13:17 ID:???
WinでMCPAN installするとtar.gzが展開されないらしいのですが
展開用ツールって何処にあるのですか?
239nobodyさん:03/09/21 13:17 ID:???
pure Perl のモジュールは全部この手が使えるらしいぜ?
240nobodyさん:03/09/21 15:36 ID:???
>>236
telnet出来るところならどこでもつかえるが。
そうでないところじゃ、事実上モジュールなんて使えないも同然だろ。
241nobodyさん:03/09/21 17:06 ID:???
こないだ、Win鯖のレンタル領域で、
モジュールが両手の指で足りるくらいしか入ってないとこを見た。

素直にクライアントには、この領域で仕事すんのはやめた方がいいと告げた。
まあ、この仕事は結局なしになったんだが。

思うのは、最低限の標準モジュールが使えないとなると、
非常に仕事がやりにくくなると言うことだ。
Perlのバージョンにもよるだろうが、今更Perl4とか、5.0とか言われてもやる気が失せる。
242nobodyさん:03/09/21 20:10 ID:YI8JPbKq
正規表現を使った文字列置換で、うしろからやる方法教えてください。

my $str = '01230123456';

$str =~ s/0123/aaaa/;    # これだと aaaa0123456
$str =~ s/0123/aaaa/g;
243nobodyさん:03/09/21 20:11 ID:YI8JPbKq
すまん、途中で書き込んでしまった、、もういっかい。

my $str = '01230123456';

$str =~ s/0123/aaaa/;    # これだと aaaa0123456
$str =~ s/0123/aaaa/g;   # これだと aaaaaaaa456

じゃあ どうしたら 0123aaaa456 にできるのか。
244nobodyさん:03/09/21 20:14 ID:???
>>243
最長一致を応用すればいい。

$str =~ s/(.*)0123/$1aaaa/;
245nobodyさん:03/09/21 20:19 ID:YI8JPbKq
うぉぉ、サンクス。
246nobodyさん:03/09/21 21:50 ID:???
文字列探すなら、indexで後ろから探して、substrで置換した方が早いとイッテミル
247nobodyさん:03/09/21 22:54 ID:???
>>245
それをやるとマッチ行こうが消えると言うカワイソウな結果に…。
248nobodyさん:03/09/21 23:19 ID:???
>247
ネタ?
249247:03/09/21 23:21 ID:???
>>248
いや。「勘違い」です。きわめてごめんなさい。
250 :03/09/21 23:28 ID:???
Template.pmで__FIRST__って使えなくなるバグあるの?
251nobodyさん:03/09/22 00:07 ID:iyIOOC/l
上級者スレから流れてきました。よろしくお願いします。

CGI::new()で得たCGIハンドルからredirectを呼び出してリダイレクトする場合、
与えるURLはあらかじめURLエンコードしておかなくてはいけないのでしょうか?
それとも、日本語などが混じっていても自動的にURLエンコードしてくれるのですか?
252nobodyさん:03/09/22 00:25 ID:???
>>251
やってみろよ。一から十まで聞いて作る気か?
253nobodyさん:03/09/22 00:40 ID:???
URLエスケープされるってことは
$q->redirect("http://hoge");
が、
Location: http%3A%2F%2Fhoge
になることぐらい予想できんのか
254nobodyさん:03/09/22 00:43 ID:???
>>246
indexって後ろから探す機能なかったよね。
$pos使って後ろから探させたらindex+substrの方が3倍以上遅くなったけど。
インデントは面倒だからつけなかった。許せ。

index+substr: 5 wallclock secs ( 4.87 usr + 0.00 sys = 4.87 CPU) @ 2054.57/s (n=10000)
s///: 1 wallclock secs ( 1.44 usr + 0.00 sys = 1.44 CPU) @ 6956.52/s (n=10000)

#!/usr/bin/perl
use Benchmark;

$str = 'woejpaowuehfiwauhfwuhfiwugfuawbjkhsbvi0123jwanipeufhwibvj0123hwbvoiwayefoiujvkljbiwuhf0123opiwuefhiwjnefkjhkjhfpiwhuf';
$target = '0123'; $sub = 'aaaa'; $count = 100000;

timethese($count, {
's///' => sub {
$_ = $str;
s/(.*)0123/$1$sub/;
#print "$_\n"
},
'index+substr' => sub {
$_ = $str;
$pos = length($str) - length($target);
while($pos > -1){
last if (($found = index($str, $target, $pos)) > -1);
$pos --;
}
substr($_, $found, length($target)) = $sub;
#print "$_\n";
},
});
__END__
255nobodyさん:03/09/22 00:46 ID:???
おっと。
s/(.*)0123/$1$sub/;

s/(.*)$target/$1$sub/;
の間違い。やり直してみたけど結果は同じ。

index+substr: 4 wallclock secs ( 4.77 usr + 0.00 sys = 4.77 CPU) @ 2094.93/s (n=10000)
s///: 1 wallclock secs ( 1.49 usr + 0.00 sys = 1.49 CPU) @ 6701.57/s (n=10000)
256nobodyさん:03/09/22 00:52 ID:???
>253
いやほら、上級者だから(藁

>254
スマソ
rindex 使ってくれ
257nobodyさん:03/09/22 00:53 ID:???
ところで、rindex の "r" って、何の略?
258nobodyさん:03/09/22 00:54 ID:???
れろれろ
259nobodyさん:03/09/22 00:56 ID:???
reverse(d)?
260nobodyさん:03/09/22 00:56 ID:???
>>256
おっけ(w
rindexなら圧倒的に早い。

index+substr: 6 wallclock secs ( 5.37 usr + 0.00 sys = 5.37 CPU) @ 18631.73/s (n=100000)
s///: 16 wallclock secs (14.85 usr + 0.00 sys = 14.85 CPU) @ 6733.30/s (n=100000)

'rindex+substr' => sub {
$_ = $str;
$found = rindex($str, $target);
substr($_, $found, length($target)) = $sub if $found > -1;
#print "$_\n";
},
261nobodyさん:03/09/22 00:58 ID:???
>>257
マニュアルくらい嫁。というか、逆順に探すんだから想像つかんか?
262nobodyさん:03/09/22 01:00 ID:???
>>261
だって、JavaScriptだと lastIndexOf で "エル" なんだもん。
263nobodyさん:03/09/22 01:05 ID:???
>>262
だから何なんだ。
264nobodyさん:03/09/22 01:07 ID:???
だってじゃねーよバカ
265nobodyさん:03/09/22 01:19 ID:???
>>262
Larry WallがLとRを間違えたと言いたいのか?
あんな名前にLとRが混じりまくってるやつが間違えるわけないだろ。
266nobodyさん:03/09/22 01:50 ID:???
Rally Warl?
267nobodyさん:03/09/22 01:54 ID:???
CGI.pm(Ver2.89) から $query->start_html とかやって XHTML の頭が出るんですけど、
ついでに出力される XML宣言の encoding属性の値ってどーやって変えるんでしょか?
デフォだと UTF-8 だけど、これをShift_JIS に変えたりとか。
268nobodyさん:03/09/22 02:05 ID:???
perldoc CGI
269nobodyさん:03/09/22 02:21 ID:???
初心者スレだし言っとく
1にマニュアル
2にgoogle
3,4が無いようなので
5に2ちゃん
270nobodyさん:03/09/22 02:34 ID:???
>>265 ワロタ
271267:03/09/22 02:36 ID:???
あー、ごめん。ウソ書いてた。

CGI.pmのバージョンをよくよく見直したら 2.75 なんてフルすぎな奴だった。
ソースみたら utf-8 でオンコーディングしてるし。
# マニュアルみてもググっても見つからないわけさね。

ver3.00に上げたら治りました。逝ってきます。

272nobodyさん:03/09/22 18:09 ID:7DCR1SyV
1:KENTWEBのCOMCHATにROMの人数を表示したいです。
http://www.kent-web.com/chat/comchat.html

2:ゆいちゃっとのROM機能を写して見た。

3:表示されず失敗した。

ソースに何を加えればいいか教えてください。
273nobodyさん:03/09/22 18:10 ID:???
まず、ROMの定義は何かね?
274nobodyさん:03/09/22 18:17 ID:???
>>272
マルチはんたーい。
コピペはんたーい。
スクリプトの内容を読もうとしない奴に改造とかする権利はなーい。
275nobodyさん:03/09/22 18:46 ID:???
210.153.84.0/24
このIP範囲を判別したいのですが、
$ENV{'REMOTE_ADDR'} =~ /^210\.153\.84\.[0-255]$/
こんなイメージでかける一番手っ取り早い方法はありませんでしょうか。
276nobodyさん:03/09/22 18:54 ID:???
$mask = 0xffffffff << (32 - $subnet);
$ip_address = ($ip[0] << 24) + ($ip[1] << 16) + ($ip[2] << 8) + $ip[3];
if (($client_address & $mask) == ($remote_address & $mask))

これなら/24 が0-32まで使える
277276:03/09/22 18:59 ID:???
ところどころ抜き出したんで適当だけどわかるよな?
アドレスはsplitで分けると吉
278nobodyさん:03/09/22 19:07 ID:???
>>274
何この自治房
>権利
( ´,_ゝ`)プッ
279nobodyさん:03/09/22 19:12 ID:???
権利っつうか資格がないって話だな。
280nobodyさん:03/09/22 19:13 ID:???
氏ね
281nobodyさん:03/09/22 19:19 ID:???
>>272
コーディング丸投げなら適当なプログラマに金払ってやって貰ってくらはい。
282nobodyさん:03/09/22 20:34 ID:???
>>278
質問に答えてもらえなかったからって逆恨みはいかんよ。
普通に考えてコピペ&マルチはイクナイだろ。
他人に改造を頼むってのもなぁ。どうせ成果物をオープンに
する気はないんだろうし、いまいち萎える。
283nobodyさん:03/09/23 01:46 ID:LoXsSFLp
板に書き込まれたURLをリンクさせたいのですが何を追加させれば良いのですか?
284nobodyさん:03/09/23 01:49 ID:???
似たような事してるスクリプトのソースみて、どうやってるか調べてみれば?
それを見ても、何をやってるか分からないようなら・・・改造ならスレ違い。
285nobodyさん:03/09/23 01:51 ID:???
>>283
<a href="・・・・">URL</a>
286nobodyさん:03/09/23 05:33 ID:???
値から変数名を得る事って出来ますか?
できるのであれば、その方法を教えてください。

$hoge = 'fugafuga';
として、
fugafuga から hoge を得たいのれす。
287nobodyさん:03/09/23 05:50 ID:???
何ゆえそんな処理が必要かわからん

そんなことしないで良いようにロジック考え直した方がいいんでない?
288nobodyさん:03/09/23 06:20 ID:???
>>287
何ゆえそんな処理が必要かといわれれば、
とあるBBSを改造中なのれすが、必要があって選んだアイコンのログ書き込みフォーマットを
変数名($icon[数字]の数字がログに記載される)から
値(そのアイコンのアドレス)に変えちゃったんです。

それはそれで出来たんですが他の部分で不都合がありまして、値から変数名を得る事って出来たら解決なんれすが
> そんなことしないで良いようにロジック考え直した方がいいんでない?
といわれればごもっともなのれす。

 
289nobodyさん:03/09/23 06:41 ID:???
grepとかで@iconの中身をスキャンして番号を得る方法になるが、なんか無理矢理っぽい。
やっぱりロジックを見直すべきかと。
290nobodyさん:03/09/23 10:36 ID:???
AA荒らしがいない。つまらない・・・・
29161-205-109-150.eonet.ne.jp:03/09/23 10:53 ID:???
アク禁かかってたからか。 かけなかったぞ
292nobodyさん:03/09/23 13:39 ID:1GkKuoEI
教えて頂きたいのですが。

 Win2000で、現在走っているプロセス数をPerlでgetできない
でしょうか?タスクマネージャを開いた時に左下に出てくるあの
数字です。
 やりたいことは、「親プロセスから子プロセスを立上げようとする
時に、現在の全プロセス数を見て、全プロセス数が多すぎれば子プロ
セスの立上げを待機する」ということです。
293nobodyさん:03/09/23 13:56 ID:???
>>292
できないです
294nobodyさん:03/09/23 13:59 ID:???
少なくとも Perl でやることじゃないと思うが。
295nobodyさん:03/09/23 14:04 ID:???
>>292
スレ違いだが、Windowsのtlistコマンドを使えばできるかと。
Windows2000CD-ROM\SUPPORT\TOOLS\SUPPORT.CAB\tlist.exe
296nobodyさん:03/09/23 14:14 ID:???
297292:03/09/23 14:28 ID:???
>296 にぴったりのモジュールがありました。
ありがとうございました。

use Win32::Process::Info
@pids = $pi->ListPids (); # Get all known PIDs
298nobodyさん:03/09/23 14:48 ID:???
>>288
「値から」変数名ってとってもめちゃくちゃなコト言ってるね…あんた。

ログ形式を変更せず作りたいのであれば、リファレンスを使用すれば多分OKな予感が。
なるべくシンボリックじゃなくて、ハードのほうね。


それはそうと、全然関係ないし今さらだけど、
スレ立て!
ちゃんと前スレとかヤレや!
本当の前スレが紛失したぞ。
299nobodyさん:03/09/23 15:33 ID:???
>>288
キーをアドレス、バリューを$iconの添え字(もしくは、直接リファレンス)とするハッシュを作る。
アドホックなやり方なのは否定できないけど。

>>298
>>8の奴は違う?
300nobodyさん:03/09/23 16:00 ID:PRppzaj7
パーミッションの事で、
cgi のファイルは 705 で他のを忘れたから
書いて下さい。分かるでしょう。
301298:03/09/23 16:16 ID:???
>>299
>8のは、前々スレじゃない?
御丁寧に前スレの前スレ表示をコピーしたような。。
俺の勘違いじゃないよな?
302nobodyさん:03/09/23 16:22 ID:zIFEzOvG
文字列が+−付き整数であるか(省略は+)、というチェックで以下のように書いてみたのですが、
うまく動きません。

if( $hoge =~ /^[+-]?\d+$/ )
{
print '整数じゃねぇぞゴルァ!';
}

これで+付きだけはtrueになるのですが、省略と−付きがfalseになってしまいます。

おそらくFAQだとは思うのですが、何かご存知の方がいらっしゃれば
「おめー正規表現わかってねーよ」とお叱りください。お願いします。
303299:03/09/23 16:24 ID:???
>>301
>>8のは、
Perl コーディング初心者質問コーナー Part27
http://pc2.2ch.net/test/read.cgi/php/1060808783/

1000 名前:nobodyさん(sage) 投稿日:03/09/15 17:21 ID:???
それはそうと 1000

これだね。たぶん、前スレだと思う。
304302:03/09/23 16:25 ID:zIFEzOvG
>>302
trueとfalseが逆でしたね(^^;
+付きがfalse(成立せず)、−付きと省略がture(ゴルァ!と怒られる)です。
訂正してお詫びいたします。
305nobodyさん:03/09/23 16:26 ID:???
ほんとだ
Part27が行方不明だ
306nobodyさん:03/09/23 16:40 ID:???
>>304
ならないけど
307nobodyさん:03/09/23 16:49 ID:???
308nobodyさん:03/09/23 17:00 ID:???
>>302
うちではその正規表現で問題ないみたいだけど。
Perlのバージョンはv5.8.0 built for cygwin-multi-64int

sub IsInteger {
my $num = shift;
if ($num =~ /^[+-]?\d+$/) {
print "$numは整数\n";
} else {
print "$numは整数じゃない\n";
}
}

IsInteger("10");
IsInteger("+10");
IsInteger("-10");
IsInteger("10.1");
IsInteger("hoge");

#結果

10は整数
+10は整数
-10は整数
10.1は整数じゃない
hogeは整数じゃない
309nobodyさん:03/09/23 17:38 ID:???
>>302
/^[-+]?\d+$/
310nobodyさん:03/09/23 18:30 ID:???
>>302
[ ]の括弧の中にハイフンが入ってるからだな。>>309みたく先頭にもっていけばOK。

ところで、

> IsInteger("10E10");
> 10E10は整数じゃない

10E10は整数なんだけどなぁ、と意地悪を言ってみる。
311nobodyさん:03/09/23 19:23 ID:???
http://www.kt.rim.or.jp/~kbk/perl5.005/perlre.html#Version_8_Regular_Expressions
>クラスの要素として“-”自身を指定したい場合、リストの先頭か終端に置くか、
>バックスラッシュでエスケープします([-az]、[az-]、[a\-z]はすべて等価なクラス指定
>です。二十六のキャラクターからなるクラスを指定する[a-z]とは異 なります)。

でも、先に持ってくるか\でエスケープするのが間違いがなくていいよ。
312nobodyさん:03/09/23 23:12 ID:???
>>310
perl -e 'printf("%d\n", 10E10)'
1410065408

実数だと思うぞ。
313nobodyさん:03/09/23 23:53 ID:???
整数です。Perlの32bit整数では表現できないだけ
314nobodyさん:03/09/24 00:14 ID:???
正の整数は実数ですが
315nobodyさん:03/09/24 00:27 ID:???
>>313
スマン。そのようだ。
316nobodyさん:03/09/24 01:13 ID:vmnUXdRh
演算子についての質問です。
$goukei の値に23を加えるとき通常
$goukei = $goukei + 23
としますが、これを簡略化して
$goukei += 23
と記述するのはたやすいですが、では条件演算子の簡略記述はどうすればよい?
例えば

$goukei = $goukei ? $goukei : 0

こういうケースです。
やってることは、$goukei に何らかの値があればその値を維持、未定義ならば0を代入します。

なんでこういうことやるかってと、mod_perlでは、未定義値を参照しようとすると
ワーニングが出るっしょ?それの対策です。

でもこの記述、$goukei という文字が3つもありますね。
なんかイヤじゃない?
317nobodyさん:03/09/24 01:22 ID:???
defined $goukei or $goukei = 0;
っていうのはダメ?
318nobodyさん:03/09/24 01:26 ID:???
$goukei ||= 0;
では?
319nobodyさん:03/09/24 01:34 ID:vmnUXdRh
>>318
目から鱗!
320nobodyさん:03/09/24 01:37 ID:???
>>319
お前は半魚人か!
321nobodyさん:03/09/24 01:38 ID:vmnUXdRh
>>320
やかましい!!!w


いやでもperlってこういう記述ができるからおもしれーなーーーーーー
322nobodyさん:03/09/24 06:25 ID:ou/l0CeA
携帯電話対応掲示板スレにも書いたんですが、人がいないので
ここで失礼します。スレ違いだったらすみません。

http://specters.net/cgipon/
にあるスレッド天国なんですが、書き込んだ際にスレッドが上がらないようにするには
どの項目をいじればいいんでしょうか?それじゃスレッド式の
意味がないじゃんと思われるかもしれませんが、荒らし対策が
できないので日付順にしたいのです。もし分かる方いたらお願いします。m(_ _)m
323nobodyさん:03/09/24 06:43 ID:???
>>322
謝る前に、>>1を読んでスレの当たりをつけることくらいしてください。
とりあえず

【 スクリプト改造工房 PART 7 】
http://pc2.2ch.net/test/read.cgi/php/1063780103/l50

この辺じゃないか?
324 :03/09/24 06:43 ID:???
またあんたか。
325322:03/09/24 06:47 ID:???
>>323
これは失礼しました。1は読んでなかったのですが
一応過去ログで「改造」を検索したんです。なんで当たらなかったんだろう?
とりあえずスレ汚し失礼しました。
326nobodyさん:03/09/24 11:13 ID:???
>>316
 あまりマニアックな記述をすると、後でいじる時に何をやっているのか
解りにくくなるぞ。
 $goukei = 0 unless defined $goukei
 のように自然言語(英語)に近い表記が得策。
327nobodyさん:03/09/24 11:20 ID:???
オレunless も苦手。なるべく if not にしてる
328nobodyさん:03/09/24 12:05 ID:???
俺は文章が長くなると直感的な可読性が減って苦手。
だから ||= を使ってしまう。
329nobodyさん:03/09/24 13:13 ID:???
人によって好みが違っておもろいな
330 :03/09/24 14:09 ID:???
趣味で変わるわけではない様。
俺シンタクスでいいヒトと、そうでないヒトの差。
331nobodyさん:03/09/24 14:21 ID:Y8yvZ7Uq
use strict;
my %hash = (a => 1, b => 2);
print join ',', @hash{qw(a b)};

は、OKなのに

use strict;
my $hashref = {a => 1, b => 2};
print join ',', @hashref->{qw(a b)};

は、エラーになる。なんで?
332nobodyさん:03/09/24 15:07 ID:???
>>331
@hashref をデリファレンスしてる上に
@hashref は宣言されていないから当然エラー。

@{$hashref}{qw(a b)}
333nobodyさん:03/09/24 15:07 ID:???
>>326
$a ||= 0;
は充分直感的だと思うぞ。
LarryWallもデフォルト値の設定法として推奨してた気がする。
俺シンタクスは言い過ぎ。

偶数値取るのに、

$a &= 0xfffffffe;

とかは意見が分かれると思うけど。
334nobodyさん:03/09/24 15:44 ID:???
>>333
んな移植性悪そうなコードかかなくてもいいんじゃないだろか
335nobodyさん:03/09/24 15:52 ID:???
$name ||= 'nobodyさん';
くらい普通だろ
336nobodyさん:03/09/24 16:30 ID:???
>>334

移植性は悪くないと思うが。
取れる値は32bitに制限されるが、そのことか?

何万回も回すようなループの中ではこういう記法は
かなり威力を発揮するのだが。
こういう場合、可読性よりも効率を優先させるな俺は。
337nobodyさん:03/09/24 16:42 ID:???
>>335
それだと「0」というハンドルの人がnobodyさんになってしまう罠。
338nobodyさん:03/09/24 16:49 ID:???
てすとん
339nobodyさん:03/09/24 16:50 ID:???
>>337
少なくとも2chのBBSは0と入れると名無しになるようだ。
340nobodyさん:03/09/24 16:52 ID:???
>>338
俺も同じことやってみた。

まさに2chがその状態だな。「0」というハンドル入れるとnobodyさんになる。

周知の事実なのかも知れんが、俺は知らなかったよ。てことは書き込み部分は
いまだにPerlのままなんだろうな、きっと。
341338:03/09/24 16:57 ID:???
これはしらんかったなぁ。メール欄に0なら何度かやったけど。

>>340
Cで書かれているのはread.cgiだけじゃなかったかな。
342nobodyさん:03/09/24 17:04 ID:???
>>341
'0'問題はPerlの落とし穴だよね。
Larryもwhile(<HANDLE>)で、ファイル末尾の0だけの行を落としてしまう問題について
「Perlの致命的な欠陥」と言っていたように思う。

俺も不用意にunlessとか使って、'0'に定義された変数をfailさせるミスをした経験が何度かある。
343nobodyさん:03/09/24 17:13 ID:???
話の始まりは0に初期化するやつだったから
そのままにしてた。falseでも上書きされるが大きな影響ないしなあ
344nobodyさん:03/09/24 18:51 ID:???
0
345:03/09/24 18:56 ID:???
346nobodyさん:03/09/24 19:20 ID:???
0
347nobodyさん:03/09/24 20:53 ID:???
テストスレじゃないんだけど、名前0テスト。

たしかメール欄0はブラウザで見た時メール欄が何もないことにされていたんだよね
今はどうか知らない。かちゅだしさ
348nobodyさん:03/09/24 20:56 ID:???
つーかオマエらここでテストするのやめろ。
349nobodyさん:03/09/24 23:21 ID:???
>>342
最近は(どのバージョンからかは知らんけど)while(<HANDLE>)は勝手に別扱いになって、問題は起きないと思う。
350nobodyさん:03/09/25 05:00 ID:???
今はEOFなら偽でふね<<>演算子
351nobodyさん:03/09/25 06:26 ID:???
暫く仕事でPHPばっかり弄ってたんだけど、
久しぶりに昔の自分のCGI直してたらすげーやりたくなってきた。
終ったらPerlガリガリ書こうっと。
352nobodyさん:03/09/25 10:02 ID:???
>>350
それは無関係

昔はwhile(<HANDLE>)をwhile($_ = <HANDLE>)と解釈するバグがあったが、
今はバグが除かれ、while(defined($_ = <HANDLE>))と解釈する。それだけのこと。
353nobodyさん:03/09/25 13:19 ID:4nYFDlXP
age
354nobodyさん:03/09/25 15:58 ID:65BUr4Cp
cgiをcronから起動したいんですが
cgi(perl)の中で、そのcgi以下のlibディレクトリあるファイルを
requireしてるんですが、cron実行時にそのrequireしてるファイルが
見当たらないとかっていうエラーが出てしまうんですが
多分パスが通ってないだけだと思うんですが
perl実行時にカレントのパスを追加するオプションってあるでしょうか?

cgiの配置
  a.cgi   (lib/a.plをrequire)
  lib/
    a.pl

cronの設定
  usr/local/bin/perl usr/local/apache/htdocs/a.cgi
355nobodyさん:03/09/25 16:16 ID:???
>>354
それでcornが動くのか?
356nobodyさん:03/09/25 16:17 ID:???
use lib
357nobodyさん:03/09/25 16:25 ID:65BUr4Cp
>>356
一応、a.cgiの中で
require 'lib/a.pl';
とはやってるんですが
さらに
use lib;
が必要ってことでしょうか?

(すんませんが今すぐに試せる環境がないもんで・・)
358nobodyさん:03/09/25 17:11 ID:???
require './lib/a.pl';
or
use lib 'libへのフルパス';
359nobodyさん:03/09/25 17:34 ID:SJg8VSvj
undefって引数を複数とれますっけ?
360nobodyさん:03/09/25 17:35 ID:???
ln -s lib.pl /usr/local/lib/perl/.../site/lib/lib.pl
361nobodyさん:03/09/25 17:38 ID:???
すんません、正規表現で質問です。

全角文字しか入力できないフォームのエラーチェックに、
ASCII文字にマッチ = 全角文字じゃない
と判断してます。
間違いないでしょうか?

また、全角カタカナしか入力できないフォームのエラーチェックに、
if ( $str =~ [^ァ-ヶ・ーヽヾ] ) {
print "全角カタカナじゃないです。";
}
とやってますが(文字コードはフォームページ、ソース共にEUC)、
「あ」を入力してもひっかかってくれません。。

どなたかご教授いただけますでしょうか??
362nobodyさん:03/09/25 17:40 ID:i6y0iSpN
↑すいません、書き間違いです
× $str =~ [^ァ-ヶ・ーヽヾ]
○ $str =~ /[^ァ-ヶ・ーヽヾ]/
363nobodyさん:03/09/25 18:13 ID:???
上の正規表現で「あ」「い」「う」「ア」「イ」「ウ」が通っちゃう。。。(鬱
そして、「え」「エ」以降の文字だとひっかかる。。。(鬱
364nobodyさん:03/09/25 18:24 ID:???
文字クラスの中で2バイト文字使ってる段階でダメでしょ

$str =~ /[^ァ-ヶ・ーヽヾ]/

$str =~ /[^\xA5\xA1-\xA5\xF6\xA1\xA6\xA1\xBC\xA1\xB3\xA1\xB4]/

$str =~ /[^\xA5\xA1\xA2\xA3\xA4\xA5\xF6\xA1\xA6\xA1\xBC\xA1\xB3\xA1\xB4]/

$str =~ /[^\xA1\xA2\xA3\xA4\xA5\xA6\xB3\xB4\xBC\xF6]/

で、EUCでは
「あ」 \xA4\xA2 「い」 \xA4\xA4 「う」 \xA4\xA6 「ア」 \xA5\xA2 「イ」 \xA5\xA4 「ウ」 \xA5\xA6
なのでマッチしない。

「え」 \xA4\xA8 「エ」 \xA5\xA8 はマッチする。
365nobodyさん:03/09/25 18:37 ID:???
>>364
ありがとうございます!
なんとなくわかってきました。

(?:\xA5[\xA1-\xF6]|\xA1[\xA6\xBC\xB3\xB4])
っちゅうことですか(全角カタカナ)

となると、
(?:\xA5[\xA1-\xF6]|\xA1[\xA6\xBC\xB3\xB4])
以外。。。

すいません、どうやって表現するんでしょう。。
[^ がないと○○じゃないとできないのでしょうか?
366nobodyさん:03/09/25 18:53 ID:???
>>365
否定すればいいんでないの?

if ($str !~ /^(?:\xA5[\xA1-\xF6]|\xA1[\xA6\xBC\xB3\xB4])*$/) ...
367nobodyさん:03/09/25 18:56 ID:???
おっと。Perlメモによりますと、

# EUC-JP文字
$ascii = '[\x00-\x7F]'; # 1バイト EUC-JP文字
$twoBytes = '(?:[\x8E\xA1-\xFE][\xA1-\xFE])'; # 2バイト EUC-JP文字
$threeBytes = '(?:\x8F[\xA1-\xFE][\xA1-\xFE])'; # 3バイト EUC-JP文字
$character = "(?:$ascii|$twoBytes|$threeBytes)"; # EUC-JP文字

EUC-JPのふつーの文字はASCIIと重なっていないから、
if ($str !~ /^(?:$twoBytes|$threeBytes)*$/o)
368nobodyさん:03/09/25 19:05 ID:???
ごめん。367は全然だめ。

$strはEUC-JPであると仮定。

全角文字のみ許可:
if ($str =~ tr/\x00-\x7F//) { だめっぽい }
369nobodyさん:03/09/25 19:10 ID:???
ちなみに、>>366の方法では、EUCの「ぅあ」のような連続した文字で
「ぅ」の2バイト目と「あ」の1バイト目が \xA5\xA4 となるので
\xA5[\xA1-\xF6] にマッチし、「全角カタカナ」とみなされる。
370nobodyさん:03/09/25 19:15 ID:???
>>366
その通りですね。。
逝ってきます。。。

>>368
if ( $str =~ /[\x00-\x7F]/ ) { print "全角じゃないぽ" }
じゃだめぽですか
371nobodyさん:03/09/25 19:31 ID:???
>>369

その通りですね、「ぅあ」で全角カタカナと誤認してます…
372nobodyさん:03/09/25 19:37 ID:???
ずるぽんあぷろだにて、ディスクの空き容量も併記したい。
とりあえずsub calc_disk_usageを眺めてみて、
流用効かないと分かる。
そう言う関数がperlにないか、
Googleでキーワードとっかえひっかえ検索するも撃沈。
どうすればいいか分からん… _| ̄|○ボスケテ…
環境:Win2k, Perl5, Apache 1.3.28
373nobodyさん:03/09/25 19:43 ID:???
>>372
open(FILE, "C:\TMP\check");
while(1){
 print FILE " " x 1024;
 $kb += 1;
 print "available up to ${kb}KB...<br>\n";
}
374nobodyさん:03/09/25 19:54 ID:???
そもそも、「全角カタカナ」にマッチは不可能!?!?
375372:03/09/25 19:55 ID:???
>>373            ◎___
            .  //     /
              . // ソ   /
             // ラ  ./
             // ネ  /
            // /  ./
             // ヨ  /
       ∧空∧/___/
   _______ {´ ◎ `}<ソラネーヨ!
  ,ィィ,ィィ\):::::::::(
  しししし(_つ:::::::::ヽ
   ヽ__ノ::::::::::::::|二手
      (;;;;;;;;;;;;;;;;;;;)
      // >>__
    <◎:::> <::::◎ノ

ディスクを埋めるなんて無茶だって…
しかもループ終了条件無いよ… _| ̄|○
376nobodyさん:03/09/25 20:02 ID:???
>>375
大丈夫。埋まった時点で止まるから。
377nobodyさん:03/09/25 20:02 ID:???
あ、selectして$|の値いじってバッファリングをoffしといてくださいな>>375
378nobodyさん:03/09/25 20:27 ID:???
>>369
前からぜーんぶ全角カタカナ、っていう条件なら、それは問題にならないんじゃないんー?
379372:03/09/25 20:27 ID:???
>>376 >>377
 (;´Д`) いや、あの…
 (  八)   マジレスおながいします
   〉 〉
380nobodyさん:03/09/25 20:27 ID:???
>>379
最大容量から、使用済みを引けばいいんじゃないの?
381372:03/09/25 20:32 ID:???
>>380
ごもっともなんですが、公開ディレクトリ以外にもファイルがあるので…
ディスク全体を毎回スキャンするのもどうかと。
それに、スラック分が無視されてしまいますです、はい。
382nobodyさん:03/09/25 20:37 ID:???
>>381
そんなに無駄遣いが多いファイルシステムは無いはずだし、
アプロダ以外はファイルをいじらないんだから、スキャンしなくても、
追加、削除したときに、前回までの合計から調整すればいいやん。
383302:03/09/25 20:43 ID:yHKLmlBq
>>309
これでOKでした。ありがとうございます(T_T)
384nobodyさん:03/09/25 20:53 ID:???
>>361
use String::Multibyte;

my $euc = String::Multibyte->new('EUC_JP');

my $string = 'ピッタンコカンカン';

my $katakana = join('', $euc->mkrange('ア-ン'));
if ($euc->length($string) != $euc->strspn($string, $katakana)){
print "Not match.\n";
} else {
print "Match.\n";
}
385nobodyさん:03/09/25 21:12 ID:???
>>379
悪い悪い。UN*Xならstatfsでできるんだが、Win2Kも似たようなシステムコール
あるんじゃないの?
386251:03/09/25 21:21 ID:0BOu5flf
>252
なんとか自分でここまでコーディングしましたが、checkboxなどの複数存在するパラメータが文字列化できません。お知恵をお貸しください(T_T)

my $queryParam = '';
my $paramValue = '';
my $paramKey = '';

# $CGIHandleのパラメータを全て検索
foreach $paramKey ($CGIHandle->param)
{
# 値のあるパラメータが処理対象
if ( length($CGIHandle->param($paramKey)) > 0 )
{
if (length($queryParam) > 0)
{
$queryParam = $queryParam . '&';
}

# 値をURLエンコード
$paramValue = $CGIHandle->param($paramKey);
foreach ($paramValue)
{
$_ =~ s/(\W)/'%'.unpack("H2", $1)/ego;
}

# クエリー文字列を生成
$queryParam = $queryParam . $paramKey . "=" . join('&' . $paramKey . '=', $paramValue);
}
}
387372:03/09/25 21:50 ID:???
>>385
キタ*・゜゚・*:.。..。.:*・゜(゚∀゚)゚・*:.。. .。.:*・゜゚・*!!
サンクス! おかげさまでsystem関数見つけられますた。
system('dir c: >c:\text.txt');
な感じで標準出力取ってコーディングしてみます。
388nobodyさん:03/09/25 22:55 ID:???

やっぱ下らないコトでevalを使わないほうがいいのかな?
リファレンスの構造がめんどくさいんで。
use Data::Dumper
みたいなコトやりたいんだけど。理由は一番手っ取り早いし、保存された物がみやすいから。でつ。
389nobodyさん:03/09/25 23:45 ID:???
>>387
毎回dirすると負担かかりそうなら、ファイルアップロードされたときに、そのサイズ名を配列に入れておくとイイかも
それで
for($i=0; $i<#$i; $i++){
$size+=size[$i];
}
配列の最大の添え字って#$iであってたっけ?ミスってたらスマソ
390389:03/09/25 23:45 ID:???
×サイズ名
○サイズ
スマン
391389:03/09/25 23:46 ID:???
またまちがってるーー
×#$i
○#$size
スレ汚しごめん
392nobodyさん:03/09/25 23:49 ID:???
>>388
モノによるが、複雑なデータ構造を自前で解析するくらいなら、素直にeval()した方が速い。

ただしeval()は下手すると「何でもできる」ので、安全でない可能性があるデータをeval()する時には
Safe.pmの使用も検討するといい。
393nobodyさん:03/09/26 00:12 ID:???
>>372
Win32::kernel32
CPANのみだけど。
394nobodyさん:03/09/26 00:28 ID:???
>>389
$#配列名
395388:03/09/26 00:31 ID:???
>>392
そっかー。ありがと。
ぐーたらな俺はData::Dumperが気にいちゃってさー、データ構造の保存で思いつくのはマズこれになったんだよねー、最近。
まぁ、今回は複雑きわまりないのでこれ使っておきます。
396388:03/09/26 02:33 ID:???

testで理想のデータに近いデータ構造をループで作り、Data::Dumperしてみました。
すると、一万行近く逝きました。

これって、CGIで使うデータなんだけど、毎回のアクセスでイチイチevalで読みこんで普通?
一般的な量??

取り敢えずしつこくてすみません。
397nobodyさん:03/09/26 03:08 ID:???
>>396
一般的な量とは言えないだろうが、必要なのならそうするしかないでしょう。
けど、それが本当に必要なものなのか、そのデータ構造の設計は適切な物なのか
再考する余地は多分にありそうだね。
398初心者:03/09/26 05:58 ID:AJpvkVZp
文字化けしてしまいます↓

print <<EOF;
@\docomo.ne.jp
@\ezweb.ne.jp
EOF

[@docomo.ne.jp]はOKですが、
ezwebのほうは
[@・zweb.ne.jp]となってしまいます。
モノは試しに[@\e\zweb.ne.jp]とやってみてもダメでした。。。

ご教授をお願いいたします。
399nobodyさん:03/09/26 06:01 ID:Fdg6MiWp
Σ(´Д`;)……

\、は@の前につけようか。
400初心者:03/09/26 06:13 ID:???
>>399殿
出来ました。
ありがとうございました。
後ろに[\]かと思ってました。(;・∀・)
401nobodyさん:03/09/26 09:32 ID:???
>>398
もしくは
print <<'EOF';
402nobodyさん:03/09/26 16:16 ID:???
HTML表示の掲示板でクッキーが保存されない
403nobodyさん:03/09/26 16:33 ID:???
( ´_ゝ`)フーン
404nobodyさん:03/09/26 17:00 ID:???
( ・∀・)ノシ∩ ヘェーヘェー
405nobodyさん:03/09/27 02:38 ID:???
406nobodyさん:03/09/27 03:13 ID:???
2003
200309
20030927
を、それぞれ 2003、2003-09、2003-09-27
に変換するスマートな書き方をご教授下さい。
$str =~ s/(\d\d\d\d)(\d\d)(\d\d)/$1-$2-$3/;
では20030927しか変換されませんし、
$str =~ s/(\d\d\d\d)(\d\d)(.*)/$1-$2-$3/;
では 200309 は 2003-09- になってしまいます。。
407nobodyさん:03/09/27 06:05 ID:???
>>406
$str =~ s/(\d\d\d\d)(\d\d)?(\d\d)?/$1.($2 and "-$2").($3 and "-$3")/e;
408nobodyさん:03/09/27 07:56 ID:???
>>406
$str = join '-', grep $_, unpack 'A4A2A2', $str;

$str =~ s/(?<=\d\d)(\d\d)(?=\d)/$1-/g;

substr($str, 2) =~ s/(\d\d)(?=\d)/$1-/g;
409nobodyさん:03/09/27 13:54 ID:???
すっかりいなくなっちゃったね・・・
410nobodyさん:03/09/27 16:55 ID:2g7zZILz
cgi関係ですが、質問よろしいでしょうか?

/xxx/data
にアクセスしたとき、/xxx/index.cgi の PATH_INFO に
/data が渡される方法はないでしょうか?

掲示板のURLをすっきりさせたいもので・・・。
411nobodyさん:03/09/27 17:05 ID:???
>>410
xxxって名前のCGIスクリプトを作る。
412nobodyさん:03/09/27 17:05 ID:???
>>401
/xxx/data にアクセスすると、/xxx/index.cgi が呼ばれるようにするのは
できてるのね?
413nobodyさん:03/09/27 17:12 ID:2g7zZILz
>411
ごもっともです。でもそれしかないでしょうか?

>412
/xxx/?data なら index.cgi を呼べるのですが・・・
/xxx/data では呼べていないようです。
414nobodyさん:03/09/27 17:18 ID:???
スレ違い
415nobodyさん:03/09/27 17:22 ID:???
>>410
本質的にはCGIの問題でもないので、
移動するならお使いのHTTPdの質問スレへどうぞ。
416410:03/09/27 17:25 ID:???
スレ違い失礼いたしました。
どうもありがとうございました。
417nobodyさん:03/09/27 17:33 ID:???
mod_rewrite
と言ってやればすんだものを
418nobodyさん:03/09/27 17:36 ID:???
apacheかどうかわからんがな
419nobodyさん:03/09/27 18:20 ID:???
>>417
条件によってはmod_rewrite使わなくてもできるし。
420nobodyさん:03/09/27 20:50 ID:???
>>418
/xxx/?data
GETならindex.cgiってことは、htaccess使ってるのでは??
IISにこんな機能あったっけ?
421nobodyさん:03/09/27 23:00 ID:???
自作HTTPdかもしれんし
422nobodyさん:03/09/27 23:22 ID:???
>>421
それならそれですごいなー
つーか、自作なら仕組みすべて理解しておけよ、とw
423nobodyさん:03/09/27 23:36 ID:uv3VqwCS
質問です。
index.cgi?t1
のようにCGIを呼び出してCGIの方で

 t1 = xxx.htm
 t2 = aaa.htm
 t3 = zzz.htm
にlocationヘッダで飛ばしてPHP風なサイトを作ろうとしているのですが、
if文を使うと膨大に長くなってしまうので短く書く書き方はありますでしょうか?
$xx[]
というのをつかえばいいのでしょうか?
424nobodyさん:03/09/27 23:39 ID:???
>>423
%location = (
t1 => 'xxx.html',
t2 => 'aaa.html
);
print "location: $location[$ENV{'QUERY_STRING'}\n\n";

飛び先は絶対パスのほうがいいらしい
425nobodyさん:03/09/27 23:40 ID:???
うん。
426nobodyさん:03/09/27 23:42 ID:???
>424
エラーにならないか?
427432:03/09/27 23:44 ID:uv3VqwCS
ためしに
 %location = (
 t1 => 'xxx.html',
 t2 => 'aaa.html'
 );
 
 print "Content-type: text/html\n\n";
 print "$location[$ENV{'QUERY_STRING'}<br>";
 exit;
と表示をさせてみようと思ったらサーバエラー(500)になってしまいました。
perlのパス等は合っています。

あと、%の使い方がよくわからないので解説してくれるとありがたいです。
428nobodyさん:03/09/27 23:47 ID:???
>427
共用サーバでテストするな。
テストはローカルでやれ。
ローカルでやったならエラーログ見ろ。
429432:03/09/27 23:48 ID:uv3VqwCS
あ、[$ENV{'QUERY_STRING'}]の]が足りてなかったんですね・・
でもxx.cgi?t1を開いても何も表示されません。
なぜなのでしょうか?
430nobodyさん:03/09/27 23:52 ID:???
自分でlocationヘッダといいつつなんでContent-typeをつけるかな、この子は。
%の使い方は自分で調べれ。初心者スレって言っても甘えすぎでないかい?
431nobodyさん:03/09/27 23:58 ID:???
>>427
ハッシュの使い方調べてください
432432:03/09/27 23:59 ID:uv3VqwCS
>>428
自宅鯖でやっています。
エラーログ見たらsyntax errorとあったので解決しました。

>>430
いや、テストのため表示させてみようと思ったのです。

locationヘッダで無いと使えないのでしょうか?
433432:03/09/28 00:30 ID:a1I0tWLx
>>427
使い方わかりました。ハッシュって言うんですね^^

locationヘッダにしたところ404になってしまいました。
├/index.cgi
├/xxx.htm
└/aaa.htm
と置いて
t1 => ./xxx.htm
t2 => /xxx/aaa.htm
とやってみたのですが両方とも404でした。
下の方のファイルのパスはあっています。
どうすればいいのでしょうか?
434nobodyさん:03/09/28 01:41 ID:???
>>433
FQDN
435aaa:03/09/28 01:45 ID:???
テスト
436nobodyさん:03/09/28 01:50 ID:lxnHIT50
SSH接続が許可されてなくて、FTPしか使えない環境でホームページを作っています。

で、CPANモジュールのうち、
たんにFTPでファイルやフォルダを置くだけで使えるものがあれば、
使いたいと思ってます。

しかし、どうすればそれを判断することができるのでしょうか?
マニュアルには載ってないみたいですし。。。

とりあえず、HTML:Templateだけは、
2chのカキコで「置くだけで使える」とあるのを見て、
実際今使ってるのですが・・・
437437:03/09/28 02:09 ID:???
御教授お願い致します。

$aに100バイトの文字が入っているとします。
それを、50バイトずつ2つの変数$bと$cに代入するには
どのような処理・関数を使うと良いでしょうか??
(length関数とか使うのでしょうか?)

宜しくお願い致します。
438437:03/09/28 02:15 ID:???
追伸
処理的には、
もし、$aが50バイトを超えたら
残りは$bに。
そして、$bが50バイトを超えたら
残りは$cに。
 ・
 ・
 ・
 ・
といった具合です。
「超過分文字のみを次の変数へ代入させる」という処理方法について
悩んでいます。。。
439nobodyさん:03/09/28 02:32 ID:???
>438
lengthとif文とsubstrを使え。
440nobodyさん:03/09/28 02:35 ID:lxnHIT50
>>438

ためしてないけど、こんなかんじか?

while ($string){
$txt[$i] = substr($string,0,50);
$i++;
}
441437:03/09/28 02:46 ID:???
>>439
ありがとうございます。
substr関数←この関数を知りたかったので大変助かりました。


>>440
例文に感謝♪♪♪♪
お手数おかけしてすいません。


あとは、自分で出来そうです。
本当にありがとうございました。ヽ(´ー`)ノ
442kool:03/09/28 04:00 ID:Xrh1/qz9

一生 お金と女に困らない!《究極の☆最強三銃士》 大発表〜!!

      http://www.lo-po.com/?4204
      http://www.lo-po.com/owner/?4204

  モデル タレント アイドル レースクィーン ナース・・・・・・・・
      http://roomkaoru.gooside.com/

 一生 女に不自由するコトなく、必ず 大金持ちになれるそーです!!☆ 

       この道を行けばどうなるものか。

       危ぶむなかれ、危ぶめば道はなし。

       踏み出せばその一足が道となる。

       迷わず行けよ、行けばわかるさ。

         いくぞ〜1,2,3,ダー!!

迷わずやれよ やればわかるさ この凄さ・・・!!? 一度きりの人生だよ☆

443nobodyさん:03/09/28 04:56 ID:SGKixdue
phpでincludeみたいな機能はperlにありまつか?
444nobodyさん:03/09/28 05:03 ID:???
>>424
いいらしいというか、相対パスや[/]からの絶対パスはRFC違反ですな。
http://などから始まるURI表記として書かないと

>>443
require、use、doあたりから好きなものを使え。
445nobodyさん:03/09/28 05:44 ID:???
>>444
わかりますた、アリガトン。
446nobodyさん:03/09/28 05:50 ID:???
>>444
/から始まるパスは問題ない。
クライアントに302が返らずに、サーバ内でリダイレクトされる。
http://hoohoo.ncsa.uiuc.edu/cgi/out.html
いいかげんこれもFAQだな。

つーかCGIに関するRFCはまだドラフトだと思ってたが、何番の話をしているのだ?
447nobodyさん:03/09/28 09:36 ID:???
>>446
rfc2616(HTTP/1.1)だと思うけど。
locationに関してはHTTP/1.0でも変わらないと思うよ。
448nobodyさん:03/09/28 11:07 ID:???
424だが
print "location: $location{$ENV{'QUERY_STRING'}\n\n";
だったな。スマソ。無駄にナニさせてしまった。
449nobodyさん:03/09/28 11:09 ID:???
>448
だから、エラーになるって。
カッコの組み合わせの数考えろよ。
450nobodyさん:03/09/28 11:10 ID:???
>>449
ごめん。 激しく欝デス。逝って来ます。
451nobodyさん:03/09/28 11:15 ID:???
2chのIDって、何と何の構成でできてるの?
452nobodyさん:03/09/28 11:21 ID:???
>451
日付とIPと板ごとのID
453nobodyさん:03/09/28 11:34 ID:???
>>452
うい。
板ごとのIDって、WebProgで言うと「php」でつか?
454nobodyさん:03/09/28 11:40 ID:???
>>453
その日の最初のカキコ時に生成される16バイトのランダムID
455nobodyさん:03/09/28 11:41 ID:R65WBK9G
phpでポップアップウインドウを出すにはどうするんですか?
456nobodyさん:03/09/28 11:43 ID:R65WBK9G

間違えた
スルーしてください
457nobodyさん:03/09/28 11:46 ID:???
矢駄
458446:03/09/28 12:14 ID:???
>>447
ふむ、けどHTTPの仕様とCGIからの出力の規定はちがうのですよ。
459458:03/09/28 12:16 ID:???
s/から//
460nobodyさん:03/09/28 13:15 ID:???
crypt($addr,$mday,$bbs?)
461nobodyさん:03/09/28 14:17 ID:???
>>460
ttp://www.japu.org/tinybbs/にあるやつじゃない
2年以上前のやつだから変わってるかもしれないけど。
462nobodyさん:03/09/28 17:42 ID:???
質問です。
if($abon){

}

という基本的なif文に於いて、$abonが定義されてなければ、どうなるのでしょうか??
500Internal Server Error?
463nobodyさん:03/09/28 17:52 ID:???
やってみろよ
464nobodyさん:03/09/28 18:11 ID:???
>>462
なんで httpd のレスポンスコードなのか?
465nobodyさん:03/09/28 18:14 ID:???
500エラーだけを頼りにデバッグするのって、もの凄く効率悪いと思うのだが。
本人は疑問に思わないのか?
466nobodyさん:03/09/28 18:25 ID:???
500Internal Server Error?

これはperlのエラーじゃない事をキミに教えてやる。
467447:03/09/28 19:05 ID:???
>>458
なるほど、ちょっと調べてみました。ドラフトは出ているようですね。
http://www.ietf.org/internet-drafts/draft-coar-cgi-v11-03.txt

アドレスはabsoluteURIのほかにlocal-pathqueryの形式が許されているようです。
(/から始めなければならないとありますが。)

Apache(1.3.27)のmod_cgiもアドレスが/で始まるとき、内部リダイレクトさせてました。
468467:03/09/28 19:23 ID:???
Apacheのmod_cgiですが、内部リダイレクトしてると思ったら、301返してきますね。
ちゃんとabsoluteURIに直されてますけど。。
469馬鹿:03/09/28 19:34 ID:NOFJe5gI
STDINにseekを使うことはできますか?
470458:03/09/28 19:36 ID:???
>>468
うちでは正常(Apache 1.3.27)。これ以上続けるならCGIスレに移動しよう。
471nobodyさん:03/09/28 20:05 ID:???
>>469
できる馬鹿
472馬鹿:03/09/28 20:11 ID:Be3Qxp63
うっほーい
473nobodyさん:03/09/28 20:30 ID:???
>>462
それはおまえが use strict の住人かどうかによる。
なんでもいいが、KCatchかなんか使ってろよ。
474馬鹿:03/09/28 21:06 ID:Be3Qxp63
>>471
できなかったYO!!!
475nobodyさん:03/09/28 21:30 ID:qHWNg5sh
だれも>>468につっこみいれないのか・・・
476432:03/09/28 21:33 ID:a1I0tWLx
できました。ありがとうございます。

ところでリンク先のページでアドレスバーに表示されるURLをindex.cgi?t1からxxx.htmにするのはどうすればいいのでしょうか?
477nobodyさん:03/09/28 21:47 ID:???
>>476
結局、Locationヘッダでやってるの?
http:// から始めないとアドレスバーの内容はかわらないね、IEは
478432:03/09/28 22:21 ID:a1I0tWLx
>>477
できました。みなさんありがとうございました!
479nobodyさん:03/09/28 22:53 ID:???
掲示板で行頭に##を付けるとその一行が炙り出しになる機能を付けたかったので、
○○.plに$val =~ s/^##(.*)/\##<font color\=\"#eeeeee\"\>$1\ <\/font\>/g; を追加しました。
そしたら一行だけではなく、その書き込み全てが炙り出しになりやがりました。
これだけでは説明不足かもしれませんが修正方法お願いしますです。
480nobodyさん:03/09/28 23:00 ID:???
>>479
一行 = 改行まで
481nobodyさん:03/09/28 23:17 ID:???
>479
\nか<br>か都合のいい方をマッチさせれ。
482447:03/09/28 23:28 ID:???
>>486の件は、アドレスの最後に/を付けずディレクトリにアクセスしたため。
内部リダイレクト後、301で実際のディレクトリへ移動していただけでした。

>>470
ども、、もう消えます。
483nobodyさん:03/09/29 04:04 ID:???
>>479
エスケープしなくてもいい文字までエスケープしてる気がするが、気のせいだろうか。。。
484nobodyさん:03/09/29 04:39 ID:???
そういうのが好きなやつもいるのだろうよ
485nobodyさん:03/09/29 05:14 ID:???
>>483
「メタ文字が何だか分からない場合、とりあえず記号は全部エスケープしとけ」というのが
ラリー先生の御達しだたはず。
486nobodyさん:03/09/29 11:25 ID:2gOy4VWM
ファイル名 aa.txt

内容はカンマ区切り
NO 名前   住所  電話   携帯    mail
--------------------------------------------------
112,山田華子,住所AA,電話番号11,携帯電話22,E-mail,
222,加藤士郎,住所BB,電話番号22,携帯電話22,E-mail,
332,青木太郎,住所CC,電話番号33,携帯電話22,E-mail,
この内容ですが下記のようにすべて配列に入れました。

それをaF112〜332と名前:山田華子〜青木太郎の配列をつくりたいのですが
splitで上手くいきません?
良い方法あれば教えて下さい。

用途として、下記のように個別のSELECTBOXを作成します。
112
222
332

下記のとおりにすると全てが配列に含まれてしまいます。
そのままINDEXで個別指定できればいいのですが。。。。

open IN,"aa.txt";
while(<IN>){
$data = $_;
chop $data;
($no,$name,$address,$tel,$keitai,$mail) = split(/\,/,$data);
push @all,$data;

}

487nobodyさん:03/09/29 11:28 ID:???
>>486
プログラム板とマルチポストするな
488nobodyさん:03/09/29 12:33 ID:???
すみません、GDやImagemagickを使わないで、
とあるJPEG画像Aをもとに縮小してJPEG画像Bを作成することはできるでしょうか?

できるとすれば、どうやればいいのでしょうか?
489nobodyさん:03/09/29 12:49 ID:2gOy4VWM
>>486

spritとインデックスの組み合わせで出来ました。!(^^)!
##sage
490nobodyさん:03/09/29 14:10 ID:???
>>488
GDやImageMagickと同等のものを自分で作る。
そのためには、JPEGの仕様をどっかからみつけてきて、
自分でそれを取り扱うコーディングをすることだ。

多分、払う労力と成果物の完成度から考えると、
素直にGDとかを使った方が絶対に楽だが。
491404:03/09/29 17:24 ID:???
>>406
あ、かんじんなこと忘れてました。
SSH接続できない環境で、動くようにしなければならないもので・・・
(で、GDもImageMagickも入ってない)

うーん、実はGIFのサイズも変更しなけれななくなりそう・・・
どうしよう。。。
492nobodyさん:03/09/29 17:39 ID:???
同じCPU,OSのサーバ用意してコンパイルしてバイナリをftpしたら?
493nobodyさん:03/09/29 18:17 ID:???
以下のスクリプトで、
if ($entry =~ m/^tmp/i){
の行で、
Illegal division by zero at index.cgi line 831.
とエラーがでてしまいます。

どうして、割り算をしてないのにこんなエラーがでてしまうのでしょう?
なお、
(KCatch.pm使ってますが)
831行目の直前に、
print $entryしてみたところ、「.」「..」「tmp200309291817-3647-1.jpg」と表示され、
このエラーがでたので、
どうも、正規表現にひっかかったときに、このエラーが発生するようなのですが・・・


$PATHImage_info= "../../cgi-bin/image/info/";
$path = $PATHImage_info;
chop($path);
opendir(DIR, $path) or die("cannot open dir $path:$!");
while ($entry = readdir DIR){
    if ($entry =~ m/^tmp/i){
        unlink ($path/$entry);
    }
}
closedir(DIR);
494nobodyさん:03/09/29 18:25 ID:???
        unlink ($path/$entry);

おもいっきりわりざんしてるやん。
495nobodyさん:03/09/29 18:26 ID:???
>>493
$path/$entry → "$path/$entry"
496406:03/09/29 18:44 ID:???
>>407-408
レス遅くなりました、ありがとうございます。
処理している内容はよく分かりませんが動きましたです。
497nobodyさん:03/09/29 19:26 ID:???
今度は何でもかんでも "" で囲うようになって、リストまで囲んでハマりそうな悪寒。
498nobodyさん:03/09/29 20:05 ID:???
>>488
> とあるJPEG画像Aをもとに縮小してJPEG画像Bを作成することはできるでしょうか?

 これどうよ?「コマンドラインでの実行にも対応する」と書いてあるので
使えるかもしれん。試したことは無いが。
http://www.vector.co.jp/magazine/softnews/021123/n0211233.html


499nobodyさん:03/09/29 20:58 ID:???
(UNIXの)Cシェルのように、変数名を囲むような方法がperlにありますか?

具体的には
$url1='http://pc2.2ch.net/test/read.cgi/php/';

print<<_code_;
<a href="$url11063562491/l50">このスレ</a>
<a href="$url11063562492/l50">あのスレ</a>
<a href="$url11063562493/l50">そのスレ</a>
_code_
みたいにやりたいんですが、Cシェルなら${url1}1063562493ってやればいいんですが・・・
500nobodyさん:03/09/29 21:00 ID:1z2RXRdN
sageだった・・・_| ̄|○
501nobodyさん:03/09/29 21:13 ID:???
>>499
ヒアドキュメント?
502nobodyさん:03/09/29 21:20 ID:???
>>499
ではCシェルのように書いて試してみれば? :o)
503nobodyさん:03/09/29 21:24 ID:???
例が悪かったです。ヒアドキュメントじゃないです。

$url1='http://pc2.2ch.net/test/read.cgi/php/';
print "$url11063562493/l50";
の結果として
http://pc2.2ch.net/test/read.cgi/php/1063562493/l50

になって欲しいのです。
Cシェルだと${url1}1063562493/l50とすることによってurl1が変数名であると認識してもらえます。
504nobodyさん:03/09/29 21:27 ID:???
505499:03/09/29 21:27 ID:???
>>502
普通に使えるし…もうアフォかと
吊ってきます
ご面倒おかけしますた             ∧||∧
506nobodyさん:03/09/29 21:28 ID:???
>>503
print $url . "1063562493/l50";

じゃダメ?確かめてないけど...
507nobodyさん:03/09/29 21:40 ID:???
解決したようですが・・・
perlでも${url1}1063562493/l50とすることによってurl1が変数名であると認識してもらえます。
508499 (∧||∧実行中):03/09/29 21:42 ID:???
↑でした。
509nobodyさん:03/09/29 22:23 ID:???
>>507
誰でも知ってる常識レベルだと思ってたが
510nobodyさん:03/09/30 00:42 ID:???
初心者スレなんで勘弁してやって
511493:03/09/30 00:45 ID:???
>>494-495

うお、はずかしー。
行番号1行読み間違えてたし、
文字を数列にぶっこむとゼロになることも知らなかった。。。

ひとつお勉強になりました。
512493=511:03/09/30 00:46 ID:???
数列じゃなかった、数式ね
513nobodyさん:03/09/30 01:06 ID:???
>>511
my $str = '12 ANGRY MEN';
print $str * 12; # 144
514493=511:03/09/30 01:27 ID:???
>>513
・∀・)つ〃∩ へぇ。へぇ。へぇ。へぇ。

つか、例文がしゃれとるな
515nobodyさん:03/09/30 01:30 ID:???
ファイルアップローダ
(まぁ正確には添付ファイル付きメールフォームなんですが)
を作ってるんですが、

マックバイナリがついてるかどうかを判断して、あれば削除するってのは、
どうすればできるんでしょうか?
516nobodyさん:03/09/30 01:54 ID:???
517515:03/09/30 02:27 ID:???
>>516
ありがとうございます。
うーん、でも難しい。。。ゼロって'0' のこと・・・でしょか・・・

$filebody に中身を格納したとして、

if ( substr($filebody,0,1) eq '0') && (substr($filebody,74,1) eq '0') ) でOK?・・・なわけなさそう。。。

あと、リソースフォークとコメントも取り除かなきゃならないのか・・・
518nobodyさん:03/09/30 02:50 ID:???
0と'0'は違うでしょ。
519ヘタレ:03/09/30 03:41 ID:???
あるmyで局所化した配列を引数に型グロブとしてサブルーチンに渡すと、
それをスコープすることが出来なかったようです。
こんなときはリファレンスを使えってことですかね?
他に良い解決法があれば教えてください。

以下にサンプルを示します。

my @array = ("hoge", "foo");

print &sub(*array, $val);

sub sub {
 my (*ar) = @_;
 return (@ar);
}
520519:03/09/30 03:42 ID:???
$val は余計でしたね…
521nobodyさん:03/09/30 04:49 ID:???
urlエンコード文字列は大文字と小文字どちらのほうがいいですか?
%E3%81%AA%E3%81%AA%E3%81%97みたいなの
522 ◆G7gJP6maHs :03/09/30 07:06 ID:tlRt08RD
1:MAIN
2:name<>aa
3:name<>dd

1:MAIN
2:name<>55
3:name<>gi

・・・

のようなファイルがあったとして
そこに追加書き込みモードでseek(FILE, 0, 0を使って
先頭にデータを書き込みたいのですが出来ませんでした。
それは出来ないのですか?
他に方法はありますか?
523nobodyさん:03/09/30 09:47 ID:???
>>522
できないって、どうもならなかったの?
前のデータに上書きされたの?

どうもならなかったならオープンモードを確認
もしも挿入したいというのなら、構造上全部書き直さないと無理
524nobodyさん:03/09/30 09:50 ID:???
>>519
リファレンスがすっきりしていいとおもうが・・・

>>522
追加書き込みモードではseekできないかも。
読み書き両用モードでどーよ。
でも、データの位置を求めたりしなきゃいけないから、dbm使うほうがいいと思われ。
525nobodyさん:03/09/30 12:37 ID:???
>>517
substrじゃなくて、unpack を使う。テンプレートは"C*" でいいかな
526525:03/09/30 14:48 ID:???
C*だと全部読んじゃうか。切り出した後ならいいけど固定長なんだから"C128"でいいな

で、ちょっと>>516のページ読んでみたよ
$filedata に内容が入ってるとして、
@a = unpack("C2a63N2C2n3C2N4nCa4C2C8NnC2n2", $filedata);
とやって

$a[0] == 0 , $a[6] == 0 以外ならMacBinaryではない
 $a[11] == 0 ならMacBinaryI の可能性あり
  $a[1] > 0 && $a[1] < 64
  $a[12] < 0x7fffff , $a[13] < 0x7fffff
  $a[17..28] == all 0
  以上を満たせばMacBinaryIかもしれない
  その場合、$a[2] にファイル名が入っている
 $a[24] >= 129
$a[25] == CRC($fileの先頭124バイト)
 $a[18] == 'mBIN' の場合MacBinaryIIIの可能性あり

こんなとこかなあ、、、 I は判別苦しいな
送るファイルのフォーマットがわかっていれば
ヘッダを取った後の内容で判断できるけどねぇ
CRCの計算は調べればどっかにあると思うんで省略
527525:03/09/30 14:56 ID:???
< 0x7fffff は <= 0x7fffff だな・・・
まあ検証も何もしてないんで、そのまんま使わんようにね
528 ◆Pgys2byAHg :03/09/30 16:15 ID:tlRt08RD
CGIでデータをファイルに書き込むときの区切りを
$DATA = join(/全角文字/, @list)
みたいに全角文字を使うのは問題ありますか?
半角文字だと保存ファイルの中で勝手に改行されていることがあって困っています。
529 ◆Pgys2byAHg :03/09/30 16:36 ID:tlRt08RD
>>528
すいません
全角文字を区切りにしても改行されていました。

リストを保存するために
print FILE @list;
とすると保存ファイルの中で勝手に改行されてしまうことがあり
データを思い通りに取り出すことができません。
何が原因かわからないし、解決方法もわかりません。
530nobodyさん:03/09/30 16:39 ID:???
改行してんのはデータに改行コードが入ってるからじゃねーの?
“勝手に”改行するとは思えんが・・・
531nobodyさん:03/09/30 16:40 ID:3FAGrror
Net::FTPを使って、いろいろな処理をしているのですが、
一つ分からないことがあったので質問します。
そのファイルがサーバにあるのかどうかを調べようとしているのですが、
適当な命令が分からなかったので以下のように処理しています。

$ftp = Net::FTP -> new ("$server");
$ftp -> login ("$usr", "$pwd");
$ftp -> cwd ("/test/directory");
push (@i, join ("\n", $ftp -> ls ()));
$ftp -> quit;

@i配列にディレクトリ内にあるファイルを放り込んでいくというものです。
ですがこれは失敗で、すべて改行コード付きで$i[0]に挿入されるだけなのでした。
つまり
for (@i) {
chomp;
if ($_ eq $a) { print "発見\n"; }
}
などとしたところで、配列の第一区画にしか値が入っていないため、「発見」は出力されません。

こんな面倒なことをしなくても、そのファイルがサーバ上に存在するかどうか
を調べるにはどうすれば良いか教えて頂けませんか?方法が分からないためにこんな面倒な
ことをしてというていたらく。

よろしくお願いします。
532nobodyさん:03/09/30 16:45 ID:???
>>531
join ? split じゃねーの?
533nobodyさん:03/09/30 16:53 ID:???
>>532
そうすると、ARRAY...という文字列が表示されるだけなんですよ。

うーん。
534nobodyさん:03/09/30 16:56 ID:???
>>531
Net::FTPのドキュメントを読みなされよ。
535nobodyさん:03/09/30 17:07 ID:???
>>531
--- Net/FTP.pm より抜粋 ---

sub ls { shift->_list_cmd("NLST",@_); }
...
sub _list_cmd {
...
  my $list = [ split(/\n/,$buf) ];
...
  wantarray ? @{$list} : $list;  
}
536nobodyさん:03/09/30 17:10 ID:unsxHigP
>>531
Net::FTP 使った事ないけど見たところ、
$ftp -> ls () が配列を返すのなら、

@i = $ftp -> ls ();

なんじゃねえの?
push (@i, join ("\n", $ftp -> ls ()));
って$ftp -> ls ()が返す配列を\nでjoinして@iにpushしてるんだから、
$i[0]にまとめて入っちゃってるってのは当たり前のような気がするけど。
537nobodyさん:03/10/01 01:11 ID:???
WindowsサーバでPerlを利用し、別に用意されているノーツ
サーバ(メールサーバ)を利用してメールの配信をしてくれと
言われましたが、どうやるのかさっぱりわからず、聞き返し
ても自分で調べてくれと一点張り。

調べても出てこないので聞いたのですが、もうどうしようもない
状況です。
そもそもノーツサーバを使ったSMTP送信というものはどういう
イメージであるのか、本当にわからないことだらけです。

神様、どうかご教授ください。
人に頼るということは良くないことですが、情報がないため
質問させていただきました。ごめんなさい。
538nobodyさん:03/10/01 01:15 ID:???
どきゅそ初心者ですが、暇な人いたら教えて下さい。
下の"1"から"5"までをシンプルにまとめる方法はないでしょうか?

(($sec eq "1")or($sec eq "2")or($sec eq "3")or($sec eq "4")or($sec eq "5"))

ちなみに($sec =~/[1-5]+/)とかやってみたけどだめでした。
539nobodyさん:03/10/01 01:34 ID:6ojryLUM
だめじゃないぞ
540nobodyさん:03/10/01 02:10 ID:???
($sec =~ /[1-5]/)
でいいじゃん
他には
($sec >= 1 and $sec <= 5)
とか
541nobodyさん:03/10/01 05:07 ID:???
($sec =~ /^[1-5]$/)
542nobodyさん:03/10/01 08:06 ID:???
>>538はどうだめだったかを書かないから>>541が出るまで時間かかったなw
普通は>>540氏の下のやつ使う、数字の場合
543nobodyさん:03/10/01 08:20 ID:QvvkWgZe
ただのリンクの文章に、変数に数値を代入する要素を
加えるにはどうしたらいいのでしょうか?たとえば、

$body .= qq(<A $href="***">りんく</a>);

で、「りんく」をクリックすると$#resに1を入れたいんですが。

$body .= qq(<A $href="***" $#res=1>りんく</a>);

じゃ無理なんでしょうか?やってみたけどできませんでした。
544nobodyさん:03/10/01 08:29 ID:???
<A HREF="***?res=1">
とかの話じゃなくて?
545543:03/10/01 08:33 ID:QvvkWgZe
>>544
それはランキングとかでよく見られるやつですよね?
そういうのとはまた別で、リンク先と変数は特に関係ないものです。
546nobodyさん:03/10/01 08:50 ID:???
>>545 ??
JavaScriptと勘違いしてる?
リンクをクリックしたってリンク元のURLのcgiは動かんぞ?
547543:03/10/01 08:59 ID:QvvkWgZe
いえ、Java Scriptの話ではないんですが・・・。
>>545の話はパラメータのようなものではないと言いたかったのです。
548nobodyさん:03/10/01 10:55 ID:???
perlのCGIじゃ無理。
549543:03/10/01 11:12 ID:QvvkWgZe
えー無理なんですか。
掲示板スクリプトで、特定のリンクをクリックすることで
変数に数値が代入され、その変数の値をif ($#res ==1)で判定して
また違う文章を表示するまたは表示しないという流れのものを
作りたかったんですが・・・。>>543のやり方や、
$body .= qq(<A $href="***&$#res=1">りんく</a>); とかやってみたところ、
どうやってもif文に当てはまってしまうようなんですよね。否定の結果にならなくて。

ってやっぱりperlでは無理なのかあ。残念。
550nobodyさん:03/10/01 11:31 ID:???
ぜんぜんわけわからん
551開店準備中:03/10/01 11:33 ID:L9ZAlkPa
やりたい事がイマイチよくわかりませんな。
そのリンク先***は自分自身なのか、他のサイトなのか。。

掲示板にあるリンクを誰かがクリックしたら、
「このリンクは○人が訪問済みです」
みたいな文章を掲示板に表示したいとか?

そもそも自分自身を呼び出す事はしちゃいけないのか??
552助けて下さい:03/10/01 11:46 ID:LJr9q6s0
forkが使えない環境で、時間がかかる処理を実行し、ブラウザ上は
直ちに「起動しました」と表示させたい。

いろいろ調べて、
---------------------------
print "起動しました\n";
close(STDOUT);
#ここに時間のかかる処理
---------------------------

というのを試したが、確かにすぐ表示はされるが、ブラウザの
進捗表示は動いていて結局処理が終わるまで開放されない。

何かいい方法はありませんか?ご教授頂ければ幸いです。
553nobodyさん:03/10/01 11:49 ID:???
>>552
開放されるようにするとKILL飛んでくるが、いいのか?
554nobodyさん:03/10/01 11:49 ID:???
>>543
なんだか言ってることが意味不明なんだが。
CGIってのはサーバーサイドで動くものだぞ。そのへんわかってるか?
それともGETでデータ受け取りたいってことなのか?

そもそも「$#resに1を入れたいんですが。」ってどういうことよ?
それをやると@resの要素の個数が変わるわけだが,ほんとにそれでいいのか?
555nobodyさん:03/10/01 12:02 ID:???
アホは放置の方向で
556543:03/10/01 12:09 ID:QvvkWgZe
よそではなく、そのCGI内での処理です。
つまり、リンクはどれも掲示板からその掲示板内の別の場所へのリンクです。

というか$#resってやり方は間違ってるのかもしれません。
とりあえずif文で判定に使える変数が欲しかったので、
使い方もよく知らずに使用しているだけなので。
557nobodyさん:03/10/01 12:16 ID:???
>>533
まぁfork and exit; という方法もあるが、サーバーによっちゃ
動かないかもな。
558nobodyさん:03/10/01 12:19 ID:???
だめだこりゃ。。


559nobodyさん:03/10/01 12:21 ID:???
>>557
>>552の前提がfork不可、だしねえ
560nobodyさん:03/10/01 12:26 ID:???
とりあえず543は>>1をよく読んで整理して質問し直せ。
ここはお前の訳わからん日本語を解読するスレじゃない。
561552:03/10/01 12:39 ID:z2YpNiRf
>>553さん
>>557さん

activeperl5.8にして(forkが使えるらしい)、
---------------------------------------
$|=1;
if($pid=fork()){
 print "起動しました\n";
 close(STDOUT);
}else{
 close(STDOUT);

 #時間のかかる処理

}
---------------------------------------

としても現象が同じでした…。


>開放されるようにするとKILL飛んでくるが、いいのか?

>まぁfork and exit; という方法もあるが、

具体的に教えていただいてもよろしいでしょうか?
562543:03/10/01 12:42 ID:???
自分では全部説明したつもりなんですが
私に基礎知識さえないせいでうまく伝わらないみたいです。
失礼しました。消えます。
563nobodyさん:03/10/01 12:59 ID:???
>私に基礎知識さえないせいで
というか、勘違いしている部分があると思われる
間違った知識を暗黙の了解として省略されると、わけわからない文章になる
564nobodyさん:03/10/01 13:00 ID:???
>>561
WinかYO!
HTTPdサーバは何?
565561:03/10/01 13:38 ID:jYAOy5k5
>>564さん
はい、Winです…YO…。サーバはIISです。

どうかお知恵を…!
566nobodyさん:03/10/01 14:48 ID:???
標準出力に出力を返すあるプロセスの出力を変数に格納したいんですが、
どのようにすればいいのでしょうか。

open PROCESS "|process|$output";
print PROCESS "inputstring\n";
print $output;

のようにやってみたのですが、$outputには何も入っておらず、
processの出力は標準出力に出力されました…。
567nobodyさん:03/10/01 14:57 ID:???
system "時間のかかる処理 &";
print "起動しました\n";
exit;

漏れの知識ではこの程度。鬱。
568nobodyさん:03/10/01 14:58 ID:???
>>566
$return = `process`;
とか。
569nobodyさん:03/10/01 15:02 ID:???
>>566
open PROCESS "|$command > $output";
print PROCESS "inputstring\n";
close PROCESS;

open LOG, "<$output";
print <LOG>;

でどうか?
570nobodyさん:03/10/01 15:18 ID:???
>>569

sh: -c: line 1: syntax error near unexpected token `newline'
sh: -c: line 1: `process >'

このようなエラーが出ました…。
571nobodyさん:03/10/01 15:31 ID:???
なんでそうなったか、考えて見た?

こういう場合、popen は使わないのかな
C出身だとまっさきにそれに飛びつくが…
572nobodyさん:03/10/01 15:37 ID:???
一行目のopenの>の文法が間違ってるのかな、と。
syntax errorって書いてますし…。
らくだ本とかでも、プロセス>ファイルハンドルとかはあっても
プロセス>変数ってのはなかったように思います。
ただ、 unexpected token `newline'てのはよくわかんないです。
573nobodyさん:03/10/01 15:40 ID:???
popen の入出力版がopen PROCESS "|$command|"; か・・・
574nobodyさん:03/10/01 15:42 ID:???
>>572
その > の先に $output があるが、$output に何も設定してないんだと思う
575nobodyさん:03/10/01 15:44 ID:???
>らくだ本とかでも、プロセス>ファイルハンドルとかはあっても

いまらくだ本でこの記述を探してるんですが見つからないです…。
夢を見たのかもしれません。
576nobodyさん:03/10/01 15:47 ID:???
>>574
んと、どういう事でしょうか。$outputにはprocessが標準出力に出すはずの
文字列が入っていて欲しいのですが…。
577nobodyさん:03/10/01 15:48 ID:???
´−`)oO( open FILEHANDLE, EXPR …だったらヤだなぁ…。)
http://www.kt.rim.or.jp/%7ekbk/perl5.005/perlfaq8.html#How_can_I_open_a_pipe_both_to_an
578nobodyさん:03/10/01 15:49 ID:???
>>576
違うよ、>>569の例は事前に$outputにファイル名を入れて
ファイルを介して読み書きするんだよ
579nobodyさん:03/10/01 16:03 ID:???
>>576
出力だけ欲しいなら、けつに | (先頭にはつけん)
入出力で使うなら、 open2() を調べる
以上でどう?
580nobodyさん:03/10/01 16:06 ID:???
>>578
おお!できました。
…が、ちょっと扱いにくいですね…。
というのは、

print PROCESS "inputstring\n";
hoge(@foo = splitなど($output));
print PROCESS "inputstring2\n";
hoge....

というふうに、processに入力を与えるたびに、その出力に
ある処理を加えたいのです。
569の方法だと、$outputには今までの全ての出力が入っていて、
それこそ出力ログですよね。
最近の出力のみを変数に格納したいんですが、いちいちopenとcloseを
挟み込んで開き直すしかないのでしょうか。
581nobodyさん:03/10/01 16:28 ID:???
>>580
IPC::Open2を使えばいい。使い方は

perldoc IPC::Open2

で読むかぐぐるかしてくれ。
582nobodyさん:03/10/01 16:48 ID:jHHqXc8O
Name "hoge" used only once: possible typo at ・・・

これはどういうエラーですか。
583nobodyさん:03/10/01 16:49 ID:???
>>582
エラーじゃないよ
一回しか出てこないけど、タイプミスじゃないの?
つってる
584nobodyさん:03/10/01 16:57 ID:???
>>528
その程度の英語なら辞書引けば分かるだろ。

ちなみに-wオプションの出力だったかと思うので、それで間違って
ないなら-wオプションを外せ。
585561:03/10/01 17:00 ID:LJr9q6s0
>>567さん
バックグランドで処理が動いて、ブラウザは開放される ということを
期待しましたが、現象は同じでした。

もしかして、もうだめポ…。
586nobodyさん:03/10/01 17:02 ID:???
>>585
IIS特有の現象かと思われる
おれにはもうわからん、、、
587nobodyさん:03/10/01 17:06 ID:???
>>581
IPC::Open2使ってみました。これ自体は良い感じなんですが…。
open2(*OUT, *IN, $command, @args);
としたときに、OUTに最新の入力に対する出力のみを残す、
またはOUTから最新の入力に対する出力のみを取り出すのは
どうすればいいのでしょうか…。
$output = <OUT>;
とやっても出てくるのは最初の出力の一行目だけですし。
588nobodyさん:03/10/01 17:08 ID:???
>>587
@output = <OUT>;
589nobodyさん:03/10/01 17:11 ID:???
>>585
STDINとSTDERRも閉じてみるとか?

>>587
どの出力がどの入力に対応したものかを判別するのは、
標準入出力の性質上不可能。

コマンドの入力や出力の内容から推測するしかない。
590nobodyさん:03/10/01 17:12 ID:???
>>588
それ、コマンドが標準出力を閉じるまでデッドロックすると思うが。
591nobodyさん:03/10/01 17:39 ID:???
>>589
うーん、一対一対応が取れる必要はないんで、
最新の出力だけわかればいいんですが…。
なんか良い方法はないですかね…。
592561:03/10/01 17:42 ID:CRn5ruC5
>>589さん
あ…あなたは神ですか…。
いや、冗談ぬきに、できましたよ!!
STDOUT,STDIN,STDERR 3つとも閉じたらできました!!

本当にありがとうございました!
(書き込んでよかった〜;;)
593nobodyさん:03/10/01 18:28 ID:???
>>591
出力の行数とかは毎回違うの?
「どれが最新か」という判断も標準入出力では不可能なんですよ。
コマンドが終了してしまえばEOFが返るからそれで判断できるけど。

>>592
おお、良かったじゃん。犯人はSTDERRのような気がするんだけど、
OUT、INの2つを閉じるパターンと、OUT、ERRの2つを閉じるパターンで
どうなるかやってみてもらえないかな?
594nobodyさん:03/10/01 18:34 ID:???
>>593
対話式のプロセスなので、コマンド入力ごとにプロンプトが帰ってきます
つまりOUTの中は
process> process>
process> 出力1
process> 出力2a
出力2b
などのようになっているので、OUTの最後から最初のprocess>を
探すことができれば、そこからOUTの最後までが最新の出力
ということになるのですが…。
595nobodyさん:03/10/01 18:35 ID:???
IISはSTDERRはエラーログに行かないのか?
596nobodyさん:03/10/01 18:48 ID:???
>>594
その「OUTの最後まで」を取得するのが不可能なんですよね。
プロセスにとっては、どの時点が出力の最後なのか判断する基準が
ないので。

一応alarmを使って一定期間ブロックした時点でコマンドの終わりと見なす方法は
あるけど、コマンドの実行が単に遅れているだけの場合に誤判別が起きますし、
標準入力がブロックするのを待つわけですから実行時間を無駄に食います。
597nobodyさん:03/10/01 18:58 ID:???
>その「OUTの最後まで」を取得するのが不可能なんですよね。

while(<OUT>)
としたときに無限ループするのもそれが原因ですかね?
これもなんとかなりませんかね…。
598nobodyさん:03/10/01 19:08 ID:???
ラッパー作ってそいつと通信したほうがよさげ
599nobodyさん:03/10/01 19:20 ID:???
select(2) はこういうとき使えるのかな?
600592:03/10/01 19:22 ID:speTtA5w
>>593さん
まさにその通りでしたよ!

OUT、INを閉じる:NG
OUT、ERRを閉じる:OK

という結果になりました!
601nobodyさん:03/10/01 19:35 ID:???
>>597
そうです。その状態をブロックと呼びます。
情報が来ないからずっと待ってる状態ですね。

>>599
多分使えると思うけど、sysreadをしてやる必要が出てきたり面倒なので、
あえて触れないでおいた。
まぁselectでファイルハンドル覗いたとしても、コマンドが遅延してる場合に
誤動作するのは避けられないので。

>>600
おお、そうですか。わざわざありがとう。IISだとSTDERRまで面倒みてやらんといけないんだな。
WindowsやIISの実装はよく知らないんだが、STDOUTとSTDERRを同列に扱ってるのかな?
602531:03/10/01 22:52 ID:???
できた!できました!
>>535
$ftp -> dir ();
これで試したことはあるのですが、うまくいかず
$ftp -> ls();
も試したような試さなかったような。
試していても多分どこかの記述で間違っていたのでしょう。

>>536
恥ずかしながら、全く思いつきませんでした。
それでうまくいきました。

おそくなりましたが、ありがとうございました。
603nobodyさん:03/10/02 15:40 ID:CofMmnLn
複数のファイルを一度にダウンロードさせたいのですが、IEでは

Content-Type: multipart/mixed
または
Content-Type: multipart/x-mixed-replace

はいまだに実装されていないのでしょうか? multipart/mixedは、outlookから
なら使えるようなのですが……。

上記(複数のファイルを一度にダウンロードさせる)の別の実装をしたことのある方が
いらっしゃいましたら、それでも結構ですのでアドバイスをお願いします。



604 ◆Pgys2byAHg :03/10/02 15:44 ID:sWr7wCtd
リンク集などでどのリンクが何回クリックされたかわかるリンクカウンタCGIについて
どのようなスクリプトなのかわからないのですが説明していただけませんか?
ページカウンタはページが呼び出された時にCGIも呼び出しているのはわかりますが
リンクカウンタは別ページへ飛ばせているのにカウントしているのがどうやっているのかわかりません。
605nobodyさん:03/10/02 16:06 ID:???
>>603
IEではできません

>>604
ソースを読んでみましょう


ところでどっちもスレ違いじゃない?
606603:03/10/02 16:26 ID:CofMmnLn
>>605
すっぱりきっぱりのお返事ありがとうございます(T_T) では

>上記(複数のファイルを一度にダウンロードさせる)の別の実装をしたことのある方が
>いらっしゃいましたら、それでも結構ですのでアドバイスをお願いします。

の部分、多少汚い方法でもかまいませんので、何か実装方法は無いものでしょうか?
ぱっと思いつく限りでは「個別のファイル送信へのリンクを張ったHTMLを出力してJavaScriptで
submitしまくる」くらいしか思いつかないのですが、これだと同時に三個までしかダウンロード
できないし……。

たびたびで申し訳ありませんが、よろしくお願いいたします。

607nobodyさん:03/10/02 16:31 ID:???
>>606
PerlにContent-Typeなんてないよ。
ダウンロードって何?Perlにそんな機能ないよ。
608nobodyさん:03/10/02 17:35 ID:???
>>606
無茶な案だが。
Location: ヘッダ使ってFramesetなページにとばす。
FramesetなページのSRCにはダウンロード先を書く。
とうぜんダウンロードしたいファイルの数だけFrame分割な。

>>607
Webprog板なんだし,それくらいは許容範囲にしてやれ
609nobodyさん:03/10/02 17:46 ID:???
>>608
あ、ごめん。ム板と間違えた。これで2回目だ。氏んでキマス。。。
610nobodyさん:03/10/02 17:48 ID:???
>>606
氏ぬ前に一言。
ブラウザの方で同時接続数の制限してるよ。設定で変えられるだろうけど。
611603:03/10/02 18:05 ID:CofMmnLn
>>610
……レジストリいじらないとダメみたいっしゅ……(T_T)
612nobodyさん:03/10/02 18:07 ID:???
>>611
窓の手でも使え
613603:03/10/02 18:30 ID:???
>>612
いえ、ツールがあるのは知っていますが、見る人間全員にいちいち設定してもらうわけにも
行かないので(^^;
614nobodyさん:03/10/02 18:47 ID:???
ならOperaを使わせろ。
デフォルトの設定で子鬼のような同時接続数に設定されている。
615nobodyさん:03/10/02 18:58 ID:???
>>603
素直にtarとかで固めちゃうのが楽だけどな。
それもクライアントが対応できないか?
616nobodyさん:03/10/02 19:03 ID:???
>>615
win相手ならzipとかlzhの方が普及してそうな悪寒。

617nobodyさん:03/10/02 19:21 ID:???
>>603
何をDLさせるのか知らないけど、
DLするもののリストをJavaScriptの配列に入れて、
onLoadで一つ目のリストをDLさせる別窓を開く。
DL完了後、別窓を閉じる。と共に次のリストをDLさせる別窓を開く。
以後、リストが無くなるまで繰り返す。

>「個別のファイル送信へのリンクを張ったHTMLを出力してJavaScriptでsubmitしまくる」

この辺が理解できないからなんとも言えないけど。
>>615が言うように、素直にtarにするのが良いんじゃない?
618618:03/10/02 19:48 ID:fdawIf8z
御教授お願い致します。

$aに100バイトの文字が入っているとします。
それを、50バイトずつ別の変数$b[i]に代入するには
どのような処理・関数を使うと良いでしょうか??
処理的には、
もし、$aが50バイトを超えたら
残りは$b[1]に。
そして、$b[1]が50バイトを超えたら
残りは$b[2]に。
 ・
 ・
 ・
 ・
といった具合です。
「超過分文字のみを次の変数へ代入させる」という処理方法について
悩んでいます。。。

while ($a){
$b[$i] = substr($a,0,50);
$i++;
}

だと思い、やってみたのですが
うまくいきませんでした。。。(;・∀・)
619nobodyさん:03/10/02 19:55 ID:???
>>618
while ($a){
$b[$i] = substr($a,0,50);
$a = substr($a,51);
$i++;
}
でいいんじゃね?
あと、日本語使うなら途中で切れる可能性もあるけど。
620603:03/10/02 20:08 ID:???
>>617
えと、DL終了の監視ってどーやってするんでしょう?<厨な漏れ(T_T)
もしかしたらonUnloadとかで連鎖的に開いてくのかな。

DLさせるブツはCSVファイルです。もともと一つのファイルにまとめていたのですが、
ユーザーが「カット&ペーストするのタリぃ」とか言い出しやがりまして(T_T)

こーゆー風に出力するって、ちゃんと仕様書に書いてあったろうが!!
ちゃんと銭出してくれるんだろうな(涙)
621617==619 :03/10/02 20:19 ID:???
>>603
すまん、勘違いしてたかも。>DL終了の監視
DLさせるってのがどういうことを指してるのかわからんので何とも言えんが・・・。
どっちにしろJavaScriptで実現するなら板違いな。
Perlでするなら分割してメールに添付すれば?

>>618
訂正。
> あと、日本語使うなら途中で切れる可能性もあるけど。
2バイト以上の文字は途中で着られる可能性もあるけど。
2バイトが1+1バイトになるっつーことな。
622nobodyさん:03/10/02 20:20 ID:???
>>620
それはもうJavaScriptスレ逝きだな。

CGIならContent-Typeをmultipartで送出するって技なかったっけ?
ブラウザが対応してるかどうか知らんけど。

あと根本的な話だけど、複数に分割してダウンロードさせるより
ダウンロードしたやつを分割するスクリプト書いた方が圧倒的に早い気がする
623617==619 :03/10/02 20:22 ID:???
訂正した上に誤字だし。。。鬱。
624nobodyさん:03/10/02 20:37 ID:???
(´-`).。oO(618 は以前どこかで見たような。。。回答もしたような。。。)
625nobodyさん:03/10/02 21:50 ID:???
ちょっと質問とは違うんだけどさ。

{
no strict q[refs];
&{"$::form{'link'}"};
}

------------------
{
no strict q[refs];
&{qq[$::form{'link'}]};
}

-----------

上がで、下がダメってなんかムシズが走らない?
さっきエラーではまったよこんちくしょう。(三分くらいだけどね)
626625:03/10/02 21:51 ID:???

>上がで、下がダメって
上がOKで、下だダメ。
627603:03/10/02 22:26 ID:???
>>622
んで、最初に戻って

>Content-Type: multipart/mixed
>または
>Content-Type: multipart/x-mixed-replace

はIEでまだ使えないんでしょーか、という話になるわけです(T_T)

確かに>>620はJavaScriptスレですね。
ExcelあたりのVBAでどっかに転がってないかなぁ(T_T)>ファイル分割スクリプト
628nobodyさん:03/10/02 22:31 ID:K49KzhGg
my @b;
my $i = 0;
while($a =~ m/.{50}/gs ){
$b[ $i ] = $MATCH;
$i++;
}
629nobodyさん:03/10/02 22:31 ID:???
>>625
デリミタに [] なんて使うからだ。qq// にしてみ。
630nobodyさん:03/10/02 22:45 ID:???
ループ構文や作業変数使わない方法。

my @b = $a =~ /.{1,50}/gs;

my @b = unpack 'A50' x (int(length($a) / 50) + (length($a) % 50 ? 1 : 0)), $a;

多バイト文字考慮するならココでも読んで。
http://www.din.or.jp/~ohzaki/perl.htm#JP_Fold
631nobodyさん:03/10/02 23:28 ID:???
>>376
RFC2617ですね。正直、初めて読みました。ありがとうございます。
BasicとDigestでrealmの意味合いが違ったりして面倒ですね。
関係ないけど、Digestの場合のrealmはホスト名を含むべきだそうで。
632631:03/10/02 23:30 ID:???
誤爆、すみません。
633nobodyさん:03/10/02 23:38 ID:???
ディスク埋めるのRFCで規格化されてたのか・・・
勉強になるなぁ
634nobodyさん:03/10/03 00:48 ID:???
635nobodyさん:03/10/03 00:51 ID:F2oHzxKQ
perlの勉強ついでにアクセス解析作っています

htmlに画像として埋め込むタイプで
SSIのDOCUMENT_URIにあたるものをとりたくて

$DOC_URI=$ENV{'HTTP_REFERER'};
$DOC_URI =~ s/$"http://" . ENV{'HTTP_HOST'}//g;

ってやったんですが動きません

"http://" . ここの部分がだめかなと思いこの部分を削除してみましたがやはり動きませんでした

よろしければご教授お願いいたしします
636nobodyさん:03/10/03 00:53 ID:???
1: 自分はこう言う事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。

最低でも1と3が無いと誰も答えられないよ。
637nobodyさん:03/10/03 00:53 ID:???
>$DOC_URI =~ s/$"http://" . ENV{'HTTP_HOST'}//g;
なんじゃこりゃ
638635:03/10/03 01:19 ID:???
自己解決しました
とんでもない勘違いしてました・・・ウワァ
639TESTさん:03/10/03 01:54 ID:Q+brxX1I
初心者です、、

@TEST=(1,4,3,2,5,6,9,19,11…以下略)
と、の整数のみの配列の中から、特定の数字を抜き取りたいのですが、、、

やったこと…grep関数を使ったら10の位の奴までHitするので使わず、

for($i=0;$i<$#TEST;$i++){
if(@TEST[$i] eq $特定の数字){
$Ans=$i;
splice(@TEST,$index,1);
last;
}
}

とかやってみてもだめでした…
助けてくださりますぇ〜
640nobodyさん:03/10/03 02:02 ID:???
>>639
・数値は == で判定
・$indexって何よ?
641TESTさん:03/10/03 02:36 ID:Q+brxX1I
>>640
どうもですぅ。

あと、$indexっていうのは元のプログラムの変数っす…
スマソ…
642nobodyさん:03/10/03 03:00 ID:???
while(<FILE>){}

上のようにwhileでファイルを読み込むと、
行末の余分な空白を勝手に削除してくれるのですが
これはperlの仕様なのでしょうか?
643nobodyさん:03/10/03 03:05 ID:???
んなこたぁない。
644nobodyさん:03/10/03 03:09 ID:???
>>639
@result = grep(/^特定の数字$/, @TEST); とかは?
645nobodyさん:03/10/03 03:21 ID:???
for ( $i=$#test; $i>=0; $i-- ) {
splice(@test,$i,1) if ( $test[$i] == 特定の数字 );
}

spliceすると配列の長さが変わるので尻からまわしていかないとダメみたい。
646nobodyさん:03/10/03 05:12 ID:???
>>639
配列の使い方勉強して。@TEST[$i] はダメ。
あと、
for( $i=0 ; $i =< $#TEST ; $i++ ){
としないと配列の最後の要素が目的の値だった時に失敗する。

>>644
要件が違うと思われ。
やるのなら
@result = grep($_ != 特定の数字 , @TEST);
だろうが、無駄が多い。

>>645
それも無駄が多い。
ヒットするのは一回だけなのに全部ループさせる必要はない。
639はsplice直後にlastでループ抜けてるんだから長さ変わっても問題なし。
647646:03/10/03 05:27 ID:???
>>639
もしかして、配列の中に目的の要素が複数出てくる可能性もあるのか?
けど、わざわざ $Ans=$i; としているということは、やっぱり一個しかない前提?
648nobodyさん:03/10/03 08:38 ID:???
>>646
> for( $i=0 ; $i =< $#TEST ; $i++ ){
こういう書き方もあんの?
for( $i=0 ; $i <= $#TEST ; $i++ ){
では?
649TESTさん:03/10/03 10:37 ID:Q+brxX1I
>>647
一個しかない前提です、、、ごめんなさい…
650TESTさん:03/10/03 10:50 ID:Q+brxX1I
あっ、、解決しました〜
皆さんどうもありがとうござります…
(>>646さん、>>648さんので解決)
651nobodyさん:03/10/03 10:51 ID:???
>>649
for($i=0;$i<=$#TEST;$i++){
if(@TEST[$i] == 特定の数字){
$Ans=$i;
splice(@TEST,$index,1);
last;
}
}
652651:03/10/03 10:52 ID:???
ぼえー
653nobodyさん:03/10/03 10:57 ID:???
>649
配列を2個使っていいなら、下のような書き方の方が簡便。

@test = (1,2,3,4,5);
foreach (@test){($_ == 特定の数字)?$Ans = $_ : push @test1, $_} ;
654651:03/10/03 11:00 ID:???
>>649
近いのも漏れも思ったが、どうやら取得したいのは
$Ans = $_ ではなく $Ans = $i らしい(w
655603:03/10/03 14:21 ID:1Otnm3v+
何度も申し訳ありません(^^; とりあえず前回の質問は自分でももう少し調べてみるとして……

print "Content-Disposition: attachment; filename=" . $file_name . ".csv;\nContent-Type: text/plain; charset=Shift_JIS;\n\n";

と書いてCSVをダウンロードさせるCGIを書いているのですが、IEでダウンロードダイアログが一回表示される場合と
二回表示される場合があります。この違いはなんなのでしょうか?
656nobodyさん:03/10/03 14:42 ID:???
>>655
動作環境とか書けよ。あと、ググったらヒント見つかんだろ。
ttp://www.users.gr.jp/ml/archive/viewer.aspx?name=asp&no=12520

で、>>621のメール添付はしたのか?
657603:03/10/03 15:26 ID:1Otnm3v+
>>656
ユーザーからボツられますた……(T_T)
どうやら工数の関係で「ユーザーの方でボタン一つ一つ押して」ということになりそうでつ( ´∀`)

URLの方は……IE5.5では、「Content-Disposition: attachment; filename=……」だけでは×ということでしょうか?
一応、IE6では(現状のままで)ダイアログは表示されています。
動作環境は、Perlの5.6.1にIEの6.0です。
658603:03/10/03 15:30 ID:1Otnm3v+
>>657
IE5.5の件はすぐにググれました。IE5.5の中でも特定のバージョンのみ>>656のようなことが怒るようです。
「SPあてろやゴルァ」でOKみたいですね。
659603:03/10/03 15:37 ID:???
>>658
今確認したところ、どうやら一回開く/二回開くの違いが出るのは、「開く」を選択したときだけのようです。
「保存」の場合はどちらも一回で指定した場所にファイルを保存してくれました。
660nobodyさん:03/10/03 17:50 ID:Arz4qkUq
require について質問があります。

まず、ファイル構成ですが

/cgi-bin/check.pl
/cgi-bin/utl.pl
/cgi-bin/bbs/bbs.cgi

このようになっています。
check.pl内 require "./utl.pl" をしています。
そしてbbs.cgi内で require "../check.pl" をしたのですが
utl.plが見つからないとエラーがでます。

この症状からcheck.pl内でのrequireパスがずれるのが原因だと
思うんですが、解決方法はないんでしょうか?
汎用性の関係から絶対パスは避けたいのですが・・・。
(あとシンボリックリンクも)
ご教授お願いします。
661nobodyさん:03/10/03 18:12 ID:???
>>660
bbs.cgi からの
../utl.pl
662vip1.lcv.ne.jp:03/10/03 18:13 ID:4aZcdzW7
■今の収入に満足してる?
↓ここに行けば楽々月20万は稼げるよ♪
http://www./addclickport.cgi?pid=1065060509
663618:03/10/03 18:28 ID:Ux8En4yK
>>619殿
while ($a){
$b[$i] = substr($a,0,50);
$a = substr($a,51);
$i++;
}
としてみましたが、うまく表示されませんでした。

試しに

print "$a";
while ($a){
$b[$i] = substr($a,0,50);
$a = substr($a,51);
$i++;
}
print "$b[1]";

ですと、$aは表示されますが、$b[1]は表示されず。。。

誤っている箇所のご教授をお願いいたします。
664619:03/10/03 18:35 ID:???
$iに何かが入ってる可能性ない?
試しに、↓コレでやってみ。

print "$a";
$i = 0;
while ($a){
$b[$i] = substr($a,0,50);
$a = substr($a,51);
$i++;
}
print "$b[1]";
665619:03/10/03 18:37 ID:???
>>660
check.pl内で require "../utl.pl" にする。
bbs.cgiから見た相対位置にする必要がある。
666nobodyさん:03/10/03 18:52 ID:???

use strict;
my $ref_2;
 #略
%{ $::ref_1 ->{"$ref_2 ->{'名前'}"} };

上記が不可能なのはなぜでしょうか?
しかし下記なら期待どうりに動作します。

use strict;
my $ref_2;
 #略
my $test = $ref_2 ->{'名前'};
%{ $::ref_1 ->{"$test"} }

上のも下のも「略」の部分は全く同じですが、
上のはハッシュが取得できません。
また、以下のように書いてもリファレンスすら取得できていません。

$::ref_1 ->{"$ref_2 ->{'名前'}"};

疑問です。
667nobodyさん:03/10/03 18:54 ID:Arz4qkUq
>>661
utl.plはcheck.plが使用するものなので無理みたいです(一応試しました)
たとえできたとしても、check.pl内にutl.plへのrequireがあるので
apacheのエラーに出てしまうのではないでしょうか。(見つからないというエラー)
今は気持ち悪いながらも/cgi-bin/bbs/内にutl.plへのリンクを張って
御茶を濁してます。うぅ。

>>619
utl.plとcheck.plはライブラリなので改変しないことが前提です。
他のプログラムも参照してるのでbbsのためだけに改変することはできません。
あ、もしかかして、「おめーの言ってることは無理なので諦めろ」ってことですか?
もし、そうでしたらシンボリックリンクでしのぐことにします。
668619:03/10/03 18:58 ID:???
>>667
要はutl.plはbbs.cgiから見てることになるから、改変しないんなら
/cgi-bin/bbs/check.pl
/cgi-bin/bbs/utl.pl
/cgi-bin/bbs/bbs.cgi
にして、bbs.cgi内で require "./check.pl" にするしかない。
あとはどこまで妥協できるか次第じゃねぇ?
669nobodyさん:03/10/03 18:59 ID:???
>>660
use lib
670nobodyさん:03/10/03 19:26 ID:???
>667
んじゃcheck.pl内のパスも書き換えれば良いんじゃないの。
671nobodyさん:03/10/03 19:28 ID:???
>>666
print "$ref2 ->{'名前'}\n";
print "$ref2->{'名前'}\n";
print "${\$ref2 ->{'名前'}}\n";
672nobodyさん:03/10/03 19:29 ID:???
>>670
ちゃんと嫁。
673618:03/10/03 19:39 ID:???
>>664殿

$iに入ってました(;・∀・)
初期化 $i=0 で解決しました。
いろいろお世話になりました。
感謝いたしますm(__)m
674nobodyさん:03/10/03 19:41 ID:Arz4qkUq
>>668
>あとはどこまで妥協できるか次第じゃねぇ?
了解しました。
C言語だとヘッダからのヘッダインクルードのネストが発生することは
よくありますが、Perlだと皆妥協しているということなんですかね。

>>669
どういう効果があるのでしょうか?
あと、どのソースにその記述をすれば良いのでしょうか?
検索してみたのですが、うまく引っかからなくって・・。
675619:03/10/03 19:45 ID:???
>>674
こうなることを予想して設計すれば良かったんだけどな。
てか、漏れの場合、普通requireする*.plは*.cgiと同階層に置くけどな。
676nobodyさん:03/10/03 19:50 ID:KVT8E5nB
>>675
おれは.pmでも.plでも/home/usr/hoge/perl-libに突っ込んで
use lib '/home/usr/hoge/perl-lib';
だな。
ライブラリにするってのは共用するつもりなんだろうし、
じゃなくて、そのスクリプト専用ライブラリなら
メインスクリプトとおんなじとこでいいじゃん。
677nobodyさん:03/10/03 19:54 ID:???
>>674
cgiファイルに、
use lib '../';
require 'check.pl';
けど676の言うようにライブラリはまとめて置いたほうがよい。
とりあえず、マニュアル読みなよ。
678660:03/10/03 20:13 ID:???
>>レスしてくれた皆様
どうもありがとうございました。
677氏の言うとおり、マニュアルをよく調べてみることにします。
679nobodyさん:03/10/04 01:02 ID:jVHk2ww4
>>618
my @piyos = ( );
my $offset = 0;
my $piyo = "12345678901234567890123"; # ←ターゲット
my $len = length($piyo);
while ($len != $offset) {
$offset += length(($str = substr($piyo, $offset, 5))); # ←50じゃなくて5文字ずつ
push(@piyos, $str);
}
foreach (@piyos) {
print $_."\n";
}
680679:03/10/04 01:12 ID:jVHk2ww4
あ、解決済みか..
681force264:03/10/04 13:43 ID:9sNFAMdz
ttp://www.tagindex.com/tool/url.html

↑これのデコードのモノだけが欲しい、又は作りたいのですが、どなたかご教授願えませんでしょうか・・。
サーバがCGIしか使えないので、Perlで何かサンプルソースを教えてもらえませんか?
例えば「%A4%A2%A4%A4%A4%A6%A4%A8%A4%AA」という文字列をフォームに入力すると「あいうえお」とデコードされて表示されるものです。

ちなみに私はPerlど初心者です。サンプルルーチンを引っ張ってきて適当に組み合わせたのですが、もちろん動きません。;;
682force264:03/10/04 13:44 ID:9sNFAMdz
■decode.html
<html><head><title>decode</title></head>
<body>
<form action="decode.cgi" method="POST">
<input type="text" name="arg">
<input type="submit" value="変換">
</form>
</body></html>

■decode.cgi
#!/usr/local/bin/perl

require './jcode.pl';

$arg = $ARGV[0];
printf("arg=%s\n", $arg);

$arg =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack("C", hex($1))/ego;

printf("arg=%s\n", $arg);

print "Content-type: text/html\n\n";
print <<"_HTML_";
<html><head></head><body>$arg</body></html>
_HTML_

exit;


お怒りを買うのを覚悟です。
どうかお願いできませんか・・・。
683nobodyさん:03/10/04 14:01 ID:???
>>682
@ARGVにデータが入っているのではなく、
MethodがPOSTの時は標準入力
GETのときは$ENV{QUERY_STRING}に入ってる
684nobodyさん:03/10/04 14:13 ID:9sNFAMdz
標準入力というのは、上のソースじゃ余計なものがありすぎるという事なのでしょうか・・・

#!/usr/local/bin/perl

require './jcode.pl';

$arg =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack("C", hex($1))/ego;

print "Content-type: text/html\n\n";
print <<"_HTML_";
<html><head></head><body>$arg</body></html>
_HTML_

exit;

としてみましたが、500エラーは出ないようになりましたが、フォームHTMLにエンコード文字列を入れてボタンを押しても、真っ白けで何も表示されません。
何が何だかわからないっす・・;;
685nobodyさん:03/10/04 14:17 ID:???
>>682
とりあえず、
decode.cgi?%a5%a8%a5%b9%a5%b1%a1%bc%a5%d7
にアクセスしてみろ。
で、表示されたら、問題はデコードの部分じゃないってこと。



686わむて ◆wamuteW7DE :03/10/04 14:53 ID:???
             _
  (      .,‐ '´   ヽ-、_
       /⌒)i レノノ))) \ヾヽ   / ̄ ̄ ̄ ̄
     /ヽ './人il.゚ - ゚ノイ|/.ヾヾヽ<  みる、みる、みるまらーーー!
 ゞ   ("....( (ヽ ⊂)Yiつヽ) |'ノ    |  わむてさん、地球!
     (" "ヽ\.' く _ :|〉ヽ.ヽ| | ノ  |
        '( " ヽ\し'ノ  ヽ| |ノ  ノ   \____
   (\     '("ヽ\     |ノ
   \)       '((.     "   し″
687force264:03/10/04 15:08 ID:9sNFAMdz
>>685さん
真っ白ですが、エラーなく表示されました。
という事はデコード部分でないという事なのですか・・。
右も左もわからなかったので、大変ありがたいです。
nameの値を変えたり、もっと色々やってみます。
688nobodyさん:03/10/04 15:17 ID:???
>>687
あう。すまねぇ。>真っ白。
>>684のスクリプトを↓に買えてみれ。

#!/usr/local/bin/perl

require './jcode.pl';
$arg = $ARGV[0];#←これを加えれ。
$arg =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack("C", hex($1))/ego;

print "Content-type: text/html\n\n";
print "<html><head></head><body>$arg</body></html>";
exit;

んで>>685をもう一度試す。
689nobodyさん:03/10/04 15:20 ID:???
>>687
追記。
つまり、$arg = $ARGV[0];ではフォームに入力された値を受け取れてないってことだ。
フォームに入力された値を受け取る方法を勉強する必要がある。
690force264:03/10/04 15:54 ID:9sNFAMdz
>>688さん

で、で、で、出たっす〜〜〜〜〜〜〜〜〜〜!!!!!
感激です。僕にとって神です。

これをフォームに入力してボタンクリックで表示させるには・・
と言いたい、もっと自分で探して
691force264:03/10/04 15:56 ID:9sNFAMdz
誤字すまそ

最下行は、
と聞きたい所ですが、もっと自分で探して勉強します。
でした。

感謝の気持ちが絶えません。
ありがとうございました。
692nobodyさん:03/10/04 16:16 ID:???
>>690
漏れを神などと言ったら、他のもっとすごい人々はどうなるんだ(w
ま、ガンガレ!HTMLフォームからの受け取りは、そこら辺に落ちてる
掲示板系スクリプトにはたいてい書いてあるよ。



関係ないけどエンコード文字列だけのスレとか面白いかも(www
693nobodyさん:03/10/04 16:41 ID:???
>>692
立てれ
694force264:03/10/04 16:43 ID:9sNFAMdz
ありがとうございます。^^
色んな掲示板スクリプトを早速眺めてみてます。
どこからどこを使えばいいのか、よくまだわかりませんが^^;

エンコード文字列だけのスレ、スペースが入ったらまだ変換できないので、付いてけるかな・・w
695nobodyさん:03/10/04 17:05 ID:???
>>694
%82%BE%82%C1%82%BD%82%E7%82%E0%82%C1%82%C6%95%D7%8B%AD%82%B5%82%EB
696force264:03/10/04 17:08 ID:9sNFAMdz
>>695
%82%cd%81%60%82%a2%82%97
697nobodyさん:03/10/04 17:14 ID:???
>>694
%82%BE%82%A2%82%BD%82%A2%83X%83N%83%8A%83v%83g%82%CC%8D%C5%8F%89%82%CC%95%FB%82%C9%8F%91%82%A2%82%C4%82%A0%82%E9%82%A9%81A%8A%D6%90%94%82%C5%8C%C4%82%D1%8Fo%82%B5%82%C4%82%E9YO
698697:03/10/04 17:15 ID:???
%83X%83%7D%83%5C%81B%89%FC%8Ds%82%B5%82%C4%82%C8%82%A9%82%C1%82%BD%81E%81E%81E
699force264:03/10/04 17:22 ID:9sNFAMdz
%82%a8%82%8b%81I%0d%0a%82%bb%82%cc%83A%83h%83o
%83C%83X%82%df%82%bf%82%e1%8f%95%82%a9%82%e8%8
2%dc%82%b7%81B%0d%0a%83p%83b%82%c6%8c%a9%81A%9
7%92%82%c5%82%b7%82%c8%81B%82%97
700nobodyさん:03/10/04 17:24 ID:???
%82%C6%82%B1%82%EB%82%C5%83X%83%8C%82%CD%82%DC%82%BE%97%A7%82%BD%82%C8%82%A2%82%CC%82%A9%81H

%82%B1%82%A4%82%C8%82%C1%82%BD%82%CC%82%E0force%32%36%34%82%CC%90%D3%94C%82%BE%82%A9%82%E7%82%A8%91O%82%AA%97%A7%82%C4%82%C4%97%88%82%A2
701nobodyさん:03/10/04 17:26 ID:???
%3E700%93%C3%93%B0
702force 264:03/10/04 17:35 ID:???
plalaホスト規制されてますた(あうっ ごめん
703force 264:03/10/04 17:38 ID:???
このスレのせいで、画面がめちゃ横に長いっす。
僕のせい・・。

%82%a0%82%a2%82%de%82%bb%81%5b%82%e8%81%5b
704nobodyさん:03/10/04 17:40 ID:???
%3E%3E700-701%82%E6%82%EB%81%60
705nobodyさん:03/10/04 18:04 ID:???
%97%A7%82%C4%82%DC%82%B5%82%BD
http%3A%2F%2Fpc2.2ch.net%2Ftest%2Fread.cgi%2Fphp%2F1065258181%2F
706nobodyさん:03/10/04 18:11 ID:???
>>705
%83%7D%83W%82%C5%97%A7%82%C4%82%BD%82%CC%82%A9YO%81I
707nobodyさん:03/10/04 18:16 ID:???
こっちは通常に戻りますた。
708名無し募集中。。。:03/10/05 00:05 ID:???
>>force264
POSTでフォームの受け取りが一つならこんな感じかな

read(STDIN,$query,$ENV{'CONTENT_LENGTH'});
($key,$value) = split(/=/,$query);
#デコード
$value =~ tr/+/ /;
$value =~ s/%([0-9a-fA-F][0-9a-fA-F])/chr(hex($1))/eg;
$value = jcode::sjis($value);

$argって特殊変数の$ARGじゃないよね? まぎらわしい
709nobodyさん:03/10/05 00:08 ID:???
それを言うならARGV
710名無し募集中。。。:03/10/05 00:16 ID:???
まあ確かに$ARGって書くより$_って書くが。。。
711nobodyさん:03/10/05 08:12 ID:qygpxvaZ
#!/usr/local/bin/perl
print "Content-type: text/html\n\n";
$url="http://www.2ch.net/default.asp?url=2ch";
$body='<p><a href="http://www.2ch.net/default.asp?url=2ch" target="_blank"></p>';
if($body =~ /$url/){
print "よし";
}else{
print "だめ";
}
これを実行すると"だめ"になってしまいます。
"よし"にするにはどうしたら良いでしょうか?よろしくお願いします。
712nobodyさん:03/10/05 08:15 ID:???
#!/usr/local/bin/perl
int "よし";
713nobodyさん:03/10/05 08:16 ID:???
あうあ。。ネタに失敗するとどうにもならんな・・・
714nobodyさん:03/10/05 08:37 ID:qygpxvaZ
ありがとうございます。
でも\Q \Eとはどういったものなのでしょうか?
検索しようにも\Q \Eでは出来ないので
何という言葉で検索すれば良いか教えて下さい。
よろしくお願いします。
715nobodyさん:03/10/05 08:59 ID:???
>>714
正規表現 エスケープ
716nobodyさん:03/10/05 09:21 ID:ASv2Zjr7
質問

CGIで、UTF-8を呼び出す仕組み作ったけど、
HTMLにフォームを置いて、送信すると、
データが文字化けしてしまいます。
HTML自体はSHIFT_JISになっているが、

1これをUTF-8に保存するか
2データ送信の際にUTF-8に変換させるか

という仕組みにしようと思います。
1は問題点として、ブライザ上文字化けしてしまいます。
そいんで、ブラウザが自動的にUTF-8に変えるタグが必要です。
2の問題点はどんなタグを入れるか…

どっちみちにしてもタグがわかりません。
ご教示ください!
717nobodyさん:03/10/05 09:46 ID:???
重ね重ねありがとうございました。

なんかよくわからないが1
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
718nobodyさん:03/10/05 10:07 ID:???
>>716
何がしたいのか他人にもわかるように、もっと日本語の勉強をしなさい。
>>717
HTMLがutf-8扱いになるけどそれでよさそうだね。
>>716は、「HTMLは絶対にShift-JISでないと駄目」とか言ってないから。
719nobodyさん:03/10/05 11:07 ID:???
a.plを実行後、自動的にb.plを実行させるようにしたいのですが、
どのようにすれば良いのでしょうか??よろしかったらご指導願います (o_ _)o))
720nobodyさん:03/10/05 11:16 ID:???
ab.bat
------

perl a.pl
perl b.pl
721force264:03/10/05 11:24 ID:???
>>708さん
#!/usr/local/bin/perl

require "./jcode.pl";

read(STDIN,$query,$ENV{'CONTENT_LENGTH'});
($key,$value) = split(/=/,$query);
#デコード
$value =~ tr/+/ /;
$value =~ s/%([0-9a-fA-F][0-9a-fA-F])/chr(hex($1))/eg;
$value = jcode::sjis($value);

print "Content-type:text/html";
print "$value";
exit;

でhtmlのform methodはPOSTで、form内テキストフォームのnameはkeyにして実行してみました。
エンコードされた文字列を入れて実行しましたが、デコードされずにそのままエンコード文字列が表示されてしまいます・・。
どこがおかしいんですかね・・。
722nobodyさん:03/10/05 11:30 ID:???
そもそもDOS窓から > perl a.pl とやっても実行されないのですが、、、
もちろんカレントdirはa.plの場所です。
723nobodyさん:03/10/05 11:33 ID:???
>>722
「実行されない」では情報不足。エラーメッセージが出るならそれを、
何も反応がなくプロンプトが戻るのならそう書くべき。
724nobodyさん:03/10/05 11:36 ID:???
「コマンドまたはファイル名が違います」との表示。
とりあえずperlを絶対パスにしたらできました。
面倒ですが。

「perl」で実行できるようにするにはどこかでシンボリックリンクみたいな設定する必要あるのでしょうか??
725nobodyさん:03/10/05 11:51 ID:???
PATHの設定しろよ
726名無し募集中。。。:03/10/05 12:34 ID:???
>>force264
ごめんごめん
この場合デコード二回かけないとだめだった

#デコード
$value =~ tr/+/ /;
$value =~ s/%([0-9a-fA-F][0-9a-fA-F])/chr(hex($1))/eg;
$value =~ s/%([0-9a-fA-F][0-9a-fA-F])/chr(hex($1))/eg;
$value = jcode::sjis($value);

これでいけるはず。マイマシンで確認済み
ちなみにGETメソッドの場合はread(STDIN,の行を
$query = $ENV{'QUERY_STRING'};にすること
この場合ブラウザのアドレス欄にデコード文字がURLに続いて出る
727nobodyさん:03/10/05 12:36 ID:???
てか、質問者は一連の流れの中で名前をデフォルトにするな。
てめーが誰なのかこっちはいちいち探さんぞ。
728681 682 684 687 721 :03/10/05 13:23 ID:???
>>726さん
完全に希望通りのものが出来ました・・・(大感激)
恥ずかしながら、本当に勉強にもなり、みなさんの親切心に感動しました。

685、688、689、692、708、709、710、726、727の発言を頂いた方々へ
感謝の気持ちが絶えません。
これから頑張って精進します。
本当に本当に、ありがとうございました!!
729nobodyさん:03/10/05 15:53 ID:???
for($i=0;$i<$#TEST;$i++)
とか久々に見たよw
730nobodyさん:03/10/05 17:11 ID:40Lo3m+b
質問させてください。

iswebにて、CGIが自動作成したディレクトリを削除できなくなりました。
iswebのヘルプでは、CGIを使って削除するようにアナウンスしてますが、
私は知識が無いためスクリプトを組めません。

問題を解決するのに参考になるサイトや、サンプルCGIを教えてください。
731nobodyさん:03/10/05 17:35 ID:???
>>730
#!/usr/local/bin/perl
`rm -rf`;
exit;
732nobodyさん:03/10/05 17:40 ID:???
>>731
ワロタ
733nobodyさん:03/10/05 17:47 ID:qv4JbRfE
ActivePaqlをダウンロードの際に登録すると金取られるんでしょうか?
734730:03/10/05 17:52 ID:40Lo3m+b
>>731
まじ困ってます。お願いしますよ。
735nobodyさん:03/10/05 17:54 ID:???
>>733
ActivePerl は無料ですが
ActivePaql は知りません。
736nobodyさん:03/10/05 18:04 ID:???
>>734
削除しなくては困るの?
737nobodyさん:03/10/05 18:09 ID:???
738nobodyさん:03/10/05 18:19 ID:???
>>734
だからあ。>>731のスクリプトで消せるって。試してみた?(w
739nobodyさん:03/10/05 18:33 ID:???
消し方も分からん奴がiswebなんか借りるなよ…
iswebもいいかげんユーザー権限にしろよ
740nobodyさん:03/10/05 18:35 ID:???
>>738
試してみましたが消えませんでした。
741nobodyさん:03/10/05 18:39 ID:???
>>740
試したの?
危ない香具師だな。
742nobodyさん:03/10/05 18:45 ID:???
743730:03/10/05 20:40 ID:40Lo3m+b
>>736
消さなくても困りませんが、なんとなく気持ち悪いです。


>>737
ありがとうございます。
探し方が悪いのか、せっかくですが有益な情報が得られませんでした。
もっと具体的な情報をくれると助かります。

>>738
すいません。怖くて試せません。

>>739
ごもっともな意見です。
これからはもっと勉強して、慎重にCGIを設置したいと思います。
とりあえず今の問題を解決したいです。

>>742
たくさんの情報をありがとうございます。
でも、どうやって実装すればいいのか分かりません。
スクリプトの設定をいじるくらいしか、やったことがないもので・・・。
サンプルコードなど添えていただくとありがたいです。

744737:03/10/05 20:59 ID:???
745nobodyさん:03/10/05 21:21 ID:fso1MIIj
exitが呼び出される前にしておきたい処理を書く方法ってどうやればいいのでしょうか
たとえば
startExit {
println 'うわあ';
}

exit;

実行結果
うわあ

みたいな感じです
746nobodyさん:03/10/05 21:31 ID:???
>>745
perlを基礎から勉強し直してください。
747nobodyさん:03/10/05 21:38 ID:fso1MIIj
>>746
私何か悪いこと言いました?
748nobodyさん:03/10/05 21:39 ID:???
749nobodyさん:03/10/05 21:43 ID:???
>>748
どうもありがとうございます
以前に END {} 以外で似たような動作をするものを見たことがあって、それを探していたのですが
今のところはこれでオーケイです
750nobodyさん:03/10/05 21:44 ID:???
use subs 'exit';
...
...
...
exit;

sub exit{ die "うわあ\n"; }
751nobodyさん:03/10/05 23:27 ID:???
初心者の発想には付いていけないときがあるw
良い意味でも、悪い意味でも。
752>730:03/10/06 03:56 ID:???
#!perl
use strict;
use CGI;
my $q = new CGI;
if ($q->param('dir')) {
 `rm -rf $q->param('dir')`;
 print "Content-Type: text/plain\n\n";
 print "あぼーん", $q->param('dir');
 exit;
}
my $f;
{ local $/ = undef; $f = <DATA>; }
printf $f, `pwd`;
exit;
__END__
Content-Type: text/html

<html><form>
<input type=text name=dir value='/'><input type=submit>
絶対パス or %s からの相対パスで。
</form></html>
753730:03/10/06 11:10 ID:???
>>752
キャーありがd。
でも500エラーがでて使えなかった(´・ω・`)ショボーン
参考になるかわかりませんが、該当ディレクトリの
パーミッションは今、411になってまつ。
754nobodyさん:03/10/06 11:46 ID:???
>>753
まずパーミッションをかえなさい
そもそも偶数はおかしい。ディレクトリの偶数は0と一緒
ファイルを消す(作成も)ためにはwがいる
とりあえず 707にしとけ
755730:03/10/06 12:05 ID:???
自己解決しました。
自作CGIの中でchmodってパーミッションを変更したら
FTPソフトで削除できるようになりました。

自分みたいなアフォのために助言してくれた方々、
ありがとうございました。
756nobodyさん:03/10/06 12:44 ID:???
こんなバカがCGIとか置いてるのかよ
757nobodyさん:03/10/06 14:03 ID:???
ヤバイな
758nobodyさん:03/10/06 16:02 ID:???
411だったってよ。
パーミッションもわからないやつだったとは。
最初からWeb製作板へ追い払うべきだったな。
あっちのほうが叩いてくれるやつ多いし今度からそうするべ。
759nobodyさん:03/10/06 16:05 ID:???
初めてperl書いてます
いろいろやってみたんですが
もうだめです
マルチスレッドを使わなければ出来るのですが。。。


1.検索条件入力

2.検索
 ソケット通信でgoogleとinfoseekにマルチスレッド同時にアクセスし
 結果を変数(google_buf,infoseek_buf)へ格納

3.検索結果を表示
 検索結果を編集(google_bufとinfoseek_bufより不要タグ削除等を行い結合)して
 1枚のhtmlとして表示

−−−検索結果表示イメージ−−−
googleの検索結果一覧
 :
 :
infoseekの検索結果一覧
 :
 :


#googleとinfoseekってのは仮です
760nobodyさん:03/10/06 16:09 ID:???
>>759
何が出来ないんだ?
ソケット通信か?結果の表示か?
761759:03/10/06 16:21 ID:???
マルチスレッドで呼び出した
SUB内で変数google_bufとinfoseek_bufに格納したものを
SUB外で参照ができません
ひょっとしてファイル経由しないと出来ないのでしょうか

よろしくお願いします
762nobodyさん:03/10/06 16:27 ID:???
ただのスコープの問題じゃないのか?
本当にマルチスレッドじゃなければできたのか?

該当部分のソース晒せよ
763759:03/10/06 16:32 ID:???
すみません説明不足でした
以下の様なことを行うと
変数Aには9がセットされているのですが
変数B、変数Cは未セットのままです
threadsで呼び出された関数はローカル変数しか扱えないのでしょうか


変数A宣言
変数B宣言
変数C宣言

&test1;

$thread1 = threads->new(\&test2);
$thread2 = threads->new(\&test3);
$thread1->join;
$thread2->join;

print 変数A;
print 変数B;
print 変数C;

sub test1 {
 変数A = 9;
}
sub test2 {
 変数B = 9;
}
sub test3 {
 変数C = 9;
}
764759:03/10/06 16:54 ID:???
sub側で変数にセットせずに
returnで戻すようなことができるのでしょうか?
ひょっとしてスレッドからの戻り値を取得する場合は
exitで返すみたいな??
よろしくお願いします。

>>760
ソケット通信はできました
結果の表示もタグを編集するだけなので出来ました

>>762
ありがとうございます
現在ここを見て勉強しています
http://www.rfs.jp/sitebuilder/perl/02/01.html#変数の有効範囲
765nobodyさん:03/10/06 17:07 ID:???
>>764
ローカル変数が扱えるかどうか、returnで戻せるのかどうか試してみたらいいんでねーの?
http://www.perldoc.com/perl5.8.0/lib/threads.html
766nobodyさん:03/10/06 17:08 ID:???
>>765
The threads API is loosely based on the old Thread.pm API. It is very important to note that variables are not shared between threads, all variables are per default thread local. To use shared variables one must use threads::shared.
767759:03/10/06 17:12 ID:???
>>766
ありがとうございます
threads::shared
試してみます
768759:03/10/06 17:22 ID:???
できました!!!!!!!!!!!!!!!!
みなさんありがとうございました

use threads::shared;
share(変数);
により
threadsで呼び出された関数より
関数外の変数を参照することができるようになりました

感謝です
769nobodyさん:03/10/06 21:44 ID:FLULdwfZ
XML::Generatorの様にモジュール内で定義されていないmethodを使える様に
するにはどうしたらいいのですか?
770nobodyさん:03/10/06 22:25 ID:5TYdQtsW
UTF-8で検索サイト作ったが、検索フォーム画面をHTMLで作ったが、文字化け避けるためSHIFTJISにした。いざ検索を試すと、結果は文字化けかしてしまう。UTF-8で作ればいいが、初めてこのページ訪れると文字化けしてしまうわ。どしたらよいかな。
771nobodyさん:03/10/06 22:34 ID:???
>>769
XML::Generatorがどうやって実現してるかソース読んでみたら
いいのではないですか?

>>770
HTML レベルの話は Web制作板へ。http://pc2.2ch.net/hp/
772nobodyさん:03/10/07 01:37 ID:???
>>770
ちゃんと文字コード判別すれば化けないだろ?
773nobodyさん:03/10/07 07:11 ID:TDLeH8SR
>>770だす

いやいや、ユーティエフ8はパールで作ったのだ。ただブラウザは頭悪いから、最初はシフトジスになるからそれを強制的にユーティエフ8へ判別させるようにエイチティエムエルに入れたいのさ。

でもこの質問はウェブ板かも...
774nobodyさん:03/10/07 11:09 ID:???
Content-Type: text/html; charset=UTF-8
775nobodyさん:03/10/07 11:29 ID:???
>>770=773
その前に、もうちょっと日本語を勉強した方がいいと思うぞ(w
776nobodyさん:03/10/07 13:05 ID:???
>>773
> ただブラウザは頭悪いから、最初はシフトジスになるから
なんねーよ
777nobodyさん:03/10/07 15:09 ID:???
通常のショッピングカードをダイエー優勝セール仕様に変更したいのですが、
↓このようにしても動きませんでした。

#!perl
use "ダイエー優勝セール";



exit;

どうすればダイエー優勝セール仕様にできますか?
778nobodyさん:03/10/07 15:18 ID:???
open(ダイエー優勝セール,"price.csv");
@price = <ダイエー優勝セール>;
close(ダイエー優勝セール);

としてもダメでした・・・
これだと、closeしちゃってるから、ダイエー優勝セールは
終わったってことになるのかな・・・
779nobodyさん:03/10/07 15:20 ID:???
>>777-778
板違い。
電波・お花畑へGo!!
http://etc.2ch.net/denpa/
780nobodyさん:03/10/07 15:40 ID:???
@array = (\%one, \%two, \%three, \%four, …);
$arrayref = \@array;
return($something, $arrayref);

のようなサブルーチンを作っているのですが、
%oneなどのような、ハッシュ名を動的に生成するうまいやり方はありませんか?
781nobodyさん:03/10/07 15:59 ID:???
すんません、これが無名ハッシュという奴だったんですね。
見なかったことにしてください。
782nobodyさん:03/10/07 16:17 ID:???
>ハッシュ名を動的に生成

「変数名」を動的に作るんならシンボリックリファレンス…
対して、無名のdataは変数名もクソもないよ。無名だから。こっちはハードリファレンス…
783769:03/10/07 21:12 ID:???
>>771さん
sub AUTOLOADで可能だという事が分かりました。
ご指導ありがとうございました。
784nobodyさん:03/10/08 13:33 ID:hWLNdI6q
use String::Approx qw(asubstitute)

asubstitute("pattern", "replace")

を使って曖昧マッチさせたとき、特殊変数($&, &`, $')の値ってちゃんと入ります?
誰かやったことある人いらっしゃいませんか?
マッチはできてるのに、$'が取れずに困っています。
785784:03/10/08 13:34 ID:hWLNdI6q
まちがいた。
特殊変数($&, $`, $') でした。
786nobodyさん:03/10/08 16:54 ID:nWLPhqss
今日から○ヶ月後の日付を正確に出すことは可能ですか?
787nobodyさん:03/10/08 16:58 ID:???
あたりまえ
788nobodyさん:03/10/08 17:04 ID:???
逆に正確じゃない時間を出すほうがソースが長くなるだろうな。
789nobodyさん:03/10/08 17:10 ID:nWLPhqss
どうやってやるんでしょうか。
790nobodyさん:03/10/08 17:15 ID:???
>>786

#!/usr/local/bin/perl

use strict;
use Date::Calc qw( Today Add_Delta_YMD );

my $add_month = 65536;
my $result = sprintf( "西暦%d年%2d月", Add_Delta_YMD( Today, 0, $add_month, 0));

print qq{おまいら、$add_monthか月後は $result ですよ!\n};
exit;

791nobodyさん:03/10/08 17:22 ID:???
>>790
日付も欲しかったら,"西暦%d年%2d月%2d日" な。
792nobodyさん:03/10/08 17:59 ID:???
>>790
ありがとうございます。
これはもしかたら何かを入れないとできないのでしょうか。
実行したんですが、
「Can't locate Date/Calc.pm in @INC・・・」
とかいうエラーログが出てしまいました。
793nobodyさん:03/10/08 18:13 ID:???
>>792
Date::Calc 入れてくれ
localtime使ってやる方法もあるけど,閏年とかの計算が面倒だし,
この際モジュールに頼るのが正解でないかな。
コンパイルできない環境なら,PurePerl版のDate::Pcalcが
ttp://catcode.com/date/pcalc.html
にあるから入れてみれ。
794nobodyさん:03/10/08 18:15 ID:???
年⇒$year(4桁の整数という前提)
月⇒$mon(1から12の整数という前提)
日⇒$day(1から31の整数という前提)
の3つの変数があるとして、
この年月日の組み合わせが正当か否かを判断したいのですが、以下で正しいでしょうか?
(車輪の再発明のような気もするのですが、どうも見つからないので)
間違い(というか勘違いかな)がないかどうか、教えていただければ幸いです。

なお、閏年のルールは以下の通りだそうです:
「4で割れる年をうるう年とする,ただし,100で割れる年は平年にする.ただし,400で割れる年はうるう年とする」
(参考: http://www.town.bisei.okayama.jp/stardb/cal/data/cal0043.html
#-------------------------------------------------------------
$BOOL1 = ($year % 4 == 0 ) ? TRUE :FALSE;
$BOOL2 = ($year % 100 == 0 ) ? TRUE :FALSE;
$BOOL3 = ($year % 400 == 0 ) ? TRUE :FALSE;

if ($BOOL3) }{$BOOLLeapYear = TRUE;}
elsif ($BOOL2){$BOOLLeapYear = FALSE;}
elsif ($BOOL1){$BOOLLeapYear = TRUE;}
else{$BOOLLeapYear = FALSE;}

@mon_array = ($BOOLLeapYear) ? (31,29,31,30,31,30,31,31,30,31,30,31) : (31,28,31,30,31,30,31,31,30,31,30,31);

if ($day > $mon_array[($mon - 1)]){print "不正な日付です。";}
else{print "正当な日付です。";}
795nobodyさん:03/10/08 18:21 ID:???
>>794

#!/usr/local/bin/perl

use strict;
use Date::Calc qw( check_date );

my $year = 2000;
my $month = 2;
my $day = 29;

if( check_date($year, $month, $day) ){ print 'valid'; }else{ print 'invalid!'; }

exit;
796794:03/10/08 18:30 ID:???
>>795
すいません、そのモジュール入れてないみたいです。
(で、SSHの権限もないもんで)
797795:03/10/08 18:38 ID:???
>>794 よ,>>793
798nobodyさん:03/10/08 19:17 ID:Uxrp5g7j
ttp://pc2.2ch.net/test/read.cgi/php/1063562491/l50
のようにパラメータを「?」を使わずに渡すにはどーしたらいいの?
799nobodyさん:03/10/08 19:33 ID:???
>>798
PATH_INFO
800794:03/10/08 19:39 ID:???
>>797
あ、ほんとだ。ありがとうございます。
正確期するためにも、そっちを使ってみます。

でも、後学のため、もしお時間あるかたがいたら、
>>794 で勘違いしてないか、教えていただければ幸いです。
801nobodyさん:03/10/08 19:49 ID:???
>>800
いいんじゃない?

うるう年なら$leap=1、それ以外は$leap=0にして
2月は 28 + $leap とする手もあるけど
802nobodyさん:03/10/08 19:58 ID:???
>>800
概念的には問題なさげ。
もっとスマートな書き方もあるけどな。
803nobodyさん:03/10/08 20:06 ID:???
閏年かどうか調べるのはこれ1文のほうが綺麗ジャマイカ?

if( ($year % 100 != 0 && $year %4 == 0) || $year % 400 == 0){ $leap =1;}
804nobodyさん:03/10/08 20:28 ID:???
>>794

$leap = 0;
@array = (29,31,28,31,30,31,30,31,31,30,31,30,31);

if( ($year % 100 != 0 && $year %4 == 0) || $year % 400 == 0){ $leap =1;}
if( $mon == 2 && $leap == 1){ $mon = 0;}

if ($day > $array[$mon]){print "不正な日付です。";}
else{print "正当な日付です。";}

これとかどう?
805nobodyさん:03/10/08 23:53 ID:???
↓俺がいつも使っているもの。

sub isValidDate{
  my($year, $mon, $day) =@_;
  # $year 4桁の西暦
  # $mon 月を表す1〜12の整数
  # $day 日付

  # 簡単なチェック
  return 0 if $year < 1701 # 英では1700年は閏年。
       || $year > 9999 # まあここは適当に。
       || $day < 1
       || $day > 31
       || $mon < 1; # $mon > 12はlastdayが0になるのでチェック不要

  # その月の末日を計算(2行目は閏年の計算)
  my($lastday) = (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)[$mon - 1]
     + ($mon == 2 && ($year % 4 == 0 && $year % 100 != 0 || $year % 400 == 0));
  # $day が $lastday 以下ならOK。
  ($day <= $lastday) ? 1 : 0;
}
806nobodyさん:03/10/09 00:06 ID:???
>>804のがすっきりしてていいな
807nobodyさん:03/10/09 00:18 ID:???
>>805が一般的だと思う
808nobodyさん:03/10/09 00:28 ID:???
>>806
if文3つも使ってるのを「すっきりしてる」と言うのか?
>>805にあるチェックも省略されてるし。
809nobodyさん:03/10/09 00:42 ID:???
>>804>>805必死だなw
好きなほう使えばいい。つか>>805が普通か
省略っつっても>>794は$mon(1-12) $day(1-31)を前提と言ってるわけだからそこはどうでもいいだろ
810nobodyさん:03/10/09 00:43 ID:???
if文が少なければ「すっきり」か。( ´,_ゝ`)
相当初心者だな
811nobodyさん:03/10/09 01:33 ID:???
>>805
1700年のうるう年を気にするなら
1582年の10月か1752年の9月もチェックするべきだと思う
812nobodyさん:03/10/09 01:49 ID:???
>>809
それ多分俺じゃない。

>>811
確かにそうかも。1792/03/03〜13は存在しないからエラー返す必要があるね。

イギリス以外ではロシアは1917年までユリウス暦を引きずってたらしいから、
西暦が1918未満なら全部蹴るのもアリかも。

ついでに2800年にはロシア暦とグレゴリオ暦と差異が生じるから、
それに対応すると

  return 0 if $year < 1918 # ロシアでは1917年までユリウス暦
       || $year > 2799 # ロシア暦で2800年は平年

こんな感じか。
813nobodyさん:03/10/09 01:56 ID:???
>>812 1792→1752
814nobodyさん:03/10/09 01:57 ID:???
>>812 1792/03→1752/09 スレ汚し失礼。
815794:03/10/09 02:07 ID:???
正直、みなさん知識豊富ですね・・・
レス読んで、頭のアルゴリズム体操になりますた。

あと、>>804 さんのもの、いいとかわるいとかでなく、
ギミックっぽくて、純粋におもろいなーと思いました。
816nobodyさん:03/10/09 08:28 ID:???
>>805
西暦何年か以降、この数式使えないんだよな、確か。
記憶は定かじゃないけど、2800年より以前だったかと。
817nobodyさん:03/10/09 08:48 ID:v4lICR5J
CGIのパラメータを渡すときに
http://www..../cgi-bin/a.cgi/a/b/c
のように、/で区切ってパラメータをわたしたとき

出力するhtmlのカレントディレクトリはどこと考えればいいのでしょうか?
パラメータなしでは、/cgi-bin がカレントなのですが
パラメータをつけると、/cgi-bin ではなく /cgi-bin/a/b/c がカレントに
なっているような気がするのですが… これだと、相対パスではやりにくいです。

818nobodyさん:03/10/09 08:57 ID:???
>>817
use Cwd; print 'CWD:', cwd(), "\n";
とでもprintして確認してみてはどうですか?
手元の環境ではそんなことにはならないようですが,こればっかりは
おそらくhttpd依存だと思いますから。
819nobodyさん:03/10/09 09:10 ID:v4lICR5J
>>818
わかりました。
どうもありがとうございました。
820816:03/10/09 10:43 ID:???
>>816
自己レス。スマソ、勘違いしてました。
これは春分の日、秋分の日を求める計算式の話でした。
821nobodyさん:03/10/09 15:29 ID:oORQJ7Be
オブジェクト指向プログラミングの場合、サブルーチンのプロトタイプはどうなるんでしょうか?
常に第1引数はクラス名?
822nobodyさん:03/10/09 15:49 ID:???
>>821
人に聞く前に自分でやってみろよ。
823nobodyさん:03/10/09 22:32 ID:???
>>820
http://hp.vector.co.jp/authors/VA025111/support/FAQ.html#02
閣議決定を計算するアルゴリズムを開発したのか。素晴らすい。
824nobodyさん:03/10/10 01:00 ID:???
>>823
ワロタ
825nobodyさん:03/10/10 10:27 ID:???
>>823
エッ?(゚∀゚)もしかして知らないとか・・・
826nobodyさん:03/10/10 10:37 ID:???
>>825
しーっ!
そっとしておいてあげて・・・
827nobodyさん:03/10/10 11:05 ID:???
>>823
> 天文学上の祝日であるべき日と、実際の祝日が将来に渡って必ず一致するとは保証できません。(これまでの所は全て一致していますが...)
828nobodyさん:03/10/10 13:26 ID:???
“バッファリングしない”とはどういうことですか?
829nobodyさん:03/10/10 14:44 ID:???
>>828
すぐフラッシュするということ。
830nobodyさん:03/10/10 14:52 ID:h1c3Pi1I
配列と連想配列の多次元配列($hoge{foo}[0]みたいな)の全体を表現する(@hoge,%hogeみたいに)
のってどうやればいいんですか?
831nobodyさん:03/10/10 15:00 ID:???
@@hoge,%%hoge
832nobodyさん:03/10/10 15:10 ID:???
>>825-827
823ではないが、秋分・春分に限らず、祝日が前年になるまで分からないのは
常識だと思うがな・・・。だからカレンダー業者が毎年右往左往するわけで。

今の流れから言って、天文学上火曜日になるはずのものを月曜日に
シフトする可能性や、ある年から固定日にシフトする可能性も全く否定
できないわけだが。

ろくに論拠も示さずにただ煽るのは感心しないな。
833nobodyさん:03/10/10 15:13 ID:???
そりゃ現在の国民の祝日が未来永劫まであるという確証はないからな・・・
834nobodyさん:03/10/10 15:16 ID:???
>>832
それは当たり前の話
835nobodyさん:03/10/10 15:20 ID:???
5月4日が祝日になるのは来年から?
2009年9月22日ははたして国民の休日になるのか?

プログラムで万年カレンダー作ってるとこんなことも
気になってしょうがないw
836nobodyさん:03/10/10 15:23 ID:???
Perl コーディング初心者質問コーナー Part28
1 名前:nobodyさん 03/09/15 03:01 ID:hl+VfJ8P
いらっしゃーい、Perlのコーディングで困ってる人のスレです。
837nobodyさん:03/10/10 15:33 ID:???
>>835
分かる。結局休日指定は外部ファイルとかにしてしまう...

>>836
スレ違いスマソ。
838828:03/10/10 17:26 ID:???
>>829
すいません、“フラッシュする”とはどういったことなんでしょうか?(汗)
839nobodyさん:03/10/10 17:31 ID:u+RPzhqi
こんにちは、教えてクソです。

HTML::Template 使って XML なテンプレートを書いてます。
出力文字コードは UTF-8 にしたいので、テンプレートに埋め込む日本語は
UTF-8 で書いてます。(Emacs + Mule-UCS で utf-8-unix)

で、HTML::Template に渡すデータ構造も Jcode.pm あるいは Encodings
モジュールを使って UTF-8 に変換して渡してます。

が、強烈に文字化けするとき多数。

HTML::Template に渡す前のデータ構造を Data::Dumper で dump してみても
その時点では化けてなくって、どうやら HTML::Template->output したときに
化けるみたい。

なんか原因くさいの知ってる人いたら教えてくさいませ。
840nobodyさん:03/10/10 17:32 ID:???
>>838
バッファに貯めたものを書き出すこと。
フラッシュ = flush = 洗い流す

$|=0; # 0かそれ以外かで下の挙動が変わるだろう。
print "Hello";
sleep 5;
841839:03/10/10 17:39 ID:???
あーすんませんもう一個しつもん

モジュールのコードを読むときに pod 部分が邪魔なんですが、これを除去する
フィルタとかって Perl に標準で付いてくるんですかね。
842828:03/10/10 18:00 ID:???
>>840
よく分かりました!
ありがとうございましたm(_ _)m
843初心者 ◆eV4qRmoLQw :03/10/10 19:25 ID:fE08RGJE
下記のようなコードを書いているのですが、
どこか間違ってますか?

ブラウザのアドレス欄には、
http://×××/kankyou.cgi?id=&id2=&sousin=%83N%83G%83%8A%91%97%90M
id=のところに何も入らないのですが、どなたか分かる方
居ましたら、教えて下さい。

#!/usr/bin/perl

$aa = 'hogehoge' ;
$bb = 'hahahaha' ;

print <<"end" ;
Content-type: text/html

<html>
<title>
TEST
</title>
<body>
#<form action = "./kankyou.cgi" method = "post" >
<form action = "./kankyou.cgi?id=$aa&id2="$bb" method = "get" >
<input type = "text" size = 50 name = "id" ><br>
<input type = "text" size = 50 name = "id2" ><br>
<input type = "submit" name = "sousin" ><br>
844nobodyさん:03/10/10 19:40 ID:???
<form action = "./kankyou.cgi?id=$aa&id2="$bb" method = "get" >
                  ↑↑↑↑↑↑↑↑
何これ?
845nobodyさん:03/10/10 19:42 ID:???
""の組み合わせがおかしいなw
別にaction= に パラメタを入れるのはできるけど
input type="hidden" を使えない理由でもあるのかな?
846nobodyさん:03/10/10 20:34 ID:???
sousin=%83N%83G%83%8A%91%97%90M
ま、これも笑えるんだが。
847初心者 ◆eV4qRmoLQw :03/10/10 20:35 ID:fE08RGJE
すいません。hiddenの使い方が分かりませんでした。
教えて君ですいません。
848nobodyさん:03/10/10 21:18 ID:???
>>847
> 分かりませんでした。
過去形なわけだね。
つまりはもうわかったという事だね。
おめでとう。
849nobodyさん:03/10/10 21:20 ID:???
850初心者 ◆eV4qRmoLQw :03/10/10 21:51 ID:fE08RGJE
いいえ、分かっていません。
どこかに詳しく書いてる所とか有ったら教えてほしいのですが・・・。
お願いします。
851nobodyさん:03/10/10 21:53 ID:???
>>850
何をしたいの?
フォームの値を渡したいの?
ブラウザのURLに表示されるのを楽しみたいの?
852nobodyさん:03/10/10 21:57 ID:???
>>850
自分で探そうとは思わんのか?
853nobodyさん:03/10/10 22:01 ID:???
<input type="text" name=number">(←正の整数を入れてもらう)
に入力された値を、
$in{'number'}
に入れ、仮に全角を入れられたら、半角にしたいと思ってます。
で、普通は
&jcode::tr(\$in{'number'}, '0-9', '0-9');

でできるかと思います。

-------------------------------------------------------------

ただ、今、他人(すでに会社やめた人)が、作ったコードを改修しており、
それが、スクリプト自体の文字コードがSJISで、
$in{'number'}もSJISになっている状態です。

この状況で、全角数字を半角数字に置換するにはどうすればいいのでしょうか?
どうも、そのまま
&jcode::tr(\$in{'number'}, '0-9', '0-9');
とやっても置換されないようでして・・・

教えていただければ幸いです。
854nobodyさん:03/10/10 22:04 ID:???
>>850
↓これでいいの?

>>850

#!/usr/bin/perl

$aa = 'hogehoge' ;
$bb = 'hahahaha' ;

print <<"end" ;
Content-type: text/html

<html>
<title>
TEST
</title>
<body>
<form action = "./kankyou.cgi" method = "get">
<input type = "text" size = 50 name = "id" value="$aa"><br>
<input type = "text" size = 50 name = "id2" value="%bb"><br>
<input type = "submit" name = "sousin" value="クリエ送信"><br>

つか、HTMLから勉強し直せ
855854:03/10/10 22:06 ID:???
スマソ
誤 <input type = "text" size = 50 name = "id2" value="%bb"><br>
正 <input type = "text" size = 50 name = "id2" value="$bb"><br>
856nobodyさん:03/10/10 22:11 ID:???
>>853
$in{'number'} =~ s/0/0/g;
$in{'number'} =~ s/1/1/g;
$in{'number'} =~ s/2/2/g;


これじゃいかんの?
857nobodyさん:03/10/10 22:12 ID:???
>>856
ダサい。
858nobodyさん:03/10/10 22:14 ID:???
859nobodyさん:03/10/10 22:25 ID:???
>>854

                \ │ /
                 / ̄\   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
               ─( ゚ ∀ ゚ )< クリエクリエ!
                 \_/   \_________
                / │ \
                    ∩ ∧ ∧  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\∩ ∧ ∧ \( ゚∀゚)< クリエクリエクリエ!
 クリエ〜〜〜〜! >( ゚∀゚ )/ |    / \__________
________/ |    〈 |   |
              / /\_」 / /\」
               ̄     / /
                    ̄
860nobodyさん:03/10/10 23:11 ID:???
>>853
jcode が入っているようだから、Shift-JISで統一して操作してみればよろしいかと。
あと、jcode.pl(.pm)のドキュメントも読んでみると。
861nobodyさん:03/10/11 00:17 ID:???
>>853

print sjis_num_z2h('私は7743です');

BEGIN {
require 'jcode.pl';
my $euc_num = '0123456789';
&jcode::sjis2euc(\$euc_num);

sub sjis_num_z2h
{
my $str = shift;
&jcode::sjis2euc(\$str);
&jcode::tr(\$str, $euc_num, '0123456789');
&jcode::euc2sjis(\$str);
return $str;
}
}

#string::multibyte,Jcodeモジュールの方がまだ楽。
862853:03/10/11 01:02 ID:???
>>856
ありがとうございます。たしかにそれでいけますね。
そのままだとちと気持ち悪いので、
sub sjis_num_z2h{
 my $str = shift;
 $str =~ s/0/0/g;
 $str =~ s/1/1/g;
 $str =~ s/2/2/g;
 $str =~ s/3/3/g;
 $str =~ s/4/4/g;
 $str =~ s/5/5/g;
 $str =~ s/6/6/g;
 $str =~ s/7/7/g;
 $str =~ s/8/8/g;
 $str =~ s/9/9/g;
}
みたいな感じでやるかも。(あんま変わらないか。。。)

>>860
ドキュメント見直してみます。

>>861
なるほど、EUCに一端待避させてやればいいわけですね。

どの方法でやるかまだ決めてませんが、ともかくありがとうございます。
863nobodyさん:03/10/11 01:23 ID:???
>>862
スクリプト自体の文字コードに依存しない方法。

sub sjis_num_z2h {
  my $str = pop;
  $str =~ s/\x82([\x4F-\x58])/chr(unpack('C', $1) - 31)/eg;
  return $str;
}
864nobodyさん:03/10/11 01:30 ID:???
865854:03/10/11 12:02 ID:???
>>859
正直すまんかった。
自分でワロてもた(w>クリエユーザなわけだが...
866nobodyさん:03/10/11 17:45 ID:???
本当に初心者ですが、ここでいいですよね?
DB上の一部の数値をクリアしたくて、下のように書きました。

 tie(%dat,SDBM_File,"dbm", O_RDWR|O_CREAT, 0644);
 while (my($key,$olddat) = each (%dat)){
 @psdat = split (/:/,$olddat);
 $psdat[7]=0;
 $newdat = join (":",@psdat);
 $dat{$key}=$newdat;
 }
 untie %dat;

これを実行すると半分ぐらいは0になり残りは元の数値のままです。
もう一度実行すると4分の1が残り、次は8分の1…と
半分づつしか処理してくれません。
どこがおかしいのか分かる方、どうかアドバイスをお願いします。
867nobodyさん:03/10/11 23:14 ID:???
eachで一つずつ読み出してる間にハッシュを書き換えてるから起きる予感。
868nobodyさん:03/10/11 23:16 ID:???
>>866
each使わないでkeysで全てのキーを取得してから、それ使ってやってみなよ。
メモリ効率悪いのはわかるけどさ。

 tie(%dat,SDBM_File,"dbm", O_RDWR|O_CREAT, 0644);
 @keys = keys $dat;
 foreach $key ( @keys ) {
 @psdat = split (/:/,$dat{$key});
 $psdat[7]=0;
 $dat{$key} = join (":",@psdat);
 }
 untie %dat;
869nobodyさん:03/10/11 23:19 ID:???
わり、こうだな。

@keys = keys %dat;
870866:03/10/12 00:22 ID:???
>>867さん
>>868さん
ありがとうございました。本当に。
あれだけ悩んだのが一発で解決です。
keyだけならそんなにメモリも食わないんで、これでバッチリです。
871nobodyさん:03/10/12 01:40 ID:???
local($min,$hour,$t_day,$mon,$year,$wday) = (localtime(time))[1..6];
open(DAY, "+> day.dat");
$d_day = <DAY>;
print DAY $t_day;
close(DAY);

if($t_day eq $d_day){
open(CNT, "+> count.dat");
$cnt = <CNT>;
$cnt = $cnt++;
print CNT $cnt;
close(CNT);
}else{
open(CNT, "> count.dat");
$cnt = 0;
print CNT $cnt;
close(CNT);
}

日付が変わればcount.datがリセットされ、
変わらなければcount.datの数字に1足されるアクセス制限スクリプトを考えているのですが、
上記スクリプトでは延々とcount.datが加算されません…。(0のまま)

どこが間違っているのでしょうか。手解きの程お願い致します…。
872nobodyさん:03/10/12 01:44 ID:???
873nobodyさん:03/10/12 01:53 ID:ED62rmbw
画像を拡大縮小して保存したいんだけど
どうすればいいのか、まったく見当もつきません。
そのようなモジュールなどあるのでしょうか?
おしえてください。
874nobodyさん:03/10/12 01:56 ID:???
>$cnt = $cnt++;
これはいつまでたってもかわらんなw
875nobodyさん:03/10/12 01:57 ID:???
>>873
GDとか
876871:03/10/12 02:21 ID:???
>>872
>>874

ありがとうございます。再度試してみます。

これ、open関数間違ってますか…?
だとしたら、どこが間違っているのか解らないんですが…
ずっと考えてたんですが。ヘボでスマソ…
877nobodyさん:03/10/12 02:25 ID:???
>>876
>$cnt = $cnt++;
$cnt が、0とすると、$cnt++で$cntは1になるが、後置なので式では0
結局、いつまでたっても$cnt = 0; という式になる
878871:03/10/12 02:29 ID:???
>>877
あ、++の方は解りました。すんません。

>>872の2番目のリンクがopen関数を指してたんですが、
open関数の間違いが解らなくて…
879nobodyさん:03/10/12 02:31 ID:???
>>877
Cならかの有名な未定義式だよな(ワラ
880nobodyさん:03/10/12 02:43 ID:???
>>878
よくわかって無いなら、読み書きを一回のopenでやるのはよしとけ
881871:03/10/12 02:57 ID:???
>>880
了解しました。ありがとうございます。
openについて勉強し直します。
882nobodyさん:03/10/12 03:47 ID:???
http://www.atmarkit.co.jp/fsecurity/rensai/webhole01/webhole01.html
> %00はNULL文字といい、PerlやC言語などで文字列の終端として認識される。

本当ですか? Cで文字列の終端文字が'\0'なのは知っていますがPerlでは初耳です。
ちなみにperl -e 'print "Hello\x00world\n"'としたらHelloworldと表示されました。
Perlのバージョンは5.6.1です。
883nobodyさん:03/10/12 04:19 ID:???
>>882
perlではファイル名などでは終端になるけど文字列では連結になる。
だからその説明文は誤り。
884nobodyさん:03/10/12 04:22 ID:???
うそはうそであると見抜ける人でないと
(インターネッツを使うのは)難しい
885nobodyさん:03/10/12 04:31 ID:???
>>883
ああなるほど。
open(FILE,"/etc/passwd\x00.html");とすると/etc/passwdが開かれるということですか。
Perlの仕様じゃなくてopenシステムコールが/etc/passwdまでしか読まないことが原因なのかな。
886nobodyさん:03/10/12 15:17 ID:???
先生…Perl詩とか…無理過ぎました…。
887nobodyさん:03/10/12 16:27 ID:???
二次元の配列を特定の列で昇順・降順を指定してソートかけるにはどうすればよいのでしょうか?
手持ちのリファレンスにやり方が書いてなく
本屋で3冊くらい配列の章を立ち読みしましたが実例コードや具体的な方法が書いてありませんでした。

自分は
@Array =(
[1,2,5,3,5]
[3,5,6,3,4]
[9,4,5,4,2]
);
このような配列を2列目や3列目の値でソートしたいのですが
888nobodyさん:03/10/12 16:44 ID:???
>>886
study;
http://groups.google.co.jp/groups?q=poem&btnG=Google+%8C%9F%8D%F5&meta=group%3Dcomp.lang.perl.*

>>887
@Array = (
  [1,2,5,3,5],
  [3,5,6,3,4],
  [9,4,5,4,2],
);

my $i = 1; # 列の添え字
my @sorted_array = sort { $a->[$i] <=> $b->[$i] } @Array;
889nobodyさん:03/10/12 16:46 ID:???
>>887
for(@Array){
 my @a=sort @$_;
 $_=\@a;
}

やりたいことがよくわからないが、こういうことかな。
もっと短くなりそう。
890889:03/10/12 16:48 ID:???
行ごとにソートしちまった。
逝ってきます。
891nobodyさん:03/10/12 17:01 ID:pLoTHScF
$word = '\w+';
$num = '\d+';
$back = '\\+';

$_ = 'Test\1\2\3';
@a = /($word|$num|$back)/go;
print join(":", @a), "\n"; # Test:1:2:3

Test:\:1:\:2:\:3と表示させるには、$back='\\\+'としなければなりません。
バックスラッシュそのものにマッチさせるには、なぜ、2つ(\\)ではなく、
3つ(\\\)も必要なのでしょうか?
892nobodyさん:03/10/12 17:20 ID:???
>>891
print '\w+'; # \w+
print '\d+'; # \d+
print '\\+'; # \+

<q cite="http://www.kt.rim.or.jp/%7ekbk/perl5.005/perldata.html#Scalar_value_constructors">
文字列リテラルは、シングルクォートかダブルクォートで区切られます。
これらは、シェルのクォートと同じように扱われ、ダブルクォートの
文字列リテラルでは、バックスラッシュの置換と変数の置換が行なわれ、
シングルクォートの文字列では、(``\''' と ``\\''を除いて)これらの置換は
行なわれません。
</q>
893891:03/10/12 17:55 ID:???
>>892さん、どうもありがとう。
print '\\+'; # \+ <- これでわかりました。
/(\w+|\d+|\\+)/go; <- こう書く場合と混同してました。
894887:03/10/12 18:25 ID:???
>>888さん、>>889さんありがとうございました
>>888さんのスクリプトで動きました

いままでmap関数など使って失敗してたのがシンプルで見やすいスクリプトで書けたので楽になります
ありがとうございました
895nobodyさん:03/10/13 00:28 ID:lpcebX3k
超初心者

PHP内でlineの色を変更するにはどう記述すればいいのですか?
896nobodyさん:03/10/13 00:33 ID:???
>>895
あぼーん
897nobodyさん:03/10/13 02:46 ID:???
lineって何よ?
898nobodyさん:03/10/13 03:26 ID:???
PerlとPHPを組み合わせる方法を教えてよ☆
899nobodyさん:03/10/13 04:08 ID:???
Perlスクリプト起動 → PHPスクリプトを生成 → Locationか何かでそれにアクセス
→ 何か適当にやる → Perlスクリプトの方に戻る → PHPスクリプト消去 → 終了










駄目だ弱過ぎる。
900nobodyさん:03/10/13 04:15 ID:???
900ずさー
901nobodyさん:03/10/13 05:50 ID:???
>>898
cat /usr/bin/perl /usr/local/bin/php > hoge
902nobodyさん:03/10/13 10:55 ID:???
903nobodyさん:03/10/13 11:25 ID:???
よろしくお願いします。

フォーム内に入力した言葉を、ボタンをクリック後、指定した文字に置き換えるというのは、どうすればできるのでしょうか・・。
ご教授頂けると大変ありがたいのですが、参考サイトだけでも、どうかお教え頂けませんでしょうか。

例)abcをラーメンに、defを餃子に置き換えるルールを作る。
フォームにabcdefghiと入力してボタンをクリックすると、「ラーメン餃子ghi」という結果が出る。

すみません、よろしくお願いします・・・。
904903:03/10/13 11:32 ID:???
1つだけの置き換えなら、

$from = 'abc';
$to = 'ラーメン';

&jcode'tr(*value,$from,$to);

とすればできたのですが、2つ以上の設定となるとわからないんです・・。
905nobodyさん:03/10/13 11:56 ID:???
フォームから受け取った内容が
$hoge に入っているとして、
$hoge =~ s/abc/らーめん/g;
$hoge =~ s/def/ぎょうざ/g;
でいいんじゃ?

つーか、「2つ以上の設定」の簡単なやり方は
同じことを繰り返すこと。
906903:03/10/13 12:07 ID:???
>>905さん

それ通りに書くと、できましたわ・・・。
ご教授ありがとうございました!!
しかし私は勉強不足で大変おはずかしいです。
本当にありがとうございました。
907nobodyさん:03/10/13 17:10 ID:???
学校の宿題でperlで三角形の面積を出すプログラムを書くように言われたのですが、
掛け算割り算の書き方から解説されているサイトってありませんか?
908nobodyさん:03/10/13 17:20 ID:???
すみません。文字コードがUnicodeのファイルを扱わなきゃならないんです
が、うまくできません。どなたか助けてください。

use Encode;
use utf8;

$orig = '018_package.html.ttx';
$out = 'out.txt';

open(IN,'<:encoding(UTF-16LE)',$orig) or die "Can't open $in: $!\n";
open(OUT,'>:encoding(UTF-16LE)',$out) or die "Can't open $out: $!\n";
while (<IN>) {
# ここで置換処理など
print OUT;
}

close IN;
close OUT;

こんなコードを書いてみたのですが、

UTF-16LE:Partial character at xxx.pl line xx, <IN> line xx.

ってエラーが出てしまいます。わかんないよ〜〜〜。
909nobodyさん:03/10/13 17:34 ID:???
ごめ。上げます〜。
910nobodyさん:03/10/13 17:39 ID:???
>>907
三島さんところかとほほさんの所がいいんじゃないかな?
検索すればすぐ見つかるよ

つーか三角形の面積だったら中学レベルの2次元平面座標3点から面積を求める公式にはめこむだけだと思うが
911nobodyさん:03/10/13 17:53 ID:???
>>907
つーか、宿題は自分でやれ
912nobodyさん:03/10/13 17:59 ID:???
>>907
!#perl
die "Usage: menseki.pl teihen takasa\n" unless
( defined $ARGV[0] && defined $ARGV[1] );
print $ARGV[0]*$ARGV[1] . "\n";
exit;
913nobodyさん:03/10/13 18:01 ID:???
>911
やり方教えてくれって言ってるならともかく、解説サイト教えてくれって言ってるんだからいいじゃないか。
自分でやろうという意思はあるようだ。
914nobodyさん:03/10/13 18:02 ID:???
あ、2で割るの忘れた。。。(鬱死
915nobodyさん:03/10/13 18:49 ID:???
>>913
本気で自分でやろうとするなら、解説サイトぐらいぐぐるぜ。
参考書を親に買いに行かせるような行為だな。
ほんでもって参考書が理解できなかったら買ってきた親を怒るんだろうな。

>>912、914
そんな簡単な宿題じゃないと思う。
きっと3辺の長さから面積を求めるんじゃないの?
916nobodyさん:03/10/13 19:51 ID:???
>>915
いるよね、こういうの
917907:03/10/13 19:53 ID:???
>910
なんとかできました。ありがとうございます。

>912>914
や、スクリプトまで書いていただいちゃってすいません。
理解できるようにがんばります。

>915
教科書を買い損ねてしまったもので、検索もしてみたんですが
どのサイトを読めばいいのかちょっとわかりませんでした。
 まだ演算子の使い方を習っている段階なので、ヘロンの法則
じゃなくて底辺×高さ÷2でいいそうです。
918nobodyさん:03/10/13 19:56 ID:???
>>91
評価してやるからスク貼りな
919nobodyさん:03/10/13 21:54 ID:???
多角形の面積: 外積の和の1/2
920nobodyさん:03/10/13 22:05 ID:???
時代もかわったもんだなあ
漏れが学生の頃は教育用の言語といえばフォートランかCが主流だった
いまだにCはそれ自身だけじゃなく子孫が繁栄しているおかげで無駄にはなってないよ

>>907
変数と型・有効範囲
演算子
制御構文
サブルーチン
あと配列
このへんだけしっかり身に着けておけば
他の言語もすぐに覚えられるよ

学校ならそのうちサブルーチンに値を渡して面積を返すようなものも作らされると思う
苦労は無駄にはならないから頑張れ
921nobodyさん:03/10/13 22:06 ID:???
初心者にまずperlから教えるというのは随分DQNな教官だな。 専門学校?
922nobodyさん:03/10/13 22:13 ID:???
東光特等少年院
923908:03/10/13 23:24 ID:???
すみません。PerlのUnicodeサポート関係、詳しい方いらっしゃいましたら
>>908についても情報ください〜〜。
参考になるHPのポインタでも結構です。
perldocで調べろ!とかはお許しください。読んでもチンプンカンプンで
わかんないので質問しました。

よろしくお願いします。
924nobodyさん:03/10/14 00:15 ID:???
>>922
東のBフレッツユーザー
925nobodyさん:03/10/14 00:24 ID:???
926nobodyさん:03/10/14 03:24 ID:???
>>923
さっさと5.8.1にバージョン上げる。
927nobodyさん:03/10/14 17:09 ID:???
open(IN,"http://www.hoge.com/bbs.log")

みたいに他の鯖に存在する掲示板のログファイルを取得したいと
思っているのですが、どうすればいいのでしょうか?
928nobodyさん:03/10/14 17:12 ID:???
>>927
( ゚Д゚)・・・
それでええやん
929nobodyさん:03/10/14 17:21 ID:???
( ゚Д゚)・・・
アホか
930nobodyさん:03/10/14 17:32 ID:???
>>927
socket
931nobodyさん:03/10/14 17:37 ID:???
>それでええやん
関西弁は本7
932nobodyさん:03/10/14 17:44 ID:???
>>927
ソケットをまだ身に付けてなかった初心者時代、正直やったw
933928:03/10/14 17:55 ID:???
>>931
違うが・・・
たしかにポンシチは関西だが、関西弁全部を本7と決め付けるには(ry
934nobodyさん:03/10/14 19:29 ID:???
でも、それでいいと言い切るのはphp使いだしなあw
935nobodyさん:03/10/14 19:31 ID:???
>>927 は、モジュールとか入れられる環境?
入れられるならLWP等を入れるのも手かも
936nobodyさん:03/10/14 20:20 ID:???
つか、なんでモジュールインストールできるのか、って聞くのがいまだにわからないのだが・・・
インストールできないのなら、そのまま.pmをうpしてuse *.pm(コマンド間違えてるかもしれない)
ってすればいいと思うのだが・・・
937nobodyさん:03/10/14 20:30 ID:qwuohjrW
>>936
ピュアPerlじゃないのはそうもいかないっしょ。
938936:03/10/14 20:37 ID:???
>>937
スマヌ、ピュアPerlって意味がわからん・・
まだまだ俺も無知だ..
939nobodyさん:03/10/14 20:44 ID:???
>>938
Perlだけで書かれたものじゃない?
940nobodyさん:03/10/14 20:44 ID:???
無知無知(;´Д`)ハァハァ…
941936:03/10/14 20:45 ID:???
942936:03/10/14 20:47 ID:???
>>939
なるほど。
943nobodyさん:03/10/14 21:23 ID:???
最近Perl始めまして、できない事があるので質問させてください。
入力フォーム(Text)エリアに入力された文字列が数字かどうか判断したいのですが
やり方が分かりません。みなさんはどうされていますか?

最終的にやりたい事は、to_server_param.cgiから渡された入力パラメータの内、
入力フィールド"name","path","expires","secure"の値を
from_server_cookie.cgiに渡し、Set-Cookieでクッキーに保存する。

入力フィールド"length"に何か入力されていればその値を数字かどうか判断し、
数字であれば入力されたlength分だけSet-Cookieする。
数字でなければ、または入力されていなければ、全て保存する。

入力フィールド"name"に何か入力され、尚且つ入力フィールド"count"に何か
入力されていればその値を数字かどうか判断し、数字であればcount回数分
繰り返す。例えば10が入力されれば"name1"〜"name10"とクッキーの名前を変えて
繰り返す。何も入力が無ければ1度だけ。名前も変えない。

です。次に書きかけのソース乗せます。
944943:03/10/14 21:27 ID:???
#!/usr/bin/perl
#this is "to_server_param.cgi"
print "Content-type: text/html", "\n\n";

print "<HTML>";
print "<HEAD>";
print "</HEAD>";
print " <BODY>";
print " <form action='/cgi-bin/from_server_cookie.cgi' method='post'>";
print " NAME 'NAME=VALUE;'<BR>";
print " <INPUT TYPE=TEXT SIZE=20 NAME=name VALUE='NAMAE;'><BR></BR>";
print " path 'path=/cgi-bin/;'<BR>";
print " <INPUT TYPE=TEXT SIZE=20 NAME=path VALUE='/cgi-bin/from_server_cookie.cgi;'><BR></BR>";
print " expires 'Sun, 31-Dec-2003 23:59:59 GMT;'<BR>";
print " <INPUT TYPE=TEXT SIZE=40 NAME=expires VALUE='Fri, 31-Dec-1999 23:59:59 GMT;'><BR></BR>";
print " secure On Off<BR>";
print " <INPUT TYPE=RADIO NAME=on_off_radio VALUE='On'>On";
print " <INPUT TYPE=RADIO NAME=on_off_radio VALUE='Off' CHECKED>Off<BR></BR>";
print " length<BR>";
print " <INPUT TYPE=TEXT SIZE=5 NAME=length><BR></BR>";
print " count<BR>";
print " <INPUT TYPE=TEXT SIZE=5 NAME=count><BR></BR>";
print " <INPUT TYPE=SUBMIT>";
print " </form>";
print " </BODY>";
print "</HTML>";
945nobodyさん:03/10/14 21:30 ID:???
if($hoge =~ /^\d+$/){
  print '数字です';
}else{
  print '文字列です';
}
946943:03/10/14 21:34 ID:???
#!/usr/bin/perl
#this is "from_server_cookie.cgi"

$data=$ENV{'QUERY_STRING'};
read( STDIN, $data, $ENV{ 'CONTENT_LENGTH' } );
$data1=$data;

print "Content-type: text/html\n";
print "Set-Cookie: ";
my @pairs1 = split(/&/,$data1);
foreach $pair1 (@pairs1){
my($name1, $value1) = split(/=/, $pair1);
unless($value1 eq ""){
if($name1 eq "length"){
unless($value1 eq ""){
                   #←ここで数字か判定したいです。
$length1 = $value1;
}
}
elsif($name1 eq "count"){
unless($value1 eq ""){
                   #←ここで数字か判定したいです。
$counter1 = $value1
}
}
else{


947943:03/10/14 21:36 ID:???
>>945 さん
ありがとうございます!!さっそくやってみます!

みなさん、長文ご迷惑をおかけしました。がんばります。
948nobodyさん:03/10/14 22:03 ID:???
早わざだな・・・
949nobodyさん:03/10/14 22:06 ID:???
おーい
950nobodyさんLWP:03/10/14 22:56 ID:???
すみません。初心者の質問で申し訳ないのですが、どうしてもわからなくて、挙げさせていただきました。 perlのLWPモジュールを使用して、ファイル(aaaというファイル)を読み込み、その内容をサーバにPOSTし、レスポンスを捕らえるということをしたいのですが、
下記のような(一部省略してあります)コードで動作させると、 aaaのサイズがある一定以上になると、止まってフリーズしてしまうのです。
ファイルサイズが大きすぎて、メモリに読み込めないのか?と思ったのですが、aaaのサイズは30k程度のテキストファイルなのです。
数k〜10k程度なら、下記コードで、ちゃんと動くのです。それ以上の大きさのファイルだと、動かなくなってしまい、とても困っています。 わたくし、初心者ですので、全くダメなコードを書いているかもしれません。
それとも、LWPのモジュールにはPOSTデータ量の制限とかあるのでしょうか? ソースは眺めてみたのですが、良くわかりませんでした。

理由・解決策等ご存知のかた、教えてくださいませんでしょうか。 よろしくお願いいたします。
------------------------
 use LWP::UserAgent;

 open(DAT, "aaa") or die("Can not open file : ($!)");
 while( $buff = <DAT> ){
 push(@datadata, $buff);
 }
 close(DAT);

 my $url_num = ※※;
 my $ua = LWP::UserAgent->new;
 my $req = HTTP::Request->new(POST => $url_num);
 $req->content_type('form-data');
 $req->content(join('', @post_data));

 if ( $res->is_success) {
 $resfile = ※※※;
 my $res = $ua->request($req);
 open(OUT, "> $resfile");
 print OUT $res->content;
 close(OUT);}
 else{
 }
-------------------
951nobodyさんLWP:03/10/14 22:58 ID:???
↑すんません。コードのみ追加で挙げます。
------------------------
 use LWP::UserAgent;

 open(DAT, "aaa") or die("Can not open file : ($!)");
 while( $buff = <DAT> ){
 push(@datadata, $buff);
 }
 close(DAT);
 my $url_num = ※※;
 my $ua = LWP::UserAgent->new;
 my $req = HTTP::Request->new(POST => $url_num);
 $req->content_type('form-data');
 $req->content(join('', @post_data));
 if ( $res->is_success) {
$resfile = ※※※;
 my $res = $ua->request($req);
 open(OUT, "> $resfile");
 print OUT $res->content;
 close(OUT);}
 else{
 }
-------------------
952nobodyさん:03/10/14 23:45 ID:???
>>951
とりあえず、use strict; をお勧めします。
953nobodyさん:03/10/14 23:48 ID:???
>>944
<!DOCTYPE ~
<p></p>
入れようよー(泪)
954nobodyさん:03/10/15 03:59 ID:???
全然関係ないツッコミだな
955nobodyさん:03/10/15 10:49 ID:???
>>950
コードに問題はないし、モジュールに制限はない
何秒くらいかかる?タイムアウトの可能性はあるかな
あとはクオータとかtmpのサイズとかって、、、30kしか容量ないというのもあれだな・・・
956nobodyさん:03/10/15 14:15 ID:???
open(DAT, "aaa") or die("Can not open file : ($!)");
#binmode(DAT); # Win ならば行頭のコメントを外す。
@datadata = <DAT>;
close(DAT);

ファイル終了コードを取り込んで while が無限ループしているような悪寒。(憶測)
957nobodyさん:03/10/15 14:39 ID:???
>939
Cとか埋め込まれてたりするモジュールあるの?
958nobodyさん:03/10/15 15:32 ID:???
>>957
普通にあるでしょ。lib/perl5の下の.soファイル探してみればわかる
959nobodyさん:03/10/15 20:11 ID:???
>>957
標準モジュールとかはほとんどそうなんじゃないの?
960nobodyさん:03/10/15 20:18 ID:???
.soぅなんですかぁ・・・
961nobodyさん:03/10/15 21:26 ID:gKX0QkEj
http://zurubon.strange-x.com/source.cgi
こんなアップローダでHTML書き出しができるやつがあったのですが、どこで配布してるかご存知ないでしょうか?
962nobodyさん:03/10/15 21:28 ID:???
スレ違いみたいかな?
963nobodyさん:03/10/15 21:29 ID:???
スレ違いだと思ったので違うスレで質問させていただきました。
ご迷惑おかけしてすいませんでした
964nobodyさん:03/10/15 21:35 ID:Ts29J0vM
こんな可愛い子が・・・
http://www.nukix.net/index2.html
965nobodyさん:03/10/15 23:25 ID:???
>>957
Storableモジュールは有名だね。
高速化のために肝の部分をCで作ってるって。
966nobodyさん:03/10/16 00:52 ID:h2L2XbQW
if ($base_url) {
$ref = $ENV{'HTTP_REFERER'};
$ref =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
if ($ref !~ /$base_url/i) { &error("不正なアクセスです"); }
}

質問です。
一部の方が投稿出来ないと言われ
a-zA-Z0-9にした方が良いのですか?
967nobodyさん:03/10/16 01:06 ID:???
>>966
ノートンバカが HTTP_REFERER を斬っているから。
968nobodyさん:03/10/16 01:08 ID:???

&error("不正な日本語です");
969nobodyさん:03/10/16 01:14 ID:Fo3ziY9D
C-Board掲示板(Ver354)のstyle\bse.txtに $page{'info'} という
部分があるのですが、これは関数(サブルーチン)ですか?
Perlの紹介ページなんかではサブルーチンは「 ( ) 」らしいの
ですが・・・
970nobodyさん:03/10/16 01:15 ID:???
971966:03/10/16 01:19 ID:h2L2XbQW
>>967
サンクス
972969:03/10/16 01:20 ID:???
>>970
なるほど、配列ですか。Perlでは定義以外にも{}使うんですね
973950/951:03/10/16 01:37 ID:???
>>952,955,956さん、ありがとうございました。
ご指摘を参考に、もう少し試してみます。

974nobodyさん:03/10/16 04:09 ID:???
>>969
まずは、C-BoardをDeleteする事をお勧めする。
975nobodyさん:03/10/16 07:07 ID:vV+88U+f
掲示板で、書き込み者のユーザエージェントを表示したいのですが、

my(@user) = split(/\//,$ENV{'HTTP_USER_AGENT'}); とか
$user = $ENV{'HTTP_USER_AGENT'}; とか記述して、

別のサブルーチン内で$userを表示するために

print<<"_EOM_";
$user
_EOM_

としたんですが、何も表示されません。
どうすればちゃんと表示されるのでしょうか?
976nobodyさん:03/10/16 08:19 ID:???
>>975
print "HUA:[$ENV{'HTTP_USER_AGENT'}]\n";
977975:03/10/16 08:42 ID:vV+88U+f
>>976
それだと書き込み者じゃなくてアクセス中の自分のUserAgentが
表示されるだけになりませんか?って私のやり方がおかしいのかな
978nobodyさん:03/10/16 09:06 ID:???
>>975
ちゃんとログに$user書き込んでるかどうか確認しる。
藻前の書いてるのは>>976と同じことだぞ。
979975:03/10/16 09:46 ID:vV+88U+f
>>978
おおーできました。基本的なことに気付いていなかったようで。
>>976さんと合わせて、ありがとうございました。
980nobodyさん:03/10/16 12:40 ID:c+B+rkqG
$a = 'test';

上記の変数aの中身の'test'を展開して、$testといったような変数を作りたいのですが、
可能でしょうか?
981nobodyさん:03/10/16 12:55 ID:???
可能です
982980:03/10/16 13:05 ID:c+B+rkqG
>>981
ありがとうございました。
983nobodyさん:03/10/16 13:05 ID:sHNsaMy8
純粋にPerlの質問か微妙ですが…。
JavaScriptのdocument.reffererで取得したリンク元を、
CGIに送ってプレーンテキストとして表示したいのです。

↓htmlに貼り付けたJSはこちら
<SCRIPT Language="JavaScript">
<!--
document.write("<img src='http://www〜〜〜cgi?");
document.write(document.referrer+"' width=1 height=1>");
// -->
</SCRIPT>

↓CGIはこちらです。
#!/usr/bin/perl

#---データ受け取り

$buffer = $ENV{'QUERY_STRING'};
$buffer = ~s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;
$buffer = ~ s/<([^>]|\n)*>//g;

#---出力

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

実行すると8桁程度の数字のみが表示されるのですが…
どうしたらまともに表示できるのでしょう?
ご存知の方よろしくおねがいします;
984nobodyさん:03/10/16 13:22 ID:???
>>983
print $ENV{'QUERY_STRING'};
985nobodyさん:03/10/16 13:22 ID:???
配列の頭二つを取り除くのに

shift @array;
shift @array;

と二回やってるんですが、これを一回で纏めてやる方法ってありますか?
986983:03/10/16 13:32 ID:sHNsaMy8
>>984
うーん。何も表示されないです…
987nobodyさん:03/10/16 13:39 ID:???
>>985
spliceで簡単にできるよ。
988nobodyさん:03/10/16 13:40 ID:???
>>983
漏れも昔よくやったよ

$buffer =~ s/
989983:03/10/16 13:43 ID:sHNsaMy8
すみません、表示された4294967295という数字が…
JSのエラーらしいです。調べてみます。
984さんありがとうございました(^^;
990nobodyさん:03/10/16 14:30 ID:???
上手く質問できないんですが、
人間の目で読めない文字(コンピュータ文字?)を取り除く
正規表現とかって可能ですか?
例えば、バイナリファイルをそのままテキストで書き出したとき、
とかに化けて表示される部分だけを取り除きたいんですが・・・。
991nobodyさん:03/10/16 14:50 ID:mXGYJHOc
http://ari-sin3.hp.infoseek.co.jp/arisin5.html
ここのアップローダなんだけど一日にUPできる量を設定したいのですができないのでしょうか?
992nobodyさん:03/10/16 14:59 ID:???
>>990
化けて表示される文字だって人間が読める文字だろうが
993nobodyさん:03/10/16 15:00 ID:???
>>991
【 スクリプト改造工房 PART 7 】
http://pc2.2ch.net/test/read.cgi/php/1063780103/
994nobodyさん:03/10/16 15:11 ID:???
>987
デキターと言う事でどもでした。
995nobodyさん:03/10/16 15:32 ID:???
>>992
( ・∀・)つ〃∩ ヘェ~ヘェ~ヘェ~ヘェ~ヘェ~
996nobodyさん:03/10/16 15:53 ID:???
次スレ用意しました

Perl コーディング初心者質問コーナー Part29
http://pc2.2ch.net/test/read.cgi/php/1066286828/
997nobodyさん:03/10/16 16:00 ID:???
HTML::Templateをインストールしようと思い
perl -MCPAN -e "install HTML::Template"
とやったのですがC:\.cpan\build\HTML-Template-2.6\に展開されるだけで
インストール出来ませんでした。

その後perl\site\libに展開されたファイルを置いてもuse出来ず、
仕方ないので以前聞いたようにHTML::Templateを
使いたいPerlスクリプトと同じディレクトリに置いてみたのですがやっぱり使えずと困っています。

どうすればインストールできるのでしょうか…。


Win2K; Apache1.3.27; ActivePerl5.6.1
998980:03/10/16 16:13 ID:c+B+rkqG
2
999980:03/10/16 16:16 ID:c+B+rkqG
銀河鉄道
1000980:03/10/16 16:17 ID:c+B+rkqG
1000だ場かども
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。