I ♥ WordPress

[時間割:C言語]『はじめてのC言語完全入門』その13
2009/01/06 22:56 posted by kunkichi

火曜日は「C言語」。前回、ファイルからの入出をやったので、今度はファイルへの出力です。

はじめてのC言語 完全入門 (標準プログラマーズライブラリ)
塚越 一雄
技術評論社
売り上げランキング: 420963


  • 書き込み時は、オープンモードを”w”にする。FILE *ofp;
    ofp = fopen("output.txt","w")
  • ファイルへの出力にはfputcを使う。fput(c, ofp);
  • 書き込みの場合はエラー処理が重要。fputcは、EOFに達した場合も書き込みエラーの場合も両方-1を返すので、終了とエラーの区別ができない。よって、エラーが発生していたら真を返すferror関数を使って、「書き込みエラー」を取得する。fputc(c,ofp);
    if(ferror(ofp)){
      printf("書き込みに失敗しました。¥n");
      fclose(ofp);
      return XXX;
    }
    エラーが発生した場合に処理を終了する場合は、ファイルのクローズを忘れないように。
  • 前回のサンプルスクリプトに出力処理を追加。sample.txtを読み込んで、その内容をそのままresult.txtに出力する、いわばcpコマンドのような感じで。#include <stdio.h>
     
    #define INFILE  "./sample.txt"
    #define OUTFILE "./result.txt"
     
    int main()
    {
      FILE *ifp;
      FILE *ofp;
      
      if( !(ifp = fopen( INFILE, "r" )) ){
        printf("cannot open input file.\n");
        return 255;
      }
      
      if( !(ofp = fopen( OUTFILE, "w" )) ){
        printf("cannot open output file.\n");
        return 255;
      }
      
      int c;
      while( (c = fgetc(ifp)) != EOF ){
        fputc(c,ofp);
      }
      
      if(ferror(ofp)){
        printf("書き込みに失敗しました。\n");
        fclose(ofp);
        fclose(ifp);
        remove(OUTFILE);
        return 1;
      }
     
      if( fclose(ofp) ){
        printf("cannot close output file.\n");
        return 255;
      }
      
      if( fclose(ifp) ){
        printf("cannot close input file.\n");
        return 255;
      }
      
      return 0;
    }
  • getcharを使うと、標準入力から1文字読み込むことができる。fgetcと同じように返り値はintで受ける。引数はなし。
  • ferrorってイメージとしてはエラーフラグが立つという感じかな。whileのループの中でなく、ループが終了した後にチェックしているのはそういう意味かと。
  • 上記はferrorで書き込みエラーを拾ったら、出力ファイルポインタをクローズすると共にファイルを削除している。削除にはremove(ファイル名)を使用する。Perlのunlinkみたいなもんかな。
  • fputcは1文字単位なので、ちょっと使いにくい。だけど、fprintfを使えば、printfのように、文字列を特定の書式に当てはめる形で出力することができる。fprintf(ofp,"今日は%d月%d日です。¥n", month, day);引数にファイルポインタを追加する以外はprintfと全く同じ使い方。
  • fprintfを使ったファイル出力のサンプル$ cat fprintf.c
    #include <stdio.h>
     
    #define OUTFILE "result.txt"
     
    int main()
    {
      FILE *ofp;
      if(!(ofp = fopen(OUTFILE,"w"))){
        printf("cannot open outfile.\n");
        return 255;
      }
      
      int num=0;
      printf("数字を入力してください。 ");
      scanf("%d",&num);
     
      fprintf(ofp,"入力された数字は、%d です。\n",num);
      fclose(ofp);
     
      return 0;
    }
    ビルドして実行してみる。$ ./fprintf
    数字を入力してください。 356
    $ cat result.txt
    入力された数字は、356 です。
  • 標準出力、標準エラー出力にも出力できる。それぞれ組み込みのファイルポインタである、stdout、stderr を fprintfの引数にすれば良い。エラーメッセージ等はstderrに出すと良いね。

ということでファイルの出力もできるようになりました。
次は文字列とポインタです。

[時間割:Perl]『ミニマルPerl』その12
2009/01/06 02:44 posted by kunkichi

