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

【Perl】初心者コーナー Part13

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん02/05/30 13:06ID:R2kt1mTx
いらっしゃーい、Perlの「コーディング」で困ってる人のスレです。

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

1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。

CGIの質問は【CGIだけど、なんか質問ある? part 6】
http://pc.2ch.net/test/read.cgi/php/1019561283/
参考書籍の話題は【【Perl,CGI】参考書籍 第2版】
http://pc.2ch.net/test/read.cgi/php/988809842/
その他の雑多な話題は、【CGIに依存しないPerlの話題一般】
http://pc.2ch.net/test/read.cgi/php/991313362/
スクリプトの改造依頼は 【スクリプト改造工房 Part4】
http://pc.2ch.net/test/read.cgi/php/1012839651/

過去ログ、その他の役立ち情報は>>2-10あたりを見よう。
071070202/07/09 00:45ID:???
>>708
dukeとか言うのですよね。探してみます
>>709
すいません。
lpwで検索してもよくわかんないと思ったらlwpだったんですね・・
0711nobodyさん02/07/09 01:01ID:???
何の反応も無いじゃ解らん
print while(<SOCK>);

ってして、どんなレスポンス帰って来てるのか読んでみ
071270202/07/09 04:02ID:???
教えて下さった方、ヒント下さった方、ありがとうございました。
なんとかPOSTできました。
0713nobodyさん02/07/09 04:31ID:???
>>698違う

ARGV = ARGuments Variable

だろ。

Value = 値
Variable = 変数

少しは勉強しろ
0714nobodyさん02/07/09 04:50ID:???
>>713
..... argument vector
071512102/07/09 21:35ID:7t2WvFst
ココ最高でした。サンプルとかタダだし、ネタとしては使えると思います。
ちなみに僕はロリです、同士な人はいってください。
http://muke.up.to
0716nobodyさん02/07/09 22:15ID:jsAirJtA
@data=(1,2,3,11,34)の様な配列が、あった場合
0〜99の数字で(1,2,3,11,34)を含まない、配列を得るにはどうしたら良いのでしょうか?
例えば、(4、5、12)
0717nobodyさん02/07/09 22:19ID:lugOGira
GETかPOSTかメソッドを判別し、
& と = をsplitして文字コードを変換したんですが、

local(@query) = split(/&/, $query);
foreach (@query) {
tr/+/ /;
($key, $val) = split(/=/);
$key =~ s/%([A-Fa-f0-9][A-Fa-f0-9])/pack("c", hex($1))/ge;
$val =~ s/%([A-Fa-f0-9][A-Fa-f0-9])/pack("c", hex($1))/ge;
$val =~ s/\r\n/\n/g;
$in{$key} = $val;
}

送られてくるデータの引数が複数ある場合は、このほかに
何かつけ加えなければならない?

0718nobodyさん02/07/09 22:22ID:???
local($pair,$buffer);
if ($ENV{'REQUEST_METHOD'} eq "POST") {
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
} else {
$buffer = $ENV{'QUERY_STRING'};
}
local(@pairs) = split(/&/,$buffer);
foreach $pair (@pairs) {
local($name,$value) = split(/=/,$pair);
$FORM{$name} = $value;
}
0719nobodyさん02/07/09 22:25ID:???
=~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack("H2", $1 )/eg;
0720nobodyさん02/07/09 22:34ID:???
>>716答え教えるの面白くないからヒントね


@data = (1, 2, 3, 11, 34);

for ( 0..99 )
{
 foreach ( @data )
 {
  push
 }
}
0721nobodyさん02/07/09 22:38ID:???
>>716
4, 5, 12を除いてみた.

%exclude = (4 => 1, 5 => 1, 12 => 1);
@data = grep { !$exclude{$_} } 0 .. 99;
072272102/07/09 22:39ID:???
>>720
スマソ…
0723nobodyさん02/07/09 22:40ID:lugOGira
> 719
それってどういうこと?
よくわかんない…、スマソ

0724nobodyさん02/07/09 22:45ID:???
=~ s/%([A-Fa-f0-9][A-Fa-f0-9])/pack("c", hex($1))/ge;
より、
=~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack("H2", $1 )/eg;
の方が早いって言いたいんじゃない?
072571602/07/09 22:51ID:???
>>720
>>721
 こんなに、すぐレスくれるなんて思っていませんでした。
有り難う御座います。

