• ベストアンサー

Time::Pieceについて

はじめまして。 perlにて、Time::Pieceモジュールを使った プログラムで質問があります。 my $obj = Time::Piece->new; my $num = $obj->epoch . $$ . time . int [ ] . rand 上のロジックで、2行目の、「epoch」をつかった部分 が、どのような事をしているのか理解できません。 よろしくお願い致します。

  • yokt
  • お礼率34% (13/38)
  • Perl
  • 回答数3
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • Ethersky
  • ベストアンサー率71% (168/235)
回答No.1

Time::Pieceについては、perldocを読むとわかります。 で、epochメソッドが何をしているのかというと「epochからの秒」を返すようです。 ちなみにepochは何なのかというと、ここで説明するよりも以下のURLの方が分かりやすいと思うのでそちらをどうぞ。 http://tehanu.hpcl.titech.ac.jp/time/utctai.html

参考URL:
http://tehanu.hpcl.titech.ac.jp/time/utctai.html
yokt
質問者

補足

回答ありがとうございます。 perldocにて調べてみたのですが、どうも英語が得意ではないので・・・・。 ご説明いただいた内容で、「epoch」についてはわかりました。 「$$ . time . int [ ] . rand」の部分はどのような 意味なのでしょうか。 「rand」は関数ということは分かるのですが、組み合わされているので、ロジックの解釈ができません。 よろしくお願い致します。

その他の回答 (2)

  • Ethersky
  • ベストアンサー率71% (168/235)
回答No.3

> $tmp = substr($md5->add(Time::Piece->new->epoch . $$ . time . int [] . rand)->hexdigest, 0, 10) > ランダムに数値を発生させて、上10桁をとり、 > その値を、認証する際の値にするようです。 なるほど。 認証に使う種作りをしていたわけですか。 ・・・って途中を切らずに全文を掲示していただかないと回答者も困りますので、これから何か質問することがあれば(教えて!gooに限らず)、おしまずに必要最低限のことは書いてください。

  • Ethersky
  • ベストアンサー率71% (168/235)
回答No.2

