約 2,973,016 件
https://w.atwiki.jp/netscreen/pages/13.html
CPANなどで様々なモジュールが豊富にあり、シェルスクリプトでは実装が難しい処理が比較的短いコードで可能なスクリプト言語です。 YahooFinanceから株価データを取得する g++のインストール手順 YahooFinanceから株価データを取得する Web Scraperモジュールを使用して、Yahoo Financeから指定した銘柄の株価データをGETするPerlスクリプトです。 2つのスクリプトで実装しました。 ・ext_data.pl 標準入力で指定された Yahoo Finance の株価時系列ページのURLにアクセスして株価データだけを標準出力に表示するスクリプト。 ・ext_stock.pl スクリプト内で定義(直書き)した抽出期間と、標準入力で指定された銘柄コードから取得先のURLを生成して ext_data.pl を実行するスクリプト。 標準入力で、処理一時ファイル(第一引数)、結果ファイル(第二引数)、銘柄コード(第三引数)を指定して実行する必要があります。 結果ファイルに株価データがCSV形式で下記の順で記録されます。 "銘柄コード"、"日付"、"始値"、"高値"、"安値"、"終値"、"出来高"、"調整後終値" 実行例 $touch tmp_file $touch res_file.txt $perl ext_stock.pl tmp_file res_file.txt [取得したい銘柄コード(4桁)] ext_data.pl #!/usr/bin/perl ########################################################################### # 標準入力で指定されたyahooファイナンスの時系列データを抜き出すスクリプト # # 第一引数:指定銘柄の時系列データのURL # 第二引数:銘柄コード # ########################################################################### use strict; use warnings; use Web Scraper; use URI; use Encode; my $WebSite = $ARGV[0]; my $m_code = $ARGV[1]; # 日付、始値、高値、安値、終値、出来高、調整後終値の順 my $stock_list = scraper { process //tr[@bgcolor="#ffffff"]/td[1] , "sdata[]" = TEXT ; process //tr[@bgcolor="#ffffff"]/td[2] , "svalue[]" = TEXT ; process //tr[@bgcolor="#ffffff"]/td[3] , "hvalue[]" = TEXT ; process //tr[@bgcolor="#ffffff"]/td[4] , "lvalue[]" = TEXT ; process //tr[@bgcolor="#ffffff"]/td[5] , "evalue[]" = TEXT ; process //tr[@bgcolor="#ffffff"]/td[6] , "mount[]" = TEXT ; process //tr[@bgcolor="#ffffff"]/td[7] , "fvalue[]" = TEXT ; }; my $res = $stock_list- scrape( URI- new($WebSite) ); my @sdata = @{$res- {sdata}}; my @svalue = @{$res- {svalue}}; my @hvalue = @{$res- {hvalue}}; my @lvalue = @{$res- {lvalue}}; my @evalue = @{$res- {evalue}}; my @mount = @{$res- {mount}}; my @fvalue = @{$res- {fvalue}}; my $length = @sdata; # CVS形式で標準出力 for ( $_= 0; $_ $length; $_++){ print $m_code . ","; print encode( utf-8 ,$sdata[$_]), ",", "\""; print encode( utf-8 ,$svalue[$_]), "\"", ",", "\""; print encode( utf-8 ,$hvalue[$_]), "\"", ",", "\""; print encode( utf-8 ,$lvalue[$_]), "\"", ",", "\""; print encode( utf-8 ,$evalue[$_]), "\"", ",", "\""; print encode( utf-8 ,$mount[$_]), "\"", ",", "\""; print encode( utf-8 ,$evalue[$_]), "\"", "\n"; } ext_stock.pl #!/usr/bin/perl ############################################################## # Yahooファイナンスから株価時系列データを取得するスクリプト # # 第一引数:一時ファイル名 # 第二引数:結果ファイル名 # 第三引数:銘柄コード # ############################################################## use strict; use warnings; use Encode; my $start_y = 2011; # 取得開始年 my $start_m = 7; # 取得開始月 my $start_d = 15; # 取得開始日 my $end_y = 2011; # 取得終了年 my $end_m = 7; # 取得終了月 my $end_d = 15; # 取得終了日 my $tmp_file = $ARGV[0]; # 一時ファイル my $res_file = $ARGV[1]; # 結果ファイル my $m_code = $ARGV[2]; # 取得銘柄コード my $page_c = 0; # 時系列ページ数(50ずつインクリメントさせる) my $tmp; # 個別の銘柄データを一時的に格納する変数 my @lines; my $length; # YahooFinanceの時系列データのURL my $yf_url = "\"" . "http //table.yahoo.co.jp/t?s=" . $m_code . " a=" . $start_m . " b=" . $start_d . " c=" . $start_y . " d=" . $end_m . " e=" . $end_d ." f=" . $end_y . " g=d q=t y=" . $page_c . " z=" . $m_code . " x=.csv" . "\""; #print $m_code . "の時系列データを取得します。\n"; #print $yf_url . "\n"; # 一時ファイルの中身をクリア open (OUT, " $tmp_file") or die "$!"; print OUT ""; close(OUT); # 時系列データを取得する $tmp = `perl ext_data.pl $yf_url $m_code`; # 50件の時系列データを一時格納 open (OUT, " $tmp_file") or die "$!"; print OUT $tmp; close(OUT); # 取得レコード数チェック open (CSV_FILE,"$tmp_file"); @lines = CSV_FILE ; close(CSV_FILE); $length = @lines; #print $length . "\n"; if ($length 0) { # 時系列データを格納 open (OUT, " $res_file") or die "$!"; print OUT $tmp; close(OUT); # 50レコード以上ある場合のデータ取得処理 # (Yahoo Financeは1ページは50個単位でデータを表示する) while ($length 49) { $page_c = $page_c + 50; $yf_url = "\"" . "http //table.yahoo.co.jp/t?s=" . $m_code . " a=" . $start_m . " b=" . $start_d . " c=" . $start_y . " d=" . $end_m . " e=" . $end_d ." f=" . $end_y . " g=d q=t y=" . $page_c . " z=" . $m_code . " x=.csv" . "\""; ## print $yf_url . "\n"; # 一時ファイルの中身をクリア open (OUT, " $tmp_file") or die "$!"; print OUT ""; close(OUT); # 時系列データを取得する $tmp = `perl ext_data.pl $yf_url $m_code`; # 50件の時系列データを一時格納 open (OUT, " $tmp_file") or die "$!"; print OUT $tmp; close(OUT); # 取得レコード数チェック open (CSV_FILE,"$tmp_file"); @lines = CSV_FILE ; close(CSV_FILE); $length = @lines; ## print $length . "\n"; # 時系列データを格納 open (OUT, " $res_file") or die "$!"; print OUT $tmp; close(OUT); } #print $m_code . "の取得完了\n"; } g++のインストール手順 Perlモジュールをインストール時などで"g++"がないというエラーが出た場合は、"gcc-c++"をインストールする必要がある。 #perl -MCPAN -e shell #cpan install gcc-c++ # 略 #cpan quit
https://w.atwiki.jp/atwikimyj/pages/23.html
文字通りperlで実装するセッション管理。 <参考>CGI Session.pmでセッション管理 http //www.dab.hi-ho.ne.jp/sasa/biboroku/perl/session.html インストール linux上で [root@localhost] perl -MCPAN -e shell cpan install CGI session これで終わり。 利用 perlスクリプト内で use CGI Session qw/-ip_match/; #異なるipからのアクセスは認めない #Tutrial .podは -ip-match ,Session.pmは -ip_match .多分 -ip_match . my $session=CGI Session- new(undef,undef,{Directory= ./.session }); #セッションidの生成 .ディレクトリ.sessionは予め作っておく $session- expire( +1m ); #有効期限の設定.1分間 $session- param( name , john ); #セッション経由で引き渡す項目と値
https://w.atwiki.jp/k_tech/pages/11.html
Perl 目次 参考page perlで書く とほほのperl perl基礎入門 perl(wikipedia) ithread
https://w.atwiki.jp/perlstudy/pages/13.html
最初のプログラム use strict; use warnings; my $var = "Hello world!"; print $var,"\n"; 1;
https://w.atwiki.jp/wiki5_hks/pages/38.html
Perl のテキスト 結城浩,Perl言語プログラミングレッスン 入門編,ソフトバンクパブリッシング http //d.hatena.ne.jp/asin/4797312211 Perl の入手先 ActivePerl http //www.activestate.com/Products/ActivePerl/
https://w.atwiki.jp/pgmg/pages/15.html
perldoc 簡単な使い方 perldoc Perlの概要 perldoc perl1 rand関数の説明 perldoc -f rand 数と数列 用語確認 変数 変数の値 代入 代入演算子 = デバッグプリント コメントの付け方 二重引用符と一重引用符の違い 変数名を表示する場合 文字列に"を表示させたい場合 演算子 加算 + 減算 - 乗算 * 除算 / 0で割ることはできない 剰余 % 0では実行できない 累乗 ** 1増加 ++ 1減少 -- Tips 切捨 関数 intを使う print int(365 / 7); 52 四捨五入 0.5を加えてから関数intを使う my $x = 1234.6; print int($x + 0.5); ⇒1235 曜日の計算 現在から$day日後の曜日は、$day % 7 で計算可能 0:日曜、1:月曜、2:火曜、…6:土曜となる。 文字列 挿入 連結 注意事項 print "," と"."の違い print "Programming Lesson", "\n" (a) print "Programming Lesson"."\n"; (b) (a)は文字列2つ、(b)は文字列1つ 数値コンテキスト 演算子+は、両辺に数が来ることを期待する 数値と文字列を足してもOK ただし、"a" + "b"は数として判断できないので0として扱う 文字列コンテキスト 文字列結合演算子(.)は、両辺に文字列が来ることを期待する 数値123と456を(.)で結合すると文字列"123456"として扱われる。
https://w.atwiki.jp/programing_wands/pages/21.html
Perlについて Perlとは Perlの書き方
https://w.atwiki.jp/macdemysql6/pages/15.html
Perl perlからいろいろなDB操作を行う。 DBIのインストール cpanのページからDBIモジュールをMacOSにインストールする。 ”DBI-1.609.tar.gz”こんな感じのファイルをダウンロードし、インストール。READMEを読もう。簡単にインストールができるはず。 DBD-mysqlのインストール cpanのページからDBD-mysqlモジュールをダウンロードし、インストールする。こいつはインストールがよくわからない。DBIのインストールだけでは、MySQLサーバに接続できないのでDBIとセットでインストールする必要あり。 とりあえず、perl Makefile.PL- make- make installでインストールできたけど。 Digestのインストール cpanのページからDigestをダウンロードし、いつもの通りインストール。READMEには具体的なコマンドが書かれていなかったので備忘録をば、、、 siro ~/Unix/build/Digest-1.16 Pipin$ perl Makefile.PL siro ~/Unix/build/Digest-1.16 Pipin$ make siro ~/Unix/build/Digest-1.16 Pipin$ make test All tests successful. siro ~/Unix/build/Digest-1.16 Pipin$ sudo make install Password Writing //System/Library/Perl/5.8.6/darwin-thread-multi-2level/auto/Digest/.packlist Appending installation info to //System/Library/Perl/5.8.6/darwin-thread-multi-2level/perllocal.pod Perlスクリプト Step1 コネクト これができなきゃ始まらない。 #!/usr/bin/perl use DBI; my $rdb= DBI mysql gdb ; my $user= mysql ; my $pass= mysql ; # open mysql connection $dbh = DBI- connect($rdb, $user, $pass) or die "Cannt connect to MySQL"; # close mysql connection $dbh- disconnect;
https://w.atwiki.jp/astrophysics/pages/53.html
Perlのメモページ Perlを使ってごにょごにょできるようになるのを目指すページ。 Perl診断メッセージ Perlのエラーメッセージ等でわからないことがあれば。 サンプルコードによるPerl 入門 配列関係 配列の最後の要素にアクセスしたい @hoge という配列を作ったときの、配列の個数は $#hoge で手に入る。つまり、これは @hoge - 1 と同じ意味になる。 ファイル関係 改行を入れる。 perl -pe s/ /\n/g とすれば、空白を改行にすることができる。 CPANからStatisticsをインストール ここを参照のこと。 ファイルの入出力 スクリプト内でファイルを開きたいときは open (INFILE,"hoge"); とすれば、hogeがINFILEに入る。 ファイルに出力したいときは、 open (OUTFILE, " hoge"); とすれば、hogeに、OUTFILEが入る。 あと、openしものはきちんとcloseする。 close INFILE; close OUTFILE; (うまくない)例としては、 open (INFILE,"hoge"); open (OUTFILE," hogenew") while($str = INFILE ){ s/ / \ /g; print OUTFILE ; } close (INFILE); close (OUTFILE); など。 コメントアウト 一行だけのときは # を用いる。 複数行の場合は、 =comment =cut ではさめば良い。 長々しい整数値を書くとき 例えば、1234567890123という数字は、一瞬で何桁あるのかわかりずらい。そういう場合は、perlでは、 1_234_567_890_123 と書くことが許される。これは、1234567890123と同じ意味になる。 grep とあるテキストだったりリストの中から、特定の要素だけを取り出したいときは、grepを使うと便利な場合が多い。 例えば、1..1000までの間の奇数は、 @odd = grep { $_ % 2 } 1..1000; と1行で書くことができる。 map とあるリストの要素に対して、同じような変換をしたければ、mapを使うと便利な場合がある。 例えば、1..1000までの数に対して、おのおの2をかけた値のリストを作りたければ、 @even = map $_ * 2, 1..1000; とすればよい。
https://w.atwiki.jp/atwikimyj/pages/41.html
参考: http //www.rfs.jp/sb/perl/04/02.html 1.クラスは、パッケージ化されたモジュールの一種である。 2.パッケージ名がクラス名となる。 3.パッケージ内ではnewという名前のsubが必須である コンストラクタの作成 コンストラクタは、新しいオブジェクトを作成し、 そのリファレンスを返すメソッドです。クラス作成の順番は次のようになります。 newという名前でメソッドを定義する 第1引数のクラス名を受け取る bless関数でオブジェクトのリファレンスを返す 具体的には下記のようになります。 sub new{ # 暗黙のうちに引き渡されるクラス名を受け取る my $class = shift; # 無名ハッシュのリファレンスを作成 my $self = {}; # bless したオブジェクトリファレンスを返す return bless $self, $class; } blessした変数はクラスのオブジェクトに属することになるので、 普通の変数と区別するためにインスタンスと呼ばれます。ここでは単純に、 「blessの第1引数として指定した変数がインスタンス」とおぼえておいてください。 コンストラクタ・・・newメソッドでつくられたもの。クラスの名前を受け取る インスタンス・・・blessの第一引数で指定された変数。 bless インスタンス(new内で定義された変数のリファレンス),$class名(省略可能) 。 4.パッケージ内のsubがメソッドとなる。 ここで注意したいのは、このsubで普通に戻り値を渡せること。あまりよくないの だろうけど、、。 もちろんインスタンスの中の変数をいじるのが普通でおすすめ。 5.クラスを使う。 [1]newで新しいオブジェクトを作成する。 [2]オブジェクトから、subを呼び出す。 以上。