三日坊主にならないようにがんばりますw
月曜日は「Perl」です。引き続き、AWKの処理をPerlで実現していきます。今日はAWKの得意なパターンとアクションを組み合わせた処理です。

  • AWKの「パターン&アクション」の例$ awk -F":" '/^root/{ print NR ":" $1 }' /etc/passwd
    1:root
    AWKのいいところは、
    • アクションを指定していないパターンの場合は、レコードをそのまま自動的に出力する。$ awk -F":" '/^root/' /etc/passwd
      root:x:0:0:root:/root:/bin/bash
    • パターンを指定していない場合はアクションを全てのレコードに対してそのまま実行する。$ awk -F":" '{ print NR ":" $1 }' /etc/passwd
      1:root
      2:bin
      3:daemon
      4:adm
      5:lp
      ・・・
  • 上記のそれぞれをPerlで実装する。
    • パターンとアクション$ perl -wnlaF":" -e '/^root/ and print "$.:$F[0]";' /etc/passwd
      1:root
    • パターンのみ$ perl -wnlaF":" -e '/^root/ and print;' /etc/passwd
      root:x:0:0:root:/root:/bin/bash
      この場合は明示的にprintをつけないといけない。
    • アクションのみ$ perl -wnlaF":" -e 'print "$.:$F[0]";' /etc/passwd
      1:root
      2:bin
      3:daemon
      4:adm
      5:lp
      ・・・
  • AWKのBEGINとENDもそのままPerlで使える。apacheログのファイルサイズの合計と平均を出すサンプルスクリプト。サイズは10番目のフィールド($F[9])に出力されているものとする。# perl -wnla -e '
    > BEGIN{
    >   $total=0;
    >   $cnt=0;
    >   $average=0;
    > }
    > $total=$total+$F[9];
    > $cnt++;
    > END{
    >   $average=$total/$cnt;
    >   print "TOTAL:$total AVERAGE:$average";
    > }' access_log.1
    TOTAL:1100250219 AVERAGE:1559
    BEGINのブロックで変数を初期化しておいて(初期化していない場合は初期化されていないという警告が出る場合があるのと、最終的にデータがなかった場合にENDで出力する際に警告が出て、かつ、NULLになってしまうため。)、ENDでまとめて出力。
  • フィールド処理に対してマッチングするとより細かい条件を設定できる。/etc/passwdの中からUIDが一桁のものを抽出してUIDとユーザ名を出力する。# perl -wnlaF':' -e '($username, undef, $uid) = @F;$uid =~ /^\d$/ and print "$uid:$username";' /etc/passwd
    0:root
    1:bin
    2:daemon
    3:adm
    4:lp
    5:sync
    6:shutdown
    7:halt
    8:mail
    9:news
  • AWKのNF(最後のフィールド)は、Perlだと$F[-1]。
  • 段落モードの場合(-00)は、行単位でフィールド処理を行うのではなく、段落内の全ての文字列に対してフィールド処理が行われる。わかりにくいので以下の例で説明。
    例)sarコマンドでCPU使用率を定期的に取得した場合の出力結果は以下。# sar -P ALL -u 1 10
    1: Linux 2.6.X-X.X.X (www.example.com)   2009年01月06日
    2:
    3: 02時08分43秒       CPU     %user     %nice   %system   %iowait    %steal     %idle
    4: 02時08分44秒       all      0.00      0.00      0.00      0.00      0.00    100.00
    5: 02時08分44秒         0      0.00      0.00      0.00      0.00      0.00    100.00
    6: 02時08分44秒         1      0.00      0.00      0.00      0.00      0.00    100.00
    7:
    8: 02時08分44秒       CPU     %user     %nice   %system   %iowait    %steal     %idle
    9: 02時08分45秒       all      0.00      0.00      0.00      0.00      0.00    100.00
    10: 02時08分45秒         0      0.00      0.00      0.00      0.00      0.00    100.00
    11: 02時08分45秒         1      0.00      0.00      0.00      0.00      0.00    100.00
    12:
    ・・・
    47:
    48: 02時08分52秒       CPU     %user     %nice   %system   %iowait    %steal     %idle
    49: 02時08分53秒       all      0.00      0.00      0.00      0.00      0.00    100.00
    50: 02時08分53秒         0      0.00      0.00      0.00      0.00      0.00    100.00
    51: 02時08分53秒         1      0.00      0.00      0.00      0.00      0.00    100.00
    52:
    53: 平均値:        CPU     %user     %nice   %system   %iowait    %steal     %idle
    54: 平均値:        all      0.00      0.00      0.00      0.10      0.00     99.90
    55: 平均値:          0      0.00      0.00      0.00      0.30      0.00     99.70
    56: 平均値:          1      0.00      0.00      0.00      0.00      0.00    100.00
    ※わかりやすいように行番号を入れてますが実際には出力されていません。

    このうち、個々のCPU使用率のidle値の推移を取得する。
    $ perl -00 -wnla -e '/^¥d/ and print "$F[23] $F[-1]";'
    100.00 100.00
     
    100.00 100.00
     
    100.00 100.00
     
    100.00 100.00
     
    97.06 100.00
     
    100.00 100.00
     
    100.00 100.00
     
    100.00 100.00
     
    100.00 100.00
     
    100.00 100.00
     
    ポイントは以下。

    • 欲しいのは推移データだけなので、1行目のunameの出力と最後のサマリーの段落を出力しないように、段落の最初が数字(sarの個々の出力データは日付が最初に出力されている)の箇所にマッチした段落のみを抽出
    • さらに、個々の段落全体の文字列を最初から見ていくと、CPU0のidle値は24番目、CPU1のidle値は32番目なので、それぞれを@Fのインデックス指定で取得。インデックスは0オリジンなので、CPU0のidle値は$F[23]、CPU1のidle値は$F[31]、ただしCPU1のidle値はその段落全体で最後のフィールド最後になるので$F[-1]、として出力。

    といった感じで、表データの任意の値だけ取得というのもかんたんにできる。