$$はスクリプトを実行しているPerlのプロセス番号が入っている特殊変数。 timeは1970年1月1日00:00:00から現在時刻までの秒数。 intは小数点以下を切り捨てて整数部分を返す関数。(ここでは空なので0になる) randは0から引数に指定した数値までの乱数を発生させる関数。(ここでは引数がなぜかない?) あと行の終わりにも関わらず;(セミコロン)がないですがこれでほんとに一行ですか? このままいくと、いままで上げた上記のものをepochの返値といっしょに順番に繋げていってそれを$numに突っ込むだけです。 結局何がしたいのかは知りません。(w

yokt
質問者

補足

回答ありがとうございます。 「.」は結合子だったんですね。 ロジック全体はこのようになっております。 $tmp = substr($md5->add(Time::Piece->new->epoch . $$ . time . int [] . rand)->hexdigest, 0, 10) ランダムに数値を発生させて、上10桁をとり、 その値を、認証する際の値にするようです。

関連するQ&A

  • java >>>記号について

    現在Androidアプリを学習しています。 以下コードの解釈がわかりません。 呼び出し int idx = rand(6); private static Rondom rand = new Rondom(); public static int rand(int num) { return (rand.nextInt() >>> 1) % num; } 特に >>> の記号が意味不明です。 ご教授のほどよろしくお願い致します。

    • ベストアンサー
    • Java
  • 乱数の取得

    キー操作をした時に複数の乱数を習得させようと思っています。 【キ─操作関数】  int num[3] = {11, 22, 33}; ←初期化のため数字は適当です。  srand((unsigned int)time(NULL))  for(int i=0; i<=3; i++)  {   num[i] = rand % 10;  } 上記のプログラムを書いています。 num[0]、num[1]、num[2]にそれぞれ0~9の乱数が入ると思うのですが、 num[0]にしか乱数が入りません。 num[1]、num[2]には同じ数字(恐らくtimeで取得した数字?)が入っています。 何かお気づきの点がありましたらアドバイスお願い致します。

  • Run-Time Check Failure #3というエラーが出ます。

    //Run-Time Check Failure #3 - The variable 'Data' is being used without being defined. //というエラーが出ます。どうしたらいいですか? //プログラムの内容は、数値を格納するときに、二分木構造で格納していくというものです。 //多分違うような気がしますが、、 //よろしくお願いします。 #include<stdio.h> struct DATA { DATA *Small; DATA *Large; int Number; }; void InputData(DATA *Dat,int num) { if(Dat==NULL){Dat=new DATA;Dat->Number=num;return;} if(Dat->Number<num) { Dat->Large=new DATA; Dat=Dat->Large; InputData(Dat,num); } else if(Dat->Number>num) { Dat->Small=new DATA; Dat=Dat->Small; InputData(Dat,num); } return; } int main() { DATA *Data; InputData(Data,20);//<-ここでエラーが出ます。 InputData(Data,10); InputData(Data,30); return 0; }

  • C#で複重しない乱数

    C#で複重しない乱数 とにかく自分の書いたプログラムの一部分を見てください Bitmap my1 = new Bitmap(GetType(), rand.Next(1,52) + ".png"); Bitmap my2 = new Bitmap(GetType(), rand.Next(1,52) + ".png"); Bitmap my3 = new Bitmap(GetType(), rand.Next(1,52) + ".png"); Bitmap my4 = new Bitmap(GetType(), rand.Next(1,52) + ".png"); Bitmap my5 = new Bitmap(GetType(), rand.Next(1,52) + ".png"); Bitmap my6 = new Bitmap(GetType(), rand.Next(1,52) + ".png"); Bitmap my7 = new Bitmap(GetType(), rand.Next(1,52) + ".png"); Bitmap my8 = new Bitmap(GetType(), rand.Next(1,52) + ".png"); Bitmap my9 = new Bitmap(GetType(), rand.Next(1,52) + ".png"); Bitmap my10 = new Bitmap(GetType(), rand.Next(1,52) + ".png"); Bitmap my11 = new Bitmap(GetType(), rand.Next(1,52) + ".png"); Bitmap my12 = new Bitmap(GetType(), rand.Next(1,52) + ".png"); Bitmap my13 = new Bitmap(GetType(), rand.Next(1,52) + ".png"); Bitmap my14 = new Bitmap(GetType(), rand.Next(1,52) + ".png"); こんなかんじで、なんかプログラムが回りくどかったり下手くそだったりするのは触れないでくださいww 1~52の乱数を発生させてるのですが、コレが同じ数字が出て欲しくないんですけど やり方が分かりません^^; どなたか教えてくれませんか

  • srand(time(NULL))の使い方

    C言語の勉強中で「ランダムな整数値を作成し、その数値が偶数か奇数かを判定するプログラムをif~else 構文を使って作成」したいのですが下記のプログラムでやってみたのですがまだまだ知識不足で完成しません。知識をお借りできればと思っていますのでどなたか教えてください。 #include<stdio.h> #include<stdlib.h> #include<time.h> int main(void) { { int = i; i = rand(); srand((unsigned)time(NULL)); printf("%d\n",rand()); } if(i % 2 == 0) { printf("偶数である:\n",i); } else { printf("奇数である:\n",i); } return 0; }

  • Net::Telnetでタイムアウト時間が短い

    タイムアウト時間を確認するのに、以下のプログラムを実行したのですが、存在しないホストを指定してプログラムを実行しても3秒程度でタイムアウトしてしまいます。指定したタイムアウト時間(以下のプログラムでは100秒)待つにはどうすればよろしいでしょうか? お願いします OS:CentOS 5.1 perl: 5.8.8 Net-Telnet-3.03 ===== プログラム ===== #!/usr/bin/perl use Net::Telnet (); my $result; my $h = 'aa.bb.cc.dd'; my $u = 'my_name'; my $pass = 'my_pass'; my $p = '/[\$%#>] $/'; my $t = new Net::Telnet (Timeout => 100, Prompt => $p, Errmode => "return"); $result = $t->open($h); unless($result) { print "open ng\n"; exit; } else { print "open ok\n"; $t->login($u, $pass); print "login ok\n"; $t->print("exit"); }

    • ベストアンサー
    • Perl
  • ExecutorService.newFixedT

    はじめまして。 タイトルの通り、ExecutorService.newFixedThreadPool()で生成されたスレッド達の名前を取得しようとしています。 プログラムは以下です。 [SharedObject.java] import java.lang.Math; import java.util.Random; public class SharedObject { private int i,x; private final int[] array = new int[2500000]; private final Random r = new Random(); private long t0=0L,t1=0L; public void work() { t0 = t1 = System.nanoTime(); while((t1-t0) < 3000000000L) { synchronized (this) { x = r.nextInt(2500000); array[x] = array[x] + 1; } t1 = System.nanoTime(); } } } [Task.java] public class Task implements Runnable { private SharedObject obj; Task(SharedObject obj) { this.obj = obj; } public void run() { for(int i=0; i<3; i++) { this.obj.work(); } } } [BenchMark.java] import java.util.concurrent.Executors; import java.util.concurrent.ExecutorService; import java.io.*; import java.util.Random; public class BenchMark { public static void main(String[] args) { ExecutorService ex = Executors.newFixedThreadPool(12); Random rnd = new Random(); int num, rnum; SharedObject obj1 = new SharedObject(); SharedObject obj2 = new SharedObject(); SharedObject obj3 = new SharedObject(); SharedObject obj4 = new SharedObject(); for(int i=0; i<500; i++) { num = rnd.nextInt(4); if(num == 0) { ex.execute(new Task(obj1)); } else if(num == 1){ ex.execute(new Task(obj2)); } else if(num == 2){ ex.execute(new Task(obj3)); } else { ex.execute(new Task(obj4)); } } ex.shutdown(); } } BenchMark.javaで12個のスレッドプールと4つのタスク(SharedObject.java)を生成しています。 各タスクから「今どのスレッドが自分にアクセスしているか」を確認するために、スレッド名を表示する機構を作りたいです。 具体的には、SharedObjectクラスの中の synchronized で囲われている部分に、その時点でロックを保持しているスレッドの getName() メソッドを呼び出すようなプログラムが書きたいと思ってるのですが、どのように書いたらいいのでしょうか? よろしくお願いします。 ※できるだけ早く回答をいただきたいので、他掲示板にもマルチポストさせていただいています。不快に思われた方にお詫び申し上げます。

    • ベストアンサー
    • Java
  • 乱数について

    C の入門書を1冊読み終え、簡単なプログラムを作成しようとしているのですが、 早速分からないことが出たので教えて頂ければと思います。 --------------------------------------------- #include <stdio.h> #include <stdlib.h> #include <time.h> int main(void) { int num; int i = 0; while( i < 4 ){ srand(time(NULL)); num = rand()%100; printf("%d\n", num); i++; } return 0; } --------------------------------------------- 上記を実行したのですが、秒数を乱数の種としているため4回とも同じ値を取得してしまいます。 より高精度に秒数を取得することは可能でしょうか? もしくはこのようなかたちで4回ともに異なる数を得ることが出来る方法がありましたら教えて頂きたいと思います。

  • Perlの乱数について

    RedHat Linux ES2.1のperl v5.6.1にて初めてのプログラムを書いているものです。 Oracle9iに格納するDATE型のデータを大量に乱数にて作成しようとしているのですが、うまくいきません。 作成しようとしているのは2004年度か2005年度のある日付です(30日まで)。 例) 04-01-30 05-07-12 04-09-28 04-12-11 質問1.下のプログラムだと、年度が00,01,02,03,04,05の値をとり得てしまう。これを04か05に限定するにはどうすればよいか。 質問2.月・日が1桁の場合は0を頭につけたい。下のプログラムでは05-12-1となったり04-5-30となったりしてしまう。 #!/usr/bin/perl $a = 1; while($a < 100000){ $year_rand = int(rand(5)); $month_rand = int(rand(12))+1; $day_rand = int(rand(30))+1; print "0$year_rand-"; print "$month_rand-"; print "$day_rand,"; print "\n"; $a = $a+1; } 宜しくお願い致します。

    • ベストアンサー
    • Perl
  • オブジェクト指向プログラミング

    Perlのクラス定義の例題なんですが、わからないところがあります。 ファイルCapFile.pm package CapFile; sub new{ my $class = shift; my $path = shift; return(bless { ':path' => $path }, $class); } sub read { my $obj = shift; my $path = $obj->{':path'}; ..... ファイルcap-test #!/usr/bin/perl use CapFile; $cap = new CapFile ('/etc/termcap'); $cap->read(); ... サブルーチンreadにある my $path = $obj->{':path'}; なんですが、呼び出し側では引数がないのですが、$objには何が入っているんでしょうか。 そして$pathには何が入るんでしょうか。

    • ベストアンサー
    • Perl

専門家に質問してみよう