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

【Perl】初心者コーナー Part16

■ このスレッドは過去ログ倉庫に格納されています
00013PIO ◆3pIoOHKo 02/09/15 15:11ID:???
いらっしゃーい、Perlの「コーディング」で困ってる人のスレです。

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

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

CGIだけど、なんか質問ある? Part 6 (その2)
http://pc.2ch.net/test/read.cgi/php/1025930486/
参考書籍の話題は【【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あたりを見よう。
0331nobodyさん02/09/24 02:19ID:???
もうひとつ
ファイルサイズを求める場合

$size1=(stat( $filename))[7];#statを用いて
$size2=(-s $filename)#ファイルテスト演算子

それぞれの違い・利点は何でしょう?
0332nobodyさん02/09/24 03:24ID:???
>>330
意外と(存在|使い方)を知らない人が多いから。

…じゃ、答にならない?
使える場面では気にせず使えばいいよ。

>>331
# stat の返す 13 要素から成るリストを作り、その 8 番目の要素を得る
$size1 = ( stat $filename )[7];

# ファイルサイズのみスカラー値として得る
$size2 = -s $filename;

perl のソース確認したワケじゃないけど、内部的には大差ない気が。
でもたった一つの要素の為にリスト吐かせるのはバカらしいと思う。
「8 番目」よりは「-s」の方が、パっと見で分かりやすいし。
0333nobodyさん02/09/24 04:11ID:???
>>330
作業を終えるまでオンメモリで行ける小規模なものなら+<は使うが
巨大なログをテンポラリに小出ししながら記録していく場合は
ログへの直書きは必要無いので普通に読みテンポラリに普通に書く。

331は速度的にはどっちも似たようなもんだね。
statは他の情報も取れるし一度使えば後で何度でも結果が
使いまわせるのでタイプが面倒じゃないならstatのが
良いかも。
033429402/09/24 08:49ID:???
質問です。 jcode.plとcgi-lib.plを使って自分で最初からしたら割と出来たような気がするのですが、また何か失敗してしまったようなのです。
$name = $in{'name'};
$a1 = $in{'a1'};
$a2 = $in{'a2'};
$a3 = $in{'a3'};
〜〜〜以下続く
$a15 = $in{'a15'};

$b1 = $a1 * 3;
$b2 = $a2 * 6;
$b3 = $a3 * 5;
$b4 = $a4 * 3;
$b5 = $a5 * 3;
$c = $b1 + $b2 + $b3 + $b4 + $b5;

$b6 = $a6 * 3;
〜〜(略)
$b10 = $a10 * 3;
$d = $b6 + $b7 + $b8 + $b9 + $b10;
(もう一度繰り返して15まで終わらせて、最後の式を$eにします)
$f = $c + $d + $e
として、
print "$name … $c : $d : $e : 「$f」\n";

と示すと、「1、2、3、4、5、1、2、………5」と入力したとすると
名前 … 57 :=@:=@: 「156」 と示されてしまうのです。
ログを見てみると、<>57<>45<>54<>156<>となっていて、同じ数字を入力して同じ計算をしても違う数字になっていて…。一番最初のはあっているのですが。計算の仕方を間違えてしまっているのでしょうか?
0335nobodyさん02/09/24 11:28ID:???
>>334
表示が乱れるのは、変数の直前に全角スペースがあるから。
033633402/09/24 12:18ID:???
>>335
ありがとうございます!急いで修正します。
…では、計算がおかしいのはどうしてでしょうか。
<>57<>57<>57<>171<>にならないとおかしい筈なのですが…。
0337nobodyさん02/09/24 13:59ID:aoR+W3Ks
テキストファイルにCSV形式で
**,***,***,***,**,***
**,***,***,***,**,***
**,***,***,***,**,***
とデータ(データは動的)が入っています。
これを配列data[][]
にいれるのどうしたらいいのでしょうか?
すいません教えてください。
だれかやさしい人お願いします