まあ、こういうデータ抽出をするかどうかは別にして、自分なりの例を作ってやってみると理解しやすい気がしました。次回に続きます。

Touch Diamond向けのページを作るには、、、
2009/01/03 23:01 posted by kunkichi

Touch Diamond の Opera のブックマークが使いにくいので、よく使うサイト一覧のHTMLを作ってサーバにアップしたのだけど、どうやっても横幅が小さくなる。折り返すほど長い文字列はないのだけどなぁ、、、

[時間割:C言語]『はじめてのC言語完全入門』その12
2009/01/03 04:22 posted by kunkichi

前回からずいぶん時間が経ってしまっているなぁ、、でも新年の誓いも経てたことだし、心機一転がんばります!
金曜日は「C言語」。ファイル入出力の章からです。

はじめてのC言語 完全入門 (標準プログラマーズライブラリ)
塚越 一雄
技術評論社
売り上げランキング: 420963


  • stdioライブラリのfopen関数を使用する前提とします。
  • fopenはFILE型のポインタを返すので、事前にFILE型のポインタを用意しておくこと。FILE *fp;
    fp = fopen( "sample.txt", "r" );
  • 引数はPerl等と同じく、ファイルとモードを指定する。ただし、モードの指定は、”r”, “w”, “a”, “+”の文字列を使用する。意味は推して計るべし。
  • fopenは失敗した場合に0を返すのでこれを使ってエラーチェックする。
  • ファイルからのデータ読み込みには、ファイルから1文字入力するfgetc関数を使う。fgetcが返すのは、成功した場合は読み込んだ文字を、失敗した場合は-1となる。
  • fgetcの返り値は普通に考えればcharだけどintで受ける。これは
    • charは1バイトのintとして扱える。ただし、その範囲は符号の有無によって変わる。(符号付きの場合は-128〜127、符号なしの場合は0〜255)
    • 全ての文字集合を1バイトで表す場合、成功時は0〜255を返し、-1は失敗を表す。すなわち、-1を表現できる必要がある
    • ところがcharの符号有無は実装に依存する。
    • charがunsignedの場合は、-1を返した場合に10進数では255と区別ができなくなる。
    • charがsignedの場合は、-1を返すことはできるが返せる文字コードの上限が127までとなり、全ての文字集合を表現できない。

    従って、charでは役不足なのでintを使うということ。

  • fgetcはファイルの終わりに達すると-1を返すので、これを使って、fgetcを-1が返るまでループで回せば全データを取得できる。while( (c = fgetc(fp)) != -1 ){
        printf("%c",c);
      }
    また-1の代わりに定数EOFを使ってもよい。
  • ファイルのクローズにはfcloseを使う。引数はファイルポインタのみ。
  • fopen同様、成功時は0、失敗時は1を返す。読み込みだけの場合はfclose時のチェックは不要だけど、書き込みの場合は、チェックした方が良い。

ここまでの内容をサンプルで書くとこんな感じに成りました。単にファイルを開いて出力するだけです。
#include <stdio.h>
 
#define FILENAME "./sample.txt"
 
