トップページ⇒php
1001コメント382KB

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

■ このスレッドは過去ログ倉庫に格納されています
0001前スレの連投で気分崩したので後よろ04/04/05 16:01ID:???
いらっしゃーい、Perlのコーディングで困ってる人のスレです。

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

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

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

過去ログやお勧めサイトは >>2-10
0756nobodyさん04/05/13 11:39ID:???
$date = sprintf("Date: %s, %02d %s %04d %02d:%02d:%02d", $weekly[$wday], $mday, $month_array[$month], $year, $hour, $min, $sec);
0757nobodyさん04/05/13 11:40ID:???
$weekly[$wday] を $weekly_array[$wday] に修正しといて。
0758nobodyさん04/05/13 11:47ID:???
>>755
strftime使った方が楽じゃない?

use POSIX qw(strftime);
my $Date = strftime("%a, %d %b %Y %H:%M:%S %z", localtime);

sprintf(printf)の使い方も憶えといて損はないと思うけどね。激しく基本だと思う。


0759nobodyさん04/05/13 11:49ID:???
>>755
# JST == GMT + 9 時間
my $time = time + 9 * 60 * 60;
my $diff = '+0900';

my($sec, $min, $hour, $mday, $month, $year, $wday) = gmtime $time;
my @month = qw(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec);
my @wday = qw(Sun Mon Tue Wed Thr Fri Sut);

my $Date = sprintf
  'Date: %s, %02d %s %04d %02d:%02d:%02d %s',
  ($wday[$wday], $mday, $month[$month], $year + 1900, $hour, $min, $sec, $diff)
;

# 別解
my $Date = sprintf
  'Date: %s, %02d %s %04d %02d:%02d:%02d %s',
  (split /\W+/, scalar gmtime $time)[0,2,1,6,3,4,5], $diff
;
0760nobodyさん04/05/13 13:09ID:???
my $Date = "Date: " . `/bin/date -R`;
色々な方法があるかと。
0761nobodyさん04/05/13 18:00ID:???
スレ違いかどうか自信ないけど、質問。
Perlでの変数の値域ってどうなっているんでしょう?
文字列で扱うときはいいんですけど、数値で扱うときはどこまで大きい数字が扱えるかは、
Perlのバージョンとかで違うのでしょうか?
0762nobodyさん04/05/13 20:48ID:???
±999999999999999
0763nobodyさん04/05/13 20:53ID:???
>>761
perl -V してみる。
0764nobodyさん04/05/13 22:13ID:???
>>761
Perlのバージョンでは基本的には変わらない(perl6になれば変わるかもしれない)が、
バージョンは同じでもコンパイルオプションやOSによって異なる可能性がある。
まぁ普通はこんな感じだと思うが。小さすぎると思うならMath::Big(Int|Float)で。

> perl "-V:[in]v(size|type)"
ivsize='4'
ivtype='long'
nvsize='8'
nvtype='double'
0765nobodyさん04/05/14 04:19ID:7/s5Izsl
crypt関数の使用可否によって処理を振り分けたくて、以下のようなコードを書きました。

# crypt関数使用可否チェック
undef $check_crypt;
$check_crypt = eval { crypt('1111', '11'); 1; }; # ここが23行目
if ($@) { $check_crypt = 2; }

if ($check_crypt == 1) { crypt関数が使える時の処理 }
elsif ($check_crypt == 2) { crypt関数が使えない時の処理 }
else { 不明な時の処理 }


これを、-wオプション付で構文チェックすると

Useless use of a constant in void context at c:\www\〜\xxx.cgi line 23.

と注意されたのですが、どこが問題なんでしょうか?
このままでも使用に問題は無いのですが、少し気になるので・・。
よろしくお願いします。
0766nobodyさん04/05/14 05:21ID:???
>>765
戻り値を使うべき関数であるところの crypt() が
無効コンテキスト (void context) に置かれているから。

my $check_crypt = eval { crypt('1111', '11') } ? 1 : $@ ? 2 : 0;

とか

