> @ノヴァさん じゃなくて、やすさんでした。 ところで、make world 中に 家の FreeBSD を ぐっちゃんぐっちゃんに壊してしまったので、もし週末 までに復旧できれば IRC に参加させていただきます。 # が、なかなかうまくいかず…。 |
教えていただきありがとうございました。 さっそく、色々やってみます。 |
はじめまして、もりやと申します 実は今、シェルスクリプト(でいいんですかね?DOSでいうBATファイルの ことです)でやろうとしていることがあるのですが、やり方が今ひとつ分 かりません。ファイルの複製を作るのですが、複製されるファイルの名前 には、別のテキストファイルのレコードの先頭の4バイトが付加され、そ のテキストファイルは何レコードあるか分かりません。レコードの数だけ 複製を作ります。awkなど使えばよさそうに思って本を読んだりいろいろ試 しましたが、うまくいきません。教えていただければ幸いです。 OSは、HP-UXでバージョンの見方がわからないのですが、ここ2、3年のも のではあると思います。 |
はじめまして。 MXレコードを調べたいと思っているんですが、モジュールが使える状況にありません。Net::DNSなどのモジュールを使わずにMXレコードを引く方法があればヒントだけでも教えていただけるとうれしいです。 よろしくお願いします。 |
Hmm... I have recovery FreeBSD. But canna server doesn't accept a connection. Something is wrong. sign.... @moriya I can't understand what you want to say. Please show examples of the file and the record. To know OS version, type `uname -a'. @Q > get MX record without Net::DNS There is a sample script to get MX with nslookup. http://X68000.startshop.co.jp/~68user/cgi-bin/view-script.cgi/expn.cgi Another way, connect DNS server (port 53/udp), talk DNS protocol. # I hate multipost. You have to reply in 2ch, don't you? |
説明不足で申し訳ありませんでした。 org.datというファイルがあるとします あと、tencd.txtというテキストファイルがあり、その中身は 000420000101 002320001010 034320001020 とします この場合、 org.datをコピーしてorg004.dat、org0023.dat、org0343.dat という3つの複製ファイルを作成したいのです。 tencd.txtは何レコードあるかは不定です。 因みにHP-UXのバージョンはB.10.20でした。 よろしくお願いします |
What do you mean? hahaha... |
sh なら exec < tencd.txt while read line do set -- $line num=`echo $line | sed 's/^\(....\).*/\1/'` cp org.dat org$num.dat done csh なら foreach line (`cat tencd.txt`) set num=`echo $line | cut -c-4` cp org.dat org$num.dat end てな感じでしょうか。 # シェルスクリプトと言っても、シェルにはいろいろ種類が # あるので、sh か csh かそれ以外かを明記してください。 先頭4バイト取得には、sed でも cut でも awk でも お好きな方法をどうぞ。 もちろん全体を awk スクリプトで書くこともできます。 でもまぁ、perl を覚えた方がよいとは思いますね。 |
すいません、Perl一般の話ですいませんが、 サブルーチン リファレンスを使うとコールバック関数が作れる、 という場合の、コールバック関数ってどんなもんなんでしょうか? どんなときにどう使うと便利なんでしょうか? リファレンスの勉強をしていて、そこだけピンと来る例題のある章が なくて困っています。 御無理のない範囲で教えてくださいー。 |
Perl/Tk で何かアクションがあったときの動作を記述する関数 sub pushed { print "ボタンが押されました\n"; } $top->Button( -text => 'Push me', -command => \&pushed, )->pack(-side => 'left'); とか、シグナルハンドラ、たとえば SIGALRM による タイムアウトが起こったときの動作を記述する関数 sub signal_handler { print "1秒待ちましたが、入力がありませんでした\n"; alarm(1); } $SIG{ALRM}=\&signal_handler; alarm(1); $buf = <STDIN>; などをコールバック関数といいます。 後者は、より実践的に書けば http://X68000.startshop.co.jp/~68user/cgi-bin/wwwboard.cgi?log=889 てな感じです。 なお、関数へのリファレンスを使わず、$SIG{ALRM}=sub {...} などと 無名関数を使ってコールバックを設定することもできます。 |
ありがとうございます。このふたつの例はわかりました。 他に、ユーザープログラムが呼び出すサブルーチンを 「コールバック」と呼ぶことはないんでしょうか。 「コールバック」という言葉じたいの定義が本によってあやふやな気がして、、。 たびたび申し訳ありません、、。 |
> 「コールバック」という言葉じたいの > 定義が本によってあやふやな気がして、、。 その本の記述例を見せていただけますか? |
すいません、、。 −−−−−−−−−−−−−−− 「Perl 5 パワフルテクニック大全集」(インプレス) 、、コード参照は、おもに、コールバック関数(後で呼び出してもらう関数)を指定するときに使う。、、 #! /usr/local/bin/perl # コールバック関数の定義 sub callback { my $mesg = shift; print "$mesg\n"; } # 関数への参照を作成 my $coderef = \&callback; # 異なるパラメータで関数を呼び出す &$coderef("Hi Mike!"); &$coderef("How are you?"); −−−−−−−−−−−−−−−−−−−− 「Perl 5 マスターブック」(翔泳社) サブルーチン関数の一般的な用途としてはコールバック関数があります。コールバック関数では、サブルーチンの配列をテーブル内に作成し、Perl プログラムから1つまたは複数呼び出します。、、 sub central_greeting { print "Hello!"; } sub eastern_greeting { print "Yo!"; } sub western_greeting { print "Howdy!"; } %greetings = ( "Central" => central_greeting, "Eastern" => eastern_greeting, "Western" => western_greeting, ) (中略、どこの土地のひとかを $where に入れて) $hash_ref = \%greetings; $sub_ref = $hash_ref=>($where); &$sub_ref(); −−−−−−−−−−−−−−−−−−−− 「実用Perlプログラミング」(オライリー) コールバック関数とは、リファレンスとしてあちこちに渡され必要に応じて呼び出されるようなサブルーチンです。そうしたものが構文的に用意されているわけではなく、使い方としての名称に過ぎません。呼び出す(リファレンスを使用する)側のコードでは、そのサブルーチンが何をするものかを意識する必要はありません。本節では、ディスパッチテーブル、シグナルハンドラ、描画関数の3つの例を通して、コールバック関数の使い方を説明します。 −−−−−−−−−−−−−−−−−−−− うーん、用例にしても呼び出しのレベルがいたずらに増えてるだけで、いまいち便利になった実感が。 |
こんにちは。 @ふくしさん ぼくの少ない経験でしか言えませんが、 今までぼくは「コールバック関数」(もしくはハンドラ)の名称は、 「何らかのアクションを要求した際に呼び出される関数」 に対して使ってきました。 #ボタン押下のイベントに対して呼び出されるモノであったり #シグナルイベントに対して呼び出されるモノであったり ふくしさんが例に出されている、それぞれの本では、 >「実用Perlプログラミング」(オライリー) の説明がほぼ的確だと思います。 >「Perl 5 パワフルテクニック大全集」(インプレス) や >「Perl 5 マスターブック」(翔泳社) の説明は、これらの部分だけを見ると コールバック関数と呼ぶのはおかしいような気はしますね。 どちらかと言うと、コールバック関数として使う際に便利に呼び出せるように 準備をしているところに見えます。 あくまでもそれぞれ、コード参照とサブルーチンの説明なのではないでしょうか。 |
全くもって同感です<hsj さん > 「何らかのアクションを要求した際に呼び出される関数」 あと、このアクションは「非同期に発生する」というのも 重要な要素なのかな? (違うかも) |
なるほどー(知恵熱) ひとつわからないのが、Tkやシグナルハンドラのように、 そのアクションをキャッチする機構がシステムによって用意されているもの (BASICのON命令みたいなもんですね) だけをコールバックと呼ぶんでしょうか? それとも、呼び出し元も自前のPerlコードで書いた例がなにかあるでしょうか? あと非同期ってどういう意味なんでしょう。 あとなんでコールバック(電話を掛けなおすこと)っていうんでしょね。 すいませんずうずうしくお伺いして、、。 |
ん〜、こういうのは自分の中で納得できるかどうかなので、 うまく説明するのは僕には難しいなぁ。 > あと非同期ってどういう意味なんでしょう。 プログラム側から「いつそのアクションが起きるか」を 知ることができないということです。たとえば、マウスの クリックがいつ発生するだとか、シグナルがいつ飛んで くるかを、プログラムの側から予想することはできません。 > Tkやシグナルハンドラのように、そのアクションをキャッチする機構が > システムによって用意されているものだけをコールバックと呼ぶんで > しょうか? そうだと思います。というより、システム (OS) の手助けを 借りなければ、非同期なアクションに応答することはできません。 signal は非同期でやってきますので、シグナルハンドラという 機構が OS にあります。 ボタンの押下は、結局は X Window System のイベントとして socket 経由でデータが送られてきます。これは select で データが送られてきているかどうかを調べます (たぶん)。 結局どちらも OS の手助けを借りている (=システムコール を使う) わけです。 |