int main()
{
  FILE *fp;
  
  if( !(fp = fopen( FILENAME, "r" )) ){
    printf("cannot open input file.\n");
    return 255;
  }
  
  int c;
  while( (c = fgetc(fp)) != EOF ){
    printf("%c",c);
  }
 
  if( fclose(fp) ){
    printf("cannot close input file.\n");
    return 255;
  }
  
  return 0;
}

出力時はprintfを使っているけど、putcharとか、他にもあるようです。

とりあえず今日はファイルからの入力まで。次はファイルへの出力をやります。

[時間割:Perl]『ミニマルPerl』その11
2009/01/02 03:11 posted by kunkichi

既に元旦も終わってますが、まあ元旦の分ということで(笑)。今年一発目の「Perl」の時間です。前回に引き続き、Perl で AWK を実現するところ。今回はAWKの最も得意なフィールド処理をPerlでやっていきます。

  • -naが前提とします。
  • 各フィールドは@Fに代入され、各フィールドへは配列のインデックスでアクセスできる。
  • 配列を変数に代入する場合、「途中」で不要なフィールドがある場合は、undefを使う。$ echo "aaa bbb ccc" | perl -wnla -e '($first,undef,$third)=@F;print "$first $third";'
    aaa ccc
    最初から途中までの場合は、単に指定しないだけでOK。
  • AWKとPerlで変数をprintで出力する場合、
    • AWKは変数をカンマ、もしくはスペースで並べる(AWKはダブルクォート内で変数展開とかされないので複数の引数を取りたい場合は必須)。スペースの場合は連結して出力、カンマの場合はOFSで指定されているセパレータを使って区切り出力される。
    • Perlはダブルクォート内で変数展開できるので、複数の変数もダブルクォートで囲んで単一の引数とすれば意識する必要なし。あえて複数の引数を指定する場合は必ずカンマで区切ること。この場合、セパレータはダブルクォート内に入れてしまうか、$,に定義する必要がある。$ echo "aaa bbb ccc" | perl -wnla -e '($first,undef,$third)=@F;print $first,$third;'
      aaaccc
      $ echo "aaa bbb ccc" | perl -wnla -e '($first,undef,$third)=@F;$,=" ";print $first,$third;'
      aaa ccc
  • 入力レコードを特定の文字列で分割する場合はAWKと同じく、-Fを使う。

ちょっと短めだけど、元旦の夜だし、まずは少しでも毎日やることを大事にしたいと思います。

New Year’s Greeting & Resolutions of 2009
2009/01/02 01:36 posted by kunkichi

あけましておめでとうございます。気がついたら2008年も終わってしまい、いろいろな目標も達成できず、とほほ、、、今年はもっとがんばります。

で話は変わるんですが、

僕の好きなドラマに「フレンズ」という海外ドラマがあって、シーズン5の1話に「今年は何か一つ改善する」とみんなに宣言するエピソードがあったのを思い出しました。まあ日本語的に言うと「新年の誓い」みたいな感じで。

ということで、僕も宣言してみたいと思います。2009年の10の誓い。

  1. 短くても毎日勉強する時間を作る

    去年の10月頃から目標を決めて勉強していたのですが、年末に忙しくなったのにかまけてサボってしまう日も多々あり、、、やっぱりきちんと短くても毎日続けることが大事。実際に勉強したことが身に付いたのを実感できた瞬間もあったしね。

  2. もっとたくさん本を読む

    去年は後半から結構読んだつもりではあるのだけど、もっとペースを上げてたくさん読みたい。特にコンピュータ以外の分野を増やしたい。

  3. アウトプットをきちんとする

    勉強とか読書とか、なんでもそうなのだけど、やっぱりアウトプットすることを意識しないとダメ。ちゃんとブログを更新すること。

この辺は去年と変わらないし、これからも変わらない、基本的なことなのでしっかりやっていくこと。
ここからはちょっと具体的に。

  1. 統計学を勉強する

    コンピュータ以外の分野の本を読みたい、というのを具体的にいうとこれ。前から統計学はいろいろな意味で大事な気がしていて、きちんと勉強したいと思っていたので。

  2. アプリケーションを作って公開する

    運用といえど、多少のアプリ開発力はいろんな意味で必須。アプリケーションを少なくとも一つは作って公開すること。

  3. フレームワークを習得する

    アプリケーションを作るにあたっては、やっぱりフレームワークを使って、迅速に開発することを覚えたい。言語・フレームワークの取捨はまだ決めてないけど、PerlかPHPで。

  4. 自分用ポータルサイトを作る

    このブログとかwikiはレンタルサーバで、日々のスケジュールはGoogleカレンダーで、ToDoはCheck*Padで、といろいろ分散してやってるのだけど、これを一本化、、とは言わないまでもw、もっと便利に使える・カスタマイズできるようにするため、徐々に自宅サーバへ移行していきたい。せっかくTouch Diamondもゲットしたんだし、Touch Diamond向けに使いやすいようにもしていければ。

  5. 勉強会に参加する

    仕事以外での技術者としての横のつながりをもっと増やしていきたい。ネット上はもちろんだけど、実際に顔を見れる勉強会に積極的に参加していきたい。

  6. ダイエット(笑)

    健康診断でメタボ注意報が出ているので、警報が出る前になんとかしないと(爆)。間食をしないようにします。

