68user's page 掲示板

Prev< No. 1196〜1212> Next  [最新発言に戻る] [過去ログ一覧]
No. 1196 # 68user 2000/09/26 (火) 09:24:14
> @ノヴァさん
じゃなくて、やすさんでした。

ところで、make world 中に 家の FreeBSD を
ぐっちゃんぐっちゃんに壊してしまったので、もし週末
までに復旧できれば IRC に参加させていただきます。
# が、なかなかうまくいかず…。

No. 1197 # ノヴァ 2000/09/26 (火) 16:05:56
教えていただきありがとうございました。
さっそく、色々やってみます。

No. 1198 # もりや 2000/09/26 (火) 19:17:24
はじめまして、もりやと申します
実は今、シェルスクリプト(でいいんですかね?DOSでいうBATファイルの
ことです)でやろうとしていることがあるのですが、やり方が今ひとつ分
かりません。ファイルの複製を作るのですが、複製されるファイルの名前
には、別のテキストファイルのレコードの先頭の4バイトが付加され、そ
のテキストファイルは何レコードあるか分かりません。レコードの数だけ
複製を作ります。awkなど使えばよさそうに思って本を読んだりいろいろ試
しましたが、うまくいきません。教えていただければ幸いです。
OSは、HP-UXでバージョンの見方がわからないのですが、ここ2、3年のも
のではあると思います。

No. 1199 # 2000/09/27 (水) 01:03:12
はじめまして。
MXレコードを調べたいと思っているんですがモジュールが使える状況にありません。Net::DNSなどのモジュールを使わずにMXレコードを引く方法があればヒントだけでも教えていただけるとうれしいです。

よろしくお願いします。

赤色の文字は 「Windows 機種依存文字」か、いわゆる「半角カナ」です。 この掲示板では自動変換されますが、今後は使用しないで下さい

No. 1200 # 68user 2000/09/27 (水) 02:49:07
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?

No. 1201 # もりや 2000/09/27 (水) 09:44:03
説明不足で申し訳ありませんでした。
org.datというファイルがあるとします
あと、tencd.txtというテキストファイルがあり、その中身は
000420000101
002320001010
034320001020 とします
この場合、
org.datをコピーしてorg004.dat、org0023.dat、org0343.dat
という3つの複製ファイルを作成したいのです。
tencd.txtは何レコードあるかは不定です。

因みにHP-UXのバージョンはB.10.20でした。
よろしくお願いします

No. 1202 # Q 2000/09/27 (水) 09:51:16
What do you mean? hahaha...

No. 1203 # 68user 2000/09/27 (水) 10:25:21
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 を覚えた方がよいとは思いますね。

No. 1204 # ふくし [E-mail] 2000/09/29 (金) 02:38:39
すいません、Perl一般の話ですいませんが、

サブルーチン リファレンスを使うとコールバック関数が作れる、
という場合の、コールバック関数ってどんなもんなんでしょうか?
どんなときにどう使うと便利なんでしょうか?

リファレンスの勉強をしていて、そこだけピンと来る例題のある章が
なくて困っています。
御無理のない範囲で教えてくださいー。

No. 1205 # 68user 2000/09/29 (金) 03:12:26
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 {...} などと
無名関数を使ってコールバックを設定することもできます。

No. 1206 # ふくし [E-mail] 2000/09/29 (金) 03:43:11
ありがとうございます。このふたつの例はわかりました。
他に、ユーザープログラムが呼び出すサブルーチンを
「コールバック」と呼ぶことはないんでしょうか。
「コールバック」という言葉じたいの定義が本によってあやふやな気がして、、。
たびたび申し訳ありません、、。

No. 1207 # 68user 2000/09/29 (金) 09:39:23
> 「コールバック」という言葉じたいの
> 定義が本によってあやふやな気がして、、。
その本の記述例を見せていただけますか?

No. 1208 # ふくし [E-mail] 2000/09/29 (金) 13:17:13
すいません、、。

−−−−−−−−−−−−−−−
「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つの例を通して、コールバック関数の使い方を説明します。
−−−−−−−−−−−−−−−−−−−−

うーん、用例にしても呼び出しのレベルがいたずらに増えてるだけで、いまいち便利になった実感が。

No. 1209 # hsj 2000/09/29 (金) 14:17:27
こんにちは。

@ふくしさん
ぼくの少ない経験でしか言えませんが、
今までぼくは「コールバック関数」(もしくはハンドラ)の名称は、
「何らかのアクションを要求した際に呼び出される関数」
に対して使ってきました。
#ボタン押下のイベントに対して呼び出されるモノであったり
#シグナルイベントに対して呼び出されるモノであったり
ふくしさんが例に出されている、それぞれの本では、
>「実用Perlプログラミング」(オライリー)
の説明がほぼ的確だと思います。
>「Perl 5 パワフルテクニック大全集」(インプレス)

>「Perl 5 マスターブック」(翔泳社)
の説明は、これらの部分だけを見ると
コールバック関数と呼ぶのはおかしいような気はしますね。
どちらかと言うと、コールバック関数として使う際に便利に呼び出せるように
準備をしているところに見えます。
あくまでもそれぞれ、コード参照とサブルーチンの説明なのではないでしょうか。

No. 1210 # 68user 2000/09/29 (金) 19:42:54
全くもって同感です<hsj さん

> 「何らかのアクションを要求した際に呼び出される関数」
あと、このアクションは「非同期に発生する」というのも
重要な要素なのかな? (違うかも)

No. 1211 # ふくし [E-mail] 2000/09/30 (土) 12:54:33
なるほどー(知恵熱)
ひとつわからないのが、Tkやシグナルハンドラのように、
そのアクションをキャッチする機構がシステムによって用意されているもの
(BASICのON命令みたいなもんですね)
だけをコールバックと呼ぶんでしょうか?
それとも、呼び出し元も自前のPerlコードで書いた例がなにかあるでしょうか?
あと非同期ってどういう意味なんでしょう。
あとなんでコールバック(電話を掛けなおすこと)っていうんでしょね。
すいませんずうずうしくお伺いして、、。

No. 1212 # 68user 2000/10/03 (火) 01:47:46
ん〜、こういうのは自分の中で納得できるかどうかなので、
うまく説明するのは僕には難しいなぁ。

> あと非同期ってどういう意味なんでしょう。
プログラム側から「いつそのアクションが起きるか」を
知ることができないということです。たとえば、マウスの
クリックがいつ発生するだとか、シグナルがいつ飛んで
くるかを、プログラムの側から予想することはできません。

> Tkやシグナルハンドラのように、そのアクションをキャッチする機構が
> システムによって用意されているものだけをコールバックと呼ぶんで
> しょうか?
そうだと思います。というより、システム (OS) の手助けを
借りなければ、非同期なアクションに応答することはできません。

signal は非同期でやってきますので、シグナルハンドラという
機構が OS にあります。

ボタンの押下は、結局は X Window System のイベントとして
socket 経由でデータが送られてきます。これは select で
データが送られてきているかどうかを調べます (たぶん)。

結局どちらも OS の手助けを借りている (=システムコール
を使う) わけです。

Prev< No. 1196〜1212> Next  [最新発言に戻る] [過去ログ一覧]