これから、考えてみます。なにせ初心者な物でチンプンカンプンです。
0726ヽ(`Д´)ノ  ウワァァン02/07/09 23:29ID:gcNlx8b2
Win2000pro上でwwwサーバーを起動するところまではできたのに
CGIファイルをエクスプローラーで見ようとすると文字化け! ヽ(`Д´)ノ  ウワァァン
レンタルサーバー上にアップしたら文字化けしないのに! ヽ(`Д´)ノ  ウワァァン
0727nobodyさん02/07/09 23:45ID:???
>>726
print "Content-type: text/html; charset=Shift_JIS\n\n"; ヽ(´∀` )ノ
0728 02/07/10 00:48ID:Q4ccJnsM
パールって、
$a = 10;
だと
$a2 で 20 になるのですか?
0729 02/07/10 00:51ID:???
>>728
するどいな。だれにおそわった?
0730 .02/07/10 01:09ID:???
ソース見てたらなんとなくそう思ったのです。

本当なの?
$a2 って変数は使えないの?
0731nobodyさん02/07/10 01:13ID:fQbDc9qZ
パスワード入力みたいのでさ
入力した文字を****と表示して
さらにクッキーにも****と記録するにはどうすればいいの?

…別に使う訳じゃないんだけど興味。
0732nobodyさん02/07/10 01:13ID:???
$a + 2 足し算
$a - 2 引き算
$a * 2 掛け算
$a / 2 割り算
0733nobodyさん02/07/10 01:15ID:???
>>731
crypt関数で暗号化してから記録
0734nobodyさん02/07/10 01:15ID:fQbDc9qZ
>>733
さんきゅ。
後は調べる
0735nobodyさん02/07/10 06:44ID:???
おもったけどさ、削除パスを暗号化する前にいったん別ファイルに記録しとけばそいつがのホームページの掲示板の管理パスとかフリーメールにログインできたりするよな
0736由々しき問題でありぞっとしない02/07/10 07:10ID:???


http://www.google.com/search?num=100&hl=ja&ie=UTF-8&oe=utf-8&as_qdr=all&q=%E4%B8%AD%E5%AD%A6%E7%94%9F++%E5%9B%BD%E8%AA%9E%E5%8A%9B+%E4%BD%8E%E4%B8%8B+%E5%95%8F%E9%A1%8C&btnG=Google+%E6%A4%9C%E7%B4%A2&lr=
0737nobodyさん02/07/10 07:43ID:???
>>728
さんは凄腕になれますね、、
0738nobodyさん02/07/10 09:20ID:???
>735
全てのパスワードを同じ物にするようなマヌケな奴相手ならな。
まぁ、マヌケが多いのは確かだが。
0739nobodyさん02/07/10 09:41ID:???
>>738
ユーザは性アフォ説で接していかないと・・・。
0740nobodyさん02/07/10 10:21ID:9iF/zPMp
数字以外が入力されたらエラーメッセージを出したいのですが
うまくいきませんでした
どうすれば良いですか?