あれ?9個しかない。まあいいか(笑)

今年もよろしくお願い致します。

[時間割:Perl]『ミニマルPerl』その10
2008/12/17 22:56 posted by kunkichi

どっひゃー!もう12月も半ばまで。サボりにサボりまくったな〜、、、とはいうものの一応本はどんどん読み進めてまして、いろいろと活用もしております、はい、、、さて、気を取り直してアウトプット再開です。

前回(ってかなり前だな、、、orz)sedのところまで進んでたので、今回からはAWKの機能をperlで実現していきます。

AWKよりもPerlが優れているところ

  • けちなマッチングが行える。
    例えばkunkichi:*:100:100:Test User1:/bin/bash:みたいな/etc/passwdのエントリの1カラム目だけが取りたい場合。普通に書くと、$ perl -wnl -e 's/^(.+):/$1/g and print $1;' /etc/passwd
    kunkichi:*:100:100:Test User1:/bin/bash
    となってうまく行かないパターンにハマりがち。もちろん以下のように正規表現で”:”を考慮するように見直せばオーケーだけど、、$ perl -wnl -e 's/^([^:]+):.*/$1/g and print $1;'
    kunkichi
    Perlだと、こんなことしなくても、ケチなマッチング(+の後の?がそれ)を使って「マッチする最短の単位」で拾える。$ perl -wnl -e 's/^(.+?):/$1/g and print $1;' /etc/passwd
    kunkichi
    うーん、awk でできないよ、っていうよい例が出ませんでした、笑
  • レコードセパレータのマッチング。改行とかもマッチングで拾えるということ。サンプルとして以下のようなテキストデータがあるとしてThis is a sample sentence and
    using Perl, you can match new
    line with regular expression.
    “new line”をマッチさせてみる。$ perl -00 -wnl -e '/new\nline/ and print;' sample.txt
    This is a sample sentence and
    using Perl, you can match new
    line with regular expression.
    ちなみに\sでもOK。$ perl -00 -wnl -e '/new\sline/ and print;' sample.txt

特殊変数いろいろ

  • 以下のサンプルデータを使います。# cat beatles.txt
    John Lennon
    Ringo Starr
    Paul McCartney
    George Harrison
    awkの場合、$ awk '{ print NR ":" $0 "(Nickname:" $1 ")"  }' beatles.txt
    1:John Lennon(Nickname:John)
    2:Ringo Starr(Nickname:Ringo)
    3:Paul McCartney(Nickname:Paul)
    4:George Harrison(Nickname:George)
    同じことをPerlでやると、$ perl -wnla -e 'print "$.:$_(Nickname:$F[0])"' beatles.txt
    1:John Lennon(Nickname:John)
    2:Ringo Starr(Nickname:Ringo)
    3:Paul McCartney(Nickname:Paul)
    4:George Harrison(Nickname:George)
  • セパレータ関連
    以下のサンプルデータを使います。$ cat 1_10.txt
    1 2 3 4 5 6 7 8 9 10
    セパレータを入力・出力で切り替えてみます。AWKの場合、awk 'BEGIN{RS=" ";ORS=",";}{ print $0 }' sample.txt
    1,2,3,4,5,6,7,8,9,10
    Perlの場合、perl -wnl -e 'BEGIN{$/=" ";$\=","}print;' sample.txt
    1,2,3,4,5,6,7,8,9,10
  • フィールドセパレータ。さっきのbeatles.txtをサンプルに使います。
    AWKの場合、awk 'BEGIN{FS=" ";OFS="|";}{ print $1, $2;}' beatles.txt John|Lennon
    Ringo|Starr
    Paul|McCartney
    George|Harrison
    Perlで。perl -wnlaF"\s" -e 'BEGIN{$,="\|";}print $F[0],$F[1];' beatles.txt
    John|Lennon
    Ringo|Starr
    Paul|McCartney
    George|Harrison
    Perlの場合は入力フィールドセパレータは変数がないので-Fを使う点に注意。
  • フィールド数
    AWKの場合、$ awk '{ print NF }' beatles.txt
    2
    2
    2
    2
    Perlの場合、$ perl -wnla -e '$num=@F;print $num;' beatles.txt
    2
    2
    2
    2
  • 引数の取得。
    AWKの場合、$ cat argv.awk
    BEGIN{
      print "ARGV=\"" ARGV[0],ARGV[1],ARGV[2] "\"";
      print ARGC;
    }
    $ awk -f argv.awk arg1 arg2
    ARGV="awk arg1 arg2"
    3
    AWKの場合は、自分自身も引数に含まれる。Perlの場合。$cat argv.pl
    !/usr/bin/perl -wl
     
    print "ARGV=\"$ARGV[0] $ARGV[1]\"";
    my $num = @ARGV;
    print "$num";
    $ perl argv.pl arg1 arg2
    ARGV="arg1 arg2"
    2
    Perlの場合は自分自身は引数に含まれない($0を使う)

