【Perl】初心者コーナー Part16
■ このスレッドは過去ログ倉庫に格納されています
00013PIO ◆3pIoOHKo
02/09/15 15:11ID:???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あたりを見よう。
0584578 , 582
02/10/02 13:40ID:6nY1Hcfpお、忘れてた。サンクス。
0585nobodyさん
02/10/02 15:15ID:JLnBuPbJ1:RS-232Cに繋がったモデムに、ATコマンドを送ってリザルトを受け取りたい
2:googleを「perl RS-232C」で調べてみた
3:そうした事例がでて来ない
perlを使って、RS-232C通信は出来ないでしょうか?
簡単なATコマンドを送って、結果を見るだけなのですが、minicomで手打ち
は面倒くさいので、自動化したいのです。
でも、googleで事例が出ないので、もしかして、perlではRS-232C制御は
出来ないのでしょうか?
もし可能なら、組み込む必要のあるpmや、スクリプト例など教えてください。
環境は、RedHat Linux 7.3
perlのバージョンは、5.6.1です。
0586nobodyさん
02/10/02 15:27ID:???ATコマンド打つにはpppdがいるだろ
Perlだけじゃむりだ
0587585
02/10/02 15:39ID:JLnBuPbJpppdというのと組み合わせるんですか?
今は、minicom -s から手打ちして、結果を見ています。
出来たら、自動でAT打って、返ってきた結果でif分岐して、おかしいときだけ
メールとかで知らせるという風にしたいんですよね。
まず、pppdというのをgoogleしに行って来ます。
何か過不足あったら、教えてください。
0589578 , 582
02/10/02 17:30ID:6nY1Hcfp\$scalar とか \%hash とか、リファレンス参照ですよね
時々見る *scalar とかは一体何者なんでしょうか
おそらくリファレンスと同じようなもんだと思うんですが
いまいち挙動がつかめません。
0590585
02/10/02 17:37ID:JLnBuPbJあ、ほんとですね。/usr/sbin/pppdでありました。
さて、これをどうperlから呼んで、任意のATコマンドを出力させるのか、
調べてみなくてわ。
ただ、googleであたったところ、pppdってどうもインターンット接続のソフト
みたいなんですけど?
0591nobodyさん
02/10/02 17:50ID:???ATコマンドも打てるんじゃ!ぼけぇ!
Linuxさわったのはじめてでperlも分らんようなら帰れ!
どうせ厨だろ。/dev とかわからんだろ
おとなしくじーーーーーーーーーーーっくりしらべてから来い!
0593585
02/10/02 18:09ID:JLnBuPbJはは、いや、Linux/perl、1年くらい使ってるんですよ(笑)
ただねぇ、ルータが最初からあって、接続はLANでって環境でインターネット
に入ったもんで、ATコマンドって、つい最近まで、使ったことも見たことも無
かったのよん。
#Windowsも「ダイヤルアップなんたら」というの、使ったことまったくない。
だから困ってるのさ。
0594nobodyさん
02/10/02 18:31ID:???おめでたい香具師だな。
0595nobodyさん
02/10/02 18:34ID:???だから初心者なんだろ(w
0596nobodyさん
02/10/02 20:11ID:???> print $client_socket "GET $file HTTP/1.0\n\n";
この行の GET を POST にすることを気付かなかったのなら、
まず Socket と HTTP について勉強しる。
>>582
$_ = sprintf '%02d', $_ for ($mon,$mday,$hour,$min,$sec);
こう書いておけば、変数が増えても
一箇所書き換えるだけで済む。
>>585
「Linux perl シリアル通信」辺りでググってみてはどうか?
>>589
* は型グロブ。黒豹本 (O'REILLY「実用 Perl プログラミング」)
の三章に、実際の使用例と共に詳しく解説されている。
0597nobodyさん
02/10/02 20:56ID:???Sheet1.csv 〜 Sheet10.csvまで10枚のファイルがあります。
ファイルのそれぞれの1〜9行目、1列目〜4列目
を個々に加算してresult_11.cvs ファイルの1〜9行目、1列目〜4列目
に和を挿入したいのですが、awkとbc とpaste を使っていますが、
perlなら一発で出来そうです。何かいいアイディアはありませぬか?
% cat sum.array.awk
BEGIN {
OFS=FS=","
}
{
for (i=1;i<=4;i++)
sum[FNR,i]+=$i
}
END {
for (r=1;r<=9;r++)
print sum[r,1]"\n"sum[r,2]"\n"sum[r,3]"\n"sum[r,4]
}
0598597
02/10/02 20:57ID:???% awk -f sum.array.awk Sheet2.csv|sed -e 's/$/+/'>ac2.dat
% paste ac1.dat ac2.dat
55+ 59+
77+ 81+
36+ 40+
66+ 70+
111+ 115+
3+ 7+
39+ 43+
77+ 81+
(略)
0599597
02/10/02 21:03ID:???perlのwhile(<FIFO>){ほにゃらら;}とかで処理できないかなー。
0600nobodyさん
02/10/02 22:29ID:???データは
4,5,44124,1324\n
45,2345,44124,1324\n
45,2345,44124,1324\n
こんな感じで
324424124\n
424148124\n
423213131\n
(適当)
↑みたいににしたいってことですか?
0601nobodyさん
02/10/02 22:55ID:77XrC79cそこで質問なんですが無料のサーバー?ソフトみたいなのは無いんでしょうか?
0602597
02/10/02 22:57ID:???1,33,55,77,99,121,143,165
2,36,66,111,222,223,147,225
3,39,77,145,345,346,151,348
4,42,88,179,468,469,155,471
5,45,99,213,591,592,159,594
6,48,110,247,714,715,163,717
みたいなファイルが10枚あって、
ココの行列ごとに和をとって11番目のファイルに出力したい、ということです。
串刺し、といったイメージでファイルを横断して加算を取るということです。
この部分だけ、excelに頼っているのですが、
他の計算が全てUnix上なので、この計算もperlなどで行いたいなと。
0603nobodyさん
02/10/02 23:09ID:???=commentout
CGIとかを動くかどうか試したいんですがまだHPスペースの承諾メールがきてなく確認できません
そこで質問なんですが無料のサーバー?ソフトみたいなのは無いんでしょうか?
=cut
次。
0604nobodyさん
02/10/03 00:07ID:???0605nobodyさん
02/10/03 00:15ID:???>$_ = sprintf '%02d', $_ for ($mon,$mday,$hour,$min,$sec);
( ´,_ゝ`) プッ ネタかよ
0606578 , 582
02/10/03 01:38ID:uOd1wswNどんな機会に使うのでしょうか??
いまいちリファレンスより速度的に早いとか
何か利点があるのでしょうか??
0607nobodyさん
02/10/03 02:17ID:???そのくらいのデータ量だったら、値を全て読み込んでから
処理しちゃっても大丈夫/楽じゃないですかね。
use constant FIRSTFILENUM => 1;
use constant LASTFILENUM => 10;
my @data; #$data[ファイル名の数字部分]->[列][行]
for (my $fileno = FIRSTFILENUM; $fileno <= LASTFILENUM ; $fileno++){
open (FILE, "Sheet$fileno\.csv") or die;
for(my $n = 0; <FILE>; $n++){
chomp;
$data[$fileno]->[$n] = [split (/,/)]
};
close (FILE) or die;
}
こんな感じで、データを一気に読み込んで、あとは適当に
ループを回して足すなり引くなりするというのはどうでしょ?
my $sum; #各ファイルの列ごとの和
for (my $col = 0;$col < 6; $col++){
for (my $fileno = 1; $fileno <= 10; $fileno++){
for(my $row = 0;$row < 8; $row++){
$sum += $data[$fileno]->[$col][$row];
}
}
print $col + 1 . ":$sum\n";
}
たとえばこんな感じで。
0608602
02/10/03 02:52ID:l9L39VMS>そのくらいのデータ量だったら、値を全て読み込んでから
よく判らないのですが、2000行400列ぐらいに集めてしまった巨大ファイルも
処理する場合、
512Mのメモリー積んでれば(OSはLinux)大丈夫でしょうか?
今までは、excelに食わせるために一旦小さいファイルに分けるなどしてましたが。
一気にできるとなるとどれくらいのファイルまでならOKなのでしょうか?
今、手元の一番大きいので、7.3Mだから大丈夫なのかな?
0609602
02/10/03 03:05ID:l9L39VMS50枚も逝かないと思うけど……。けど、こういう場合、単純計算で512Mのうち
どれくらい残しておけばいいのかな。
基本的に表立ってはあまり使わない。
普通は、ファイルハンドルを使うときと、エイリアスを作成する時くらいじゃないかな。
0611nobodyさん
02/10/03 10:16ID:HWMUanwi本 or サイト どっちでも可
0612nobodyさん
02/10/03 10:42ID:???どっちでもいいんでしょうか。時と場合で使い分けるんでしょうか。
0613nobodyさん
02/10/03 10:54ID:xHS0Gcl+シフトジスの場合に文字化けエラーに気をつければ
どっちでもいい
0614nobodyさん
02/10/03 11:16ID:Co/qm2Ti配列名の中に変数をエラーってしまいます。
#!/usr/bin/perl
$num =0;
@ary = qw(a b c d e f);
foreach (@ary) {
push (@new_ary_$num,$_);
++$num;
}
この場合、
aを@new_ary_0
bを@new_ary_1
・
・
fを@new_ary_5
に入れたいのですが、push (@new_ary_$num,$_);で
引っ掛かってしまいます。
@new_ary_${num}など、いろいろ試してみたのですが
どうにもだめでした・・。
配列名の中に変数は使えないのでしょうか?
宜しくお願いします。
0615nobodyさん
02/10/03 11:18ID:???配列名の中に変数をエラーってしまいます。
↓
配列名の中に変数を使うとエラーってしまいます。
でした。すんません
0616nobodyさん
02/10/03 11:18ID:???<form action="aaa.cgi" method="post"><input type="text" name="text" value="aiueo"></form>
-----------------
# aaa.cgi
$post_name = "text";
$post_value = $FORM{text};
print "Location: http://xxx.yyy.zzz/hoge.cgi\n\n";
---------------
こうやってhoge.cgiへ自ら用意したpostデータ(name=text value=あらかじめ用意した値)
を送り付けたいのですが可能ですか?
getの時は引数を付ければいいだけですが・・・。
0617578 , 582
02/10/03 11:21ID:v6OPXcCdご回答ありがとうございます、胸のつっかえが取れました。
0618nobodyさん
02/10/03 12:46ID:???ところで UNIX板のシェル、オークスレにまったく同じ質問があるように見えるのは気のせいですか?
いや,マルチだとは思わないんだけどね,それぞれのやり方が知りたいのかもしれないし
0619581
02/10/03 13:38ID:???こうしたらおかしくないですか?
postのデータはどうやって送ってるんですか?
0620nobodyさん
02/10/03 13:48ID:???push (@{"new_ary_$num"},$_);
>>616
いったん全部hiddenにしたform出力してjavascriptで勝手にsubmitするとかダメ?
0621nobodyさん
02/10/03 14:44ID:V3RvumoZ0622nobodyさん
02/10/03 14:53ID:???これってなにしてるんですか?ただの代入?
0623nobodyさん
02/10/03 15:59ID:l7EfCAGl@_にデータがあればその先頭のデータを代入。なければ'あ'を代入。
0624n
02/10/03 16:08ID:KXoffugq0625nobodyさん
02/10/03 16:54ID:???0626607
02/10/03 17:36ID:???あー、ファイルでかいですかー。
じゃあ一行ずつ読み込んで処理してテンポラリに書き出すのは?
たとえば、Sheet1.csvからSheet10.csvの同位置の要素を串刺しに
足していくスクリプトだとこんな感じでどうでしょ。
0627607
02/10/03 17:38ID:???use File::Copy;
copy ('Sheet1.csv', 'Result.csv');
for (my $fileno = 2; $fileno <= 10 ; $fileno++){
open (DATA, "Sheet$fileno\.csv") or die;
open (SUM, '<Result.csv' ) or die;
open (TEMP, '>TEMP') or die;
while(<DATA>){
my @data = split(/,/);
my @sum = split(/,/, <SUM>);
my @result = map {$data[$_] + $sum[$_]} 0..$#data;
print TEMP join (',', @result) . "\n";
}
close (TEMP) or die;
close (SUM) or die;
close (DATA) or die;
unlink ('Result.csv');
rename ('TEMP', 'Result.csv');
}
うーん。もっとカコイイ方法ないかなあ。
あ、それと、607の書き込みの下のコード、間違ってました。ゴメン
0628ふとした疑問
02/10/03 18:28ID:v6OPXcCd&subname();
の形ですよね?
で、普段は&は省略して書いてるんですが
&が無いと動かないサブルーチンとかも在ってチンプンカンプンです
そもそも&はどんな場合に必須となるのでしょうか?
0629nobodyさん
02/10/03 18:54ID:bjQ5Yi4RRegisterClassExに渡すwndClassEx構造体の中で
ウィンドウプロシージャの指定はどうすればいいんでしょう?
Perlでユーザ関数(サブルーチン)を作ってそのリファレンスを渡せばいいのでしょうか?
0630nobodyさん
02/10/03 19:11ID:???○ hogehoge()
× \hogehoge
× \hogehoge()
○ \&hogehoge
0632nobodyさん
02/10/03 19:54ID:FetdaLGe省略記述って言うんだけど、実際の所省略しないほうが手っ取り早くていいぞ。
省略が通るかどうかは、他に前方宣言されているとかそうゆうのも関係ある。
ちゃんと正式に書けばどんな時も困った事にならない。
0633628
02/10/03 20:57ID:v6OPXcCdありがとうございました
自分には省略せずに書くのが見やすいし迷わなくていいかも。
0634nobodyさん
02/10/03 21:10ID:???0635nobodyさん
02/10/03 21:31ID:Wit0Sk8Mprint TXT "\n";
としただけなのに
TXTファイルの改行コードがCRCFになっています。なぜ?
0638nobodyさん
02/10/03 21:50ID:???0639nobodyさん
02/10/03 21:51ID:???0640nobodyさん
02/10/03 21:52ID:???0642nobodyさん
02/10/03 21:54ID:???0644nobodyさん
02/10/03 21:58ID:???0645nobodyさん
02/10/03 21:58ID:???LF(らいん・ふぃーど)
0647nobodyさん
02/10/03 22:34ID:G7kyuSYC本 or サイト どっちでも可
0648nobodyさん
02/10/03 22:44ID:???0651nobodyさん
02/10/04 00:00ID:???感じの言語だね。
0652nobodyさん
02/10/04 00:09ID:???0653nobodyさん
02/10/04 01:36ID:???for($i = 0; $i < 200000; $i++) {
$array1[$i] = 1;
}
#2
$#array2 = 199999;
for($i = 0; $i < 200000; $i++) {
$array2[$i] = 1;
}
先に領域の確保をしておく#2の方が速いと思ったら#1の方が速くなった。なぜ?
http://www.need4xxx.net/asian/hamedori/data/099/dir/index.html
おんなじのコピーしてつくろうとしたけど不可能
0656nobodyさん
02/10/04 08:04ID:iu1Ymefg心ある人は、rubyスレにお礼参りしてください。
0658nobodyさん
02/10/04 09:31ID:???CPANモジュールの全てを網羅するのは不可能かと…。
100や200というやわな数じゃないからねぇ。
有用なモジュールやperldocの日本語化は
http://perldoc.jpで行われてるけど、まだ発足したばかりのプロジェクトだし。
0661649
02/10/04 09:57ID:???>>659
http://member.nifty.ne.jp/hippo2000/perltips/CPAN.htm に
マニュアルはあるけど、これじゃダメ?
0662nobodyさん
02/10/04 10:03ID:???じゃ、引用してやるYo
------
Ruby >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Perl
ぷぷぷ
反論したいか?反論したいんだろ?ぷぷぷ大爆笑
お前らには無理。
Perlみたいな糞言語を使う奴らは人間以下
------
これがrubyキティ以外の何だってんだ、ドアフォ
あ、これはrubyキティに言ったんで気にしないで。
それが単にRuby厨を騙っているだけなんじゃないか、と皆思ってるわけで。
仮に本当にRuby厨だとしても、もはやそれは言語を超えた厨房でしょ。
無視以外の対策は無いと思うんだよね。
0665nobodyさん
02/10/04 10:36ID:???ところで奴はPerlの新スレはム板には立てるな、PerlはWebprogに
引きこもってろ、というわけ。rubyのスレはム板にいくつかあるよ
ね。Perl==CGIじゃないんで、ム板にも1つくらいPerlスレがあっ
てもいいと思うんだが、奴はスレ立てた奴のIPアドレスは分かっ
てしまうと言って脅してるんで誰も立てんでしょう。「無視」と
冷静に構えてますが、ますますPerl==CGI、ruby>>Perlという
認識が広まっていいわけ?
0666nobodyさん
02/10/04 11:34ID:???http://www.cpan.jp/
>>665
荒らされると、流れが追いかけにくくなるし
こっちで話てる分には文句言わないみたいだし
別に無理してム板に立てる必要もないかナっと
てしまうと言って脅してるんで誰も立てんでしょう。「無視」と
奴はスレ立てた奴のIPアドレスは分かっ
てしまうと言って脅してるんで誰も立てんでしょう。「無視」と
奴はスレ立てた奴のIPアドレスは分かっ
てしまうと言って脅してるんで誰も立てんでしょう。「無視」と
奴はスレ立てた奴のIPアドレスは分かっ
てしまうと言って脅してるんで誰も立てんでしょう。「無視」と
奴はスレ立てた奴のIPアドレスは分かっ
てしまうと言って脅してるんで誰も立てんでしょう。「無視」と
奴はスレ立てた奴のIPアドレスは分かっ
てしまうと言って脅してるんで誰も立てんでしょう。「無視」と
0669nobodyさん
02/10/04 12:30ID:???いらっしゃーい、Perlの「コーディング」で困ってる人のスレです。
1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
0670659
02/10/04 12:42ID:???‥‥‥‥‥‥‥‥漏れ、ここのサイト行ったことあるわ。
なんで見つけられなかったんだろう?
恥ずかしいので、回線切って、首吊ってきます。
0671nobodyさん
02/10/04 13:38ID:???>perl知ってる人間がIPアドレスがばれるなんて事ビビるかよ…
perlを知っているかどうかとは関係ないでしょ。rubyキティが言うように
新スレを立てた人間のIPアドレスが記録されていて一般ユーザも参照可能
かどうかということでしょ。
0672nobodyさん
02/10/04 13:45ID:???1)Apacheなどのhttpdサーバは、httpdサーバにアクセスしたユーザのIPアド
レスと閲覧したページをaccess.logに記録します。(Perlなどアクセス解析ス
クリプトの多くは、このファイルを読んでグラフとか表に整形します。)した
がって、プロバイダの管理者は、特別な場合にこのaccess.logから特定の時間
に特定のページにアクセスしたユーザ情報を知らせることができます。2chで
も、個人名を挙げた誹謗中傷の書きコに対して時々見られます。今回の場合は、
この可能性は、ないと思われますが、問題は、rubyキティがプロバイダ関係、
あるいは2ch管理者関係の人間であった場合です。
2)新スレ立てたヤシ(1だね)に自鯖のHPを見るように誘って、IPアドレス
を抜き取る。
3)perlでは、packet解析も容易にできる。
0673nobodyさん
02/10/04 13:51ID:Ck18zQey#コメント行だけで数キロバイト・・・
やっぱファイルサイズが大きければ大きいだけ速度に影響しますか?
というか50KB程度なら体感的に別に関係ない気もしますが
どうなんでしょう
0674nobodyさん
02/10/04 13:57ID:???だからIP抜かれたから何…
企業からとかならともかく
プロバイダのIPじゃせいぜい
住んでる地域くらいしかわからないじゃん…
荒らしたわけじゃないからアカウント消されるわけでもなし
0676nobodyさん
02/10/04 14:00ID:???コメントの量くらいで体感差はないと思うけど、
気になるならコメントは別のファイルに書いとけば?
コメント自体あんま要らないと思うけど。
0677nobodyさん
02/10/04 14:18ID:???while($linevalue = <TXT>){
}
aaa.txtを一気に全部読み込むことってできますか?
while($linevalue = <TXT>){
$line_all .= $linevalue;
}
で、連結させていくしかないですか?
0678nobodyさん
02/10/04 14:25ID:???perl がスクリプトを解析する部分での影響は殆ど無い。
但しディスク I/O が遅ければ、当然その影響は受ける。
>>677
undef $/;
0679nobodyさん
02/10/04 14:41ID:zNdIxOGz$kakutyousi=~/\.([a-zA-Z]$)/;でいい
0680nobodyさん
02/10/04 14:42ID:???open (TXT, "aaa.txt") || &error("開けません。");
@linevalues = <TXT>;
こういうのをPerlお大尽といいます。
■ このスレッドは過去ログ倉庫に格納されています