if (eval { crypt('1111', '11') }) { 使用可能 }
elsif ($@) { 未実装 }
else { crypt が何らかのエラー }
0767nobodyさん04/05/14 06:02ID:???
>>755
use HTTP::Date;
my $Date = time2str(time()+60*60*9);
$Date =~ s/GMT/+0900/;
とか。

>>761
use Config;
print "このシステムでは、\n",
"整数型(IV)はCで言うと$Config{ivtype}で、バイト長は$Config{ivsize}バイト\n",
"実数型(NV)はCで言うと$Config{nvtype}で、バイト長は$Config{nvsize}バイト\n";
いろいろ調べてみては。
076875204/05/14 10:31ID:???
皆様、いろんな解法ありがとうございます。
参考になります。

sprintfもなんとなくわかってきました。精進します。
ありがとうございます。
0769nobodyさん04/05/14 10:36ID:???
Perlで例えば2004/5/14と言う日付のデータが在ったとした時
その日はその月の何週間目になるか調べる方法は在りますか?
この場合3が取得できるようにしたいです。
077076504/05/14 10:52ID:???
>>766
レスありがとうございます。
問題の箇所を
$check_crypt = eval { crypt('1111', '11') } ? 1 : $@ ? 2 : 0;
と書き換えることにより、無事解決することができました。

無効コンテキストというものに理解が弱く、検索や書籍で調べても
まだ完全に理解するまでには至っていないのですが、
crypt関数の戻り値を利用すべき所なのに利用していなかったことが
問題だったのですね?
ちゃんと理解できるまで、もっと調べてみます。

ありがとうございました。
0771nobodyさん04/05/14 11:57ID:???
>>769
これのような気がする。
http://search.cpan.org/~amurren/DayOfNthWeek-1.0/

違ったら適当に探してくれ。
http://search.cpan.org/search?m=all&q=Date&n=100
0772nobodyさん04/05/14 12:19ID:???
>>769
問題の説明が曖昧だ。「その月の何週間目」という言い方はあまり
しないと思うのではっきりと定義して欲しい。

多分、月を週に分割してそのいくつ目に入るかって意味だとは思う
のだが、週の始まりは何曜日かとか、最初の週は0週目なのか
1週目なのかとかといった数え方の好みがあるだろうし。

Date::Manip使うかPOSIXのstrftimeの%Uか%W使うかだろうなぁ。
0773nobodyさん04/05/14 16:41ID:???
すみません、
.htpasswdで発行されたパスワードとIDを保存してあるリストを、
perlで組んだCGI(例えばBBSやチャット)の認証の際に利用したいと
思っているのですが、htpasswdで暗号化されたパスワードとBBSとかの
フォームに入力されたパスワードをコンペアする良い方法はないものでしょうか。
0774nobodyさん04/05/14 16:47ID:???
>>773
Apache::Htpasswd
077576104/05/14 20:16ID:???
レス�dくすです。
調べてみます。
0776nobodyさん04/05/14 23:19ID:???
>>769
日付から曜日を求めるツェーラの公式ってのがあったと思う

ちと、検索しても全然引っかからない…
その公式の事を書いてあった本も見つからない…

質問は「調べる方法は在りますか?」なので
ありますと言っておこう。
0777nobodyさん04/05/14 23:26ID:???
ったく。しゃーねーなぁ
ツェーラーも見つけられないのか
[(y+[y/4]-[y/100]+[y/400]+[13m+8]/5+d)%7]
0778nobodyさん04/05/14 23:54ID:???
>776
Zeller の公式(普通ツェラーと表記すると思う)はあくまで曜日(というか日数)を求めるものなので、
それだけでは単純に何週目という値が出てこない。
以前 CGI 関係のスレで質問があって書いてみたことがあるけど、もうひとひねり必要。
0779nobodyさん04/05/14 23:58ID:???
ツェラーで検索したら直ぐ引っかかったよ。
0780nobodyさん04/05/15 00:03ID:???
>778
って言うか、前スレだったよ…_| ̄|○