変数展開

  • AWKではダブルクォートの中での変数展開ができないので、ちょっとややこしい。$ awk 'BEGIN{GUITAR="John";}{ if( $1 ~ "^" GUITAR ) print $0; }' beatles.txt
    John Lennon
  • Perlだとらくちん$ perl -wnl -e 'BEGIN{$guitar="John";}/^$guitar/ and print;' beatles.txt
    John Lennon

その他

  • -i拡張子機能はAWKにはない。
  • セパレータで区切られた文字列を自動的にフィールドに入れる機能はPerlではデフォルト無効。AWKでは常に有効。仮に使わなくても。
  • Perlはモジュールが使える。

AWKのほうが優れている点

  • シンプルなプログラムではサイズが小さくなる。
  • 引数の個数がARGCという変数だけでとれる。Perlは@ARGVをスカラーに一旦入れないといけない。

とりあえずAWKとの違いはこんな感じ。まあgrepやsedに比べるとそれほど大きな差はないけど、AWKでできることは大概できるって感じかな。

次回も引き続き、PerlでAWKの処理をやります。AWKの神髄とも言えるフィールド処理の話です。では。

[読書]『DNS & BIND 第5版』
2008/12/08 02:32 posted by kunkichi

第4版もまだ全部読めてないのに、もう改版されてしまいました。

DNS & BIND 第5版
DNS & BIND 第5版
posted with amazlet at 08.12.08
Cricket Liu Paul Albitz
オライリージャパン
売り上げランキング: 54229


今回のキャッシュポイズニング騒動についてもいろいろ載ってるらしい。あとはSPFレコードとかのspam対策向けの設定とかその辺ぐらいかな、見るところは。

Amazonのギフトカードがあるので、とりあえず買っといた。第4版は会社に寄贈しとくか。

[読書]『zsh最強シェル入門』
2008/12/08 02:24 posted by kunkichi

年末にかけて仕事が立て込んでて、勉強はしてるのだけど、アップさぼりまくってます。。。いかんなぁ、忙しいのを言い訳にしちゃ。ちゃんとやらないと。

話は変わって先週末に書店でこんなん見つけて即買っちゃいました。

zsh最強シェル入門
zsh最強シェル入門
posted with amazlet at 08.12.08
中島 能和
翔泳社
売り上げランキング: 10153


なんてニッチなw。

でも一時期開発者界隈では話題になってたし、書籍でまとめてもらった方がネットで情報探すよりもらくちん。リファレンスが手元にあるのはやっぱりいいです。

いろいろなオプションを実際に試して .zshrc カスタマイズ中。GNU screenに関しても載ってるので良さげ。

[メモ] ユーザ権限でホームディレクトリにPerlモジュールをインストール
2008/11/24 22:37 posted by kunkichi

ちょっと訳あってモジュールをrootでインストールできないので、そのメモ。

$ pwd
/home/kunkichi
$ tar zxvf Net-SNMP-5.2.0.tar.gz
$ cd Net-SNMP-5.2.0
$ perl Makefile.PL PREFIX=~/perl
$ make
$ make test
$ make install

使う時。

$ perl -I$HOME/perl/lib/perl5/site_perl/5.8.8 -w -MNet::SNMP -e '〜'

CentOS5.2で試してます。

このページの先頭へ