Perlコーディング初心者質問スレ Part 38
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
04/10/07 23:23:08ID:kiEzDCJF【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。
過去ログやお勧めサイトは >>2-10
0729nobodyさん
04/11/14 00:51:05ID:???my ($err);
my $mailer = '/usr/sbin/sendmail';
my $mlfr= 'xxx@xxx';
my $mlto= 'xxx@infoseek.jp';
my $mlsb= 'xxx';
my $mlmsg = "あああああ";
my $mlhd= "Reply-to: $mlfr" . "\n" . "MIME-Version: 1.0" . "\n" . "Content-Type: text/plain; charset=iso-2022-jp" . "\n" . "Content-Transfer-Encoding: 7bit" . "\n" . "From: $mlfr" . "\n" . "To: $mlto" . "\n" . "Subject: $mlsb" . "\n\n";
if (open( MAIL, "| $mailer -t -f'$mlfr'" ))
{
print MAIL $mlhd;
print MAIL $mlmsg;
print MAIL "\n";
close( MAIL );
} else {
$err = 1;
}
関係ないけど、こんなのどう?
0731nobodyさん
04/11/14 09:59:57ID:???Reply-to: $mlfr
MIME-Version: 1.0
Content-Type: text/plain; charset=iso-2022-jp
Content-Transfer-Encoding: 7bit
From: $mlfr
To: $mlto
Subject: $mlsb
EOF
0732nobodyさん
04/11/14 10:57:46ID:???0733nobodyさん
04/11/14 13:07:57ID:???そのままprintしてもいいよね
print MAIL <<_EOF;
Reply-to: $mlfr
MIME-Version: 1.0
Content-Type: text/plain; charset=iso-2022-jp
Content-Transfer-Encoding: 7bit
From: $mlfr
To: $mlto
Subject: $mlsb
_EOF
0734nobodyさん
04/11/14 19:41:44ID:???sendmailがよきにはからってくれるが、明示的に
print MAIL <<_EOF;
Reply-to: $mlfr\r
MIME-Version: 1.0\r
Content-Type: text/plain; charset=iso-2022-jp\r
Content-Transfer-Encoding: 7bit\r
From: $mlfr\r
To: $mlto\r
Subject: $mlsb\r
\r
_EOF
とする方が望ましい。
0735nobodyさん
04/11/14 20:17:27ID:???0736nobodyさん
04/11/14 20:17:29ID:???Reply-to: $mlfr
...
EOF
0737nobodyさん
04/11/15 00:54:44ID:Pp2G7AAwperlのスクリプト中で、あるURLのhtmlファイルを取得して、そのファイルの
データを処理したいのですが、その取得方法がわかりません。
ぜひご教授お願いします。
0739nobodyさん
04/11/15 01:40:44ID:???本気で言ってるのか?
>>737
http://pc5.2ch.net/test/read.cgi/php/1097158988/351-
0740nobodyさん
04/11/15 02:56:46ID:???@data = (
'あ,1,A',
'い,2,B',
'う,3,C',
'え,4,D',
'お,5,E',
'か,6,F',
);
という例があったとして、これを数字でソートし、
さらに4にもっとも近い順からソートしたいのですが、これが上手くいきません。
方法があれば何卒教えて頂きたく思います。どうか宜しくお願いします。
0741nobodyさん
04/11/15 04:31:28ID:???for(@data){
$data{$_}=abs(4 - (split(/,/,$_))[1]);
}
foreach (sort {$data{$a} <=> $data{$b}} keys %data){
print $_, "\n";
}
0742nobodyさん
04/11/15 07:00:56ID:???sort{ $a->[0] <=> $b->[0] }
map{ [abs((split(/,/))[1]-4), $_] } @data;
--
# 数字は8桁以内
my @new = map{ substr($_, 8) }
sort{ $a cmp $b }
map{ pack('A8A*', abs((split(/,/))[1]-4), $_) } @data;
--
# >>741さんと同じハッシュ使用
my %temp = map{ $_ => abs((split(/,/))[1]-4) } @data;
my @new = sort{ $temp{$a} <=> $temp{$b} } keys %temp;
0743nobodyさん
04/11/15 08:47:06ID:???map{ sprintf('%08d%s', abs((split(/,/))[1]-4), $_) } @data;
だね…。
0744nobodyさん
04/11/15 10:38:06ID:???>740さんの例題をすこし弄って、
@data = (
'赤,あ,1,A,6',
'青,い,2,B,5',
'赤,う,3,C,4',
'青,え,4,D,3',
'赤,お,5,E,2',
'青,か,6,F,1',
);
これを>740さんの質問通り三つ目で四に最も近い数字でソートします。
この後が僕の質問なんですが、
これを更に一番目でソートし、最後に五番目でソート…
というのは出来ますでしょうか?
具体的にはこんな感じでしょうか?
@data = (
'青,え,4,D,3',
'青,い,2,B,5',
'青,か,6,F,1',
'赤,う,3,C,4',
'赤,お,5,E,2',
'赤,あ,1,A,6',
);
一応、>741さんや>742さんの解答を参考に頑張ってみたんですが、
やっぱり上手くいきませんでした。
複雑だし無理かもしれませんがどうかお願いします。
0745nobodyさん
04/11/15 11:14:04ID:???できなければ駱駝本を買って sort 関数のところを読め
0746nobodyさん
04/11/15 12:09:37ID:44z8JY7I気付いたら、以下のようなメッセージが極々々まれに出てるのに気付きました。
Character in "C" format wrapped at [フルパス]/jcode.pl line 554.
行554には $s2e{$code} = pack('CC', $c1, $c2); とかかれているのですが、
恥ずかしながらなぜ警告(?)メッセージが出てるか自分でわかりません。
どなたか教えて頂けないでしょうか?
(ネットで探してみましたがちょっとよく分からくて)
0747nobodyさん
04/11/15 13:27:24ID:???0748nobodyさん
04/11/15 14:04:03ID:???とりあえず診断メッセージがわからないときはperldiag(1)を
見るのがいいと思うのだが。
Character in "C" format wrapped in pack
(W pack) You said
pack("C", $x)
where $x is either less than 0 or more than 255; the "C" format is
only for encoding native operating system characters (ASCII,
EBCDIC, and so on) and not for Unicode characters, so Perl behaved
as if you meant
pack("C", $x & 255)
If you actually want to pack Unicode codepoints, use the "U" format
instead.
0749nobodyさん
04/11/15 15:03:24ID:44z8JY7Iありがとうございます。英語力は全く無いのですが、
0〜255の範囲以外のが来てるのでエラーになっているのですね。色々試しています。
0750737
04/11/15 21:26:40ID:YvLIGcESありがとうございます。LWPを使ってうまくいきそうです
(何をやってるのか自分でまだ理解できてなかったりしますが・・・)
0751nobodyさん
04/11/15 22:45:40ID:v6KPj5Kw1回のプロセスで何度も検索する場合、あらかじめハッシュを作った方が速くなるのでしょうか?
いまいちハッシュの性能というのが分からないのですが、検索キーをかえるたびに
1行目から値を探していくのと、ハッシュにキーを入れて値を得るのと、
ハッシュのほうが速そうな気がするんですが、やっぱり速いでしょうか?
0752nobodyさん
04/11/15 23:40:04ID:???case by caseとしか言いようが・・・
行という言葉を簡単に使ってるけども、
実際には行の切り出しという処理が入るわけだし、
それなら固定長でデータを扱う方が早いわけだし、
ハッシュというか位置インデックスを作れば固定長の呪縛が無くなるし、
というか何度も検索する必要があるのか?という根本的な疑問も残るし、
長くなったがオレの言いたいことはこれだね!
なんで試してみない?
0753nobodyさん
04/11/15 23:47:01ID:???実際二つ作ってみるのが早いですよね。めんどくさがって申し訳ないです。
組み合わせの検索をする感じなんですが、大体2500〜40000くらいの組み合わせから
条件に合うものをピックアップする感じで、やはりとにかく試すことにします。
ありがとうございました。
0754nobodyさん
04/11/15 23:51:24ID:???よくわからんが、もし言いたいことが
while($hairetsu[$index] ne $hikaku){ $index++; }
と
$index = $hash{$hikaku}
を比べたいのなら、後者の方が圧倒的に速い
0757751
04/11/16 00:18:23ID:???ああ読み違えました!のかな?
今必要としているのは、キーと値の両方で、キーはただの行数とかじゃなくって
ユニークなデータなので、while($hairetsu[$index] ne $hikaku){ $index++;}
の方だと無理なのかもしれません。ごめんなさいよく分かりません。
0758nobodyさん
04/11/16 00:23:16ID:???1000行ベタ検索した方が速い。30000行でもそうだったかな。
0759nobodyさん
04/11/16 00:35:13ID:???そりゃDBのが速いが、pnamazuが介在してるからか、
たいして変わらなかった。QDBMあたりでやったらどう
かな。こんどやってみるか。
0760nobodyさん
04/11/16 03:12:24ID:???何回も検索するならソートしてから二分探索するかハッシュ作った方が全然速い。
要素が1000個でも。
0761nobodyさん
04/11/16 06:55:09ID:???1回の検索ではリニアサーチの方が速いんなら、何回やっても
リニアサーチの方が速いだろうが(プッ
1*n < 1.2*n、ほれ回数が多くなるほど差は広がる。
0763nobodyさん
04/11/16 08:47:34ID:???mod_perlなんかならハッシュだな。つまり、何回も検索する際、
perlを起動しなおさない。作ったハッシュをメモリに保存しとく。
あと、namazuとかsufaryとかindexファイルを別に作っておくとか
すれば、>>760でOK.
0764nobodyさん
04/11/16 11:13:02ID:???リニアサーチよりハッシュの方が速いということ?
0766nobodyさん
04/11/16 16:53:03ID:???require 'ファイル';
って最初の方に読んじゃってますか?
そのファイルが必要な処理がある直前(複数箇所)で
requireしてるんだけど問題ありますかね?
複数箇所と行っても一回の起動では一箇所しか呼び出しません。
0767nobodyさん
04/11/16 17:34:24ID:???遅レス御免。
これで処理しても示されてる結果にはならないが、
条件が複数のソートはこんな感じでいいと思う。
$sort_routine = sub {
my @La = split /,/, $a; my @Lb = split /,/, $b;
abs(4 - $La[2]) <=> abs(4 - $Lb[2]) || $La[0] cmp $Lb[0] || $La[4] <=> $Lb[4];
};
@ahoo = sort $sort_routine @data;
0768762
04/11/17 06:08:04ID:???質問内容は
・3の要素でソート
・1の要素で安定なソート
・5の要素で安定なソート
で、その順番を逆転させれば一回でできる訳ですね。
5の要素でソート、同じ値なら1の要素でソート、同じ値なら3の要素でソート。
use sort "stable";
my @new = map{ $_->[3] }
sort{ $a->[0] <=> $b->[0] or $a->[1] cmp $b->[1] or $a->[2] <=> $b->[2] }
# sort {$a->[1] cmp $b->[1] or $a->[2] <=> $b->[2] } # 3と1の要素だけでソート(例示と同じ結果を得る)
map{ my @v = split(/,/); [$v[4], $v[0], abs($v[2]-4), $_]; } @data;
>>745
つっこんでごめん。
0769767
04/11/17 07:36:26ID:???せっかくその場で考えたのに、空しいぜ。
よく読んで頭冷やしてくるか。
>>766
条件などで読むファイルを変えたいときは、
途中に書いたことはあったけどね・・・。
何でもないときは、先頭に書くのが基本でしょ。
そのプログラムが、どのファイルに依存しているかを明示しておけば、
後々運用管理するのに楽になるし。
0770nobodyさん
04/11/17 17:56:42ID:???0771nobodyさん
04/11/17 18:32:44ID:tQLRR4kH何も出力できません。
open (OUT,"> test/$test");
while(<$fh>){ #$fhはファイルハンドルが入っている
prin OUT $_;
}
close(OUT);
という処理を繰り返し実行すると2つ目のファイルは
なにも表示されません。
1回実行したあとファイルハンドル($fh)を表示してみましたが、
確かに指し示しているファイルは1回目と変わりません。
ファイルハンドルを書き出した後ファイルハンドルって
どうなってしまうのでしょうか?
0773771
04/11/17 19:13:30ID:tQLRR4kHforでも同じでした。
0774771
04/11/17 19:20:12ID:tQLRR4kHできました。書き出す前にtellでファイルハンドルの場所を
取って来て、書いた後seekで戻す事によって解決しました。
お騒がせしました。
0775はなわlo
04/11/17 19:25:22ID:???ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l
ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l
ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l
ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l
ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l
ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l
ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l
ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l
ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l
ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l
ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l
ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l
ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l
ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l ftp://l.l
0776nobodyさん
04/11/17 19:38:43ID:GNPvE3vb何かよいモジュールなどありませんでしょうか。
0777nobodyさん
04/11/17 19:39:43ID:???0779質問です
04/11/18 01:55:30ID:U6GG0aJq$size = -s "$file";
print "Content-Disposition: attachment; filename=\"$file\"\n";
print "Content-Length: $size\n";
print "Content-Type: application/octet-stream\n\n";
open(DAT, "$file");
while(<DAT>){
print;
}
close(DAT);
のようなコードで file.xxx をダウンロードしたいのですが、
ダウンロード画面はちゃんとでてダウンロードできるのですが、
ファイルが壊れて保存されます。これはなんででしょうか。
OSはwindowsでapacheで動かしてます。。
0780nobodyさん
04/11/18 02:59:31ID:???DATもSTDOUTもbinmode()せにゃあかんのでは?
0781779です。
04/11/18 04:26:15ID:???ありがとうございます。
感謝感謝。
0782nobodyさん
04/11/18 11:15:20ID:???↑のような文字列から数値部分(123)だけを取り出す場合、どう書くのがスマートでしょうか?
TO:[数値] という書式は固定です。
0783nobodyさん
04/11/18 11:17:02ID:???$no = $1;
0785nobodyさん
04/11/18 13:06:46ID:If69CbzI1 while s/<font([\s\w\=\#\"\'\+\-]+)>/<font$1>/i;
1 while s/<\/font>/<\/font>/i;
これは"が"に変換されてるデータ($_)から"を"に戻し、
fontタグを有効にする処理ですが、これでは$_内の全ての"が"に戻ってしまいます。
しかし、"に戻す必要があるのはfontタグの"のみです。
最初にいきなりs/"/"/g;などとやらず、fontタグの"だけを"に戻す方法すにはどの様にすれば良いでしょうか?
0786nobodyさん
04/11/18 13:10:17ID:???s/";/"/g;
1 while s/<font([\s\w\=\#\"\'\+\-]+)>/<font$1>/i;
1 while s/<\/font>/<\/font>/i;
これは"が";に変換されてるデータ($_)から";を"に戻し、
fontタグを有効にする処理ですが、これでは$_内の全ての";が"に戻ってしまいます。
しかし、"に戻す必要があるのはfontタグの";のみです。
最初にいきなりs/";/"/g;などとやらず、fontタグの";だけを"に戻す方法すにはどの様にすれば良いでしょうか?
0787nobodyさん
04/11/18 13:13:42ID:???s/&quot;/"/g;
1 while s/<font([\s\w\=\#\"\'\+\-]+)>/<font$1>/i;
1 while s/<\/font>/<\/font>/i;
これは"が&quot;に変換されてるデータ($_)から&quot;を"に戻し、
fontタグを有効にする処理ですが、これでは$_内の全ての&quot;が"に戻ってしまいます。
しかし、"に戻す必要があるのはfontタグの&quot;のみです。
最初にいきなりs/&quot;/"/g;などとやらず、fontタグの&quot;だけを"に戻す方法すにはどの様にすれば良いでしょうか?
0788nobodyさん
04/11/18 13:14:13ID:???0789nobodyさん
04/11/18 13:32:05ID:???0790nobodyさん
04/11/18 13:38:18ID:???説明不足ですいません。
BBSのログで、保存する時点ではタグに関わる記号&;<>は全てデコードしてあります。
で、読み出して表示する際に許可したタグのみ有効にする仕組みになってて、fontタグのみ有効にしてます。
0792789
04/11/18 13:54:44ID:???0793nobodyさん
04/11/18 14:08:47ID:???こうかなあ。
0795nobodyさん
04/11/18 16:41:16ID:???って事にしました。
0796nobodyさん
04/11/18 17:13:54ID:???0797nobodyさん
04/11/18 17:54:10ID:???&hiroyuki; → &hiroyuki;
みたいに実態参照が定義されていない場合のみ & をエスケープしようと思ったら、
定義されているやつを全部リストとかで持ってないとダメなんだろうか。
使えるモジュールとかありますか?
0798nobodyさん
04/11/18 18:15:24ID:???HTML::Entities
decode_entitiesに食わせて変化するか(定義されていれば変化する)
または、
%entity2charハッシュのキーにあれば定義されている
といったあたりでいけると思う。
0800nobodyさん
04/11/18 19:09:44ID:???ありがとう。うまくいってるようです。
でも借りてるサーバーには HTML:: が無いんだけど、まあコピーして置いとけば動くだろう。
0801nobodyさん
04/11/18 19:59:02ID:???すいません。<>も&lt;&gtに変換された状態なのを説明してませんでした。
<>のままの状態だと>>793さんので出来ました。
0802nobodyさん
04/11/18 21:45:59ID:???s!<(/?font\b.*?)>! (my $s=$1) =~ s/"/\x22/g; "<$s>" !egis;
ではどう?
<font **>と</font>の両方を < > も含めて戻せると思うんだけど。
0803nobodyさん
04/11/18 21:57:39ID:???ばっちり復元出来ました!すげー!
FONTタグで囲まれたデータ部分の&lt;&gt;&quot;はそのままで、
タグの記述部分だけちゃんと変換されてます。
ありがとうございました!
0804nobodyさん
04/11/19 08:46:55ID:???telnetモジュールを使用して、リモートコンピュータに接続してから、
・screen起動
・外部プログラム起動
・CTRL-A d で[detached]
という操作をperlで実行したいのです。
色々サイトを回って調べて、telnet接続まではできたのですが、
上記手順の「CTRL-A d で[detached]」で行き詰っております。
CTRL-Aという操作をperlのtelnetモジュールで行うには、
どういう記述をすればよいのでしょうか?
0805804
04/11/19 10:44:06ID:???何でscreenを使用したいかというと、
webブラウザ上で、サーバのプログラムを起動させ、常駐させたいからです。
通常のデーモン(inetdなど)であれば、わざわざscreenなど使わなくても
telnetモジュールで接続させ、コマンドを実行させればよいのですが
今回起動させたいプログラムは、バックグラウンドで動作してくれないため、
常にコンソールを開いておく必要があるのです。
なので、仮想的に常駐させるためにscreenを選んだというわけです。
当方、UNIX系OSに触れて1週間足らずなので、
「screenなんて使わなくても この方法でいいだろバカ」
という意見なども助かります。
0806nobodyさん
04/11/19 10:59:05ID:n9OG7mgXswfに表示するということをやっております。
画像は正しくロードできるのですが、ファイルサイズが取得できず、
ローディング表示ができなくて困っています。
詳しく説明します。
まずswf内で
_root.[object].loadMovie("hoge.cgi", "POST");
を使い、ロードの要求をします。
するとhoge.cgiでimageMagickというモジュールを使い、
縦横サイズを変更します。ここでPOST送信されている
stageWとstageHとranはswfから送られてくる変数です。
0807806
04/11/19 10:59:50ID:n9OG7mgX---
use Image::Magick;
if($ENV{'REQUEST_METHOD'} eq 'POST') {
read(STDIN, $query, $ENV{'CONTENT_LENGTH'});
}else {
$query = $ENV{'QUERY_STRING'};
}
foreach $pair (split(/&/, $query)){
my ($key, $value)=split(/=/, $pair);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$form{$key}=$value;
}
$i = Image::Magick->new;
$img="img/cover$form{'ran'}.jpg";
$i->Read($img);
($width, $height)= $i->Get('width', 'height');
if($width/$height>=$form{'stageW'} / $form{'stageH'}){
$newwidth =$width*$form{'stageH'}/$height;
$i = $i->Transform(geometry=>$newwidth);
}else{
$newwidth= $form{'stageW'};
$i = $i->Transform(geometry=>$newwidth);
}
print "Content-type: image/jpeg\n\n";
binmode(STDOUT);
$i->Write("jpeg:-");
undef $i;
exit;
---
0808806
04/11/19 11:00:52ID:n9OG7mgX--
そして戻ってくる画像データをswf内にて
getBytesLoaded()やgetBytesTotal()で調べています。
するとロードされたバイト数はしっかり取得できているのに
対し、総ファイルサイズはロード中はずっと0になっていて、
ロードが完了すると総ファイルサイズが表示されます。
OS FreeBSD
perl 5.8.x
Flash ver.6.0
どうか、よろしくお願いいたします。
0809nobodyさん
04/11/19 12:30:01ID:???0810nobodyさん
04/11/19 13:49:59ID:???read STDIN,$alldata,$ENV{'CONTENT_LENGTH'};
を実行したら$alldataの中身は変わってませんでした。
原因はどこですか?
0811810
04/11/19 14:33:50ID:???0812nobodyさん
04/11/19 15:43:47ID:???真横に表示させることはできないのでしょうか?
ttp://spiral.lib.net/cgi/mc/
0813nobodyさん
04/11/19 15:47:41ID:???0816nobodyさん
04/11/19 19:45:10ID:???($tmp) = "hoge";
とか。
これは何の意味があるんでしょう?
0817nobodyさん
04/11/19 20:16:23ID:???その例ではまったく無意味かと
($foo, $bar) = @_;
とかやると
$foo = $_[0];
$bar = $_[1];
の効果が得られる。
多分書いた人の癖じゃないか?
0818nobodyさん
04/11/19 20:26:47ID:???レスありがとうございます。
某レスQのCGIにしばしば出現てて悩みました。()の中はスカラ変数が一つだけなんです。
実際は右辺はサブルーチンだったりするんですが、配列は戻ってこない。
($ret) = &getMessage("$filename$EXT");#戻り値は0か1
とか。
悩むのやめときます。
0819nobodyさん
04/11/19 22:09:11ID:???0820804
04/11/19 22:47:11ID:???レスありがとうございます。
/dev/nullについて調べて、実際に動かしてみました。
要するに出力をポイっとやるわけですよね?
末尾の2>&1は何でしょうか?色んなサイト調べてみましたが、
nullの動作に触れてるところばかりHITしたらしく。。orz
nohupもためさせてもらいました。
動作的にはscreenと似ているので、助かります。
しかし、nohupすると、私のUNKサバではかなり重くなってしまいます。。
出力を書き込んでいるからでしょうか?
あと、nohupや &での開始だと、telnetモジュールを切断させた後
ジョブをフォアグラウンドに復帰させる方法が見当つきません。。
我侭ばかりですいません。よろしくお願いします。
0821804
04/11/19 22:50:33ID:???割り込みキー入力(今回の場合はCTRL+A)を
perlからコンピュータに送信する方法はあるのでしょうか?
板汚し申し訳ないorz
0822nobodyさん
04/11/19 23:02:34ID:???そうやっておくと、もし2つ以上の返り値があった場合に
最初の値だけ取って、残りを捨てるということができる。
安全策ってわけだな。
あまり誉められたものではないと思うけど。
0824nobodyさん
04/11/19 23:09:06ID:???0825823
04/11/19 23:20:43ID:???おっと2>&1についてもついでに答えるんだった・・・
「標準エラー出力を標準出力に纏める」という意味。
nohupが重くなる理由はmanに書いてあったぞ
> スケジューリング優先度は 5 増やされるので、
> 実行の割り当て時間はやや小さくなる。
そんなに大きく変わるかは知らないが
0827nobodyさん
04/11/20 04:13:04ID:???ある, 改行コードがCR+LFのテキストファイルがアップロードされた際, 改行コードをLFに
変換し, そのファイルを保存するcgiを書きたいのですが, 以下のように書いてみましたがうまくいきません.
LFに変換されずCR+LFのまま保存されてしまいます.
#!/usr/bin/perl
use CGI;
$query = new CGI;
Content-type: text/html\n\n
$fn = $query->param('filename');
$type = $query->uploadInfo($fn)->{'Content-Type'};
if($type =~ /^text\//){
open(FILE,">test.txt");
while (<$fn>) {
$temp = $_;
$temp =~ s/\r\n/\n/;
chomp($temp);
print FILE "$temp\n";
}
}
どのようにしたらいいでしょうか?宜しくお願いします.
■ このスレッドは過去ログ倉庫に格納されています