Perl コーディング初心者質問コーナー Part33
http://pc5.2ch.net/test/read.cgi/php/1078076768/934
0781nobodyさん04/05/15 10:55ID:???
zellerでぐぐるといろいろやってる人がいるね。

「日曜=0曜日というルールだと2004/5/1は6曜日。
2004/5/16はカレンダーで21マス目に現れる。」
これから気付けばint使って簡単に書けるでしょ。
0782lock04/05/15 11:43ID:if9npvZf

あの、最近CGIを作らんとならんコトになりまして、
ファイルのロック関係を調べたのですがちょっとお馬鹿な俺の脳味噌では理解出来ませんでした。

取り敢えずめんどう事は避けたいので、実行ロックをかけてプロセスが同時に動けないようにしたいです。
初めての経験なので負荷とか速度は気にしないことにして、安全を優先させるつもりです。

fllckを使って実現させようと思っているのですが、どのように記述すれば最も安全なのでしょうか?
開発環境はwin98ですが、本番の実行環境はUNIX系のOSです。
お馬鹿な質問で申し訳ありませんが、どなたかよろしくお願いします。
0783nobodyさん04/05/15 12:05ID:???
最大接続数を1に設定するよろし
0784nobodyさん04/05/15 12:20ID:???
>>782
安全優先ならちゃんと仕組みを理解してから使う。
急を要するならどこかから似たCGI探してから丸投げスレで頼みこむ。
0785nobodyさん04/05/15 13:09ID:???
>>782
もう一台、検証用にマシンを用意してLinuxか*BSDでもインスコ
したほうがよい。
現行のwin98をwin2000以降にしてVMwareって手もあるが。
0786名無しさん04/05/15 14:51ID:???
>>782
とりあえずWindows98ではflockがかからなかったと思うのだが。。
UNIXの中にもかからんのがあるらしい。
0787nobodyさん04/05/15 15:01ID:???
>>786
http://perldoc.com/perl5.8.4/pod/perlport.html#FUNCTION-IMPLEMENTATIONS
078878204/05/15 17:32ID:MHBM3z7f
ロックについて少しだけ分かってきました。
検索すると以下のコードに辿り着いたのですが、

open(OUT, "+< outfile.txt");
flock(OUT, 2);
truncate(OUT, 0);
seek(OUT, 0, 0);
print OUT "........";
close(OUT);

これはイツロックが解除されてるんでしょうか?
closeの時にファイルハンドルといっしょに消滅してるの??
と言いますか実行ロックがやりたいんだけど、プログラムの先頭に
open(OUT, "+< outfile.txt");
flock(OUT, 2);
これを書きっぱなしにしたらダメですか?
0789nobodyさん04/05/15 17:37ID:???
>>788
>プログラムの先頭に(略)これを書きっぱなしにしたらダメですか?
プログラムの開始はそこじゃないですよ。
スタートアップルーチン,perl_alloc,construct,parse(,run)して初めて(Perl)プログラムの先頭に行くわけです。
0790nobodyさん04/05/15 17:51ID:???
>>788
実行ロックって何よ?
脳内用語を使うな
079178204/05/15 18:08ID:MHBM3z7f

すみません、実行ロックは実行フェーズに対するロックの意でした。
つまり、インタプリタに引き渡された直後の実行フェーズの一番初めの処理としてロックをかけ、
それ以後の処理を複数のプロセスが同時に動いてほしくないと言うことです。
0792nobodyさん04/05/15 18:08ID:???
LOCK_EXをlock_executingの略だと思っているとか。んなわけないか。
0793nobodyさん04/05/15 18:25ID:???
なんかウザくなってきたな。
0794nobodyさん04/05/15 18:27ID:???
>>791
BEGINブロック作ってそこでflock。
そして、ENDブロックでclose。

壊れてもいいファイルだから、closeを書かなくても、
CGIなら問題ないのだろうけど、書いておくのがお約束。
0795nobodyさん04/05/15 18:33ID:jlBwPWFJ
Perlどっかから貰ってきて、
掲示板のデザイン変えようとしてもどこにHTML書けばいいか分かりません。
属性名を変数にしてPrintで書けば良いの?
0796nobodyさん04/05/15 18:36ID:???
>>795
スレ違い

