回答数
気になる
-
perlのプログラミングについて
perlのプログラミングについて詳しい解説をお願いいたします。 sub list_reverce{ my $old=shift; my&new=undef; while (my $cur=$old){ $old=$old‐>[NEXT]; $cur‐>[NEXT]=$new; } return $new } 全くの初心者です。連結リストに対してのreverseなのですが、わかりません。 ご回答お願いいたします。
質問日時: 2012/06/20 00:41 質問者: sfc-sfc
ベストアンサー
2
0
-
perl初心者です。宜しくお願い致します。
ファイルの容量が大きく。perlを使用してデータの集計をしています。 "A"がきたらflag1をたてなさい。 "B"がきたらflag2をたてなさい。 "C"がきたらflag3をたてなさい。 これでAとBとCを抜き取ること&AからCまでの時間を取得したのですが、 Bの数のmaxの値だけを抜き取りたいのですが、Bがきたときの数をすべて 出力してしまいます。下記の文だと、Bが4回きたら、1,2,3,4と出力してしまいます。 それで4だけを出力したいのですがどのように書き換えたらようか教えて頂けますでしょうか。 '----------------------------------------------------------------------------- open (IN,"< $ARGV[0].txt") or die; open (OUT,"> $ARGV[0]_out.txt") or die; $flag =0; my $a, $b, $c; $count = 0; ####################################################### while($line =<IN>){ ($time,$data) = split(/\s+/,$line); if($data eq "A") { $flag=1; $a = $time; #print OUT $line; #print OUT "\n"; } elsif($data eq "B"){ $flag=2; $count++; $count == $data; print OUT ("$count\n") } #print OUT ("$count\n"); elsif($data eq "C"){ $flag=0; $count=0; $b = $time; $c = $b - $a; print OUT ("time $c\n") } } -------------------------------------------------------------------------------
質問日時: 2012/06/18 12:54 質問者: kousuke_1230
解決済
6
0
-
perlでCSVをソートする方法について
perl初心者です。いつもありがとうございます。 perlでcsvファイル(1行のカラム数は200)、総行数は約3万行のファイルを37番目のカラム(-25以上25未満の数値データ)で降順ソートしその値によって行数がだいたい均等になるよう3分割し、2番目のカラムに文字でも数字でもよいのですがその4つのグループごとにフラグ(例えば1,2,3)を入れたいと思ってます。グループ化については境目の37番カラムの値は重複している場合が多いと思うのですがその場合は下(別に上でもかまいません)に入れるものとします。 ソートロジックは過去の質問を参照して理解しましたがグループ化しフラグを入れるルーチンがうまく作れません。下記のように作ったのですがこの先同じことを何度もやらなくてはならないので先に進めません。どなたかお助けください。最終的にやりたいことはカラム37でグループ化→カラム2にフラグを立てる、次にカラム2とカラム38(-25から0までの数値)でソートし同様に同じ行数になるようにグループ化→カラム3にフラグを立てる、さらにカラム2とカラム3とカラム39(-25以上25未満の数値データ)でソートし・・・同様に繰り返し最終的に1グループが100件(行)~150件(行)になるようにしたいのです。つまり約3万件のデータを3*4*2*4*2=192分割(5列の値で分類)したい、そしてどのような範囲で分割したかという情報も得たいのです。 use strict; use warnings; use utf8; use Encode; binmode STDOUT, ':encoding(utf-8)'; my $dir = './data'; # 処理するディレクトリ my $motoFile = 'customer.txt'; # もとファイル open my $fh, '<:encoding(cp932)', "$dir/$motoFile" or die 'ファイルが開けません。',"$!"; my %sorted; while (my $line = <$fh>) { my $key = (split /,/, $line)[37]; push @{$sorted{$key}}, $line; if (@{$sorted{$key}} == 1000) { open OUT, '>>:encoding(cp932)', "$dir/$key.tmp" or die "Can't open: $!"; print OUT @{$sorted{$key}}; close OUT; @{$sorted{$key}} = (); } } open OUT, '>:encoding(cp932)', "$dir/out.txt" or die "Can't open: $!"; foreach my $key (sort { $b <=> $a } keys %sorted) { if (-e "$key.tmp") { open IN, '<:encoding(cp932)', "$dir/$key.tmp" or die "Can't open: $!"; print OUT while <IN>; close IN; } print OUT @{$sorted{$key}} if @{$sorted{$key}}; } close OUT; #↓↓↓↓ここからフラグを作成するルーチン # 行数を調べ3つに分けるルーチン my @colum37; open IN, '<:encoding(cp932)', "$dir/out.txt" or die 'ファイルが開けません。',"$!"; my @in = <IN>; close IN; my $gyousuu = scalar(@in); my $amari = $gyousuu % 3; if ($amari == 0) { my $groupGyousuu = ($gyousuu-$amari)/3; print "総行数は$gyousuu","で、1グループの行数は$groupGyousuu","ほど、余りは$amari\n"; # あまりが0の時、group1は@inの0行 ~$groupGyousuu-1行まで # group2は@inの$groupGyousuu行 ~$groupGyousuu*2-1行まで # group3は@inの$groupGyousuu*2行~$groupGyousuu*3-1行まで foreach my $num (1..2) { push @colum37, (split /,/, $in[$groupGyousuu*$num])[37]; # これは境目の先頭の37番目 } print "@colum37\n"; #これでここまでは完成、分けるべき値がこの配列に入っている。 open OUT, '>:encoding(cp932)', "$dir/out.txt" or die "Can't open: $!"; foreach my $line (@in) { my @line = split /,/,$line; if ($line[37]>=$colum37[0]) { $line[1] = 1; }elsif ($line[37]>=$colum37[1] and $line[37]<$colum37[0]) { $line[1] = 2; }elsif ($line[37]<$colum37[1]) { $line[1] = 3; } $line = join (',',@line); print OUT $line; } close OUT; } elsif ($amari == 1) { この後未作成
質問日時: 2012/06/18 12:52 質問者: datamunging
ベストアンサー
4
0
-
perl:文字列を数値として変換 警告でないように
ある変数に 文字列として 数値が格納されている。 ノイズがあり、時には その変数に 英字数字のごちゃ混ぜ文字列が入るときがある。 文字列には数字だけが入っている前提で処理すると、時に その場合、Argument "○○"isn't numeric in addition・・・エラーがでてしまう。 このエラーを出力したくない、エラーログファイルに 読込エラーだったレコード内容を吐き出すようにしたい。 文字列が数字のみで構成されている場合は ○○を実行し、数字以外で構成されている場合は XXを実行するという if文を作成したいと考えている。よい判定方法を教えてください。 現在は、 $i=$i+0; if( $i =~ /^\d+$/ ){ ○○} else{ XX}としているが、 $i=$i+0; の行でエラーが出てしまうときがある。
質問日時: 2012/06/18 12:51 質問者: 1204533
解決済
6
0
-
元号判定:Perl初心者です
Perlにおいて、「元号を判定させる」ようにしたく、if-elsif文章を書いてみたのですが、上手くいきません。 (そもそも起動してくれないです・・・文章も合っているかわからないのですが。。) 年号を入力させて、 (meizi) X nenと表示させたいのです。 あと、明治以前の数字を入れたら、エラーと出すようにする。 被っている年号、例えば1912年と入れたら、meizi45nen/taisyou1nen ともしたいのですが、これらはどう入れたらいいのか分からなかったです。 どこを直せばいいのか、一部でもいいので、教えていただけると嬉しいです。 chomp($year = <stdin>); if($year<=1912 and $year>=1868){ $A=$year-1867 print("meizi $A nen \n"); } elsif($year<=1926 and $year>=1912){ $B=$year-1911 print("taisyou $B nen \n"); } elsif($year<=1989 and $year>=1926){ $C=$year-1925 print("syouwa $C nen \n"); } elsif($year>=1989){ $D=$year-1988 print("heisei $D nen \n"); }
質問日時: 2012/06/14 00:16 質問者: TKmark
ベストアンサー
4
0
-
WWW::Mechanizeについて教えてください
WWW::Mechanizeついて 質問させて頂きます。 他でも質問しておりますが、回答が無かったためマルチですがご了承ください。 WWW::Mechanizeを使ってログインしようとしてるのですが、うまく行きません。 <form action="login.cgi" name="form1" method="post"> <input id=id name='id' type='text' /> <input id=pass name='pass' type='text' /> <input type="submit" name="submit" value="LOGIN" /> 上記のフォームでは正常に取得できます。 しかし、ログインチェックをJavascriptからPHPに渡ってるページでの ログインがうまく行きません。 ソース //入力チェック /*login_checkたとえです*/ function LOGIN(){ $( "userid" ).className = ""; $( "userpassword" ).className = ""; if( login_check( "id" ) ){ if( login_check( "pass" ) ){ document.form1.action = "login.php"; document.form1.Btn_Type.value = "login"; document.form1.submit(); }else{ $( "pass" ).className = "error"; } }else{ $( "id" ).className = "error"; } } <form action="login.php" name="form1" method="post"> <input id=id name='id' type='text' /> <input id=pass name='pass' type='text' /> <input type="button" name="loginbtn" value="LOGIN" onclick='JavaScript:LOGIN();'/> 上記のフォームにログインしようと下記のようにしました。 my $loginUrl = 'http://hoge.jp/login.php'; my $mech = WWW::Mechanize->new(cookie_jar => $cookie_jar); $mech->agent_alias('Windows IE 6'); $mech->get($loginUrl); $mech->form_name('form1'); $mech->field( id => "test" ); $mech->field( pass => "test" ); $mech->click_button( value => 'Login' ); print $mech->content(); これで実行するとエラーがでます。 Can't call method "header" on an undefined value at /usr/lib/perl5/site_perl/5.8.8/WWW/Mechanize.pm line 2471. $mech->click_button( value => 'Login' ); 上記のclick_buttonでvalueを指定するとエラーになります。 WWW::MechanizeはJavascriptは実行できないのでしょうか? お知恵をお貸しいただけませんでしょうか。 説明不足かもしれませんがお願い致します。
質問日時: 2012/06/08 00:36 質問者: eiseima
ベストアンサー
1
0
-
PerlのSAX利用中にXSL変換するには?
お世話になります。 Windows7上のActivePerlで、 use XML::SAX; use XML::LibXSLT; モジュールを利用中に、 start_elementイベント時のタイミングで、 取得したタグ文字を、 そのタイミングで、XSL変換することは可能なのでしょうか? 今回の目的は、 XSL変換した後の各値を、 配列などにセットできればOKという状況ですので、 もしSAXで無理でしたら、 たとえばDOMやXPathなどで、 use XML::LibXML; use XML::LibXSLT; モジュールを利用中に、 随時取得したタグ文字を対象として、 そのタイミングで、XSL変換して配列にセットできれば、 それでもOKという状況です。 PS: (ちなみに、 XSLファイル内で、 <xsl:output method="xml"> を指定してから、 XSL変換を実施すると、 まとめてXSL変換自体は、 一通り正常に行われているのですが、 なぜか、出力されたファイルは、 XML形式ではなくて、 text形式でファイルが出力されてしまう為、 (タグ文字が全て空白文字に置換されています) XMLパーサが一切利用出来なくなってしまい、困っています) 以上になります。 もしご存じの方がいらっしゃいましたら、 よろしくお願いします。
質問日時: 2012/06/05 17:53 質問者: sublota22
ベストアンサー
2
0
-
PerlでHashのキーを制限したい
【環境】 WinXP / Perl 5.14.2 関数に値を受け渡す際にハッシュを利用しようと思っているのですが キーの typo が気になります。 検索すると Hash::Util::lock_keys() などがヒットしたのですが、 結局これはそのロジックが実行された際にエラーになる仕組みです。(よね?) できれば "プロトタイプを指定した関数に対して正しくない引数を指定した時" のように そのロジックが実行されていなくても Internal Server Error になるような方法があれば欲しいのですが… そういった方法はありますでしょうか。 ---------- 最終的にしたいことは、関数に対して 36 個の引数を渡す際に できるだけミスがないように、もしあった場合すぐわかるようにしたいです。 (しっかりテストすれば良いというのはなしで… 勿論テストはしっかりしますが) なのでハッシュでなくても何か良い方法があればそちらでも良いのですが、 引数を順番に指定する方法よりはハッシュで渡したほうが良いですよね? 他になにか渡し方あるでしょうか。 ---------- ご存知の方がいらっしゃいましたら教えてください。 よろしくお願いします。
質問日時: 2012/05/30 11:58 質問者: aki04
ベストアンサー
4
0
-
書き込んだばかりのcookieが読み込めません
cookieを書込んだ直後、書込めたか(cookieをオフにしていたり、cookieを書込めない携帯端末からのアクセスかもしれないので)確認をしようと、cookieを読込もうとしたのですが、cookieが書込まれているにもかかわらず情報を取得することができません 実験環境として、htmlファイルにボタンを作って、cgiへ飛び、そのcgi内でcookieを書込み、cookieが書込めたかどうかで分岐して、表示するようにしています (cgiを一度実行したあと一旦ブラウザで前のhtmlファイルに戻って)cookieが既に書込まれた状態で、改めてhtmlファイルのボタンを押せばcookieは読込めますが、最初にcookieを書込んだ時に同じcgi内で即読込みを行ったら読込めません 書込が完結する前に読込みに行っているから読込めないのかとも思い、読込み前にタイムラグを作っても見ましたがやはり読込めません どうすれば書込み直後に読み込めるのでしょうか? 色々ネットで調べても見ましたが、いっこうに解決策が見つかりません ご存じの方ぜひご教授下さい よろしくお願いします なお、下にperlのコードを書いておきます #クッキーを書込 $test{sid} = "12345"; &set_cookie($test{sid}); #タイムラグ use Time::HiRes; Time::HiRes::sleep(0.8); #クッキーを読込 ($cookie{test}) = &get_cookie; if(!$cookie{test}){ print "読み込めてない"; } else{ print "読み込めた"; } ######→読み込めません##### #クッキー書込sub sub set_cookie { local(@cook) = @_; local($gmt, $cook, @t, @m, @w); @t = gmtime(time + 2*60*60); @m = ('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'); @w = ('Sun','Mon','Tue','Wed','Thu','Fri','Sat'); $gmt = sprintf("%s, %02d-%s-%04d %02d:%02d:%02d GMT", $w[$t[6]], $t[3], $m[$t[4]], $t[5]+1900, $t[2], $t[1], $t[0]); foreach (@cook) { s/(\W)/sprintf("%%%02X", unpack("C", $1))/eg; $cook .= "$_<>"; } print "Set-Cookie: SID=$cook; expires=$gmt; path=/;\n"; } #クッキー読込sub sub get_cookie { local($key, $val, *cook); $cook = $ENV{'HTTP_COOKIE'}; foreach ( split(/;/, $cook) ) { ($key, $val) = split(/=/); $key =~ s/\s//g; $cook{$key} = $val; } foreach ( split(/<>/, $cook{'SID'}) ) { s/%([0-9A-Fa-f][0-9A-Fa-f])/pack("C", hex($1))/eg; push(@cook,$_); } return (@cook); }
質問日時: 2012/05/26 13:10 質問者: choei
ベストアンサー
3
0
-
Perlの正規表現について
以下は、OTRSというパッケージのソースコードに含まれる正規表現(置換)ですが、 どのような解釈がなされるのでしょうか? s{_<!--_[]_dtl:place_block:_$SubLayer_[_]_-->_}{$SubLayerString}xms; (アンダー・スコアは、実際にはスペースです) [ ]を文字集合だとすると、括弧の中にはスペースしか含まれていないので、 わざわざ括弧で括る必要がないように思えます。
質問日時: 2012/05/26 10:15 質問者: entree
ベストアンサー
1
0
-
perlのexistsについて
変数の値と別のハッシュのキーに一致するものがあれば、ハッシュの値を別のスカラー変数に代入したいのですが、その場合のプログラム例を教えてください!
質問日時: 2012/05/24 05:22 質問者: wiredrikou
ベストアンサー
3
0
-
Perlでのの抜き出し方法
入力ファイルには AAA␣aaa␣AaAa というように文字列がスペースおきに3つ記載されている文が1行ある場合、 文の2つ目のaaaのみを変数に格納したい場合のプログラムを教えてください。 ␣は空文字です
質問日時: 2012/05/24 05:18 質問者: wiredrikou
ベストアンサー
2
0
-
Perlのアルゴリズムについて教えてください!
データファイルAとデータファイルBからデータを受け取って、データファイルB中の第i番目の文Siの重要度を式1に基づいて計算して、重要度と順位(重要度の高い順に1位、2位、、)を各文Siに付与するアルゴリズムを考える場合、式1のWi,jは文Siに出現するj番目の単語で、niはSiに出現する単語の数となる。Wi,jの出現頻度はファイルAから得られるものとする。 /*データファイルA*/ はじめ:␣12 改行 こる:␣1 改行 いく:␣23 改行 みせ:␣4 改行 ... というように前に文字列(基本形)が入り後ろに数字が記載されているデータ /*データファイルB*/ はじめ␣はじめ␣形容詞 改行 こる␣こる␣形容詞 改行 ... EOS 改行 ... ␣は空文字 1.ファイルAにまだ読み込んでいない行がある限り繰り返す 1-1.ファイルから一行読み込む 1-2.その行の基本形用のカウンタを用意して、そのカウンタにその基本形の出現頻度を代入する。 2.文番号カウンタと文重要度変数を用意して、初期値をそれぞれ1と0にする。 3.データファイルBにまだ読み込んでいない行がある限り繰り返す 3-1.ファイルから1行読み込む 3-2.もしその行がEOSであれば、文番号カウンタと文重要度変数の値を出力する。その後、文重要度変数を0にして、文番号カウンタを1増やす。 3-3.これ以降のアルゴリズムが解けないので教えてください。
質問日時: 2012/05/23 15:47 質問者: wiredrikou
解決済
1
0
-
Perlについて教えてください!
入力ファイルには AAA␣aaa␣AaAa 改行 BBB␣bAb␣BbBb 改行 CCC␣Abc␣CcCc 改行 DDD␣.... というように文字列がスペースおきに3つ記載されていて最後は改行されている文が複数行ある場合、 文の2つ目のaaa、bAb、Abc…のみを配列に格納したい場合のプログラムを教えてください。
質問日時: 2012/05/23 11:39 質問者: wiredrikou
ベストアンサー
2
0
-
パスワード自動生成スクリプトについて
solaris10(x86)のOSでユーザーパスワードを自動変更するためのスクリプトを作成しています。 ※使用言語はperlでExpectモジュールを使っています。 仕様としては以下のパスワード制限を満たす文字列を自動生成し、 リストファイル(list.lst)を元にExpectモジュールを使って、 ユーザーパスワードを自動変更後に結果をファイル(result.log)へ出力します。 パスワード制限 ・アルファベット大文字小文字(1文字以上)含む ・数字を(1文字以上)含む ・記号を(1文字以上)含む ですが、実際に変更しようとすると、 稀に記号を含まないパスワードが出来てしまいます。 以下の場合は「test1」ユーザーがそれに当たります。 # cat result.log User: test1 password: 14P2YiZy User: test2 password: @u1iXr%q User: test3 password: EQ2t6H(6 rand関数の使い方が良くないのか、 正常に記号部分の配列にpushされていないのか、 正直お手上げです。 以下にスクリプトの内容を記載しますので、 記号含むパスワードを自動生成するにはどうしたらよいか、 どなたかアドバイス頂けませんでしょうか。 宜しくお願い致します。 #-------------------------------- #!/usr/bin/perl -w use strict; use File::Copy; use Expect; ##### password configuration ##### my $lng = 8; #Length my $num = 1; #Number (0=disabled, 1=enabled) my $cap = 1; #Upper (0=disabled, 1=enabled) my $sml = 1; #Lower (0=disabled, 1=enabled) my $mark = 1; #Symbol (0=disabled, 1=enabled) my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(time); $mon += 1; $year += 1900; ##### Variable initialization ##### my $ps; my @words; ##### log files ##### my $LGFILE = 'result.log'; my $LGFILE_OLD = "result.log.${year}${mon}${mday}"; ##### file list PATH ##### my $file='list.lst'; my $SADW = '/etc/shadow'; if ($num == 1) { push @words, (0..9); } if ($cap == 1) { push @words, ('A'..'Z'); } if ($sml == 1) { push @words, ('a'..'z'); } if ($mark == 1) { push @words, ('#', '$', '%', '(', ')', '-', '=', '^', '~', '|', '@', '`', '[', ';', ':', '+', '*', '/', '?', '_'); } if (-e "$LGFILE_OLD"){ exit(1); } copy "$SADW", "$SADW.${year}${mon}${mday}" or die "Copy failure $!"; chmod(0400, "$SADW.${year}${mon}${mday}"); if (-e "$LGFILE"){ move("$LGFILE", "$LGFILE_OLD"); chmod(0400, "$LGFILE_OLD"); } open(F, "<$file") or die "Cannot open $file: $!"; while( my $line = readline F ){ chomp($line); open(IN, ">>$LGFILE"); for (my $var = 0; $var < $lng; $var++) { my $words_num = @words; $ps = $ps . "@words[rand($words_num)]"; } my $command = Expect->spawn("passwd ${line}") or die "Can't start program... $!\n"; $command->log_stdout(0); $command->expect(1, "New password:"); print $command "$ps\n"; $command->expect(1, "Re-enter new password:"); print $command "$ps\n"; print IN "User:\t${line}\n"; print IN "password:\t${ps}\n"; $command->soft_close(); undef $ps; chmod(0400, "$LGFILE"); close(IN); } close(F); exit(0); #--------------------------------
質問日時: 2012/05/22 21:55 質問者: noname#159383
ベストアンサー
2
0
-
Windows 7でのカレントディレクトリについて
エクスプローラからPerlを起動する際のカレントディレクトリが、Windows 7 (x64) と Windows XPで違ってしまいます。 Windows XPの場合は起動した.plファイルの場所がカレントディレクトリとなり、特に問題はないのですが、Windows7の場合 C:\Windows\System32 がカレントディレクトリになってしまうようです。 以下の前提条件で、Windows 7 でも XPと同様の動作を実現する方法はないでしょうか。 [起動方法] .plファイルを右クリック ⇒「プログラムから開く」⇒ Perl Command Line Interpriter (既定のプログラムはメモ帳に設定) [環境] Windows (7 x64 or XP) + ActivePerl 5.14.2
質問日時: 2012/05/21 17:40 質問者: blackrod
ベストアンサー
3
0
-
Perlを使った単語出現カウント
コマンドライン引数で 入力ファイルからデータ受け取って結果を出力ファイルに書き込みたいのですが、プログラムは #!/usr/bin/perl while ( <> ) { @words = split(" "); $wc{@words[0]} += 1; } foreach $key (keys %wc) { print "$wc{$key} $key\n"; } で今のコードでは、コンソールに出力されるだけとなってしまいます。 ファイル入出力を行うにはどうすればいいですか?
質問日時: 2012/05/17 10:01 質問者: wiredrikou
ベストアンサー
1
0
-
ActivePerlへXML::LibXSLTを!
Windows7上にインストール済のActivePerlへ 「XML::LibXSLT」モジュールを 追加でインストールする方法を教えてください。 (ちなみに、以前に、XML::LibXML;はインストール済であり、 今も正常に動いているのですが、 以前と同じ方法 ↓ コマンドライン上から、 ppm-shell upgrad -i install XML::LibXSLT を実行すると、 ”ppm install failed: Can't find any package that provides XML::LibXSLT” エラーメッセージが出て、 インストール出来ない状況です。 なお、Windows7内に対して、 libxslt(xsltprocツール)をインストールして、 xsltproc --version を実行すると正常にバージョン内容が表示されている状況です。 しかし、 Eclipse3.6の、Perlソース内、 「use XML::LibXSLT;」 行のみ、 ×印の赤丸印が消えない(XML::LibXSLTがインストールされていない為) 状況です。 以上になります。 よろしくお願いします。
質問日時: 2012/05/16 16:10 質問者: sublota22
ベストアンサー
1
0
-
intの挙動?
Perlのintをつかって整数化をしているのですが、すこし挙動がおかしいというか 正確な数値が出ませんので質問させていただきました。 $aaa = 21000*0.7; $aaa = int($aaa); print $aaa; 結果:14699 となります。 21000×0.7は14700のはずかと思いますが、なぜか14699になってしまいます。 どう考えてもわからなくなってきました。 どなたかご教授いただけませんでしょうか?
質問日時: 2012/05/15 14:03 質問者: titikun00
ベストアンサー
1
0
-
XML(DTD)の<!ENTITYを読み込むには?
Perlで、XMLのDTD内の、 たとえば以下のような ↓ <!ENTITY rt4 "ルーチン4"> (キー”rt4”と、値”ルーチン4”)を、 読み込むには、どうすればよいのでしょうか? 単純にXML(DTD)をテキストファイルとしてオープンして、 正規表現などで読み込むのではなく、 この<!ENTITY~ タグを利用して、 簡単に読み込める方法があるのでは? と思い、ネット上を探しておりましたが、 具体的な方法が見つけられなかった為、 ご質問させていただきました。 よろしくお願いします。
質問日時: 2012/05/14 22:14 質問者: hohoemikun
ベストアンサー
1
0
-
1ファイルずつ読み込みたい
ウィンドウズ環境でactive perlを利用しています。 あるディレクトリーの中に2000位のファイルが入っており、このファイルを読み込んで置換処理を行うため下記のようなperlを作っています。 1ファイルはおおよそ3000行くらいです。 foreach(<*.html>) { open(IN_FILE, $_) || die; open(OUT, ">$_.tmp") || die; @record=<IN_FILE>; foreach $record (@record){ $record =~s/aaa/bbb/isg; } print OUT @record; close( IN_FILE); close( OUT); rename("$_.tmp", $_) ; } 当たり前かもわかりませんが、メモリー不足になり処理が中断します。 ディレクトリーの中のファイル数を600程度に少なくすると処理が完了します。 そこで質問なのですが、ディレクトリーの中のファィルを一度に全部読み込まず、1ファイルずつ順次読み込んでいくことはできないでしょうか。 最初の1行目のforeachをwhileに変えたりしたのですがうまくいきません。 対応策あればご教示ください。
質問日時: 2012/05/13 08:50 質問者: shishi16
ベストアンサー
3
0
-
無駄な改行を何とかしたいです
perl cgiでまだまだわからないことだらけなので、まだ質問します・・・ print $q->start_html(-title=>"画面", -BGCOLOR=>'#ffffff'), $q->header(-charset=>"Shift_JIS"),# Content-type: text/htmlを書き出します $q->p('<body bgcolor="#ffffff" text="#000000" link="#0000ff" vlink="#ff00ff">'), $q->p('<FONT COLOR="red">aaa</FONT>'), $q->hr, $q->p('<form method="post" action="ppp.cgi">'), $q->p('<FONT color="blue">【a】</FONT>'), $q->p('<INPUT TYPE="text" NAME="mmm" VALUE="" SIZE="25" MAXLENGTH="25">'), $q->p('<FONT color="blue">【b】</FONT>'), $q->p('<INPUT TYPE="text" NAME="nnn" VALUE="" SIZE="25" MAXLENGTH="25">' $q->p('<FONT color="blue">【c】</FONT>'), $q->p('<INPUT TYPE="text" NAME="ttt" VALUE="" SIZE="25" MAXLENGTH="25">' $q->p('<FONT color="blue">【d】</FONT>' $q->p('<select name="question" size="1" multiple="multiple">' $q->p('<option selected="selected" value="aaa">aaa?</option>'), $q->p('<option selected="selected" value="bbb">bbb</option>'), $q->p('<option selected="selected" value="ccc">ccc</option>'), $q->p('</select>'), $q->p('<FONT color="blue">【e】</FONT>'), $q->p('<INPUT TYPE="text" NAME="ans" VALUE="" SIZE="25" MAXLENGTH="25">'), $q->p('<FONT color="blue">【f】</FONT>'), $q->p('<textarea name="freeans" rows="5" cols="30" value="$initText" wrap="hard">$initText</textarea>'), #$q->p('<textarea name="freeans" rows="5" cols="30" value=$initText wrap="hard">あいうえお </textarea>'), $q->p('<input type=submit value="送信">'), $q->p('</form>'),# 送信データここまで $q->end_html; としているのですが、表示のほうが 【a】 テキストボックス入力欄 【b】 テキストボックス入力欄 【c】 テキストボックス入力欄 ・・・ と、テキストボックス入力欄の上下に改行が入っていしまいます。 消す方法はございますか?pタグがダメなんでしょうか? それとContent-Type: text/html; charset=Shift_JIS が最上部に表示されてしまいます。 $q->header(-charset=>"Shift_JIS"),# Content-type: text/htmlを書き出します の行が原因だということはわかるのですが・・・・変更方法がわからないです。 教えて頂きたいです。よろしくお願いします。
質問日時: 2012/05/09 17:33 質問者: kmwrod
ベストアンサー
1
0
-
perl cgiにて作成したtextareaで改行
perl cgiにて作成したtextarea内に初期文字列を入力しておくプログラムを組んだのですが、 その初期文字列内で改行を行いたいと思い、何種類か改行を入れてみたのですが、 うまくいきません。 $testbr = "\r\n"; print $q->start_html(-title=>"123", -BGCOLOR=>'#ffffff'), (中略) q->p('<textarea name="freeans" rows="5" cols="30" value=$initText wrap="hard">あいうえお"$testbr"かきくけこ </textarea>'), (中略) $q->end_html; textarea内に あいうえお(改行) かきくけこ という表示をしたいのですが・・・
質問日時: 2012/05/09 16:57 質問者: kmwrod
ベストアンサー
2
0
-
Perlで変数内の日本語が文字コードに変換される
お世話になります。Googleやbingなどで調べて見ましたが検討もつかず困っております。 PerlでDBIを使用し、データベースのテーブルAに対してSelectした場合に、fetchrow_hashrefを使用しSelect結果を取得した場合に、テーブルの列名が文字ではなく文字コードが格納されてしまいます。 テーブルAの列名はUTF-8の日本語文字になります。 以下、列名 ID|登録者|登録日 fetchrow_hashrefを使用した場合、以下のように返ってきます。 $VAR1 = { "\x{767b}\x{9332}\x{8005}" => '106.190.xxx.xxx', "\x{767b}\x{9332}\x{65e5}" => '2012-05-06 00:52:40.39496', 'id' => 38 }; 問題は目的のデータに対して列名('登録日'など)で参照する事が出来ない事ですが、今のままテーブルの列名は日本語のままで回避する方法をご教授いただけないでしょうか? hashrefを使いたい理由はテーブルの列順番が変わった場合でもプログラム上の変更を減らすために、列名にて参照したいためです。ですのでarray系の取得メソッドはなるべく使わないようにしたいです。 出来ればなぜこのようなことが起こるのか原因も含めてご教授いただけると大変助かります。。 ちなみに、データベースはPostgreSQLの8.2で日本語文字に対応していることは、自分でselectなどのコマンドを叩き確認済みです。 ヒントでもかまいませんので、どうかよろしくお願いいたします。
質問日時: 2012/05/06 22:27 質問者: takeo1983
ベストアンサー
4
0
-
win32::mediaplayerについて
Perlモジュールwin32::mediaplayerを使って以下のスクリプトを作成しました。 (使用環境 Apache HTTP Server 2.2(win32), Perl : ActivePerl-5.14.2.-MSWin32-x86) use Win32; use Win32::MediaPlayer; $winmm = new Win32::MediaPlayer; $winmm->load('****.wav'); $winmm->play; これで、コマンドラインからは実行できるのですが、これを以下のように <!--#exec cgi= "../cgi-bin/****.pl" --> SSIで実行できないのでしょうか? 試行錯誤の末、 モジュール Audio::Beep,と Win32::MediaPlayer,の組み合わせで以下のようにしたら <!--#exec cgi= "../cgi-bin/****.pl" --> で実行できました。 use Win32::API; use Win32; use Audio::Beep; use Win32::MediaPlayer; $winmm = new Win32::MediaPlayer; $winmm->load('****.wav'); $winmm->play; $beeper = Audio::Beep->new(player => 'Audio::Beep::Win32::API'); # $music = "g' f bes' c8 f d4 c8 f d4 bes c g f2"; $music = "g' f f f"; $beeper->play( $music ) 思うに$winmm->load('****.wav');で指定したwavファイルが $music = "g' f f f";の音声データを上書きしているのであろうと思うんですが、いまひとつ理解できません。これも合わせてお教え願えれば幸いです。 よろしくお願いします。
質問日時: 2012/05/06 10:57 質問者: hicolsugi
解決済
3
0
-
perlでPORT監視の方法
PORT監視がしたいのですが、下記のように書くと ”NG”にならずに常に”OK”となってしまいます。 使用していないPORTを指定しても常に”OK”となります。 LAN内ではうまく動かないのですが、何か良い方法がありましたら アドバイスをお願い致します。 #!/usr/bin/perl use Net::Ping; $target = '192.168.xxx.xxx'; $ping = Net::Ping->new("tcp", 2); $ping->{port_num} = 3306; if ($ping->ping($target)) { print "OK\n"; } else { print "NG\n"; } $ping->close(); exit;
質問日時: 2012/05/04 02:48 質問者: Tommy4ever
ベストアンサー
1
0
-
HTML::Templateでカレンダー出力したい
Calendar::SimpleとHTML::Templateを利用しtableタグを使ったカレンダー表示を行いたいのですが、1週間ごとに<tr>タグで区切るループの記載の仕方がわかりません。 見本にした他所様のbaseサブルーチンでは1週間ごとに<tr>タグで区切られたきれいなカレンダー表示がされますが、myplanサブルーチンでは現状<tr>タグで区切る部分が作られていないため、日にちの数字が1週間ごとに区切られずにずらっと横並びとなってしまっている状態です。 Calendar::Simple http://perldoc.jp/docs/modules/Calendar-Simple-1.07/Simple.pod HTML::Template http://perldoc.jp/docs/modules/HTML-Template-2.6/HTML/Template.pod baseでの表示 日月火水木金土 12345 6789101112 13141516171819 20212223242526 2728293031 現状のmyplanでの表示 日月火水木金土 12345678910111213141516171819202122232425262728293031 use HTML::Template; use Calendar::Simple; local $cal = calendar; local @caps = qw( 日 月 火 水 木 金 土 ); local @wdays = qw( sunday monday tuesday wednesday thursday friday saturday ); #&base; &myplan; exit; sub base{ print "Content-type: text/html; charset=\"utf8\"\n\n"; print qq|<table>\n|; print qq|<tr>\n|; for (my $i = 0; $i < 7; $i++) { my $cap = $caps[$i]; my $wday = $wdays[$i]; print qq|<th class="$wday">$cap</th>\n|; } print qq|</tr>\n|; foreach my $week ( @$cal ) { print qq|<tr>\n|; for (my $i = 0; $i < 7; $i++) { my $mday = $week->[$i]; my $wday = $wdays[$i]; print qq|<td class="$wday">$mday</td>\n|; } print qq|</tr>\n|; } print qq|</table>\n|; }#end base sub myplan{ for (my $i = 0; $i < 7; $i++) { my %row_data; $row_data{cap} = $caps[$i]; $row_data{wday} = $wdays[$i]; push(@loop_data, \%row_data); } foreach my $week ( @$cal ) { for (my $i = 0; $i < 7; $i++) { my %row_data; $row_data{mday} = $week->[$i]; $row_data{wday} = $wdays[$i]; push(@loop_data_3, \%row_data); } } my $template = HTML::Template->new( filename => "html_template/calender.tmpl", ); $template->param( THIS_LOOP => \@loop_data, THIS_LOOP3 => \@loop_data_3 ); print "Content-type: text/html; charset=\"utf8\"\n\n"; print $template->output; }#end myplan ##calender.tmpl <html> <body> <table> <tr> <TMPL_LOOP NAME=THIS_LOOP> <th class="<TMPL_VAR NAME=wday>"><TMPL_VAR NAME=cap></th> </TMPL_LOOP> </tr> <tr> <TMPL_LOOP NAME=THIS_LOOP3> <td class="<TMPL_VAR NAME=wday>"><TMPL_VAR NAME=mday></td> </TMPL_LOOP> </tr> </table> </body> </html>
質問日時: 2012/05/02 20:14 質問者: perlerz10
ベストアンサー
1
0
-
なぜか祝日判定がうまくいきません
Calendar::Japanese::Holiday を利用して以下の様な祝日判定のルーチンをテストしているのですが、なぜか#(1)あるいは#(2)のようにサブルーチン内部で値を明示してやらないと正常動作(祝日判定)しません。 そこでCalendar::Japanese::HolidayのisHolidayルーチンの方に値が正常に渡っていないのかと考え、#(3)のようなチェック用のソースを組み入れてみたりもしたのですが、$year, $mon, $dayそれぞれ正常に値は渡っていました。 どのようにすれば正常動作するようになるのでしょうか? my %spdate = (#すでに$y、$m、$dにはそれぞれ2012、05、05と値が入っています。 'year' =>$y, 'month' =>$m, 'day' =>$d, ); $spdate = \%spdate; &check_date($spdate); sub &check_date{ my($spdate) = @_; #($spdate->{year},$spdate->{month},$spdate->{day})=(2012,05,05); #(1) #my $jpholiday = isHoliday(2012,05,05); #(2) my $jpholiday = isHoliday($spdate->{year},$spdate->{month},$spdate->{day}); if($jpholiday){ push(@error, 'It is a holidays today'); } }#end #Calendar::Japanese::Holiday #http://search.cpan.org/~kztomita/Calendar-Japanese-Holiday-0.03/ sub isHoliday { my ($year, $mon, $day, $furikae) = @_; #test #(3) print "Content-type: text/html; charset=utf8\n\n"; print "$year"; print "$mon"; print "$day"; my $holidays; if ($year == $Cache_holidays_Year && $mon == $Cache_holidays_Month) { $holidays = $Cache_holidays;# From Cache } else { $holidays = getHolidays($year, $mon, 1); return if not defined $holidays; # Cache $Cache_holidays = $holidays; $Cache_holidays_Year = $year; $Cache_holidays_Month = $mon; } return if !exists $holidays->{$day}; return if (!$furikae && $holidays->{$day} eq $FurikaeStr); return $holidays->{$day}; }#end
質問日時: 2012/05/01 16:44 質問者: perlerz10
ベストアンサー
4
0
-
perlプログラム
(1)のプログラムではtest.txtの内容を表示することができました。 (2)ではaaaが表示されつづけると思いますが、何も表示されません。 なにかまちがっていると思いますが、わかりません。 よろしくお願いします。 --------------------------------------------------------------------------------- (1) --------------------------------------------------------------------------------- sub Main() { LAST:while(){ if(defined(open(FILE,"test.txt"))){ flock(FILE,1); while(<FILE>){ print $_; last LAST if($_ == 0); } } sleep(1); } close(FILE); } &Main(); ------------------------------------------------------------------------------- (2) ------------------------------------------------------------------------------- sub Main() { LAST:while(){ if(defined(open(FILE,"test.txt"))){ flock(FILE,1); while(<FILE>){ print "aaa"; ←変更箇所 last LAST if($_ == 0); } } sleep(1); } close(FILE); } &Main(); -------------------------------------------------------------------------------
質問日時: 2012/04/27 11:50 質問者: Vernal412
解決済
2
0
-
Perl言語でファイル入出力プログラムについて
Perlでファイル入出力のプログラムをコーディングしたいのですが、いまいちハッシュが理解しずらく困っています。わかる方よろしくお願いします。 moto.pl の中にあらかじめ AAA aaa AaAa AAaa BBB bbb BbBb BBbb CCC ccc CcCc CCcc AAA aaa AaAa AAaa .... というように一行ずつ文字列があり、この場合では最初の大文字AAAが二つあるので、その結果を例えばsaki.plに AAA 2 ... というように出力するプログラムを教えて頂けませんか?
質問日時: 2012/04/27 07:00 質問者: wiredrikou
ベストアンサー
1
0
-
print文で&(半角)文字のエラーを解消するには
よろしくお願いいたします。 Perlのprint文で、&(半角の&)文字を含む 文字列を、テキストファイルに出力しようとすると、 ”undeclared entity[Ln: 37, Col: 22]” という、その&文字の箇所で、 エラーが出て、強制終了されてしまい、 そこまで(途中まで)しか、テキストファイルに出力されません。 どうすれば、Perlで、 &(半角の&)文字を含む文字列を、 テキストファイルに出力出来るようになるのかを 教えてください。 どうぞよろしくお願いいたします。
質問日時: 2012/04/26 17:25 質問者: sublota22
ベストアンサー
4
0
-
[Perl]長すぎるif文を簡単にしたい
初めまして、説明がうまく伝わらないかもしれませんがよろしくお願いいたします。 同じ値がN回続いた場合、その値をすべて出力するPerlのプログラムを作成中なのですが とても長くなってしまい、スッキリとしたプログラムにしたいのです。 どうかお知恵を貸していただけないでしょうか。 現在、&&を使用してこのようになっています。 例:Aの値が5回連続して同じ値だった場合 for($i=1; $i<=1000; $i++){ if(@A[$i]==@A[$i+1] && @A[$i+1]==@A[$i+2] && @A[$i+2]==@A[$i+3] && @A[$i+3]==@A[$i+4]){ for($j=0; $j<=9; $j++){ printf "@A[$i+$j], @B[$i+$j], @C[$i+$j]"; } } } データはすべて数値で、スペース区切りのテキストデータです。 # ヘッダー 0.00 2.0 11.5 0.01 6.3 17.2 0.01 2.1 14.2 0.01 1.2 14.3 0.01 2.1 14.3 0.01 3.7 14.3 0.01 3.7 14.3 0.01 4.1 14.3 0.06 4.1 14.3 0.01 4.1 14.9 0.01 4.1 14.9 0.03 4.1 14.8 ・・・ 連続した値が50回、100回だった場合になるとif文の条件式が長くなってしまい その都度変更がとても大変になってしまい困っています。 どうか、よろしくお願いいたします。
質問日時: 2012/04/24 17:45 質問者: Lena_River
ベストアンサー
7
0
-
文頭・文末の記号をチェック
お世話になります。 Perlでの正規表現について質問させていただきます。 とあるフォームに入力した値が、特定の条件を満たさない場合に エラーメッセージを表示させたいのですが、うまくいきません。 以下に条件を記載いたします。 条件 1. 小文字、半角英数字、(一部の)記号で2~32文字以内。 2. 使用できる記号は、ハイフン(-)・アンダーバー(_)・ドット(.)のみ。 3. 上記記号が使用できるのは文中のみで、先頭及び末尾には使用できない。 当方、Perl初心者でして、 解説サイト等から、見よう見まねで試してみたところ、 条件1と2は、何とか成功したのですが、 3の記述の仕方がどうしてもわかりません。 どなたか、おわかりの方がいらっしゃれば ご教授いただけませんでしょうか。 if($FORM{"account"} ここの記述の仕方がわかりません{ $msg = '文頭・文末に記号を使用する事はできません'; &error; }
質問日時: 2012/04/23 14:07 質問者: hige_bear
ベストアンサー
2
0
-
Perl openの戻り値
いつもお世話になっております。 下記件でご教授頂けないでしょうか [Perlにおいてopen(INS,$common)の時の戻り値で後続を処理しない方法] (dieではない) [ソース] my $command = "grep -c ,'abc' acount.log |"; open (INS, $command) || die "command error $command \n "; 上記の場合 grepの結果が 0件の場合 row number 0 is out of range 0..-1 とメッセージが出ます。 どうにか回避したいのですが、 回避案あれば教えて下さい。
質問日時: 2012/04/19 14:59 質問者: prr4e
解決済
2
0
-
正規表現の中の変数の表記のしかた
初歩的な質問なのですが、 if($test =~ /&n=$in{n}&/){} という正規表現は正しいのでしょうか? $in{n}が変数になるのですが、何か"などで囲まないといけないとかありますでしょうか? それとも別の箇所(例えば&や;)をエスケープしてやる必要があるのでしょうか? エラーは返ってきませんが、思った行動をおこしてくれず(必ずヒットするものがあるはずなのにif節内に行ってくれない)、また、何度もトライアンドエラーできる環境下のものではなく、さらにネットで正規表現について検索しても、持っている本に羅列されている内容ばかりで、今望んでいることについて触れているページが見つからないため、みなさまのお力お借りしたく思います。 どうぞよろしくお願いします。
質問日時: 2012/04/09 20:12 質問者: choei
ベストアンサー
6
0
-
Perl if 文内にforeachを入れる場合
if ($pattern eq 'p2') { foreach $key (sort{ ($re_key{$b} <=> $re_key{$a}) || $b cmp $a } keys %re_key) { } else { foreach $key (sort{ ($b <=> $a) || $b cmp $a } keys %re_key) { } $pattern の選択で検索の種類を切り替えたいのですが、上のように指定するとコンパイルエラーになってしまいます。 foreach 文以降の処理は全く一緒なので、foreach 文の行だけ変更したいのですが、どうすれば良いですか?
質問日時: 2012/04/09 03:25 質問者: dyo
解決済
4
0
-
cpanの途中の"Killed"について
自分の浅い知識では手詰まりとなりどなたか助けていただきたいです。 さくらのレンタルサーバのスタンダードプランにおいて、"Facebook::Graph"のモジュールを使いたいので、まずはユーザ領域にCPANをインストールするところから始めているのですが、CPANの途中でどうしても"Killed"となり中断され、先に進めないでいます。 手順としては、以下のサイトを参考にしています。 http://www.ookawara.com/archives/155 http://www.otsune.com/bsd/tips/usercpaninstall.html http://d.hatena.ne.jp/charsbar/20080222/1203662508 ■手順1 さくらのレンタルサーバ(スタンダードプラン)でSSHとFTPで接続。 仮にユーザディレクトリ名を「hoge」とした場合、 /home/hoge/直下には、まだ.cpanフォルダもlocalフォルダも無い状態です。 ■手順2 % perl -MCPAN -e shell と打ち、最初の Would you like me to configure as much as possible automatically? にNoで答えて、手動で設定をしていきます(基本的にはほとんどEnterキー押下)。 ■手順3 /home/hoge/.cpan/CPAN/MyConfig.pm をFTPでダウンロードして、以下を書き換え ----------- 'make_install_arg' => qq[SITEPREFIX=$ENV{HOME}/local], 'makepl_arg' => qq[PREFIX=~/local], 'mbuildpl_arg' => qq[./Build --install_base $ENV{HOME}/local], ----------- 結果、MyConfig.pm全体の中身は以下のようになっています。 これを再度FTPで上書きアップロードします。 ----------- $CPAN::Config = { 'applypatch' => q[], 'auto_commit' => q[0], 'build_cache' => q[10000], 'build_dir' => q[/home/hoge/.cpan/build], 'build_dir_reuse' => q[0], 'build_requires_install_policy' => q[ask/yes], 'bzip2' => q[/usr/bin/bzip2], 'cache_metadata' => q[1], 'check_sigs' => q[0], 'colorize_output' => q[0], 'commandnumber_in_prompt' => q[1], 'connect_to_internet_ok' => q[1], 'cpan_home' => q[/home/hoge/.cpan], 'curl' => q[/usr/local/bin/curl], 'ftp' => q[/usr/bin/ftp], 'ftp_passive' => q[1], 'ftp_proxy' => q[], 'getcwd' => q[cwd], 'gpg' => q[/usr/local/bin/gpg], 'gzip' => q[/usr/bin/gzip], 'halt_on_failure' => q[0], 'histfile' => q[/home/hoge/.cpan/histfile], 'histsize' => q[100], 'http_proxy' => q[], 'inactivity_timeout' => q[0], 'index_expire' => q[1], 'inhibit_startup_message' => q[0], 'keep_source_where' => q[/home/hoge/.cpan/sources], 'load_module_verbosity' => q[v], 'lynx' => q[/usr/local/bin/lynx], 'make' => q[/usr/bin/make], 'make_arg' => q[], 'make_install_arg' => q[SITEPREFIX=$ENV{HOME}/local], 'make_install_make_command' => q[/usr/bin/make], 'makepl_arg' => q[PREFIX=~/local], 'mbuild_arg' => q[], 'mbuild_install_arg' => q[], 'mbuild_install_build_command' => q[./Build], 'mbuildpl_arg' => q[./Build --install_base $ENV{HOME}/local], 'ncftp' => q[], 'ncftpget' => q[], 'no_proxy' => q[], 'pager' => q[more], 'patch' => q[/usr/bin/patch], 'perl5lib_verbosity' => q[v], 'prefer_installer' => q[MB], 'prefs_dir' => q[/home/hoge/.cpan/prefs], 'prerequisites_policy' => q[ask], 'scan_cache' => q[atstart], 'shell' => q[/bin/csh], 'show_unparsable_versions' => q[0], 'show_upload_date' => q[0], 'show_zero_versions' => q[0], 'tar' => q[/usr/bin/tar], 'tar_verbosity' => q[v], 'term_is_latin' => q[1], 'term_ornaments' => q[1], 'test_report' => q[0], 'trust_test_report_history' => q[0], 'unzip' => q[/usr/local/bin/unzip], 'urllist' => [q[ftp://ftp.ring.gr.jp/pub/lang/perl/CPAN/], q[ftp://ftp.u-aizu.ac.jp/pub/CPAN/], q[ftp://ftp.yz.yamagata-u.ac.jp/pub/lang/cpan/]], 'use_sqlite' => q[0], 'wget' => q[/usr/local/bin/wget], 'yaml_load_code' => q[0], 'yaml_module' => q[YAML], }; 1; __END__ ----------- ■手順4 /home/hoge/.cshrc をFTPでダウンロードしてきて以下を追記して再びFTPで上書きアップロード。 ----------- setenv PATH $HOME/local/bin:$PATH setenv PERL5LIB $HOME/local/lib/perl5:$HOME/local/lib/perl5/site_perl setenv PKG_DBDIR $HOME/local/var/db/pkg setenv PORT_DBDIR $HOME/local/var/db/pkg setenv INSTALL_AS_USER setenv LD_LIBRARY_PATH $HOME/local/lib ----------- ■手順5 %source .cshrc を実行して変更を反映して、さらに mkdir ~/local mkdir -p ~/local/var/db/pkg を実行してlocalフォルダを準備します。 ■手順6 cpan -i Bundle::CPAN を実行します。 すると、 Going to write /home/hoge/.cpan/Metadata CPAN: YAML loaded ok (v0.68) CPAN: LWP::UserAgent loaded ok (v5.835) Fetching with LWP: ftp://ftp.ring.gr.jp/pub/lang/perl/CPAN/authors/id/A/AN/ANDK/Bundle-CPAN-1.861.tar.gz の後に、 Killed と表示され、処理が終わってしまいます。 「.cpan」と「local」のフォルダを削除して、同じ手順で何度試しても、手順6でKilledとなり先に進めないでいます。 申し訳ありませんが、なぜ「Kiled」となるのかヒントをいただきたいです。
質問日時: 2012/04/08 18:46 質問者: cajon_panda
解決済
1
0
-
Perl 処理速度について
同じ件数あるとして -e $file でファイル検索するのと open してそのファイル中を検索するのでは、どちらが早いでしょうか?
質問日時: 2012/04/06 12:25 質問者: dyo
解決済
2
0
-
Perl、区切り文字で配列に格納したい
LWP::UserAgentでperlスクリプトから別のスクリプトを呼び出して my $val print $res->as_string; で目的の値を取得したんですが値の前半部分にhttpヘッダーが入っており これを撮り省きたいです。 データの内容はバイナリなので$valの中の改行コードを区切り文字として 配列に格納し末尾の配列の値だけ取りだそうと思っています。 それで指定した区切り文字で配列に格納する方法を調べたのですが よくわからず教えていただけないでしょうか? phpでいうところのexplode関数みたいなことがやりたいです。
質問日時: 2012/04/05 23:04 質問者: midugane
ベストアンサー
2
0
-
Perlの日付取得で月の表示がおかしい
下記は、メールフォームCGIに書き込まれた日時などの情報をlog.cgiというファイルに書き出すスクリプトです。 2012/01/04 21:05:45 のような感じで、日付が刻まれるのですが、このうち月の部分がどの月に処理を行ってもいつも01になってしまうのですが、当方直し方がわかりません。 下記が実際の記載箇所です。4行目がおかしいのだと思いますが、どなたかお分かりの方、教えていただけないでしょうか。 my $path = "log.cgi"; my $ip = $ENV{'REMOTE_ADDR'}; ($sec, $min, $hour, $mday, $month, $year, $wday, $stime) = localtime(time()); my $time = sprintf("%04d\/%02d\/%02d %02d\:%02d:%02d", $year + 1900, $mon + 1, $mday, $hour, $min, $sec); my $message = $in{'メッセージ'}; $message =~ s/\r\n/ /g; $message =~ s/\n/ /g; if (open(FOUT, ">> $path")) { print FOUT "$time\t$ip\t" . $in{'お名前'} . "\t" . $in{'E-mail'} . "\t" . $message . "\r\n"; close(FOUT); } よろしくおねがいいたします。
質問日時: 2012/04/04 21:24 質問者: chile5583
ベストアンサー
1
0
-
ファイル縦横変換
環境はUNIXです。 以下のようなテキストファイルを 変換してOracleのテーブルに 取込みたいのですがよい方法をご存知の方 いらっしゃいませんでしょうか? まずはテキストファイルを変換前の状態から 変換後のようにしたいのです。 シェルまたはPerlで実現可能でしょうか? <変換前> 地域名称 コーラ お茶 ミルク 北海道 10,000 20,000 30,000 青森 10,000 20,000 30,000 <変換後> 北海道 コーラ 10,000 北海道 お茶 20,000 北海道 ミルク 30,000 青森 コーラ 10,000 青森 お茶 20,000 青森 ミルク 30,000
質問日時: 2012/04/04 09:28 質問者: get_taka
解決済
5
0
-
Perlを使ったアクセス制限方法
CGIのページにアクセス制限を掛けたいと思い 検索エンジンを使い色々探しまして下記のアクセス制限方法を見つけました。 http://easycgi.xrea.jp/perltips/acclimit.htm を参照して CGIの最初(#!/usr/bin/perl の次の行)に下記スクリプトを埋め込みました。 sub check { @hosts = ('hoge.ne.jp','hoge.co.jp'); $host = gethostbyaddr(pack("C4", split(/\./, $ENV{'REMOTE_ADDR'})), 2) || $ENV{'REMOTE_ADDR'}; foreach $i (@hosts) { if ($host =~ /$i/) { print "アクセスが許可されていません。\n"; exit; } } } リモートホストでアクセス制限を行いたいのですが 上記の方法を試しても、hoge.ne.jpとhoge.co.jpからアクセス出来てしまいました。 htaccessを使わずにCGIページへアクセス制限を掛ける方法はないでしょうか? 何かアドバイス頂けると助かります。
質問日時: 2012/04/02 23:19 質問者: Ista
解決済
2
0
-
変数に入っているのに、メールで送ると格納されてない
こんな感じでチェックボックスを作りました。 <td><input type="checkbox" name="youbi" value="月1"></td> <td><input type="checkbox" name="youbi" value="火1"></td> <td><input type="checkbox" name="youbi" value="水1"></td> <td><input type="checkbox" name="youbi" value="木1"></td> 複数選択し、 $youbiの変数データをブラウザに表示すると、ちゃんと「月1、火1、水1」 と表示されます。 これをそのままメールで送ろうとしたところ、 $youbiを表示すると、「月1」しかメール本文に表示されていません。 どうやったらちゃんとメールに表示できるようになるでしょうか?
質問日時: 2012/04/02 14:45 質問者: xt_simeri
解決済
1
0
-
perlで特定のデータを書き出す方法
perlは何個かプログラムを作ったことがあるのですが、 本当に単純なものしか作ったことがない初心者です。 CSVを読み込んで、そのCSVを元に、あるURLにアクセスし、 そこで取得した特定のデータを書き出すということを行いたいのですが、 どのようにしたら実現できるのでしょうか。 お手数ですがご教授ください。 ---------------- 【持っているCSVデータ】 A | B | C | 1 | テキスト|テキストxxx| 2 | テキスト|テキストyyy| 3 | テキスト|テキストzzz| 【1行づつ以下のようなURLにアクセス】 http://www.abcd/テキストxxx 【表示されると以下のようなXMLが返ってくる】 <result> <version>1</version> <text>タイトル</text> <coordinate> <main_id>14231245234</main_id> <div>テキストテキストテキスト</div> </coordinate> <needs_to_verify>yes</needs_to_verify> </result> ↑ 1行づつCSVを読み込んで、 ここのmain_idを一行づつテキストデータに書き出したい。 ---------------- perl でファイルを読み込んだり書き出したりすることは出来るのですが、 URLにアクセスして、 特定のタグに含まれるもののみを書き出すというやり方がわかりません。。 お手数ですがどうぞよろしくお願いいたします。
質問日時: 2012/04/01 11:57 質問者: potwell331
ベストアンサー
2
0
-
特定の数字を抜いて、行をずらしたいです。
0 1 2 3 4 9 8 7 6 5 6 5 4 3 2 7 8 6 9 2 8 0 9 8 1 ↓ 0 1 2 6 4 9 8 7 3 5 6 5 4 9 2 7 8 6 8 2 8 0 9 最初の行のひとつの数字(左から4つ目:3)を抜いて、行をずらしたいのですが、つまづいています。 open (IN,"< $ARGV[0].csv") or die; open (OUT,"> $ARGV[0]_out.csv") or die; ####################################################### while($line =<IN>){ ($a, $b, $c, $d, $e) = split(/\s+/,$line); if($d == "3"){ $d == "" } print OUT (////////\n); } 分割してから、3を抜いてずらしたいのですがうまくいきません。 お助けいただきたく、どうぞよろしくお願い致します。
質問日時: 2012/03/28 11:43 質問者: kousuke_1230
ベストアンサー
2
0
-
Perl 変換について
$dm1の値は変化させずに$dm2に変換後の数値を入れるにはどのようにしたら良いでしょうか? $dm1 = a1234 $dm2 = $dm1 =~ tr/[a-zA-Z]//d; ※これだとうまくいかない。 結果以下のようにしたい。 $dm1 = a1234 $dm2 = 1234
質問日時: 2012/03/27 16:24 質問者: dyo
解決済
3
0
-
Perl パターンマッチについて
$dm = a1234 $dm =~ tr/[a-zA-Z]//d; $dm は 「1234」になりますが、 $dm =~ tr/[^0-9]//d; これだと 「a」 になってしまうのは何故でしょうか?
質問日時: 2012/03/27 16:16 質問者: dyo
解決済
2
0
-
PerlでIf-Modified-Since取得
Perlで書いているCGIで、 HTTP リクエストヘッダのIf-Modified-Sinceを取得したいのですが、 %ENVには入ってこないようです。 取得する方法があれば、教えて下さい。 ・.htaccess にSetEnvなどで記述することでできそうですが、方法が分かりません。 ・HTTP Request Header 全体を取得する方法でも結構です。 よろしくお願い致します。 環境は、さくらインターネットのレンタルサーバーのApacheです。
質問日時: 2012/03/27 14:43 質問者: amadaira
ベストアンサー
1
0
-
perlのパスに-wをつけないと500エラーに
お世話になります。 サーバー会社のトラブルで移転しなければならなくなったのですが、 移転後、cgiの挙動がおかしくなってしまいました。 バージョンperl5.8.8 サーバーOS CentOS なぜかperlのパスに-wをつけないと500のエラーになってしまう状態 #!/usr/local/bin/perl -w print "Content-type: text/html\n\n"; print "test"; これだけのスクリプトでも -wをつけないと500エラーになってしまいます。 -wをつけると動作します。 以前、稼働していたcgiもすべて-wをつけないと稼働しなくなってしまいました。 考えられる原因はどのような事がございますでしょうか。 (root権限のある専用サーバーとなります) 四苦八苦しているのですが、どうしても解決できない為、何卒宜しくお願い致します。 他に必要な情報などございましたらご指摘いただけますと幸いです。
質問日時: 2012/03/25 17:39 質問者: bou1025
ベストアンサー
3
0
-
数値をスラッシュで区切る方法
Perl で 「12345678」 の数値を 「1234/56/78」 と置き換えるには どうすれば良いでしょうか?
質問日時: 2012/03/23 12:57 質問者: dyo
解決済
4
0
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
【Perl】に関するコラム/記事
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
-
なぜ批判コメントをするの?その心理と向き合い方をカウンセラーにきいた!
今や生活に必要不可欠となったインターネット。手軽に情報を得られるだけでなく、ネットを介したコミュニケーションも一般的となった。それと同時に顕在化しているのが、他者に対する辛らつな意見だ。ネットニュース...
-
大麻の使用罪がなかった理由や法改正での変更点、他国との違いを弁護士が解説
ドイツで2024年4月に大麻が合法化され、その2ヶ月後にサッカーEURO2024が行われた。その際、ドイツ警察は大会運営における治安維持の一つの方針として「アルコールを飲んでいるグループと、大麻を吸っているグループ...
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Perlで特定文字列から特定文字列ま...
-
perl 初等プログラミングについて
-
Perlのエラーについてご教授くださ...
-
perlプログラミング 空白行削除
-
Windows10においての『Perl』のプロ...
-
openした後、closeしないでプログラ...
-
perlをバージョンアップしたら、今...
-
Perlでファイルの末尾から指定文字...
-
INDIRECT 横に再度抽出したい
-
テキストファイルで提出とは?
-
perl の open について教えてくださ...
-
アルファベットに付いて質問します...
-
#!/usr/bin/perlで書きだしたCGIを...
-
ファイルアイコンの左下に緑の□の中...
-
Perlで時間の計算
-
perlの構文でカンマの意味が分からない
-
Blenderについて
-
Perl の外部モジュールの利用方法
-
Perlのプログラムについて
-
vlookupがうまくいきません、教えて...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
openした後、closeしないでプログラ...
-
テキストファイルで提出とは?
-
Perlのエラーについてご教授くださ...
-
perlをバージョンアップしたら、今...
-
perlで2次元配列をサブルーチンに...
-
INDIRECT 横に再度抽出したい
-
Wallpaper Engineでおすすめの壁紙...
-
bashスクリプト
-
Strawberry Perl for Windows で Ou...
-
perlプログラミング 空白行削除
-
perlの構文でカンマの意味が分からない
-
Perl の外部モジュールの利用方法
-
Perlで、「が」を、「が」...
-
Windows版のPerlについて
-
Perlで時間の計算
-
Perlでファイルの末尾から指定文字...
-
perl 初等プログラミングについて
-
VBA変数をFunction.VLookupの戻り値...
-
Perlで特定文字列から特定文字列ま...
-
perl 正規表現でエラー
おすすめ情報