#入力されたのが数字かどうかチェック
if($P eq /[^0-9]/){print "数字を入力してください。";}
else{

if($P == /[^0-9]/){print "数字を入力してください。";}
else{

0741nobodyさん02/07/10 10:24ID:???
正規表現使うときは、

  =~ //

だろ。
074274002/07/10 14:18ID:lBfYsgML
>>714
できましたーーー!!
ありがとうございます
0743nobodyさん02/07/10 14:23ID:???
>>742
誰に御礼を言ってるんだか。
074474002/07/10 16:33ID:???
>>741さんでした(汗
ありがとうございます
0745nobodyさん02/07/10 16:58ID:???
(≧∇≦)
0746nobodyさん02/07/10 17:04ID:???
404とかのエラーコードを吐き出させるのってどうやるのですか?
074774602/07/10 17:14ID:???
あ、分かりました。
0748nobodyさん02/07/10 19:02ID:???
>>740
/[^0-9]/ → /^[0-9]+/
0749nobodyさん02/07/10 19:25ID:???
>748
それだと意味が変わるぞ。
>740の書き込みとif文の構成をよく見ろ。
0750nobodyさん02/07/10 19:28ID:???
>>748
それやるなら、
if ( $P !~ /^[0-9]+/ ) { }
か
unless ( $P =~ /^[0-9]+/ ) { }
じゃないと。
0751 ◆adminSE. 02/07/10 19:59ID:???
>>746

.htaacessでやるんじゃなかったっけ?

0752japh ◆J.5V8ta6 02/07/10 20:43ID:???
>>751
うわっ、何てカコイイトリップなんだ!
0753 ◆adminSE. 02/07/10 20:48ID:???
>>752

トリッパー使って3時間ほどadminで検索してたら偶然SE付きのがHITしますた
0754nobodyさん02/07/10 22:02ID:???
$fied[1]にはいってるすべての文字列【日本語含む】を@にしたいとき
$fied[1]=~tr/a-zA-Z_0-9\/.\n?-!"#$%&'()\=~|\{\`\+\*}_?><,\/\\\];@\[\\^-/@/cs;
↑このように書くしかないんですかね?
[a-zA-Z_0-9]以外の文字ぜんぶをあらわす特殊変数みたいなのありませんか。
0755nobodyさん02/07/10 22:03ID:01h+ntYo
[a-zA-Z_0-9]以外って、
[^0-9a-zA-z\_]じゃだめなの?
0756nobodyさん02/07/10 22:18ID:???
\W
0757nobodyさん02/07/10 23:13ID:???
>>750
!~ /^[0-9]+$/ のほうがさらに

0758nobodyさん02/07/10 23:23ID:???
=~ /\D/
じゃだめなの?
0759nobodyさん02/07/10 23:26ID:PCSWC5jP
CGIにデータを渡すときに、URLエンコードをしようとして

$arg =~ s/(\W)/'%'.unpack("H2", $1)/ego;

のunpack関数を使ってみたんですが、これだと、
最初の文字1文字しかエンコードされないですよね? 
例えば、
$arg=test.html?list=リスト&name=名前 
なんかだと、最初の「リ」だけじゃなく、
「リスト」と「名前」の該当する文字全部が
変換されるようにするには、どうしたらいいですか?
0760nobodyさん02/07/10 23:30ID:???
o が余計。
0761 ◆s/lF/2/o 02/07/11 00:24ID:???
一度だけコンパイルか
0762 02/07/11 00:28ID:???
>>759
おまいのegoがでてるよ。
0763nobodyさん02/07/11 00:48ID:???
>>762
ワラ・・・いかけた
0764nobodyさん02/07/11 01:10ID:???
(・w・)ブハッ! ワラテシマタ
0765nobodyさん02/07/11 02:32ID:???
(・∀・)ニヤニヤ
0766nobodyさん02/07/11 05:54ID:???
>>760, >>761
君たちは勘違いをしている。s/foo/bar/という構文の中で正規表現は
"foo"の部分だけなので例え"o"オプションをつけたからといって"bar"
のほうにはなんら意味がない。"o"は「正規表現」を一回だけコンパイル
するオプションであって置換内容をコンパイルするものではないという
事だす。

my $target = "AAAcccAAA";
for my $replacement ( qw/ bbb ddd / ) {
my $tmp = $target;
$tmp =~ s/ccc/$string/go;
print $tmp, "\n";
}
0767nobodyさん02/07/11 07:05ID:???
ヘッダとボディの区切りがもう出力されたかどうかどうやって調べるの?
0768nobodyさん02/07/11 07:13ID:???
↑こいつは一体何を言いたいのかさっぱり解らない

こっちから、また尋ねないと解らないような質問ヤメテくれ
0769nobodyさん02/07/11 07:21ID:???
>>768
説明がおかしかったですか。。例えば、

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

こうゆうのが出力された後ならCookieに書くとかできないじゃないですか
だから、ヘッダが出力されているかどうか調べたいのですが。。
こういたことはできますか?
0770nobodyさん02/07/11 07:43ID:???
ソース追ってるのか
>print "Content-type: text/html;\n\n";
こう言うのを探せば良いんじゃ無いの?
端末側で吐いてる事確認したいのなら
オミトロンとかで吐き出せる
0771nobodyさん02/07/11 09:21ID:???
>>769
ヘッダとボディの区切りは改行

print "Content-type: text/html;\n";
print "Set-Cookie: name=value;\n";

〜〜〜 ↑ヘッダ 〜〜〜

print "\n";

〜〜〜 ↓ボディ 〜〜〜

print 〜〜〜
0772nobodyさん02/07/11 10:38ID:???
>>754
$fied[1] = '@' x length($fied[1]);
0773nobodyさん02/07/11 14:06ID:???
>>770
ソース追ってるってことではないです。。
>>771
それは分かっています。
区切りの改行が出力されたらもうヘッダに書き込めなくなるじゃないですか
だから、区切りの改行が出力されたかどうかPerlで調べたいです

こういったことはできないのでしょうか。
0774nobodyさん02/07/11 14:19ID:???
>>773
判断する必要性がない。
0775nobodyさん02/07/11 14:20ID:???
>>774
無理ってことですか?
0776nobodyさん02/07/11 14:26ID:???
ヘッダとボディの区別は一応あるが、perl内部ではprintで吐き出された結果に過ぎない。
perlではそんなことをいちいち区別してない。
0777nobodyさん02/07/11 15:13ID:/kd92Z8G
>773 perlはHTTPDのエクステンションじゃ無い、ただ標準出力に
printの内容を送るだけ、そのあとはhttpdの仕事
判断するなら771の言うように改行を調べれば良い。
0778 ◆JAPH9PWA 02/07/11 16:29ID:???
>>出力を見張る

our $headers_end;
sub myprint
{
$headers_end = 1 if /^$/;
print @_;
}

とか、どう?。
printをオーバーライドしてもいいかも。


# >>753 トリップ変えました。ありがとう
0779 ◆R7.pelK2 02/07/11 18:33ID:???
test
0780 ◆adminSE. 02/07/11 18:34ID:???
>>778

どういたしますて
0781nobodyさん02/07/12 02:47ID:???
http://pc.2ch.net/test/read.cgi/php/1026141215/ から

> GDモジュール、どうしても使えない。。
>
> 1 :nobodyさん :02/07/09 00:13 ID:k+y90VS+
> サーバはWebARENA Suite、
> GD.pmを使おうと
> サーバにコンパイル済みのGD1.27をアップするがどうしても
> うまく動かない。
>
> perl: error in loading shared libraries: ./auto/GD/GD.so: undefined symbol: gdImageJpegPtr
>
> こんなエラーが出る。。
> どうすればいいのか。。
> WebARENAはPerlは5.0.503だから、その環境でコンパイルしたものを選んだ。
> なぜだ、、何が、、いったい。。
078278102/07/12 02:47ID:0osVMAyz
>>781 続き

例によって親切には説明するつもりはないのでそのつもりで。

1. とりあえず telnet.cgi をまともに動かして。
2. gd-1.8.4.tar.gz(libgdのソース)というふぁいるをGETして。
3. CPANよりGDモジュールのソースふぁいるをGETして。
4. 二つのファイルをtelnet.cgiと同じdirにUPして。
5. 二つのファイルをtarで解凍して。
6. インストール先dirをcgi-bin以下にlib,include,bin,man作成
7. gd-1.8.4/Makefileを編集(インストール場所を6で作成したdirに設定)
8. gd-1.8.4をmake; make install
9. GD-1.40/Makefile.PLの
  $DEFINES .= ' -DHAVE_XPM' if $XPM;
  をコメントにする。
10. GD-1.40のDIRで[ perl Makefile.PL LIB=/virtual/おまえのIP/cgi-bin/lib/perl5 INSTALLMAN3DIR=/virtual/おまえのIP/cgi-bin/man/man.3 ]実行
11. 10で出来たMakefileに8でインストールしたgdへのLIBパスとINCパスを追加して,X関連のリンク(だっけ?-lx11とか)を削除
12. make; make install
13. GD使うスクリプトの冒頭で #!/usr/local/bin/perl -I../lib/perl5/i386-linux とでもしてくれ。
15. あとはてめぇでがんばれ。
16. 意味がわからん?ってか,わからんならやらないでくれ。他に迷惑がかかるかもしれんし。

とりあえず,demo/gd_example.cgi は動いたぞ。
# /usr/libにlibgdがあるのにヘッダがない罠…。

いくらわからんからって単発スレは立てないでくれ。
あなたのスレ立てのために他のスレがdat落ちするじゃね〜かよぉ〜。
0783nobodyさん02/07/12 04:33ID:???
>>781
なんだか偉そうだな。
とりあえず、共有サーバでコンパイルするのはやめてほしい気分。
0784nobodyさん02/07/12 12:08ID:???
素朴な質問です。
if($name eq ''){print "hoge";}
と
print "hoge" if(!$name);
は処理的には同じに思うんですが
書き方以外に何か違う意味とかってあるんですか?
0785 ◆JAPH9PWA 02/07/12 12:45ID:???
>>784
それは処理的に同じではないよ。
$nameが単なる文字列なら結果としては同じことだけど、
もし$nameがオーバーロードされた文字列なら、全く違う結果になることはありえる。

まぁそんなことを聞きたいんじゃないと思うけど、
質問する場合はその辺を簡略化してよ。

で、
if(foo){ bar }
と
bar if foo;
は同じこと。ちなみに
foo and bar;
も同じ。
書き方意外に違う意味は「読みやすさ」だね。
自分が文脈に合う、読みやすい、と思う構文を使えばいいよ。
0786nobodyさん02/07/12 12:47ID:???
>784
$name = "0";
の時に変わるな。
0787 ◆JAPH9PWA 02/07/12 12:57ID:???
>>786
あう、そういえばそうだ。
単なる文字列だとしても別の意味をもつ文だね。
078878402/07/12 14:42ID:???
>>785
なるほど。勉強になりました。
ありがとうございました。
>>786
そういえばそうでした。
鋭いご回答ありがとうざました。
0789nobodyさん02/07/12 17:48ID:???
# 排他処理をしたいです。
# ローカル環境(WindowsMe+Apache+Cygwin付属のPerl)では成功するのですが、
# サーバで実行するときには、必ず失敗します。
# コーディング上の落ち度がありましたらご教授ください。
sub create_lock {
  my ($lockfile, $retry) = @_;
  while (!mkdir($lockfile, 0755)) {
    if (--$retry <= 0) {
      return undef;
    }
    sleep(1);
  }
  return 1;
}

sub remove_lock {
  my ($lockfile) = @_;
  rmdir($lockfile);
}

#上記関数の利用例
my $lock_handle = &create_lock($dir_lock, $lock_retry);
if (not $lock_handle) {
  &print_error($resource{writedatafailed});
}
#ここで処理する
&remove_lock($dir_lock);
079078902/07/12 17:48ID:uV0iCTit
あげわすれました。すみません。
0791nobodyさん02/07/12 17:53ID:???
排他処理は専門スレがあるよ。
ttp://pc.2ch.net/test/read.cgi/php/1024795138/
079278902/07/12 18:03ID:???
>>791さん、ありがとうございます。そっちにいきます。
0793nobodyさん02/07/12 19:41ID:mbAMx/DL
すいません、質問させてください。

タブ区切りの表から、一行ずつ取得し、grepで検索をかけ、
マッチしたものとマッチしなかったものの一覧を作成したいのですが

・条件に、検索キーワードは複数。(or形式)
・行末に、ヒットしたキーワードのみ挿入(複数のうち、該当した物だけ)

というものがあります。
その時

if(grep /$kw{$key}/,@line){#配列の中にキーワードが入っているなら
chomp @line;
if($check_flag == 0){
push(@result,@line);
push(@result,$kw{$key});#resultに追加
$check_flag = 1;#別のところでフラグに使っている
$flag = $line[0];#別のところでフラグに使っている
$no_count = 1;#一回目かそうで無いかのフラグ
push(@result,"\n");#行末にキーワードをつける
}elsif($check_flag == 1){#二回目からはキーワードのみを最後につける
push(@result,$kw{$key});
$no_count = 1;

とした時、配列の最後に$kw{$key}をpushで押し込むと、強制的に改行が入ってしまいます。
かといってchompをすると、全部改行が消えてしまい、全部のデータで一行扱いになってしまいます。
どうにか最後の改行のみ消す方法はありませんでしょうか?


取得した行+キーワードx個
取得した行+キーワードx個
・
・

というような表を、上記のスクリプトに手を加える程度で
作成することは可能でしょうか?

すいませんが、わかる方がいらっしゃいましたらご教授ください。
0794nobodyさん02/07/13 00:01ID:???
>>793
とりあえず突っ込んでおこう。↓は何ですか?
push(@result,"\n");#行末にキーワードをつける

あと$kw{$key} に改行が含まれる可能性は?
つーかそもそも if (grep /$kw{$key}/, @line) { 〜でやりたい事が出来るのかねぇ。疑問だよ。
0795nobodyさん02/07/13 01:13ID:???
Perlのスクリプトの試用版を配布するときに、ソースを見られなくするには、
どうすればよいでしょうか。

バイナリ化して、プロテクトをかけると聞いて調べたところ、
バイナリエディタというものを見つけましたが、
プロテクトの仕方がどうしても解かりません。

プロテクトするほどのソースは書けませんが、
どうかよろしくお願いします。
0796nobodyさん02/07/13 08:29ID:???
>>795
コンパイルしてしまうか、Perl2EXEなどを使うしかないと思われ。
0797nobodyさん02/07/13 22:35ID:xEQW3A4y
名前:年齢
A  :22
B  :31
C  :13

上記のような二次配列を連想配列をつかって作成したのですが、
これをソートするのはどのようにすればいいのでしょう・・?
知人の考えで、年齢をハッシュのキーにしてソートすると言う案があったのですが、
同じ年齢の場合には、上書きされてしまうのでその案は使えませんでした。
どのようにすればいいでしょう・・?
0798nobodyさん02/07/13 22:49ID:???
foreach(sort {$hash{$a} <=> $has{$b}} keys %hash){
print qq($_ : $hash{$_}\n);
}
0799nobodyさん02/07/13 22:49ID:???
タイプミススマソ。
適宜修正して。
0800nobodyさん02/07/13 23:28ID:???
795>>796さん、お答えありがとうございます。
今、ラクダ本で、コンパイルについて見ています。

しかし、use Protect ;とファイルにはあるのですが、
この Protectの部分について書かれていません。

use Protect ; は、どうやればできるのでしょうか。

0801 ◆JAPH9PWA 02/07/14 00:45ID:???
>>800
ラクダ本のどこだかわからないが、
それは「自分でプロテクトモジュールを作成してね」という意味だと思う。
とりあえずそれを実装するには、
・Perlに構文の理解
・CPANのFilterライブラリの使用法
・暗号化ライブラリの使用法
が最低限必要だと思うよ。
0802お酢カル ◆myMazZ7Y 02/07/14 01:07ID:???
>>801
説明できないオナニー野郎は(・∀・)ウセロ!!

まぁ>>800は馬鹿だからこれでいいかと
------------encode-------------------
while(<>){
$n= unpack "h*", "$_";
$n=~y/123456789fedcba/abcdef987654321/;
$e= pack "h*" , "$n";
print $e;
}
0803nobodyさん02/07/14 01:08ID:???
800>>801さん、ありがとうございます。

googleで、検索していたのですが、use MD5; というのは、
見つけました。
私には、まだ敷居が高そうです。

e-shoppyというSHOPスクリプトの試用版にバイナリエディタを
使うようにあったので、試用版って、こんな感じで配布しているんだと
思い、気になるので調べていました。

スクリプトを売る前に、試用版として、こんな感じで配布すれば、
ソースがプロテクトできるので、有用だなと興味を持ちました。

0804nobodyさん02/07/14 02:43ID:vNhQYRiQ
質問させてください。
今、perlでBBSを書いているのですが、
大体できて知り合いの所に入れてもらったりして
動作確認しました。

色んな環境の人のところで正しく動作したのですが、
(perlのバージョンが5.5or5.6,実行権限がnobody,オーナー等)
一人だけ動作がおかしい人がいるんです。

何がおかしいのか調べてみたら、
サブルーチンでseekさせてメインのルーチンに戻ってくると
seekさせたのが無かったことに?なってるんです。
サブルーチンでどんなにseekさせても
メインのルーチンで続行するとなぜか次の一行は空行、
その次の一行はファイルの一行目を読み込みます。

そのおかしくなる人の環境は
OS NAME = freebsd
PROCESS ID = 5854
PERL EXECUTABLE = /usr/local/bin/perl
PERL VERSION = 5.00503
ってな感じです。権限はオーナー権限です。
他の、perlのバージョンが5.5の人のところではちゃんと動いてます。
この人の環境になにか特別なものがあるとは思えないので、、、
ただ、他の人はみんなlinuxなんですけどそれって関係ありますか?

コーディングの問題かとも思っていろいろ試行錯誤してるのですけど
もう分からないんです・・・
0805nobodyさん02/07/14 02:51ID:CbCEC3kH
>>804
ソースもどこかにアップしてみてよ。
0806nobodyさん02/07/14 03:15ID:???
804です。
UPしてみました。なにぶん、perlでの初めてまともな作成物なので
見るのも辛いところもあると思いますが、よろしくお願いします。
ttp://naha.cool.ne.jp/b3b3b/styx.zip
0807 02/07/14 03:23ID:???
アーカイブじゃなくtxtだとすぐ見られるのだが・・・
0808nobodyさん02/07/14 03:25ID:???
ライブラリに分割してあって txt だときっついです。。。
もうしわけないです;;
0809nobodyさん02/07/14 03:42ID:CbCEC3kH
1つおもいあったったのが、たとえばサブルーチン delete_art などにおいて、
sysread関数と他の方法による読み込みの混用が存在しています。

これは、わたしの手元のラクダ本に書いてあることですが、これらの混用は、
あなたがウィザード級の腕前の持ち主でないかぎり推奨できないとあります。
■ このスレッドは過去ログ倉庫に格納されています