■ 設置の方法がわからない場合には
CGI設置について質問
http://pc5.2ch.net/test/read.cgi/php/1054216089/15(テンプレ)

■ 自分で改造できない場合には
【 スクリプト改造依頼スレ 】(丸投げ)
http://pc5.2ch.net/test/read.cgi/php/1076831972/324(テンプレ)

■ 自分で改造するアドバイスが欲しい場合には
★三 【 スクリプト改造工房 PART 8 】 ★三
http://pc5.2ch.net/test/read.cgi/php/1077525387/79(テンプレ)
079778204/05/15 18:53ID:???
ありがとうございますた。
794さんの方法で行ってみます。
でも耐久テストに失敗したらまた来るかもしれませぬ。。
0798nobodyさん04/05/15 19:47ID:???
>>791
何か小難しい事書いてるけどそんな特殊な事やろうとしてるのかな。
やりたい処理を具体的に書けば良い例がいくらでも出てくる気がするが。

>>797
耐久テストって何じゃいw
0799nobodyさん04/05/15 20:20ID:???
単にファイルロックがどんなものか理解できていないだけじゃない?
0800nobodyさん04/05/15 20:44ID:???
クラスfooを継承する子クラスhogeを作って、
use hoge;
my $hoge = new hoge();
$hoge->method(@args);
などというように、hogeオブジェクトのメソッドを呼び出そうとすると、
親のfoo::method()が呼ばれて、hoge::method()が無視されてしまうことが
よくあります。hoge::method内でSUPERなどで明示的に呼んではいません。

fooのmethodをmethod2などにリネームすると、「methodなんてメソッドは
パッケージhogeには無い、ひょっとしたらhogeをロードし忘れてるんじゃないの?」
と怒られてしまいます。

この現象は何故起こるのでしょうか?
my $hoge = new hoge();と$hoge->method(@args);の間に
print ref $hoge, "\n";を入れてやると、ちゃんと$hogeはhogeになってます。

原因が分からないので、とてもとてもデバッグしにくいのですが、hoge::methodに
バグがあって読めないのなら、強制的にhoge::methodを呼び出して、
問題のある行でエラー吐いてdieさせるとかはできないのでしょうか?
0801nobodyさん04/05/15 20:55ID:???
>>800
同じスクリプトで結果が異なる場合があるのん?
実際にあってバグを疑うのなら環境を書くべきじゃないのん?
0802nobodyさん04/05/15 21:03ID:???
>>800
パッケージhogeのmethodをnethodみたいにタイプミスしてない?
0803nobodyさん04/05/15 21:07ID:???
>>801
すいません、環境書き忘れていました。
Debian woody + Perl 5.6.1です。

同じスクリプトで結果が異なるわけではなく、最初は親クラスのが呼び出されるけど、
子クラスのmethodの中をデバッグ、というか、例えば文法が間違ってる部分を
直したりすると、ちゃんと子クラスのを呼んでくれたりするのですが、
何故親クラスのを呼びに行くのか、何故子クラスのオブジェクトにmethodが無いなどと
言われるのか…。
文法等が間違っているのなら、そこでエラー吐いて止まって欲しいのですが、
親クラスのを平然と呼ばれて続行されると、どこが間違ってるのかわからないので…。
0804nobodyさん04/05/15 21:09ID:???
>>802
それも無いです。
hoge::methodだけではなく、他のメソッドも呼べなかったりしますし…。
0805nobodyさん04/05/15 21:12ID:???
mod_perl で変数の消滅してないだけだったりして
0806nobodyさん04/05/15 21:16ID:???
>>805
mod_perlってapacheのモジュールですよね?
apacheは使ったこと無いのでよく知らないのですが、というかapacheのmod_perlなら
使ってないです。普通のPerl5.6.1です。
0807nobodyさん04/05/15 22:22ID:???
>>806
100%アンタのバグだということは確かだが、さっぱり要領を得ないな。
コード晒せ。
0808nobodyさん04/05/15 22:45ID:???
>>807
私もPerlのバグだとは思ってないです。
どうもhogeの中でuseしているモジュールが、インストールできてないとかで読めない
場合に発生するみたいですが…。
0809nobodyさん04/05/16 02:01ID:???
Perl 5.6.1

