回答数
気になる
-
Perl エラーログを指定の場所に出力する場合
以下のよーに指定すればエラーログの場所を指定する事ができますが、 # エラーログ BEGIN{ open ( STDERR, ">>./log/err_log/err.txt" ); } たとえば変数にファイル名を入れて指定する場合は、 $err_log = "./log/err_log/err.txt"; BEGIN{ open ( STDERR, ">>$err_log" ); } とするとエラーが出てしまいます。変数に入っているものを指定するにはどうすればいいでしょうか?
質問日時: 2013/03/08 02:53 質問者: nakisan2011_12
ベストアンサー
1
0
-
PerlでIF文の条件式をもっとスマートに書きたい
PerlでIF文の条件式をもっとスマートに書きたいのですが。。。 以下のようなIF文の条件式を上手く書く方法がありますでしょうか? if($flg[0] == 1 || $flg[1] == 1 || $flg[2] == 1 || $flg[3] == 1 || $flg[4] == 1 || $flg[5] == 1 || $flg[6] == 1 || $flg[7] == 1 || $flg[8] == 1 || $flg[9] == 1)){ $flg[i]は配列@flgの各要素です。 上記のように「||」(論理和:または)でつないで書くのではなく、 もっとスマートに書きたいのですが、 何か良い方法はないでしょうか?? ご存じの方がいらっしゃいましたら、どうかご教示ください。 よろしくお願い致します。
質問日時: 2013/03/07 23:35 質問者: tomocchik
解決済
3
0
-
Perlでモジュールをインストールしない方法
Perlでモジュールをインストールしない方法をしりたいです。 普通はコマンドを使ったりして必要なモジュールを予めインストールしますが、インストールせずにCPANサイトからモジュールをダウンロードしてきて使用する方法はありますか? 自分の感覚だと、プログラムの最初に何かを宣言すればいいのかな、と思うのですが。
質問日時: 2013/03/04 18:30 質問者: nakisan2011_12
ベストアンサー
2
0
-
utf8フラグ落してもwide character
毎度ご迷惑をおかけしております http://idsc.nih.go.jp/idwr/CDROM/Kako/H18/Syuukei/Syu_08_1.xls というExcelファイルの全sheetを.csvに吐き出そうと思い、OKwaveでコードを教えてもらいました しかし Wide character in printという警告が出て文字化けしました。 そこでまたOKwaveで聞いたところ、 http://www.rwds.net/kuroita/program/Perl_unicode.html#widechar というURLを教えてもらいました。 これに従って(?)、理屈はわからないながら utf8フラグが立っていたら落とすというような コードにしてみましたが、やはり文字化けします。 全く原理ができておらず、誠にお恥ずかしい限りですが、 どのようなコードを書けばよいか、ご指導よろしくお願い申し上げます。 以下、だめだったコードです(改悪は私です)。 ######################################################################### use Spreadsheet::ParseExcel; #use Encode qw/ encode decode/; use Encode; my $sFN = "Syu_08_1.xls"; my $filename = $sFN; print "filename: $filename\n"; my $parser = Spreadsheet::ParseExcel->new(); my $workbook = $parser->parse( $filename ); if ( !defined $workbook ) { die "Parsing error: ", $parser->error(), ".\n"; } my $sRT = ''; ## シートの数だけ繰り返し for my $worksheet ( $workbook->worksheets() ) { print OUT "*"; my ( $row_min, $row_max ) = $worksheet->row_range(); my ( $col_min, $col_max ) = $worksheet->col_range(); foreach my $nLineY ( $row_min .. $row_max ) { my $rec = ""; foreach my $nLineX ( $col_min .. $col_max ) { my $cDT = $worksheet->get_cell($nLineY,$nLineX); ## セルにデータが在ったときの処理 if ( $cDT ) { $sTMP = $cDT->value(); $sTMP =~ s/,//g; if ( utf8::is_utf8($sTMP) ){ # utf8フラグがたっていたら print "utf flag on: $sTMP\n"; utf8::encode($sTMP); # utf8フラグを落とす } $rec .= "$sTMP,"; } } print "$rec\n"; } }
質問日時: 2013/03/04 18:27 質問者: ng999
ベストアンサー
1
0
-
Perlでのメール添付送信のエラー
PerlでメールにZIPファイルを添付して送信したいです。 http://homepage3.nifty.com/hippo2000/perltips/perlmail.htm#1.2 http://perltips.twinkle.cc/perl/mail_mime_attached_file.php 上記のサイトを参考に以下のプログラムを組んでみました。 するとエラーメッセージが画像のような感じででてきました。 おそらく、なんか文字コードがおかしいのかもしれないのですが、どこから手をつけていいのかわかりません。 どなたかお助け下さいm(__)m 前回も別の問題で助けていただいたのですが、文字コードの問題でした。他の部分は全くひっかからないのに、この部分で40時間ほど悩んでおります・゜・(ノД`;)・゜・ ======================================== sub mail_push { # サーバー、アカウント、パスワード、ポート、送信元アドレス、送信先アドレス、題名、本文、送るべきファイル1(空の場合は無視)、送るべきファイル2(空の場合は無視) my ( $mailhost, $mail_username, $mail_password, $mailport, $from_mail, $to_mail, $subject, $message, $file1, $file2 ) = @_; # 正しいメールの形なのか調べる if ( $to_mail eq '' ) { print "送り先のメールアドレスが空のようです\n"; # ERR } elsif ( $to_mail =~ /^([a-zA-Z0-9\.\-\/_]{1,})@([a-zA-Z0-9\.\-\/_]{1,})\.([a-zA-Z0-9\.\-\/_]{1,})$/ ) { # 実際に送る my $smtp = Net::SMTP->new($mailhost, Port => $mailport); $smtp->auth($mail_username, $mail_password); $smtp->mail($from_mail); $smtp->to($to_mail); $smtp->data(); my $mime = MIME::Entity->build( Type => 'multipart/related', From => $from_mail, To => $to_mail, Subject => $subject, Type => 'text/plain;charset="iso-2022-jp"', Data=> $message, Encoding => "7bit"); # エラーがでてくる箇所 $mime->attach( Path => 'c:/buromaga1.jpg', Type => 'Application/octet-stream', Encoding => 'Base64',); $smtp->datasend($mime->stringify);# ERR $smtp->dataend();# ERR # SMTP終了 $smtp->quit; } else { print "送り先が正しいメールの形式ではありません\n"; # ERR } }
質問日時: 2013/03/04 05:43 質問者: nakisan2011_12
ベストアンサー
2
0
-
MySQLのトランザクションについて
初めて質問します。 今、PerlのDBIを使ってMySQLのトランザクション処理にチャレンジしています。 ところが、rollback処理がうまくできません。 具体的には、 table2 がある状態で下のプログラムを動かすと、 エラーの表示が出るのに、 table1 は作成されました。 何らかのエラーがあれば、どちらも作成されないようにしたいです。 ======================================================= my %sql; $sql{db_name} = "database"; $sql{host} = "localhost"; $sql{user_name} = "user_name"; $sql{password} = "password"; use DBI; my $dbh = DBI->connect('DBI:mysql:'.$sql{db_name}.':'.$sql{host}, $sql{user_name}, $sql{password} ,{RaiseError => 1, PrintError => 0, AutoCommit => 0 }) || &Err(); my $sth; my $re; eval { my $sql_string1 = "create table table1(`id` int);"; my $sql_string2 = "create table table2(`id` int);"; $sth = $dbh->prepare($sql_string1); $re = $sth->execute; $sth = $dbh->prepare($sql_string2); $re = $sth->execute; }; if ($@) { $tag="Err:".$@."\n"; $sth = $dbh->rollback; }else{ $sth = $dbh->commit; } $sth->finish; $dbh->disconnect; ======================================================= 検索して、いろいろいじっても解決しませんでした。 どうかよろしくお願いします。
質問日時: 2013/03/02 20:00 質問者: yamadak0
ベストアンサー
1
0
-
Perl LWPでのIPv6エラー
Perl LWPでのIPv6接続がエラーでつながらず、原因がわかりません。 記載しているソースで、Localhostに接続すると、LWP::UserAgentはエラーとなりますが HTTP::Tiny、wgetコマンドは、問題ありません。(IPv4の場合は、LWPも問題ありません)。 どなたか、よい解決へのお知恵をよろしくお願いします。 perl 5.16.1 CentOS 5.9 ------ソース----- #!/usr/bin/perl use strict; use Net::INET6Glue; my $uri = 'http://[::1]'; use LWP::UserAgent; my $ua = LWP::UserAgent->new; my $res = $ua->get($uri); print $res->content,"\n"; print "********************************\n"; use HTTP::Tiny; my $http = HTTP::Tiny->new; my $response = $http->get($uri); print $response->{content}, "\n"; -----結果----- Can't connect to ::1:80 (接続を拒否されました) LWP::Protocol::http::Socket: connect: 接続を拒否されました at /usr/local/perl-5.16.2/lib/site_perl/5.16.2/LWP/Protocol/http.pm line 51. ******************************** <html><body><h1>It works!</h1></body></html> ---環境--- This is perl 5, version 16, subversion 2 (v5.16.2) built for x86_64-linux cpan[1]> i /INET6/ Reading '/root/.cpan/Metadata' Database was generated on Fri, 01 Mar 2013 03:17:03 GMT Distribution SHLOMIF/IO-Socket-INET6-2.69.tar.gz Distribution SULLR/Net-INET6Glue-0.5.tar.gz Module = IO::Socket::INET6 (SHLOMIF/IO-Socket-INET6-2.69.tar.gz) Module = Net::INET6Glue (SULLR/Net-INET6Glue-0.5.tar.gz) Module = Net::INET6Glue::FTP (SULLR/Net-INET6Glue-0.5.tar.gz) Module = Net::INET6Glue::INET_is_INET6 (SULLR/Net-INET6Glue-0.5.tar.gz) Module < Net::Patricia::AF_INET6 (PHILIPP/Net-Patricia-1.19.tar.gz) Module < Net::Whois::Object::Inet6Num (AASSAD/Net-Whois-RIPE-2.002.tar.gz) 8 items found
質問日時: 2013/03/01 21:20 質問者: soka340
ベストアンサー
2
0
-
掲示板を作りたい
perlを勉強中です 掲示板に挑戦してみました 引用の文字色を変えたいと思っています。下記のように>>をいれるとその行の文字色を改行まで変えたいです >>引用文 しかし、やってみると、他の置換えがあってうまくいきません。 どうすればうまくいくのでしょうか? よろしくお願いします sub form_decode{ if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $form, $ENV{'CONTENT_LENGTH'}); } else { $form = $ENV{'QUERY_STRING'}; $NG = 1; } @pairs = split(/&/,$form); foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair); $value =~ tr/+/ /; $value =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack('H2', $1)/eg; $name =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack('H2', $1)/eg; $value =~ s/>(>[^<]*|>[^<]*)/>><font color=\"red\">$1<\/font>/g; $value =~ s/>/>/g; $value =~ s/</</g; $value =~ s/\r//g; $value =~ s/\n//g; &jcode'convert(*value,'sjis'); &jcode'convert(*name,'sjis'); $FORM{$name} = $value; } }
質問日時: 2013/02/28 19:19 質問者: flash0
ベストアンサー
1
0
-
エクセルブック(.xls)のシートデータ読込
いつも大変お世話になっております。 エクセルブック(.xls)に週報データが保存されています。 1週が1sheetになっているため1ファイルに53sheet入っています。 10年分のため、10ファイルあります。 各sheetは同じフォーマットで入っています。 これらをPERLで一括して読み込みたいと思っています。 従来は、1sheetずつ .csvに変換して、読み込んでいました。 しかし これらだと530回 .csvに吐き出す処理が必要で、根気が続きません。 バッチ処理で一気に.csvに吐き出すか、あるいは.csvに吐き出さずに .xlsのまま、読み込みたいと思っています。 PERLは active perl 5.14.2をWindows 7のコマンドプロンプト上から起動しています。 ご指導のほど宜しくお願い申し上げます。
質問日時: 2013/02/26 19:22 質問者: ng999
ベストアンサー
6
0
-
Perl マッチング 1行だけ表示
おそれいります。 abc.txtに保存されたデータを、xyz.cgiから特定ワードに合った最初の行だけを抽出したいのですが、 うまくいきません。 open(OUT, "< ./abc.txt"); while($data = <OUT>){ chomp($data); @ip = split(/,/,$data); if($ip[0] =~ /word/){ 処理 } とすると、マッチする行が全て表示され、 Whileを外すとデータの1行目だけを判定するみたいで、 wordという文字列が含まれるレコードが見つかったらそのマッチした最初のデータだけを表示したいのです。 よろしくお願いします。
質問日時: 2013/02/21 11:18 質問者: spider32
ベストアンサー
1
0
-
繰り返し文における小数の挙動
以下のような簡単なプログラムを書いて実行させたところ、小数点表示の挙動がおかしくなりました。 ###プログラム ここから #!/usr/bin/perl use strict; use warnings; for(my $i=0.01;$i<=1;$i+=0.001) { print $i,"\n"; } ###ここまで ##結果 ここから . . . 0.685 0.686 0.687 0.688000000000001 0.689000000000001 0.690000000000001 ##ここまで 以上のように、0.001づつ増加する $i に途中から000000000001が加わってしまいます。この000000000001が足される現象をやめさせたいです。原因、解決策等おわかりであれば教えていただけないでしょうか。よろしくお願いします。
質問日時: 2013/02/20 13:59 質問者: Murata0715
ベストアンサー
1
0
-
Perlにて、sendmailを使用するがエラー…
はじめまして、初めて質問させて頂きます、ぷりんと申します。 早速ですが、質問です。 私はPerlにてメールフォームの作成に勤しんでいるのですが、どうしても500エラーが出てしまいます。 サーバーはレンタルサーバーのロリポップを使用しております。 私が不思議に思うのは、メール自体は送信されますが、ページには500エラーと表示されてしまうことです。 以下は実際のコードです。(全文)(一部変更有(メール宛先部分)) #!/usr/bin/perl require "../mimew.pl"; require "../jcode.pl"; $sendmail = '/usr/lib/sendmail'; $to = "hogemoge\@gmail.com"; $from = "test\@test.tet"; $subject = "題"; $body = "メール本文"; # 本文をJISコードへ変換 &jcode'convert(*body,'jis'); # 標題をJISコードへ変換してMIME エンコード &jcode'convert(*subject,'jis'); $subject = mimeencode($subject); open(MAIL,"| $sendmail -t"); print MAIL "To: $to\n"; print MAIL "From: $from\n"; print MAIL "Subject: $subject\n"; print MAIL "\n"; print MAIL "$body\n"; close(MAIL); exit(0); と記述し、こちらのcgiファイルはパーミッション700(ロリポップさんが700で動くので)、アスキーコードでアップロード。 mimew.plとjcode.plどちらも一つ上のフォルダにあります。(パーミッションは644) 以上です。 当方初心者ですので、いろいろ試したのですが、どちらが悪いのか見当つきません・・。 簡単な検索をしましたが、Syntax Errorは見つかりませんでした。 また、いろいろなサイトを参考にしたり、検索したりしましたが、問題解決には至りませんでした。 おそらく初歩的なミスだとは思います・・。 こちらの問題に関してお詳しい方、どうかお手を差し伸べていただけないでしょうか。 何卒、よろしくお願い申し上げます。
質問日時: 2013/02/20 12:29 質問者: happypudding
ベストアンサー
2
0
-
電話番号かどうかを判断したい(Perl)
フォームに入力された文字が電話番号かどうかを判断したいと考えています。 ハイフンは使いません。 if ($$in{tel} =‾ /¥-/) { &error("電話番号はハイフン( - )なしの10桁または11桁でご記入ください"); } if ($$in{tel} =‾ /^\d{10,}+$/) { &error("電話番号はハイフン( - )なしの市外局番からご記入ください"); } このようにしてみたのですが、うまく動きません。 どうすればいいんでしょうか... よければ教えてください。
質問日時: 2013/02/19 09:32 質問者: tella8
ベストアンサー
2
0
-
splitが思うように動きません助けて下さい。
文字列から、明細と金額にわけてそこから検索できるプログラムを作っています。 テスト用に下記サンプルを作ったのですが、検索明細($moneyvalue)をコーヒーに した場合のみ、値が戻ってきませんでした。 そこで、中のsplit部分を表示するようにしたところ ★収入=-10000. ★電車=+1000. ★コ=. ★[ヒ=. ★[=+2000. ★雑誌=+240. ★=. ★その他=+500. 0 このように コーヒーの部分だけ上手くsplitが動いていないことが分かりました。 しかしココから手詰まりでどのように直せばいいのか分かりません。 想定される結果 ★収入=-10000. ★電車=+1000. ★コーヒー=+2000. ★雑誌=+240. ★その他=+500. 2000 このようにするにはどうしたらいいのか、分かる方おりましたら教えて下さい。 なお、当方はperl初心者です(涙) ----以下サンプルコードです---- #! /usr/local/bin/perl use Encode qw(encode_utf8); use CGI; my $moneyvalue = "コーヒー"; my $moneyline = "収入-10000,電車+1000,コーヒー+2000,雑誌+240、その他+500"; print &chkmoneyValue($moneyline,$moneyvalue); exit; #============================================================================== subchkmoneyValue { my ($moneyline , $moneyvalue)=@_; my $lp=0; my $flg=0; my @data= split(/[、,]/, $moneyline); my $datavalue = 0; foreach my $wdata (@data) { $wdata =~ s/\+/\,\+/; $wdata =~ s/\-/\,\-/; my @data2 = split(/[,]/, $wdata); print "★$data2[0]=$data2[1].\n"; if($data2[0] eq $moneyvalue){ $datavalue=$data2[1]; last; } } return $datavalue; }
質問日時: 2013/02/16 11:57 質問者: kyosuk-ta
ベストアンサー
2
0
-
foreach文の配列の制御について教えて下さい。
ヨミサーチという検索エンジンを改造して、サムネイル式の画像の検索サイトを作っていますが一箇所行き詰っています。 画像を出すところまでは出来たのですが、ヨミサーチはデフォルトでは縦に1列になってしまうので、横一列に並べ変えたいと思っています。 以下が出力結果の部分の抜粋なのですが、いろいろと試してもうまくいきません。 #<!--(↓修正不可↓) } foreach $line(@log_lines){ @Slog=split(/<>/,$line); &PRlog; } # (↑修正不可↑)--> どこを直せばいいでしょうか?お知恵を拝借したいです。
質問日時: 2013/02/15 18:25 質問者: bulavoo
解決済
1
0
-
Perlでのメール本文の解析について
ここで一週間も止まっています、どなたか助けてください。 あるサーバーにたまっているメールを受信して Net::POP3; MIME::Parser; などを利用して本文を取り出したりしています。 件名などはきちんと解析できて日本語にできるのですが、どうしても本文だけはどうなっているのかわかりません。エンコード、デコードなどの説明が書いてあるサイトをたくさんみて200回くらいいろんな方法やパターンを試してみて本文を復元しようと試みましたが 「$B$^$7$m?'%7%s%U%)%K!<$N%Q%s$K$c(B」の文字は何も変わることなく、さすがに気が狂いそうになりましたのでここで質問しようとおもいます。 emlで保存したファイルから本文を取り出すことはできますが、読める状態になりません。 どなたか教えていただけないでしょうか? いったい、どうしたらメールの本文をきちんと読める状態にできるのしょう? ========================= Subject: =?ISO-2022-JP?B?GyRCJF4kNyRtPyclNyVzJVUlKSVLITwbKEI=?= To: test@test.com Status: RO X-UIDL: 1358842469.4950.s323,S=1722 Content-Type: text/plain; charset=ISO-2022-JP Content-Transfer-Encoding: 7bit $B$^$7$m?'%7%s%U%)%K!<$N%Q%s$K$c(B
質問日時: 2013/02/15 04:04 質問者: nakisan2011_12
ベストアンサー
2
0
-
Perl 時間同士の差
恐れ入ります。 Perlを使って、時間と時間の差を求めたいのですが、 なかなかうまくいきません。 一度、txtファイルに書き込み日時を保存したあと、 それをperlにて読み込み、現在時刻との差を出して投稿制限を掛けたいのですが、 どのようにしたらよろしいでしょうか。 現在書き込み日時はtxtファイルに保存し、cgiファイル上に、出力済みで、localtimeも出力済みです。 単純に引いて関数に代入しても、正しい時間を得られません。 よろしくお願いします。
質問日時: 2013/02/12 17:59 質問者: spider32
ベストアンサー
3
0
-
perlの複数行マッチングについてです
perl初心者です、いまperlのプログラムを書いていてxmlのデータとのマッチングをしようとしているのですが <nanka> <hoge>4</hoge> </nanka> <data>1</data> <hoka>1</hoka> このような部分があった場合に </nanka> <data>1</data> ここの1のみを取り出したくてマッチングを考えているのですが /</nanka>.<data>(.*?)<\/data>/s; ではうまくいかず、困っています。 なにか良い方法、もしくはこのようなマッチングは不可能など ご意見いただければと思います。 よろしく御願いします。
質問日時: 2013/02/06 01:29 質問者: pre_wet_phone
解決済
5
0
-
IPとホスト名の変換について
お世話になります。 ホストからIPに変換する方法としてgethostbynameを使って変換したところ、違うIPが表示されてしまいます。 うまく取得出来るホストもありますが、一部のホストが何度やっても違うIPとなってしまいます。 正確に取得出来ない原因として、何かありますでしょうか? よろしくお願いいたします。
質問日時: 2013/02/06 01:13 質問者: hana43
ベストアンサー
3
0
-
perlにおけるセッションIDについて
sessionIDがページを更新するたびに変わってしまいます。 その結果、前回セッションに保存した値を読み込めません。 my $cgi = new CGI; CGI::Session->name("SESSION_ID"); my $session = new CGI::Session("driver:File", $cgi, {Directory=>'./session'}); print $session->header(-charset=>'UTF-8'); print $session->id(); print $session->param("name"); #表示されず。 というようにしてセッションIDを表示すると、毎回変化します。 どうしたらIDを変わらないように出来るでしょうか? ちなみに、セッションに書き込むのは、 my $cgi = new CGI; CGI::Session->name("SESSION_ID"); my $session = new CGI::Session("driver:File", $cgi, {Directory=>'./session'}); $session->header(-charset=>'UTF-8'); $session->param("name", "abc"); $session->flush(); undef($session); こんな処理をしてます。
質問日時: 2013/02/04 20:22 質問者: t_rakuton
ベストアンサー
2
0
-
別ファイルのサブルーチン
別ファイル(chiiki.pl)のパッケージ内にあるサブルーチンの処理を使用するために require './chiiki.pl'; CHIFOU::postlimit; に書いたのですが、エラーとはならないもののまったく動きません。 別ファイルchiiki.plは package CHIFOU; sub postlimit { いくつかの処理 } 1; となっていますがどこか問題があるのでしょうか?
質問日時: 2013/01/28 09:56 質問者: masa-25
解決済
1
0
-
perlでアドバイスをお願いします。
あるテキストファイルが以下の内容で記述されているとします。 a file1 a file1 a file1 b file1 b file1 b file1 c file2 c file2 d file2 d file2 e file2 e file2 f file3 f file3 f file3 上記のように列が二つあるテキストファイルについて、 2列目のfile名が1列目のどの値とひもづいて いるかを処理するperlプログラムを作ることを考えます。 出来上がったperlによって上記テキストファイルを処理した結果は、 file1は aとb file2は cとdとe file3は f とひもづいていることが分かる ということにしたいです。 これをperlプログラムで書くとき、条件として 一行一行を読みとるとき if ( $_ =~ /(\S+)\s+(\S+)/ ){ を使っています。 そのため$1と$2に現在行の1列目,2列目が与えられた後、 ハッシュと配列を組み合わせて考えた場合どのようにすれば いいのでしょうか。 また仮にテキストファイルの続きが存在し、 1列目がg 、2列目がfile1 の行があるとき 2列目で既に出てきた同じfile名はエラーとすることも考えた 場合どう記述するのか合わせてお願い致します。 長くなってしまい申し訳ないのですが、 ご指導ご鞭撻宜しくお願い致します。
質問日時: 2013/01/27 14:26 質問者: torajiro123
解決済
3
0
-
perlでご助言お願い致します。
あるテキストファイルが以下の内容で記述されているとします。 a file1 a file1 a file1 b file1 b file1 b file1 c file2 c file2 d file2 d file2 e file2 e file2 f file3 f file3 f file3 上記のように列が二つあるテキストファイルについて、 2列目のfile名が1列目のどの値とひもづいて いるかを処理するperlプログラムを作ることを考えます。 出来上がったperlによって上記テキストファイルを処理した結果は、 file1は aとb file2は cとdとe file3は f とひもづいていることが分かる ということにしたいです。 これをperlプログラムで書くとき、条件として 一行一行を読みとるとき if ( $_ =~ /(\S+)\s+(\S+)/ ){ を使っています。 そのため$1と$2に現在行の1列目,2列目が与えられた後、 ハッシュと配列を組み合わせて考えた場合どのようにすれば いいのでしょうか。 ご助言ご鞭撻宜しくお願い致します。
質問日時: 2013/01/27 12:31 質問者: torajiro123
ベストアンサー
3
0
-
perl拡張子in linux
a.perlというのを実行したりしていると、a.pl~、#a.pl#みたいなのがいつの間にか作られているのですがこれは何でしょうか?
質問日時: 2013/01/24 04:06 質問者: pipopipoid
ベストアンサー
1
0
-
Parallel::ForkManager(2)
前回の投稿で完全に書き間違えた部分がありそのままではよくわからないものになってしまっていたのですが、投稿し直しなどができなかったので再度投稿させてもらいます。 プログラムは use Web::Scraper; use WWW::Mechanize::Firefox; use Parallel::ForkManager; use URI; binmode STDOUT,":utf8"; sub func ; ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(); $year += 1900 ; $mon += 1 ; $File = "yuma-$year:$mon:$mday:$hour.txt" ; open (file,"> $File") or die 'fail to open file\n'; print "HOW MUCH PAGE\n" ; my $page = <STDIN> ; print "WITEING...\n" ; my $MAX_PROCESSES = 5; my $pm = new Parallel::ForkManager($MAX_PROCESSES); for ($i = 1;$i <= $page;$i++) { $pm->start and next; my $uri = URI -> new ("www.目的とするURL$i.html"); my $mech = WWW::Mechanize::Firefox->new(); $mech->get($uri) ; print file $s->scrape($mech->content) ; print file "\n" ; print file $r->scrape($mech->content) ; print file "\n" ; $pm->finish; } print "WITEID\n" ; my $s = scraper { process 'font',sen => 'TEXT'; result 'sen'; }; my $r = scraper { process 'div#content',ren => 'TEXT'; result 'ren'; }; close (file) ; です。 $i の順序でファイルへ書き込みをしていきたいのですが、前の処理が終わっていなかった場合に待つ方法がわからないので初心者レベルで教えてください。
質問日時: 2013/01/22 18:32 質問者: pipopipoid
ベストアンサー
3
0
-
Parallel::ForkManagerについて
こんにちは。 ubuntu12.10上でParallel::ForkManagerを利用しようとしていますが、子プロセスのファイルへの書き込みの順序で困っています。 いくつかの実験の結果$iを子プロセスごとに1づつ増やして表示させても 1,2,4,5,3,6,8,9,7・・・となり子プロセスを作った順序で終了しません。 fileへの書き込みを順序良く行わせる方法はありませんか?
質問日時: 2013/01/21 23:39 質問者: pipopipoid
ベストアンサー
1
0
-
PERL sendmailセキュリティ対策について
cgiを直接呼び出して、メールを送信されてしまうエラーについて質問させてください。 以下のように、sendmailを利用するサブルーチンを呼び出しています。 if ($query->param('confirm')) { #←初期値は""で一番下のelseに飛ぶ # input data check my @err_lst = (); #←入力チェックしてエラーメッセージを蓄積 if (&InputCheck($query, \@err_lst)) {#←入力内容をチェック # ok &NextPage($query); #←確認画面を表示 } else { # error &SamePage($query); #入力内容にエラーがある場合、入力画面に戻す } } elsif ($query->param('send') eq "送信") { # send mail & make log &SendMail($query); #メール送信用サブルーチン } else { # make init form &InitPage($query); #CGI起動直後はこのサブルーチンから入力フォームを表示 } この書き方ですと、 <input type="hidden" name="confirm" value=""> <input type="hidden" name="send" value="送信"> で、直接「&SendMail($query);」が起動してメール送信されてしまいます。 メール本文やアドレスの文字エスケープ処理は動いているのですが、 sendmailを呼び出す前には、必ず入力内容をチェックするサブルーチンを通る事を 強制する方法はないでしょうか。 当方、この修正の為にこの2週間突貫でPERLを独学している素人の為、 上記事例について読んでおくべき参考書などがあれば、お教えいただけますと とてもとても助かります。 どうぞよろしくお願いいたします。
質問日時: 2013/01/19 18:57 質問者: yocchi_ki3
ベストアンサー
3
0
-
Text::Xslateのパスについて
【ファイルパス】 /home/template/test.pm /home/template/test.html 【test.pm内容】 $incFile = "test.txt"; $test->render( 'test.html', {incFile => $incFile}, ); 【test.html内容】 [% INCLUDE $incFile %] 上記の場合、pathを設定していない「test.html」のパスは 「/home/template/test.html」になると思います。 このような状態で「test.html」のincludeファイル「/home/inc/test.txt」を 読み込むことは可能でしょうか? ※ $incFile = "../test.txt"; のように上位ディレクトリを指定した場合にはエラーが発生しました。
質問日時: 2013/01/18 19:43 質問者: green64
解決済
1
0
-
計算式の意味について(Perl)
とあるソースを解析しているのですが、 Perlを初めてまだ日が浅いので 下記の計算式の最後の(1./60.)の意味がよくわかりません。 なぜ数字の後にドットが入っているのでしょうか? どなたかご教示お願いいたします。 $d = ($t - $dly - $t0) - ($c - $c0)*(1./60.);
質問日時: 2013/01/17 01:05 質問者: sukapotan
ベストアンサー
2
1
-
CGI Chart::Gnuplotの使用法
コマンドラインからだと作成されるpngファイルがブラウザからだと作成されません。 ブラウザにデバッグ用のprint文は、表示されます。 http://localhost/~.../sample.pl を実行しても、 ブラウザに hello-helloが表示されるだけで、 file.pngが作成されません。 file.pngをブラウザから作成するには、どうしたら良いのでしょうか? よろしくお願いいたします。 コマンドラインからだと、gnuplotで作成されたfile.pngが作成されます。 bash-3.2$ perl sample.pl Content-type:text/html hello-hello 使用したプログラムは、以下のとおりです。 < sample.pl > #! /usr/bin/perl print "Content-type:text/html\n\n"; #use strict; #use warnings; use CGI; use Chart::Gnuplot; my $chart = Chart::Gnuplot->new( output => "file.png" ); my $dataSet = Chart::Gnuplot::DataSet->new( datafile => "test.data" ); print "hello-hello\n"; $chart->plot2d($dataSet);
質問日時: 2013/01/16 15:08 質問者: yamaques
ベストアンサー
1
0
-
perl文末文字列カウントプログラム
perl の文字列カウント こんにちは。初質問になります。perのlプログラミングについての質問です。 ある文章の「文末」の文字列をカウントし、出力するプログラムをつくりたいと思っています。 以下の文字列カウントプログラムを元に作りたいのですが、正規表現の文末指定のつけどころが恥ずかしながらわかりません。 <テキストデータ例> やまだくんはみかんを食べています!!たかしくんはりんごを食べています!! ひろしくんは好きなみかんを食べています!! ??よしこさんは嫌いなりんごを食べていますか?? かなえさんはいつもぶどうを食べています(^-^) ひろしくんはみかんが好きです(^-^)しかし、ゆうじくんはみかんは好きではありません(^-^) ひろみさんはみかんとぶどうは嫌いです!!しかし、りんごは好きです。 たとえば上のテキストデータを読み込み 文末のビックリマーク、クエスチョンマークの文字列を検出し 個数をカウントし出力するするようなプログラムです。 <出力結果> (^-^) 2 !! 2 ?? 1 となるようにしたいです。 以下のプログラムだと文末に限らずリストにあてはまる全ての記号がカウントされてしまいます。 @arr = qw('(^-^)','!!','??' ); $fname = "input.txt"; open(IN,"$fname") || &error("Can't open $fname"); read(IN,$buff,-s IN); close (IN); foreach (@arr){ $cnt = scalar( () = $buff =~ /$_/g ); print "$_ $cnt\n"; }
質問日時: 2013/01/16 03:38 質問者: mitsuispike
解決済
2
0
-
ロシア文字のマッチングについて
ロシア文字の排除をしたいと思い、 以下のように記述してみたのですが カタカナの「ヤツ」「ヤッ」に以下でマッチングしてしまいます。 文字コードはShift-jisを使用しているのですが 誤判定を回避する策はないでしょうか? roshia_moji=qw(А Б В Г Д Е Ё Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ъ Ы Ь Э Ю Я а б в г д е ё ж з и й к л м н о п р с т у ф х ц ч ш щ ъ ы ь э ю я); foreach (@roshia_moji) { if (index($a,$_) >= 0){ push(@error, 'ロシア文字は使用できません。');last; } }
質問日時: 2013/01/13 10:50 質問者: masa-25
ベストアンサー
1
0
-
文字列の比較の仕方が分かりません
フォームから入力された文字列をデータファイルの中から検索し、重複していなければ追加登録したい。 ・問題点 重複していても登録できてしまう。 昨日からperlを触り始めたばかりなので、基本的な部分が分かっておらず、 おかしい部分が多々あるかもしれませんが、ご指導よろしくお願い致します。 データは全て"["から始まるので、登録できませんの部分は、簡単な入力チェックです。 -------------------------------------------- test.html <html> <head> <meta http-equiv="Content-type" content="text/html; charset=UTF-8"> </head> <body> <form action="test2.cgi" method="post"> <input type="text" name="shirolist" size="50" /> <input type="submit" name="submit" value="送信" /> </form> </body> </html> -------------------------------------------- test2.cgi #!/usr/local/bin/perl use utf8; use CGI; $q = new CGI; $flag = 0; $data = $q -> param('shirolist'); $data =~ s/\s+//g; open(IN , "<:uft8" , "data.dat"); while($line=<IN>){ if ( $line eq $data ) { $flag = 1; } } close(IN); if($flag == 0){ if ($data =~ /^\[/) { open(OUT,">>data.dat"); print OUT "$data\n"; close(OUT); $pr="を登録しました"; } else { $pr="は登録できません"; } } else { $pr="は登録済みです"; } print "Content-Type: text/html; charset=UTF-8\n"; print "$data $pr<br>\n"; ※Yahoo知恵袋で同様の質問をしましたが、 回答者への個別のコメントや追加質問が出来ず、 非常に使いづらく感じたのでこちらに投稿させて頂きました。
質問日時: 2013/01/11 19:02 質問者: kiwi1019
ベストアンサー
1
0
-
配列の各要素に結合
@tangoa = ('A','B','C','D','E','F'); @tangob = ('K','L','M','N','O','P'); の2つの配列の各要素を結合させて AK AL AM AN AO AP BK BL BM BN BO BP CK CL CM CN CO CP DK DL DM DN DO DP EK EL EM EN EO EP FK FL FM FN FO FPという配列(@tangoc)を作りたいのですが、 2つの配列の各要素を結合させるにはmapを用いてどのように書くべきか具体的に教えてください。
質問日時: 2013/01/08 19:47 質問者: masa-25
ベストアンサー
2
0
-
Perl正規表現(置換)
Perlを用いてテキスト中の文字列 /^\d+$|^\d+\.[05]{1}$/ を、以下の文字列に置換したい場合、 うまくやる方法はないでしょうか? /^[0]+$|^[0]+\.[0]+$/ 正規表現を使いたいですが、 1つ1つエスケープしていくのはさすがに・・・ よろしくお願いいたします。
質問日時: 2013/01/08 15:59 質問者: entree
ベストアンサー
1
0
-
Perlで、保存フォルダを指定する方法
元のファイルを処理して新しいファイルとして保存するCGIを組もうと思います。 新しいファイルの保存フォルダの指定で困っています。 <input type="text" name="Filename" size="100"> とやると、新しいファイルを保存するフォルダも全部手入力です。複数の人が使う予定です。使う人によって保存フォルダは違います。そこでフォルダ指定をグラフィカルに出来たら良いなと思いました。 そこで <input type="file" name="Filename" size="100"> とtype属性を変えてみました。なかなか使い勝手が良いなと思ったのですが、"file"はアップロードするファイルを指定する際に使うもので、保存するファイルの指定には使えません。 何か良い方法はないでしょうか。
質問日時: 2013/01/07 08:28 質問者: makoji
解決済
2
0
-
Jcodeについて
Jcodeについて教えてください。 Shift-jisで処理している文字列でJcodeを使用すると 半角カタカナ→全角カタカナ 半角小文字英字→半角大文字英字 への変換は文字コードをecuにしなくてもうまくいくのですが 全角英数字→半角英数字 に変換するとうまくいきません。 これはどうしてなのでしょうか?
質問日時: 2013/01/05 13:10 質問者: masa-25
ベストアンサー
1
0
-
メールフォームが自作できません
HTMLは何となく分かる範囲で記述しました。 CSSで体裁を整える予定ですので、ここでは割愛させていただきます。 Perlも勉強したのでやってみたのですが、何故か目的とするメアドではなく送信元にメールが送られ、困っています。 HTMLはこんな感じで書いてみました。 <body> <form> <p>お名前 <input type="name" size="30" maxlength="30" value=""><br> メールアドレスを入力して下さい<input type="mail" size="50" maxlength="50" value=""><br> ご質問・メッセージなどを入力して下さい。<br> <textarea name="mess" cols="50" rows="5"></textarea></p> <p><input type="submit" value="送信する"> <input type="reset" value="やり直し"></p> </form> </body> Perlのソースも記述すべきでしょうが、参考書をなくしてしまいました。 使った参考書はマイコミから出版された「よくわかるPHPの教科書」です。 みなさんのお力を貸していただきたいです。
質問日時: 2012/12/31 01:55 質問者: h_stream
解決済
1
0
-
Perlでシフトコード変換後の文字列長をカウント
PC上のデータに含まれる機種依存文字((1)(2)IIIなど)をEBCDICコードを使用しているホスト機にファイル転送をする時、表示可能な文字に変換を掛けようと思っています。 Perlで変換を行うところまではなんとか辿り着きました。 ところが、(1)を1.に変換すると、PC上では文字数は変わりませんが、ホストにアップロードした時に、シフトコードが入るために、最悪前後に全角文字が入っている場合は、2バイトのプラスになり、ホスト上のデータベースにインポートする時にエラーを引き起こしてしまいます。 これを防ぐため、Perl上で、文字コード変換を行う時にシフトイン&シフトアウトの発生した場合の文字列長のチェックを行いたいのですが、全角文字と半角文字の識別と長さのカウントを行う方法、なにか参考になるサイトがありましたら、教えて頂けると助かります。 よろしくお願いします。
質問日時: 2012/12/29 19:18 質問者: hatsuzo
ベストアンサー
1
0
-
perlでご助言いただきたく。お願い致します。
<?xml aaa=111 bbb=222 ccc=333> <A>$var</A> <B>$var</B> <C>$var</C> | | | <Z>$var</Z> <END></END> 上記のようなテキストファイルをperlプログラムで 作成したいときについて。 上記記述をプログラム内であらかじめ雛形として記述しておき $varの変数の中身をかえることで違うテキストファイルが 出来上がることを達成するにはperlでどのような記述を すればいいのでしょうか。 自分が調べた範囲では、"ヒアドキュメント"を 使えばいいのかなと考えていますが、もっと良い方法や 文法があれば御教授願います。 宜しくお願い致します。
質問日時: 2012/12/28 20:57 質問者: torajiro123
ベストアンサー
3
0
-
[perl]正規表現
質問させていただきます。 by ***.***.hoge.jp を正規表現で表すならば、 by\s+(ここに何が入るからわからない).hoge.jp この()の部分は何が入るのでしょうか? 初めの”by” と 最後の”hoge.jp” は確定で入るのですが、途中の部分は何の文字が来てもいいように正規表現を組みたいです。 何の文字が来てもいい、というような表現方法はありますでしょうか?
質問日時: 2012/12/27 22:01 質問者: blitzcrank
ベストアンサー
2
0
-
[Perl]抽出について
再度質問させていただきます。 本当は質問などせずに自力で解決したいのですがなかなかうまくいかなくて困っています… 前回質問させていただいたとき(http://oshiete.goo.ne.jp/qa/7855819.html)には問題なかったのですが、事情がかわってしまい、ifの中の条件を変更しなければならなくなりました。今回はIPアドレスではなく時間抽出です。 以下のメールヘッダに対して、後述するプログラムを実行します。 Received: from ************.jp (**********.jp [158.217.43.2]) by **********.abc.jp ; Wed, 29 Feb 2012 12:17:31 Received: from ************** (localhost [127.0.0.1]) by localhost (Postfix) with SMTP ; Wed, 29 Feb 2012 12:16:23 Received: from **************.jp (***********.jp [158.217.208.11]) by ************.abc.jp ; Wed, 29 Feb 2012 12:15:54 #ここがほしい Received: from **************.jp (***********.jp [158.217.208.11]) by ************.xyz.jp ; Wed, 29 Feb 2012 12:15:14 From: ************** To: *********@***********abc.jp Subject: = ***** Date:Wed, 01 Mar 2012 21:06:24 #ここがとれてしまう . . . 本文 ~略 $file_data_str = join("", @file_data); @received_datas = split(/Received:/, $file_data_str); @received_datas = reverse(@received_datas); foreach $sorted(@received_datas){ if(($sorted =~ /abc.jp/) and ($sorted =~ /(\w+,\s+\d+\s+\w+\s+\d+\s+\d+:\d+:\d+)/)){ $new_file_name = str2time($1); $min1 = $new_file_name / 300; $min1_cut = int( $min1 ); print $min1_cut; last; } } } exit; まず、Received:で区切って、reverseしているのではじめの要素は、元のメールヘッダの最後のReceivedフィールドから本文まであることになります。更にIfで指定してる条件のアドレスがTo:にも出現するのでそこも判定されます。なのでプログラムを実行すると、To:のabc.jpとDateの時間にひっかかってしまい、Dateの時間情報を抽出してしまいます。 あくまで取りたいのはReceivedフィールドの中の時間情報なのですが、何かいいやり方はありませんでしょうか?ちなみに やり方としては、初めの要素を消す、shiftとか使えるかな、と考えたりもしましたがうまくいかず…、Receivedフィールドのみで判定させたいです。 ご教授願えたらと思います。よろしくお願いします。
質問日時: 2012/12/23 02:29 質問者: blitzcrank
解決済
1
0
-
[Perl]IPアドレスについて
質問させていただきます。 IPアドレスは普通、114.114.96.20という風に四つに分かれていますが、これを一つの数字にまとめる、ということはPerl言語でできるでしょうか? 各数字ごとに進数変換して、ピリオドを取ってまとめる、という形を考えたのですが… 例えば2進数変換すれば 01110010011100100110000000010100 という感じになります。 これ以外に何か方法はありますでしょうか?
質問日時: 2012/12/22 23:11 質問者: blitzcrank
ベストアンサー
2
0
-
[Perl]抽出、出力について
質問させていただきます。 メールヘッダに対して以下のプログラムを実行します。 ~略 $file_data_str = join("", @file_data); @received_datas = split(/Received:/, $file_data_str); @received_datas = reverse(@received_datas); foreach $sorted(@received_datas){ if(($sorted =~ /by\s\w+.abc.jp/) and ($sorted =~ /(\[\d+\.\d+\.\d+\.\d+\])/)){ $& =~ /(\d+\.\d+\.\d+\.\d+)/; $ipadd = $1; print $ipadd; print "\n"; } } } exit; すると、by\s\w+.abc.jpを含むReceived行のIPアドレスが全て抽出され、複数出力されます。(以下実行結果) 114.114.96.20 158.217.208.15 私はこの初めの"114.114.96.20"のみを出力したいのですが、どうしたらいいでしょうか? 助言のほどをお願いいたします。
質問日時: 2012/12/21 22:59 質問者: blitzcrank
ベストアンサー
1
0
-
[Perl]foreach if 抽出
質問させていただきます。 メールヘッダに対して以下のプログラムを実行します。 ソースコード ~略 my $file_data_str = join("", @file_data); my @received_datas = split(/Received:/, $file_data_str); my @received_datas = reverse(@received_datas); foreach my $sorted(@received_datas){ if($sorted =~ /by\s\w+.abc.jp/){ $sorted =~ /(\[\d+\.\d+\.\d+\.\d+\])/; print $sorted; print "\n"; } } } exit; を実行すると以下のようにに実行結果が出てきます。 from 158.217.207.30 (114.114.96.20 [114.114.96.20]) by ************abc.jp from ****************.jp (***************.jp [158.217.208.15]) by ***********abc.jp 私は [114.114.96.20]だけを取りだしのですがどうしたらいいでしょうか? foreach my $sorted(@received_datas){ if($sorted =~ /by\s\w.abc.jp/){ $sorted =~ /(\[\d+\.\d+\.\d+\.\d+\])/; ここをどうにかすればいけると思うのですが詰まってしまって… 申し訳ないですが助言をお願いします。
質問日時: 2012/12/21 15:29 質問者: blitzcrank
ベストアンサー
3
0
-
Perl リスト内指定回数繰り返し
初歩的な質問で恐れ入ります。 Perlで、@array('りんご','キャベツ','バナナ','みかん'); の中身を、順次10回ずつ繰り返し実行したいのですが、どのようにしたら良いでしょうか りんごりんごりんごりんご・・・(10回)キャベツキャベツキャベツキャベツ・・・(10回)という感じで、 ひとつめのリストの処理が10回終了したら次のリストを10回という感じです。 よろしくお願いします。
質問日時: 2012/12/20 17:09 質問者: spider32
ベストアンサー
2
0
-
記録されている時間から何日経ったか表示したい
CGI(perl)勉強中です。 2012年12月18日22時15分 のように文字列で記録されている時間があります。 (事情によりこの時刻は上記のような文字列型式でしか記録できません) この時間が、現在時刻と比較し、何日経過しているかを表示させたいと思っています。 time 関数を使えば現在時刻の取得が可能ということは分かりました。 この現在時刻から上記の日時をマイナスすれば経過秒数が分かり、 これを日数に計算しなおせばできると思うのですが、 2012年12月18日22時15分をtime関数で取得した現在時刻と同じ型式に 変換させる方法が分かりません。 また、他によい計算方法があればよろしくお願いします。
質問日時: 2012/12/19 10:24 質問者: raccoondog
ベストアンサー
1
0
-
perlのsystem関数内でのコロンについて
perlのsystem関数内で変数展開について困っています。変数展開はできるのですが、その変数の後に':'(コロン)をつける必要があるのですが、それがモディファイアとして認識されてしまうようです。コロンをそのままperlに評価させずにsystem(shell)に渡す方法はないでしょうか? $host = "xxxx.com"; system("program ${host}:22"); ちなみに、$host:22ではうまく変数展開されないそうで、{}を使うまでは良かったのですが、その後のコロンでつまっています。programの都合でhost、コロン、ポート番号を渡す仕様のため変更できません。よろしくお願いします。
質問日時: 2012/12/17 17:12 質問者: moca89
ベストアンサー
3
0
-
perlでご助言いただきたく
下記のような文字数の多いマッチング演算子について。 if($test =~ /^\s+\S+\s+(\S+)\s+(\S+)\s+\S+\s+(\S+)\s+(\S+)\s+\S+\s+\S+\s+\S+\s+\S+ \s+\S+\s+(\S+)\s+\S+\s+\S+/){ 上記は一行に続けて記述しています。 (見た目は2行に見えますが1行記述です。コンパイルすると正常に動作します) これを if($test =~ /^\s+\S+\s+(\S+)\s+(\S+)\s+\S+\s+(\S+) \s+(\S+)\s+\S+\s+\S+\s+\S+\s+\S+ \s+\S+\s+(\S+)\s+\S+\s+\S+/){ のように改行して、コンパイルしてみると うまく動きません。ドット演算子を使用して下記のように記述し直しても うまく動作しません。 if($test =~ /^\s+\S+\s+(\S+)\s+(\S+)\s+\S+\s+(\S+) .\s+(\S+)\s+\S+\s+\S+\s+\S+\s+\S+ .\s+\S+\s+(\S+)\s+\S+\s+\S+/){ 改行して記述するにはどうすればよいのでしょうか?
質問日時: 2012/12/17 12:21 質問者: torajiro123
ベストアンサー
2
0
-
Perlguts:構造体の受け渡し
Hoge*なtfield型の *head構造体を生成してPerl側で参照し、 再度同じ関数に通して*headと同じ構造体*pを作りたい。 下記のソースを 実行すると二度目にDataListを通すと tfield *pはバラバラな構造体が生成される。 *headと同じ構造体が 生成されるにはどうしたら良いか。 ご教授お願いします。m(_ _)m ちなみに使用環境はWindow7です。 ----------------------------------------- MyTpe.xs側 struct tfield { struct tfield *left[30]; int num; char str[30]; struct tfield *right[30]; }; struct tfield *talloc(void) { return ((struct tfield *)malloc(sizeof(struct tfield ))); } MODULE = MyTypePACKAGE = MyType SV* DataList(data,num) SV* data int num PREINIT: struct tfield *p,*head[30]; INIT: int i,j; CODE: if(num!=0){ p=INT2PTR(struct tfield *,SvSTASH(SvRV(data))); f(SvTYPE(SvRV(data))==SVt_PVMG) printf("MG Success\n"); or(i=0;i<6;i++){ printf("\np->left[%d]=%p\n",i,p->left[i]); } } for(i=0;i<6;i++){ /*無意味な構造体*/ head[i]->left[0]=head[i]->right[0]=head[i]=talloc(); printf("head[0]->left[%d]=%p\n",i,&head[0]->left[i]); } ref=newRV_noinc(newHV()); sv_setref_pv(ref,"main::Tie",(void*)head); RETVAL=ref; OUTPUT: RETVAL ----------------------------------------- Perl側 #!usr/bin/perl use MyType; use Devel::Peek qw/Dump/; $value1=MyType::DataList(NULL,0); print Dump $value1; $DB::single=1; $value1=MyType::DataList($value1,1); ----------------------------------------- Devel::Peekの実行結果 SV = IV(0x1209078) at 0x120907c REFCNT = 1 FLAGS = (ROK) RV = 0x5bbbcc SV = PVMG(0x18cf78c) at 0x5bbbcc REFCNT = 1 FLAGS = (OBJECT,IOK,pIOK) IV = 1243644 NV = 0 PV = 0 STASH = 0x12089bc "main::Tie"
質問日時: 2012/12/13 05:55 質問者: masutoro32
ベストアンサー
3
0
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
【Perl】に関するコラム/記事
-
ピンとくる人とこない人の違いは?直感を鍛える方法を心理コンサルタントに聞いた!
根拠はないがなんとなくそう感じる……。そんな「直感がした」という経験がある人は少なくないだろう。ただ直感は目には見えず、具体的な説明が難しいこともあるため、その正体は理解しにくい。「教えて!goo」にも「...
-
中古物件転売時の節税対策にメス?不動産投資家は戦々恐々?元国税が解説
不動産の取引において、土地と建物を一括で売買する場合、土地に消費税はかからないが、建物には消費税がかかる。これを利用して、例えば土地と建物を合計1億円で売る場合、土地の値段を9999万9999円にし、建物を1円...
-
話題の「風呂キャンセル界隈」、お風呂に「入らない」のではなく「入れない」?
皆さんは、「風呂キャンセル界隈(かいわい)」という言葉を聞いたことはあるだろうか。「お風呂に入らない(入れない)人」のことで、最近ネット上などで話題になっているようだ。「教えて!goo」にも、「風呂に入...
-
マッチングアプリで出会ったカップルは成婚率が高い!?結婚カウンセラーに聞いてみた
パートナーとの出会いの場として、もはや主流となったネット婚活やマッチングアプリ。中でも手軽に登録できるマッチングアプリは、10代から50代と幅広い年代が利用している。一方で、“相手の目的が投資関係の詐欺や...
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
画像が表示でnull; this.src
-
テキストファイルで提出とは?
-
INDIRECT 横に再度抽出したい
-
アルファベットに付いて質問します...
-
Perl 特定のフォルダ以外削除
-
Perl言語について。
-
ファイルをディレクトリ分配のプロ...
-
#!/usr/bin/perlで書きだしたCGIを...
-
Perlのエラーについてご教授くださ...
-
perlのflock関数でロックをかけたま...
-
AI sisterとは、偽物の人ですか?
-
bashスクリプト
-
ファイルアイコンの左下に緑の□の中...
-
perlプログラミング 空白行削除
-
perlでリテラル値はメモリにどのよ...
-
perlで2次元配列をサブルーチンに...
-
Perlで時間の計算
-
perlについて
-
perlのrequireの動き方についての質問
-
perlの構文でカンマの意味が分からない
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
テキストファイルで提出とは?
-
INDIRECT 横に再度抽出したい
-
perlをバージョンアップしたら、今...
-
openした後、closeしないでプログラ...
-
アルファベットに付いて質問します...
-
Strawberry Perl for Windows で Ou...
-
bashスクリプト
-
Perlのエラーについてご教授くださ...
-
Perlで特定文字列から特定文字列ま...
-
画像が表示でnull; this.src
-
Wallpaper Engineでおすすめの壁紙...
-
Perl言語について。
-
perl LWPでURLにアクセスした時にデ...
-
Perlで時間の計算
-
Perlで、「が」を、「が」...
-
ファイルアイコンの左下に緑の□の中...
-
Perl の外部モジュールの利用方法
-
このファイルを開く方法で困ってい...
-
perlで2次元配列をサブルーチンに...
-
Windows10においての『Perl』のプロ...
おすすめ情報