0338nobodyさん02/09/24 14:29ID:???
open(FILE,$file);
while(<>){
@date=split(/,/,$_);
}
0339訂正02/09/24 14:30ID:???
open(FILE,$file);
while(<FILE>){
@date=split(/,/,$_);
}
0340nobodyさん02/09/24 14:32ID:???
>>337
答えないのはやさしくない人ですか?
最悪な聞き方…
0341nobodyさん02/09/24 14:36ID:???
漏れはやさしくないから答だけ書く (w

my @data;
open F, $csv;
while (<F>)
{
 chomp;
 $data[$. - 1] = [ split /,/ ];
}
0342 ◆AOHU.zVE 02/09/24 14:40ID:???
「だれかやさしい人お願いします」は余計では^^;
(ここ数日変な質問のしかたする人が目立つ気がする)

open(CSV,$filename);
my@data=map{chomp;[split/,/]}<CSV>;
close(CSV);
0343nobodyさん02/09/24 14:59ID:4thlbHdp
つい最近、「すぐわかるPerl」でPerlを勉強し始めたものですが、

# findpattern
while (<STDIN>) {
if (/Jackson$/) {
print;
}
}

findpattern < people.txt
と、本のとおりにやって、Jacksonで終わるデータだけを出力したいのに、
何も出力せずに終わってしまいます。

いろいろ試してみましたが、文字列の末尾にマッチさせる$のときだけ
うまくいかないようです。
原因がわかりません。
どこがおかしいんでしょうか?
0344nobodyさん02/09/24 15:03ID:???
>>343
文字列の末尾にある改行を取り除いてない。
0345nobodyさん02/09/24 15:05ID:???
レンタルサーバに設置した掲示板やチャットの実行速度を測る方法って
どうすればいいんでしょうか。
ベンチマーク?で検索してもいまいちわからないもので..おながいします。
0346nobodyさん02/09/24 15:09ID:???
>>345
下の2行をスクリプトの2行目辺りに置いて
use Benchmark;
$start = new Benchmark;

下の3行をexitする直前にでも置いとけば?
$last = new Benchmark;
$bench = timediff($last,$start);
print timestr($bench);
0347nobodyさん02/09/24 15:11ID:4thlbHdp
>>344
while (<STDIN>) {
    chomp;
    if (/Jackson$/) {
        print;
    }
}

でしょうか?
ダメでした。
0348 ◆AOHU.zVE 02/09/24 15:15ID:???
>>334
入力のパーサーがおかしいのか、処理がおかしいのか、
データを埋め込みにしてみるなりして、どこが問題なのか
切り分けをしてみたらどうでしょう>

>>345
Benchmarkモジュールって標準ではいってなかったけ?
http://search.cpan.org/author/JHI/perl-5.8.0/lib/Benchmark.pm

0349nobodyさん02/09/24 15:20ID:???
>>347
ああ、STDINか。POSTデータ?

while(<STDIN>){print "[$_]";}
一度こんな感じでどんな形でデータが入って来てるか見てみ。
0350nobodyさん02/09/24 15:21ID:???
>>343
テキストファイルの行末に \r (キャリッジリターン)
が付いていたりしない?
0351nobodyさん02/09/24 15:37ID:???
>>346
1 wallclock secs ( 0.10 usr + 0.01 sys = 0.11 CPU)
てなカンジのものがでてきますた
哀しいかな読みとれません
意味を教えていただけると幸いでつ
0352nobodyさん02/09/24 15:43ID:4thlbHdp
>>349
こんなかんじでした。
[Micheal Jackson
][Janet Jackson
][Joe Jackson
][Joni Mitchel
][Jackson 5
][Micheal Johnson
][Jon Anderson
][Sade
]

末尾に何かがあるみたいですが、
chomp;を入れると、"]"しか表示されませんでした。

>>350
キャリッジリターンとは改行コードのことでしょうか?
取り除く方法はchompでは間違ってますか?
上の結果を見ると、違うっぽいですがわかりません。
0353b02/09/24 15:43ID:PxGGzvM0
http://muvc.net/jsweb/profiles.html
0354nobodyさん02/09/24 15:45ID:???
ちょっと質問が在るです。

%giko = ( "1" => "1gorula", "2" => "2dorula", "3" => "itteyosi");
%mona = ( "2" => "2cher");
この2つのハッシュから
%abone = ( "1" => "1gorula", "2" => "2cher", "3" => "itteyosi");

を作ろうとしたら
while (($key, $value) = each(%giko)) {
 if( defined($mona{"$key"}) ){
  $giko{"$key"} = $mona{"$key"};
 }
}

とかやるしかないんでしょうか?
これだと
%mona = ( "2" => "2cher", "4" => "sindeyosi");
のような形式に対応できないし、もっと簡潔な方法は無いかなと思うのですが・・・。
0355nobodyさん02/09/24 15:56ID:???
>>352
/Jackson\r$/ でマッチするなら、キャリッジリターン
が付いてる。Unix 上だよね?
0356nobodyさん02/09/24 16:03ID:???
>>355
ありがとうございます。
Cygwin 上でしたが、できました!
もし、よろしければ、\r について教えて下さい。
Unix 上では \n の変わりに \r を使うのでしょうか?
で、chomp は \n は取り除けても \r は無理ってことですか?
035735502/09/24 16:13ID:???
>>356
Unix 上なら普通 \r なんか使わない (\n しか使わない) ので、
問題は起きない。
DOS (Windows) 上だと、自動的に \r が入力から取り除かれるのかな?
Cygwin はよく分らない。

詳しい人の解説キボンヌ。
0358nobodyさん02/09/24 16:19ID:aoR+W3Ks
>>テキストファイルにCSV形式で
>>**,***,***,***,**,***
>>**,***,***,***,**,***
>>**,***,***,***,**,***
>>とデータ(データは動的)が入っています。
>>これを配列data[][]
>>にいれるのどうしたらいいのでしょうか
if(!open IN,'< Q1.dat'){
print "オープンエラー";
}
@list=<IN>;$row=0;
foreach $rec(@list){
@data=split("/,/",$rec);
for($j=0;$j<8;$j++){
$mondai[$i][$j]=$data[$j];
print "($i)(($j)$mondai[$i][$j]\n";
print "$mondai[$i][$j]\n";
}
$row++;
}
これじゃだめなのですか?
わかりません PERLの超初心者



0359nobodyさん02/09/24 16:22ID:???
>>354
%abone = (%giko, %mona);
0360nobodyさん02/09/24 16:24ID:???
>>355-357
ttp://www.din.or.jp/~ohzaki/perl.htm#CRLF_Unify
0361nobodyさん02/09/24 16:28ID:???
>>358
TMTOWTDI (There's More Than One Way To Do It) .
036235602/09/24 16:38ID:???
>>360
とても参考になりました。
ありがとうございます。
0363nobodyさん02/09/24 16:52ID:???
>>361
なんて読むんですか?
036435402/09/24 17:00ID:???
>>359
おお美しい。凄い簡単に済ませますね。

ありがとうございました。
0365nobodyさん02/09/24 17:02ID:???
>>363
ttp://www.jin.gr.jp/~nahi/d/990223-comp.html
0366nobodyさん02/09/24 22:39ID:???
undef $a;
undef $b;
undef $x;

これを1行にまとめられますか
0367nobodyさん02/09/24 22:52ID:???
$a = $b = $x = undef;
0368nobodyさん02/09/24 23:03ID:???
undef $a=$b=$c;じゃ駄目なんけ。
03696902/09/24 23:32ID:???
だめだ、CGI.pm使いこなせねぇ。
0370nobodyさん02/09/25 01:11ID:???
$titleを10文字で切り揃えたい、
最初から10文字無いものは後ろに空白で(10-title文字数)を入れて揃えるとして
どうしたらいいのでしょうか?

$title = substr($title,0,10);
if(length($title) < 10){$title = sprintf(???????,$title)};

多分こんな感じでしょうか?
御教授願います〜
0371nobodyさん02/09/25 01:19ID:???
$title= substr($title.' 'x10, 0, 10);
0372nobodyさん02/09/25 01:29ID:???
>>371
なるほど、、目から鱗です
0373nobodyさん02/09/25 02:18ID:???
$x = 100;

open ( IN, "$file" ) ;
foreach ( 1 .. $x ) {
$data = <IN>;
print "$data\n" ;
}
close (IN) ;

1行づつデータを読み込み表示しているのですが、
たとえばこれだとデータのもともとの行数が100行以下ですと
データが無い行は空白がprintされてしまいます。
データがある最後の行が終わったら読み込みをやめるには
どうしたらいいのでしょうか?
037437302/09/25 02:21ID:???
とりあえず
if ( $data ){ print "$data\n" ; }
にすればいいのか
0375nobodyさん02/09/25 02:22ID:???
open ( IN, "$file" ) ;
while(<IN>){
print;
}
close(IN);
0376nobodyさん02/09/25 02:27ID:???
open(IN, $file);
while (<IN>){
    print;
    last if $. == 100;
}
0377nobodyさん02/09/25 02:28ID:???
100行までしか読み込まなくていいのか。
0378nobodyさん02/09/25 02:29ID:???
というか、>373て存在しない行まで読み込んでそうだけど
大丈夫なのか?
0379nobodyさん02/09/25 02:32ID:???
というか、>>373はwhileを知らなくて
まぁ100回くらい繰り返しときゃ大丈夫だろって事だったり

もしそうなら一番スマートなのは

open(IN, "$file");
print while (<IN>);
close(IN);
0380nobodyさん02/09/25 02:36ID:???

jcode.pl の h2z_euc って使えます?
&jcode::h2z_ecu( \$str ); ってしてもスペースしか出ないんです。
&jcode::tr( \$str, '0-9A-Za-z', '0-9A-Za-z' );
は、ちゃんと置換してくれるんですけど。
038138002/09/25 02:38ID:???
>380
ecuはeucね。
ソースの中では間違ってない。
0382nobodyさん02/09/25 02:44ID:???
>>373
質問とは関係ないけどforeachは配列操作で回数指定ならforかと
どっちでも動くのを承知で使うにしてもやっぱforかと
0383nobodyさん02/09/25 02:47ID:???
>>379
print while (<IN>);
   ↓
print <IN>;
038437302/09/25 02:48ID:???
>>378
そうなんです。
>>375-379
よくわからないのは、openされた$fileから
何の変数に入れていることになるんですか?
print; はprint "$_"; ということですか?
0385nobodyさん02/09/25 02:52ID:???
>>384
>print; はprint "$_"; ということですか?
そう。
print; = print STDOUT "$_";
0386nobodyさん02/09/25 02:54ID:???
>>385
print;≠print STDOUT "$_";
print;=print STDOUT $_;
038737302/09/25 02:55ID:???
ということは、
while (<IN>);
は
while ($_ = <IN>);
ですか?
0388nobodyさん02/09/25 02:56ID:???
>>386
失敬
0389nobodyさん02/09/25 03:07ID:???
突如人が居なくなる罠。
0390nobodyさん02/09/25 03:13ID:???
いらっしゃーい、Perlの「コーディング」で困ってる人のスレです。

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

1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
0391nobodyさん02/09/25 04:52ID:???
if (($a eq "xxx") or ($a eq "yyy")) {
は
if ($a eq "xxx" or "yyy") {
と同じ意味?
0392nobodyさん02/09/25 05:10ID:???
>391
全然違う。
0393nobodyさん02/09/25 05:23ID:???
\⊂
というような記述があって、サブルーチンに飛んでいるのですが
これは⊂と全く同じ意味なのでしょうか
\の意味がわかりません
0394nobodyさん02/09/25 05:42ID:???
>>393
その行だけでいいから書いてみ?
0395nobodyさん02/09/25 07:41ID:???
>>393
&sub; は参照実体だから ⊂ になるよ
& を出したいときは、 &amp; って書こう
0396 ◆JAPH9PWA 02/09/25 08:05ID:???
my $bar = \&foo; と my $bar = \&foo(); は全然違うからなんとも。
前者はサブルーチンfooのリファレンスを取得して$barに代入。fooは呼ばない。
後者はサブルーチンfooを呼んでその戻り値のリファレンスを$barに代入。
0397 ◆AOHU.zVE 02/09/25 11:12ID:???
>>386
STDOUTじゃなくてselectされてるハンドルだし
print;≠print STDOUT "$_";
print;≒print STDOUT $_;
print;=print $_;
じゃない?
0398nobodyさん02/09/25 12:13ID:???
>>397
そう。この場合は特に select されてないから
print;=print $_;=print STDOUT $_;
0399nobodyさん02/09/26 01:48ID:???
>>391
「if (($a eq "xxx") or ($a eq "yyy"))」は
$aの内容が「xxx」または「yyy」の時だけ真(true)だが
「if ($a eq "xxx" or "yyy")」は
「yyy」の結果が必ず真(true)になるから常に真(true)になってしまう。


0400.....02/09/26 02:39ID:???
log1.dat
log2.dat
log3.dat
・
・
・
log100.dat
という名前のファイル群を次々開いてすべての行を一個の配列にさせることって可能でしょうか?
自分でサブルーチンに挑戦してみたけどうまくいかなかった…
0401nobodyさん02/09/26 02:41ID:???
while
0402nobodyさん02/09/26 05:46ID:???
>>400
for(0 .. 100){
$hoge++;
open(IN,"log$hoge.dat");
$numo. = <IN>;
close (IN);
}
print "$numo";
0403nobodyさん02/09/26 05:54ID:???
CGIWrap Error: Script Execution Failed
------------------------------------------------------------------------

CGIWrap encountered an error while attempting to execute this script:

Error Message: Exec format error
Error Number: 8
This message usually indicates there is a problem with the script itself. The owner of the script needs to check the #! line for correctness.

↑こんなエラーが出てしまって一向にBBS設置できないんですが
どーしてなんでしょうか?
0404nobodyさん02/09/26 06:41ID:???
>>403
CGIの話はこちらへ。
http://pc.2ch.net/test/read.cgi/php/1032704121/l50
0405nobody02/09/26 11:41ID:???

$hoge = 'mona giko morara';
$piyo = ( $hoge =~ /mona/ ); #1
@foo = ( $hoge =~ /mona/ ); #2
@bar = ( $hoge =~ /(mona)/ ); #3
print $piyo @foo @bar;
は、
1 1 mona
なんですが、#1,#2 はマッチした数、@barはマッチした文字列が入る
のですか?

あと、配列の要素数は @foo や $#foo で分かりますが、
ハッシュの要素数はどうやって調べますか?
0406nobodyさん02/09/26 12:00ID:???

requireされたライブラリの中のサブルーチンはrequireしたプログラムに関係なくても
全部ロードされますか?
0407nobodyさん02/09/26 12:09ID:???
>>405
#1 はスカラーコンテキストで評価しているので、マッチしたかどうかが
真偽値 (1 か "") で返される。

#2 はリストコンテキストで評価し、且つパターン中にカッコが含まれない
ので、マッチした場合は (1) というリストが返される。

#3 はリストコンテキストで評価し、且つパターン中にカッコが含まれる
ので、カッコにマッチした部分から成るリスト値 (この場合は ("mona"))
が返される。

…と、駱駝本に全てハッキリ書いてある。

ハッシュの要素数は keys をスカラーコンテキストで評価。
$foo = keys %foo;

>>406
Yes.
0408nobodyさん02/09/26 12:13ID:???
>>406
requireしたプログラムに関係ないものははじめからrequireするなよ
0409nobodyさん02/09/26 12:29ID:???

ライブラリには使わないサブルーチンも入っているものだと思うのですが、
極論すると動作を早くするには呼び出すサブルーチンだけのファイルを作って
requireするか、全部1つのファイルに書けってことになりますか?
0410nobodyさん02/09/26 12:35ID:???
>>409
動作を速くするためにそれをやっても大して改善しないと思う。
遅いならアルゴリズムを考え直したほうが。
0411nobodyさん02/09/26 12:40ID:???
>>407,408,410
サンクスでした。
0412nobodyさん02/09/26 17:06ID:???
質問です。
スカラー変数のデータをバイト単位で操作するにはどうすれば良いのでしょうか?
例えば$aのデータが16進で01 02 03 04 05 06 07 08 09の9バイトの場合に
0x03を0xddで置き換えたり、任意のバイトを削ったりということです。

substrを使って置き換えようとしたら、置き換え文字が10進数換算の文字列に
なってしまい(0xdd なら"221"で0x32 0x32 0x31へ)上手くいきませんでした。
0413nobodyさん02/09/26 19:07ID:???
>>412
0xdd は数値リテラル、文字列リテラルは \xdd、という話ではなく?
0414nobodyさん02/09/26 20:09ID:???
バイナリ操作ならpack unpackかなと思ったけど、
>>412は>>413で十分でつね。
041541202/09/26 20:36ID:???
>>413、414
アドバイスどうもです。
やりたいことはバイナリエディタで見た場合次のように
変更したいということです。
スカラー値をファイルに書きだしてバイナリエディタで見ています。

変更前16進表示:01 02 03 04 05 06 07 08 09
 ↓
変更後16進表示:01 02 dd 04 05 06 07 08 09

\xddでsubstrすると、文字通り次のようになってしまいました。
01 02 5C 78 64 64 04 05 06 07 08 09
0416nobodyさん02/09/26 21:02ID:pOKoAU+F
■フォームで指定されたファイルをアップロードするcgiを作ろうとしているのですが
■ファイル名またはパス名に日本語を使用していると上手くアップロードできません。
■半角アルファベットのみならアップロードできます。

--- 入力フォーム ここから------------
<FORM ACTION="./upload.cgi" method ="POST" ENCTYPE="multipart/form-data">
<INPUT TYPE="file" name="file_name" ><br>
<input type="submit" name="upload" value="アップロード">
</FORM>
--- 入力フォーム ここまで------------
041741602/09/26 21:03ID:pOKoAU+F
---- upload.cgi ここから ------
$common = getParameter();
$filename = $common->{param}->{file_name};

$file="";
while($bytesread = read($filename, $buffer, 2048)) {
$file .= $buffer;
}

open(OUT, "> ./$ファイル名");
print(OUT $file);
close(OUT);
exit;

sub getParameter() {
my $this;
$cgi = new CGI;

for my $name ($cgi->param) {

if (@{$cgi->param_fetch($name)} > 1) {
$this->{param}->{$name} = $cgi->param_fetch($name);
} else {
$this->{param}->{$name} = $cgi->param($name);
}

$this->{param}->{$name} = jcode->set(\$this->{param}->{$name}, "sjis")->euc;
}
return $this;
}
---- upload.cgi ここまで ------
041841602/09/26 21:04ID:pOKoAU+F
getParametet()の中の、sjis→euc変換をしているところ(この行の6行上)を
コメントにすると、日本語ファイルでも普通にアップロードできるので
変換するとファイル名が変わってしまうせいかと思い、代わりに
$filenameをsjis→eucに変換して試してみたのですが、何故かダメでした。
どうも、readした際にうまく取得できていないみたいなんですが。
理由のわかる方、同様の経験がある方、いらっしゃいましたら教えてください。

(長くてゴメンなさい)
0419nobodyさん02/09/26 21:09ID:???
>>415
sub hd { join ' ', map unpack('H2', $_), split //, $_[0] }

$bin = "\x01\x02\x03\x04\x05";
print hd($bin);
print "\n";
substr($bin, 2, 1) = "\xdd";
print hd($bin);

>>416
無用なトラブルを避けたいなら、パスやファイル名に
日本語 (というか多byte文字) を使わない方がいい。
サーバ/ブラウザ双方の環境によって全然違ってくる。
CGI.pm 使った事ないんで、その辺どの程度対応
してるのかは知らんが。
0420412=41502/09/26 21:25ID:???
>>419
どうも有り難うございました。
おかげさまで希望通りの動作結果が得られました。
0421nobodyさん02/09/26 21:26ID:???
>>415
君のソースをコピペきぼんぬ。

>>416
元の文字コードがsjisではないのではないかと言ってみるテスト。
uploadはとりあえず置いといて、ファイル名に入れた文字列と
そのときの$cgi->param('filename')を書いてみてくれんか。
0422412=41502/09/26 21:50ID:???
>>421
今いろいろ探っていたのですが、最初は
$replace_character = \xdd;
substr($buffer, $rep_position, 1) = $replace_character;

413-414を見たときにはシングルクオートで囲んで、
$replace_character = '\xdd';
substr($buffer, $rep_position, 1) = $replace_character;

420を見てダブルクオートで、やっと上手くいった次第です。
$replace_character = "\xdd";
ダブルクオートでも最初と同じ結果だろうと思って確かめていませんでした。
うーん、自分自身 ダブルクオートを使ったときの意味合いが良く解っとりません。
0423412=41502/09/26 21:56ID:???
訂正:
最初は0xddを使っとりました。
$replace_character = 0xdd;
0424nobodyさん02/09/26 22:33ID:???
>>418
sjis→euc変換をしているところをコメントにし、
$filename の変換は、

> while($bytesread = read($filename, $buffer, 2048)) {
> $file .= $buffer;
> }

よりも後にしてみるとどうよ?
0425メモがわりにカキコ02/09/26 23:20ID:???
>>417 で、$cgi->param('file_name') が返すのは、文字
列じゃないです。"" を overload してファイル名っぽく
見せているだけの、ひみつのパッケージ (Fh) に bless
されたリファレンスらしい。
0426nobodyさん02/09/27 01:44ID:HP3sTChT
use strict;
use vars qw($aaa,$bbb,$ccc);
これで'$aaa,$bbb,$ccc' is not a valid variable name under strict varsエラーがでます。
普通の変数名だと思うのですが何がいけないのでしょうか。
0427nobodyさん02/09/27 01:47ID:TZvB0TqN
http://money.2ch.net/test/read.cgi/stock/1031503451/l50
821 :  :02/09/27 01:44
ё[No.3121] お知らせ by 地蔵 2002年09月27日 (金) 01時02分57秒【この記事にレス】
比ヤングについての情報をお持ちの方、連絡ください
現在警察に相談中です
今後の処理を円滑に進めるために彼の連絡先等を教えていただけるとありがたいです
ご協力お願いします
http://obuchi.naikaku.com/angriffbbs/dempa.html
0428nobodyさん02/09/27 01:52ID:???
>>426
区切りがスペースでした
0429nobodyさん02/09/27 02:37ID:???
$a = "Win98" のとき、 "Win"を"Windows"に置換したものを$bにし、なおかつ$aは"Win98"のままにしたいです。

$a = "Win98";
$b = $a;
$b =~ s/Win/Windows/;

とすればうまくいったが、もっとシンプルな書き方はありますか?
0430nobodyさん02/09/27 02:44ID:???
if ($a eq 'Win98'){ $b= 'Windows98'; }
■ このスレッドは過去ログ倉庫に格納されています