物ぐさしないで新しいの入れてご覧。
ActivePerl build 631以前はTkが同梱されておりません。
0810nobodyさん04/05/16 05:37ID:???
これは具体例が無いと分からないね。
問題の起きるサンプルを書いて欲しいところ。
0811nobodyさん04/05/16 07:49ID:???
有る特定の日が何曜日か知る方法って有りますか?
今日、今だったらlocaltimeで取得出来ますけど。
引数で何とか出来そうですが分かりませんでした。
0812nobodyさん04/05/16 08:08ID:???
>>811
>>781
0813nobodyさん04/05/16 08:40ID:???
>>812
直ぐ前に有りましたか、失礼しました。
0814nobodyさん04/05/16 10:11ID:WJ6PDaM4
time値とプロセス番号をつかって、

10846903300057678
のように、表示させたいとしたいのですが、
(プロセス番号は、8桁未満のときは0を入れる)

$datafile = time . sprintf("%8d",$$);

だと、
108469033  57678
となってしまいます。
この空白を0で埋めるにはどうすればよいのでしょうか?
0815nobodyさん04/05/16 10:27ID:???
>>814
>>753
081681404/05/16 10:32ID:WJ6PDaM4
>>815
どうも。
$datafile = time . sprintf("%08d",$$) . ".csv";
で解決しました。
0817nobodyさん04/05/16 11:28ID:???
>>808
パッケージ名に全て小文字の名前を使うな。続きはそれを全部修正してから聞こう。
0818nobodyさん04/05/16 14:10ID:???
>>812
なぜ>>777を指さないでわざと>>781を指すんだろうね
0819nobodyさん04/05/16 15:59ID:???
CGI.pmを使ってPOSTする方法を教えてください。
0820nobodyさん04/05/16 16:26ID:???
>>819
ここでもマルチですか
0821nobodyさん04/05/16 16:53ID:???
他スレで回答もらってるのにここは放置か。
さすがマルチなだけあるな。
0822nobodyさん04/05/16 23:45ID:???
質問です。

ある日付の1日前の日付(YYYY/MM/DD)の取得は一度1970年よりの秒数に変換してから再びlocal関数に通すしかないのでしょうか?
もう一つ、
ある月に何日まであるかを返すには閏年の計算は必須でしょうか?(Perlに用意されていますか?)
0823nobodyさん04/05/16 23:50ID:???
ファイルをネットからDLする際に、更新されてたら全部読まずに追記の部分だけを読んで保存するにはどうしたらいいのですか?
たとえば2chのDATを読む時みたいに。
LPWのmirrorをみてみたのですが、更新されてるときは新しくDLするみたいでよくわかりません。
0824nobodyさん04/05/16 23:56ID:???
>>822
3/1の前日が2/28か2/29になる以外、すべての日の前日は固定ですが?
2月以外は何日まであるか固定ですが?
それは閏年によって変わるのだから計算は当然必要ですが?
perlにはそんなものを求める関数はありませんが?
0825nobodyさん04/05/16 23:59ID:???
>>822
Time::local
>>823
RFC 嫁。Range ほか
0826nobodyさん04/05/16 23:59ID:???
>>823
指定したバイト数以降を取得する。
0827nobodyさん04/05/17 00:04ID:???
>>825
>>826
即レスサンクスです。
調べてみますです
082882204/05/17 00:29ID:???
>>824 >>825
回答ありがとうございます。

Time::Localモジュールを使えば日付→経過秒数の変換が一発でできるようですね。
ある月の日数算出は普通に組み込んでみようと思います。

また困ったことがあれば質問しに来ます。
どうもありがとうございました。
0829nobodyさん04/05/17 06:58ID:???
>>822
use Date::Calc qw(Add_Delta_Days Days_in_Month);

my ($year, $month, $mday) = (2004, 3, 1);
($year, $month, $mday) = Add_Delta_Days($year, $month, $mday, -1);
print "date-1: $year, $month, $mday\n";

my $days = Days_in_Month($year, $month);
print "days: $days\n";
0830nobodyさん04/05/17 07:33ID:???
2の200乗の答えを標準出力に出力するプログラム作ってください!

083182204/05/17 08:22ID:???
>>829
それです!
わざわざサンプルソースまで書き出して頂きありがとうございます(´Д⊂ヽ

Days_in_Monthにあたる関数は自力で作れましたので、
Date::CalcのAdd_Delta_Daysだけを借りてみようと思います。

そして小一時間ほどppmと格闘しなんとかDate::Calcをインストールし、
5/1→4/30の移動を確認できました!
本当にありがとうございました。

# ついでにTime::Localもインストールしておきました。
0832nobodyさん04/05/17 10:01ID:???
>>830
宿題は自分でやろうな。な。
0833nobodyさん04/05/17 13:32ID:???
print "1606938044258990275541962092341162602522202993782792835301376\n";
0834nobodyさん04/05/17 13:44ID:???
perlのDBIでmysqlにデータを出し入れする時って、客の個人情報とかの場合でも平文でいいよね?
0835nobodyさん04/05/17 20:26ID:???
あ
083682304/05/18 02:17ID:???
>>825
>>826
探したのですが、rangeと検索してもほかの部分が見つかってしまってだめでした。
もうちょっとヒントをいただけませんか。
0837nobodyさん04/05/18 02:27ID:???
CPANをアンインストールすることはできますか?OSはWindowsXPです。
0838nobodyさん04/05/18 07:19ID:15Ww53+y
>>836
ttp://www.studyinghttp.net/rfc_ja/2616/sec14.html#sec14.35
0839nobodyさん04/05/18 07:21ID:???
>>830
use bignum;

>>834
ネットワーク(鯖)構成如何じゃない?
漏れても500円でなんとか(ry
084082304/05/18 08:16ID:???
>>838
ありがと〜。
がんばってみます
でもすごいむづかしいっぽい;;
0841nobodyさん04/05/18 12:03ID:???
>>834
Yahoo
0842nobodyさん04/05/18 22:40ID:???
誰かメールアドレスに使われる記号(@とか.とか)一覧が載ってるサイト知らない?

前に見つけたんだけど、URLがどっかいっちゃった;それでさっきから探してるけど、見つからないんだ。
0843nobodyさん04/05/18 22:43ID:???
RFCを見ろ。
0844名無しさん04/05/18 23:11ID:4Rd9YBtL
次のようなCGIの作成で質問です。
表の生成部分はなんとか出来そうなのですが
(a)ファイルの中から行を探して変更、削除する部分と
(b)追加する部分で同じ内容で複数行追加しないようにする部分
の方法が頭に浮かびません。どのような方法がありますか?サンプルソースを教えていただけないでしょうか?
1)予定テキストファイルを読み取り次のような表を生成します。
+−−−−+−+−+−+−+−+−+−+−+−・・・
|2004年06月|先月 |今月 |来月 |
+−−−−+−+−+−+−+−+−+−+−+−・・・
| 名前 |1|2|3|4|5|6|7|8|9・・・
+−−−−+−+−+−+−+−+−+−+−+−・・・
| 鈴木 | | |休| | |後| | |
+−−−−+−+−+−+−+−+−+−+−+−・・・
| 佐藤 | | | | |休| | | |
+−−−−+−+−+−+−+−+−+−+−+−・・・
| 田中 | | |前| | | |休| |
+−−−−+−+−+−+−+−+−+−+−+−・・・
2)先月、今月、来月の部分はリンクとなっていてCGIを呼び出し、先月の表、今月の表、来月の表を生成します。
3)名前もリンクになっていてフォームを呼び出し、SELECTタグにより年、月、日と、休、前、後を選択して予定テキストファイルに追加します。
4)休、前、後もリンクになっていて、フォームを呼び出し、予定テキストファイルから該当行を変更、削除します。
予定テキストファイルの内容は
名前ID<>年<>月<>日<>内容
n0001<>2004<>6<>3<>休
n0002<>2004<>6<>5<>休
n0001<>2004<>6<>6<>後
n0003<>2004<>6<>7<>休

名前と名前IDのリストファイルの内容
名前ID<>名前
n0001<>鈴木
n0002<>佐藤
n0003<>田中
0845nobodyさん04/05/18 23:28ID:???
業務丸投げですか?
まずは日本語からお勉強しようね。
お仕事をするには早すぎるようですよ。

ぶっちゃけ表はファイルから読み出すだけだし、
書き込みは重複を検査すれば良いだけだろ。
084684204/05/19 00:04ID:???
>>843
ありがとう!見つかったよ。

目的はメルアドのチェックじゃなくてsendmailに渡す際へんなスクリプトを排除したいだけなんだ。
で、なんか一杯記号は許可されてるみたいだから、結局「<」、「>」、「"」だけ切り捨てることにしたよ。

まだperl勉強足りないんだけど、perlって「$」、「@」、「%」とかを入力されても内部で途中で展開しないで
ただの文字列として扱われるみたいね。いい!
0847nobodyさん04/05/19 00:22ID:???
(a)ファイルの中から行を探して変更、削除する部分と
 Perlは不得手。全部読んで全部書き出すよろし。
 splice()を使うと幸せになれるかもしれない。

(b)追加する部分で同じ内容で複数行追加しないようにする部分
 重複チェックはハッシュを利用すると楽。
0848nobodyさん04/05/19 01:25ID:???
>>845
>まずは日本語からお勉強しようね。
>お仕事をするには早すぎるようですよ。

人のあらを見つけると大喜びで責め立てる。845はそういうむなしいやつ。
でもな、845だっていいところもあるんだよ。845のいいとこは↓が教えてくれる。
0849nobodyさん04/05/19 01:31ID:???
>>845のいいところ

>まずは日本語からお勉強しようね。
>お仕事をするには早すぎるようですよ。

人生にとって大切なことを的確にアドバイスしてあげたこと
0850nobodyさん04/05/19 02:31ID:???
PERLでの半角カタカナの扱いに困ってるよ・・・

例えば相手がフォームに「ササ」と半角カタカナで入力する。んで、漏れが
require "jcode.pl";
read(STDIN,$buffer);
$buffer =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C",hex($1))/eg;
jcode::convert(\$buffer,"euc");
jcode::h2z_euc(\$buffer);
〜処理〜
jcode::convert(\$buffer,"sjis");
print $buffer;

ってやってもうまくいかない。相手がeucで送ってくれば大丈夫だけど他の文字コードだと駄目。
半角カタカナの文字列+全角文字列(例「ササ表示」)ならちゃんと全角カタカナへ変換できるけど。

なんかPERLメモとかには先にeucに変換してあればおkだなんて載ってるけど、全然おkじゃない・・・
相手がどんな文字コードで送ってきても華麗に半角カナを全角カナに変えれちゃうおっとこまえいませんか?
0851nobodyさん04/05/19 02:37ID:???
jcode::convert(\$buffer,"euc", 'z');
085285004/05/19 03:07ID:???
>>851
それも駄目なのさ。

多分問題は$bufferの中に半角カナしかないときなんだよね。他の文字も混ざってればちゃんと機能するんだけどね。
まあそんなにこだわることでもないけどできればなぁ
0853nobodyさん04/05/19 03:33ID:???
>>852
http://www.shtml.jp/mojibake/hankaku.html
0854nobodyさん04/05/19 03:33ID:???
ファイルの排他制御ってやっぱりいりますか?ちょっとしたCGIでtxtファイルから読みこんだり
するんですけでど、どれくらいのレベルから排他制御って必要になってくるんですか?
0855nobodyさん04/05/19 03:56ID:???
>>854
【Perl】ファイルロック(排他処理)について語ろう
http://pc5.2ch.net/test/read.cgi/php/1024795138/
■ このスレッドは過去ログ倉庫に格納されています