1 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 16:47:06 ] "The duct tape of the Internet" こと、Perl についての質問箱です。 "There's more than one way to do it" ということで、 Perl の奥深さについて皆で語り合い、追求してまいりましょう。 CGI についての質問は板違いです。WEB プログラミング板でどうぞ。 CGI と Perlの区別がつかない人も WEB プログラミング板に行ってください。 (WEB プログラミング板: pc11.2ch.net/php/ ) CGI の質問は答えが Perl と全然関係ない話に帰着する場合が 多かったりするので WEB プログラミング板に行って聞いたほうが得ですよ。 このスレでは(CGI 以外の)純粋にPerlのみに関係する質問を取り扱っていこうと思います。 スレ違いの質問にはスルーか、速やかな誘導をお願いします。 www.perl.org/get.html ● 2010/02/19 現在の最新版: 5.10.1 ▼ 前スレ Perlについての質問箱 42箱目 pc12.2ch.net/test/read.cgi/tech/1257139591/ リンク集は >>2-3 Perl 日本語処理の基礎の基礎 >>4 過去スレは >>5-7 あたり
92 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 20:46:44 ] 使い方はそんなもんのような気がするので、入力段階で化けてそうだが。 単に化けたというんじゃなくて、具体的に$subjectがこれこれのときに 結果がこうなって化けてますというのを示して欲しい。
93 名前:デフォルトの名無しさん [2010/03/16(火) 21:20:56 ] DBIx::Classについて質問です。 PostgresqlのXML型へ代入しようとするとエラーが出ます。 DBIx::Class::ResultSet::update_or_create(): DBI Exception: DBD::Pg::st execute failed: ERROR: operator does not exist: xml = unknown LINE 1: ...fo_id = $1 AND me.program_type_id = $2 AND me.res = $3 AND m... ^ HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts. XML型への代入にキャストが必要だということはわかったのですが、 具体的にどうすればよいのか、ググってもマニュアル読んでも見つかりません。 賢い方、どうかご教示ください。
94 名前:デフォルトの名無しさん mailto:sage [2010/03/17(水) 09:17:32 ] >>92 レスありがとうございます。 ttp://yanor.net/wiki/?%E6%90%BA%E5%B8%AF こちらのメール送信を参考にさせてもらっています。 my $email_to = '00000000000@docomo.ne.jp'; MIME::WordDecoder->default( MIME::WordDecoder->new([ '*' => sub{jcode(shift)->sjis}, ] ) ); #メール読み込み準備 my $parser = new MIME::Parser; $parser->output_to_core(1); $parser->tmp_recycling(1); $parser->use_inner_files(1); my $entity = $parser->parse(\*STDIN); my $subject = decode('MIME-Header', $entity->head->get('Subject')); 上記のようにして$subjectを抜き出して、>>86 を通しています。 このままですと、日本語は大丈夫で絵文字が全て〓となってしまいます。
95 名前:デフォルトの名無しさん mailto:sage [2010/03/17(水) 10:24:53 ] だからどうやって処理してるかじゃなくて具体的にどういう $subjectの値がどう文字化けしたかを示せと。 俺の予想では「このプログラムに入る前から絵文字が 〓に置き換わっている」だけどなw
96 名前:デフォルトの名無しさん mailto:sage [2010/03/17(水) 11:31:02 ] どんな絵文字かわからないけど、もし携帯で使うような絵文字のことなら文字コードで定義されてないんじゃない? 入出力結果はほしいね。
97 名前:デフォルトの名無しさん mailto:sage [2010/03/17(水) 11:54:10 ] >>95 debugで確認して 「今日の天気は[雲の絵文字]です」が「莉頑律縺ョ螟ゥ豌励・縲薙〒縺・」 となっていました。 >俺の予想では「このプログラムに入る前から絵文字が >〓に置き換わっている」だけどなw 受け取った段階で〓ということでしょうか?
98 名前:デフォルトの名無しさん mailto:sage [2010/03/17(水) 11:57:56 ] こういうときは普通16進ダンプにするものだ。
99 名前:デフォルトの名無しさん [2010/03/17(水) 12:58:07 ] cookie にメモを保存してやりたいんだけど、cookie のどの項目に保存してやればいい? このメモはクライアント側のメーカー名でこれは、CGIで取得できます。 この値をcookie に保存したいと考えています。 CGI::Cookie は理解しています。 1. expiration date 2. domain 3. path 4. secure flag とクッキーには項目がありますが、どのあたりにいれてやればいいでしょうか? また、具体的にどのように、セットすればいいでしょうか? また、 %cookies = fetch CGI::Cookie;とすることで、 ハッシュに格納できることは理解しております。
100 名前:デフォルトの名無しさん mailto:sage [2010/03/17(水) 13:04:28 ] >>99 どれもハズレ
101 名前:デフォルトの名無しさん mailto:sage [2010/03/17(水) 13:11:57 ] id=ID情報 memo=メモ内容 って普通に情報を記録すればいいんでないの?
102 名前:デフォルトの名無しさん [2010/03/17(水) 13:51:05 ] >>101 thank you, >id=ID情報 >memo=メモ内容 このあたり、もう少しソースコードも交えて教えてください よろしくお願いします。
103 名前:デフォルトの名無しさん mailto:sage [2010/03/17(水) 14:11:17 ] どうぞおググりください
104 名前:デフォルトの名無しさん mailto:sage [2010/03/17(水) 14:16:35 ] ここの"SYNOPSIS"の項目を見てピンとこなければ、>>101 の内容も理解できないし、CGI::Cookieも理解してないことになる。 search.cpan.org/dist/CGI.pm/lib/CGI/Cookie.pm 質問見る限り、Cookieについて理解がないようだからもう少しCookieというものについて調べたほうがいいよ。
105 名前:デフォルトの名無しさん [2010/03/17(水) 14:39:40 ] >>104 Ty >> >> # Create new cookies and send them >> $cookie1 = new CGI::Cookie(-name=>'ID',-value=>123456); >> $cookie2 = new CGI::Cookie(-name=>'preferences', >> -value=>{ font => Helvetica, >> size => 12 } このSYNOPSISでは、 # Create new cookies and send them # fetch existing cookies の2通りの例が示してあるのですね。 で新たにくっきを作るときが上のコードですね。 >>$cookie1 = new CGI::Cookie(-name=>'ID',-value=>123456); これを $cookie1 = new CGI::Cookie(-name=>'ID',-value=>123456,-memo=>めもしたいこと); って感じにしてもいいのでしょうか?
106 名前:デフォルトの名無しさん mailto:sage [2010/03/17(水) 15:05:59 ] pythonを主に使ってたのですが 他の言語がわかってる人向けのperlの教科書みたいのないですか?
107 名前:デフォルトの名無しさん mailto:sage [2010/03/17(水) 15:06:20 ] 全然違うから CGI::Cookie is object oriented. Each cookie object has a name and a value. The name is any scalar value. The value is any scalar or array value (associative arrays are also allowed).
108 名前:デフォルトの名無しさん mailto:sage [2010/03/17(水) 15:11:56 ] >>105 実際に試してみたらいいんですよ [14:58]% perl -MCGI::Cookie new CGI::Cookie(-name=>'ID',-value=>123456,-memo=>めもしたいこと); Unrecognized character \xE3 in column 51 at - line 1. ほら、エラーになる。日本語のところでエラーになってる。 日本語をシングルクォートでくくっても、 [15:03]% perl -MCGI::Cookie -MData::Dumper $cookie1 = new CGI::Cookie(-name=>'ID',-value=>123456,-memo=>'めもしたいこと'); warn Dumper $cookie1; $VAR1 = bless( { 'value' => [ 123456 ], 'name' => 'ID', 'path' => '/' }, 'CGI::Cookie' ); 欲しい結果にはなってないと。って感じで自分で試さないとレス貰えないよ。
109 名前:デフォルトの名無しさん [2010/03/17(水) 15:38:26 ] >>108 thanks Data::Dumper; こんな便利なモジュールがあるんですね、ありがとうございます。 >>[15:03]% perl -MCGI::Cookie -MData::Dumper このあたり、perl -M で二つのモジュールを指定してどのような処理を行いるかすこしわからないのですが調べてみます。
110 名前:デフォルトの名無しさん mailto:sage [2010/03/17(水) 16:05:19 ] >>98 すみません、ダンプするにはどうしたらよいのでしょうか?
111 名前:デフォルトの名無しさん [2010/03/17(水) 16:13:46 ] ttp://www.ietf.org/rfc/rfc2965.txt によりますと、クッキーの情報に関して、 >> set-cookie = "Set-Cookie2:" cookies >> cookies = 1#cookie >> cookie = NAME "=" VALUE *(";" set-cookie-av) >> NAME = attr >> VALUE = value >> set-cookie-av = "Comment" "=" value >> | "CommentURL" "=" <"> http_URL <"> >> | "Discard" >> | "Domain" "=" value >> | "Max-Age" "=" value >> | "Path" "=" value >> | "Port" [ "=" <"> portlist <"> ] >> | "Secure" >> | "Version" "=" 1*DIGIT >> portlist = 1#portnum >> portnum = 1*DIGIT となっております。クッキーに関しては、 >>ttp://www.thinkit.co.jp/free/article/0604/7/8/ を読みました。 >>101 のアドバイスによる、 >>id=ID情報 >>memo=メモ内容 >>って普通に情報を記録すればいいんでないの? ですが、これは、どうも、new CGI::Cookie 内に書くところがないような気がします。 どこに書いてやればいいでしょうか? アドバイスお願いします。
112 名前:デフォルトの名無しさん mailto:sage [2010/03/17(水) 16:14:08 ] unpack("H*", $str);
113 名前:デフォルトの名無しさん mailto:sage [2010/03/17(水) 16:30:46 ] >>111 >>108 の文章を読めばわかるはずだが、そのやり方ではできない。 WEBでサービスを利用してると、IDと一緒にパスワードも記録するってのはたまに見かけるでしょ? >>101 はIDと一緒にメモを記録しておこうってだけだよ。 #!/usr/bin/perl use strict; use CGI qw/:standard/; use CGI::Cookie; # 記録 my $cookie1 = new CGI::Cookie(-name=>'id', -value=>"ID"); my $cookie2 = new CGI::Cookie(-name=>'memo', -value=>"MEMO"); print header(-cookie=>[$cookie1,$cookie2]); # 読取 my %cookies = fetch CGI::Cookie; my $id = exists $cookies{'id'} ? $cookies{'id'}->value : "none"; my $memo = exists $cookies{'memo'} ? $cookies{'memo'}->value : "none"; print "id: $id\n"; print "memo: $memo\n"; CGIとして実行すると、初回はnone、2回目以降はIDとMEMOが表示される。
114 名前:デフォルトの名無しさん mailto:sage [2010/03/17(水) 16:54:30 ] >>112 レスありがとうございます。 早速unpackの使い方を調べて @chr = unpack("H*", $subject); print "@chr\n"; を試してみました。結果は空白です。やっぱり変な変換のされ方を してしまっているのかもしれません。
115 名前:デフォルトの名無しさん [2010/03/17(水) 17:05:22 ] >>113 thank you 理解できました。
116 名前:デフォルトの名無しさん mailto:sage [2010/03/17(水) 17:10:35 ] >>112 ワイド文字列をunpack 'H*'に食わせると各文字の下位8bitしか 出てこないので、俺はこんな感じの自作サブルーチン 使ってる。 sub hexdump { my($s) = @_; $s =~ s/(.)/sprintf "[%x]", ord($1)/ge; return $s }
117 名前:デフォルトの名無しさん mailto:sage [2010/03/17(水) 17:17:38 ] >>116 それは>>86 のプログラムに食わす前の$subjectの値が空白だったということか? そんなら〓はどっから出てくんだよ。なんかおかしくね?
118 名前:デフォルトの名無しさん mailto:sage [2010/03/17(水) 17:18:22 ] ごめんアンカミスった。>>116 じゃなくて>>114
119 名前:デフォルトの名無しさん mailto:sage [2010/03/17(水) 17:29:42 ] >>117 >>86 を通る前の表示が記述ミスしていました。 「今日の天気は[雲の絵文字]です」が「cae56e29176f1367590a」となって いて、同じ方法で>>86 後の$subject_encodedをダンプすると空白になって しまいました。
120 名前:デフォルトの名無しさん mailto:sage [2010/03/17(水) 17:45:06 ] >>119 雲の絵文字があるはずの7文字目の文字コードの下2桁が 13ってことだな。 雲はU+E63F 〓はU+3013 なのですでにその時点で〓になってる疑いが濃厚。 ttp://www.nttdocomo.co.jp/service/imode/make/content/pictograph/basic/index.html
121 名前:デフォルトの名無しさん mailto:sage [2010/03/17(水) 18:41:41 ] >>120 文字コードを調べたらUTF-8で3013は〓でした。perlを置くサーバーにメール が届いた段階で〓に変えられているのでは、>>86 を通しても… 〓にしないでメールを受け取る方法があるのでしょうか?
122 名前:デフォルトの名無しさん mailto:sage [2010/03/17(水) 20:17:55 ] 絵文字を〓に変換してるのは携帯キャリアのメル鯖。
123 名前:デフォルトの名無しさん mailto:sage [2010/03/17(水) 23:34:13 ] >>121 gmailぐらいの交渉力があれば個別対応してもらえるけど、普通は 無理なんじゃないかなぁ。
124 名前:デフォルトの名無しさん mailto:sage [2010/03/18(木) 09:14:35 ] >>122 >>123 まずは自社サーバーで〓に変換されていない状態で受け取れないと無理ですね。 同じようなプログラムに挑戦した方が結構いるのかと思っていました。
125 名前:デフォルトの名無しさん [2010/03/18(木) 13:38:39 ] サーバー、クライアントがあります。 クライアントがサーバーに対して GET リクエストを出します。 この際、クライアントは、 GET xxxx HTTP/1.1 User-Agent:test1 とUser-Agent のヘッダを追加します。 つまり、クライアントからのリクエスには、上のUser-Agnet のヘッダが含まれています。 サーバー上のパールプログラムの中でで、このUser-Agent の test1 を変数として保持したいのですが、具体的な実装方法に ついてアドバイスをお願いします。
126 名前:デフォルトの名無しさん mailto:sage [2010/03/18(木) 13:50:15 ] >>125 $ENV{HTTP_USER_AGENT}
127 名前:デフォルトの名無しさん [2010/03/18(木) 14:10:35 ] >>126 ありがとうございます。
128 名前:デフォルトの名無しさん [2010/03/18(木) 14:35:34 ] GET /a.xml HTTP/1.1 Host: 192.16 Connection: close User-Agent: x-ModelName: pp-pppp x-SDKVersion: 1.1.1 リクエストヘッダが上のようにあり、この中で特殊な、x-ModelName の pp-pppp を取得したいと考えています。 しかし、 ttp://ja.wikipedia.org/wiki/%E7%92%B0%E5%A2%83%E5%A4%89%E6%95%B0#HTTP.E7.92.B0.E5.A2.83.E5.A4.89.E6.95.B0 をみますと、これに該当する環境変数がありません。 この場合、どうやって、pp-pppp を取得できますでしょうか?
129 名前:デフォルトの名無しさん mailto:sage [2010/03/18(木) 15:07:57 ] >>125 ,128 板違い >>126 みたいに板違いなのに回答するとこうやって図にのるのでみんなやめようね
130 名前:デフォルトの名無しさん [2010/03/18(木) 16:00:44 ] >>129 どこの板に質問すればいいでしょうか?
131 名前:デフォルトの名無しさん mailto:sage [2010/03/18(木) 16:03:03 ] >>130 >>1 読め
132 名前:デフォルトの名無しさん mailto:sage [2010/03/18(木) 16:03:13 ] >>130 >>1 読め
133 名前:デフォルトの名無しさん [2010/03/18(木) 16:07:58 ] >>131 >>132 thank you.
134 名前:デフォルトの名無しさん mailto:sage [2010/03/19(金) 10:18:39 ] 初歩的な質問ですみません。 改行コードを変換したいんですが ・次行の先頭が 'A' で始まる場合のみ、行末の改行を削除 これを perl -pe 's/\nA//g' とやっても期待した結果になりません(全く完全に何も置換されない) 環境はCygwin1.7です。
135 名前:デフォルトの名無しさん mailto:sage [2010/03/19(金) 10:42:54 ] Treat string as multiple lines
136 名前:デフォルトの名無しさん [2010/03/19(金) 10:54:20 ] >>134 s/\n(?=:A)//sg
137 名前:デフォルトの名無しさん [2010/03/19(金) 10:59:03 ] 間違えた >>134 s/\n(?=A)//sg
138 名前:デフォルトの名無しさん mailto:sage [2010/03/19(金) 15:57:58 ] 改行区切りで読み込んでるからだろ perl -p0e 's/\n(?=A)//g'
139 名前:デフォルトの名無しさん mailto:sage [2010/03/20(土) 06:01:46 ] otsuneさんがウザくてamachangが爽やかなのはperlのせいですか?
140 名前:デフォルトの名無しさん mailto:sage [2010/03/20(土) 06:21:57 ] はてなに帰れ
141 名前:デフォルトの名無しさん mailto:sage [2010/03/20(土) 08:43:37 ] 「処理済み」を表すフラグの変数名は何がいいですか?
142 名前:デフォルトの名無しさん mailto:sage [2010/03/20(土) 08:56:41 ] done
143 名前:デフォルトの名無しさん mailto:sage [2010/03/20(土) 09:02:41 ] ああ、それはいいな finishとかprocessedとか、どうもしっくり来なかった
144 名前:デフォルトの名無しさん [2010/03/26(金) 13:04:37 ] http::request の使用に関しての問題ですが、perl のプログラム(リフェレンス)の問題に なりますのでここで質問させてもらいます。 ttp://search.cpan.org/~gaas/libwww-perl-5.834/lib/HTTP/Request.pm によりますと、 $r = HTTP::Request->new( $method, $uri, $header_ref, $content ) で三番目の引数が、reference to an HTTP::Headers object or a plain array reference of key/value pairs. とリフェレンスになっております。 Can't call method "clone" on unblessed reference at C:/Perl/lib/HTTP/Message.pm line 32. *たしかに、message.pm 内では、$header = $header->clone; となっております。 my %header = ('User-Agent' => 'test_Agent','Content-Type' => 'application/x-www-form-urlencoded'); my $header_ref = \%header; と三番目の引数をセットしています。 ttp://ftp.ics.uci.edu/pub/websoft/libwww-perl/archive/1999h1/0500.html 解決方法は、このあたりに書いてあるとおもうのですが、どのように三番目の引数をセットしてやればいいでしょうかアドバイス願います。
145 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 13:20:33 ] >>144 HTTP::Headersのオブジェクトにしたら良いよ my $h = HTTP::Headers->new('User-Agent' => 'test_Agent','Content-Type' => 'application/x-www-form-urlencoded'); この$hを第三引数に。
146 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 13:22:28 ] plain array referenceって書いてあるんだから、ハッシュじゃだめだろ。 my @header = ('User-Agent' => 'test_Agent','Content-Type' => 'application/x-www-form-urlencoded'); my $header_ref = \@header;
147 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 13:25:15 ] エラーメッセージの行のまわりを見ればこうなっているわけだが。 if (ref($header) eq "ARRAY") { $header = HTTP::Headers->new(@$header); } else { $header = $header->clone; }
148 名前:デフォルトの名無しさん [2010/03/26(金) 13:50:13 ] レスありがとうございました。 解決いたしました。 >>145 オブジェクトを指定してうまく動作しました。 >>146 plain array reference を読み間違えておりました。配列であってハッシュではありませんでした。 >>147 アドバイス ありがとうございました。
149 名前:デフォルトの名無しさん mailto:sage [2010/03/27(土) 00:11:17 ] perlから外部コマンドを実行して出力を格納するのに バッククオートを使用しているのですが、 コマンドの文字列に$を含むような場合(環境変数とか)に 変数として展開されないようにする方法ってありませんでしょうか。
150 名前:デフォルトの名無しさん mailto:sage [2010/03/27(土) 09:38:32 ] $を適切にエスケープすりゃいいんじゃねーの? またはperlipc(1)の例にあるsafe backtick # add error processing as above $pid = open(KID_TO_READ, "−|"); if ($pid) { # parent while (<KID_TO_READ>) { # do something interesting } close(KID_TO_READ) || warn "kid exited $?"; } else { # child ($EUID, $EGID) = ($UID, $GID); # suid only exec($program, @options, @args) || die "can't exec program: $!"; # NOTREACHED }
151 名前:デフォルトの名無しさん mailto:sage [2010/03/27(土) 16:02:53 ] お前らモダンPerlで書いてる? 俺はまだ勉強してないんだけど モダンPerlの利点って何があるのか簡潔に書け。
152 名前:デフォルトの名無しさん mailto:sage [2010/03/27(土) 17:14:04 ] Perl4互換で書いてる。念のため
153 名前:デフォルトの名無しさん mailto:sage [2010/03/27(土) 17:42:38 ] Mooseとかは使わないけどPerl4互換とか絶対あり得ないわw
154 名前:デフォルトの名無しさん mailto:sage [2010/03/27(土) 18:45:16 ] 自分で使うためのものしか考えてないから、5.10で追加されたものも普通に使って書いてる いまさらPerl4互換とかないわー
155 名前:デフォルトの名無しさん mailto:sage [2010/03/27(土) 18:49:09 ] perl4ってどんなの? localとか使うん?
156 名前:デフォルトの名無しさん mailto:sage [2010/03/27(土) 19:38:50 ] >>155 www2n.biglobe.ne.jp/~kajino/perl4ref/
157 名前:デフォルトの名無しさん mailto:sage [2010/03/27(土) 19:48:28 ] 関数の引数は、localで受ける方が自然に見えるのは俺だけ? sub func { local($x, $y)=@_; まあ慣れなんだけど
158 名前:デフォルトの名無しさん mailto:sage [2010/03/27(土) 20:10:32 ] おまえとKENTだけ
159 名前:デフォルトの名無しさん mailto:sage [2010/03/27(土) 20:21:09 ] myだろ普通 JavaとかPHPとか他の言語は自動的に局所変数だ
160 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 09:35:47 ] 最近は受ける変数名を考えるのが面倒だから $_[0]とかを直接使ってるw
161 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 13:56:50 ] pythonのctypesに相当するものはありますか?
162 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 14:03:11 ] ん?PythonってCのやり方に頼りだしたんだw
163 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 14:04:47 ] 書き忘れた CPANでCtypeで検索しろ
164 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 11:12:09 ] swigしかないようです
165 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 12:40:00 ] Archive::Zipの解説しているWebPageないでしょうか。 できれば日本語で・・・ ぐぐっても、圧縮/解凍のやりかたしか出てない;;
166 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 16:31:31 ] >>165 「圧縮/解凍のやりかた」以外の何を知りたいのか 具体的に書くべきだろうな、そういう時は。 「マニュアルに書かれている内容が理解できないので 噛み砕いて教えて下さい」って言ってるのと同義なんだから。 search.cpan.org/dist/Archive-Zip/lib/Archive/Zip/FAQ.pod search.cpan.org/dist/Archive-Zip/lib/Archive/Zip.pm
167 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 16:48:45 ] >>166 すみませんでした。 具体的にやりたいのは、画像ファイルを無圧縮ZIPに固めておき、それを解凍せずにブラウザに表示したいのです。 ローカルファイルを開いたハンドルから表示するのは出来たので、 ZIP内のファイルのハンドルが取れれば、出来そうなのですが・・・ my $zip = Archive::Zip->new('test.zip'); my $fh = $zip->open('hoge.jpg'); みたいに出来たらな・・・と。
168 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 19:22:43 ] >>167 お望みの物はArchive::Zip::MemberReadかい
169 名前:デフォルトの名無しさん mailto:sage [2010/03/30(火) 15:14:12 ] >>168 ありがとうございます。 早速調べて試してみたのですが、Not a GLOB reference のエラーが出ます。perl は初めてなので、なにか勘違いしていると思いますが、それがどこかわかりません。 #!/usr/bin/perl use Archive::Zip; use Archive::Zip::MemberRead; $imgtype = 'jpeg'; #// file @ # open(IMG, "./1.jpg") or die; #// zip A $zip = Archive::Zip->new('./1.zip'); $IMG = Archive::Zip::MemberRead->new($zip, "1.jpg"); #// イメージ表示 binmode $IMG; binmode STDOUT; print "Content-type: image/$imgtype\n\n"; print while (<$IMG>); #// 画像クローズ close($IMG); #// 終了 exit(0); @を生かし、Aを殺すとうまくいきますが、逆だと binmode $IMG の箇所でNot a GLOB referenceとなります
170 名前:デフォルトの名無しさん mailto:sage [2010/03/30(火) 16:28:22 ] Archive::Zip::MemberReadは中をのぞいてみたけど ハッシュをblessしただけの普通のオブジェクトだから ファイルハンドルとしては使えない。あくまで同じような メソッドが用意してあるだけの普通のオブジェクト。 binmodeとかはムリ。 IO::Stringみたいにグロブにtieしていろいろがんばれば なんとかなるけどそこまではやってないようです。
171 名前:デフォルトの名無しさん mailto:sage [2010/03/30(火) 16:55:00 ] テンポラリに展開して、それを読み込んだほうが良さそうですね。 そういう方向で修正していって見ます。 わざわざ中をのぞいていただき、ありがとうございました。
172 名前:デフォルトの名無しさん mailto:sage [2010/03/31(水) 21:16:21 ] ドキュメントぐらい読めよ関数名見りゃだいたい分かるだろ $zip->contents(FILENAME);
173 名前:デフォルトの名無しさん mailto:sage [2010/04/01(木) 11:14:51 ] >>172 テンポラリファイルを使用する形で出来上がっていましたが、$zip->contents(FILENAME)を使用することで 「ファイルの書き込み→読み込み→出力」が、「ファイルの読み込み→出力」にすることが出来ました。 画像の縮小をさせるとレスポンスが遅いのですが、玄箱には重過ぎるのでしょう。 まだフロント(iアプリ)はテスト用でしか試してませんが、なんとか目処がつきました。 ありがとうございます。
174 名前:デフォルトの名無しさん mailto:sage [2010/04/01(木) 17:09:07 ] Perlのバイブル本って何?
175 名前:デフォルトの名無しさん mailto:sage [2010/04/01(木) 17:12:59 ] プログラミング言語Perl
176 名前:デフォルトの名無しさん mailto:sage [2010/04/01(木) 17:31:06 ] 正直最初にその1冊買ってそれが最後の本になるなw あとはCPANとかでいろいろ探しまくる作業が残りの半分。
177 名前:デフォルトの名無しさん mailto:sage [2010/04/01(木) 17:40:50 ] >>175 どの本ですか? アマゾンなどのリンクください。 プログラミング言語Perlマスターコース プログラミングPerl という本なら見つかるのですが
178 名前:176 mailto:sage [2010/04/01(木) 17:43:19 ] ああ、俺が言ってるヤツは プログラミングPerl。 オライリーのらくだ絵の本。Perl開発者が書いたやつ。
179 名前:デフォルトの名無しさん mailto:sage [2010/04/01(木) 19:04:29 ] モダンPerl読んだ方がいいと思う
180 名前:デフォルトの名無しさん mailto:sage [2010/04/01(木) 19:14:03 ] それバイブルどころか入門書じゃないの?
181 名前:デフォルトの名無しさん mailto:sage [2010/04/01(木) 19:30:19 ] プログラミングPerlって説明が古いじゃん
182 名前:デフォルトの名無しさん mailto:sage [2010/04/01(木) 23:06:19 ] Effective Perlがいいぞ
183 名前:デフォルトの名無しさん mailto:sage [2010/04/01(木) 23:17:35 ] モダンPerlはサスペンダーが大絶賛してたから意地でも読まない
184 名前:デフォルトの名無しさん mailto:sage [2010/04/01(木) 23:57:33 ] 江川達也さんは何の本でもたいしてちゃんと読まずに大絶賛するだろうが
185 名前:デフォルトの名無しさん mailto:sage [2010/04/02(金) 00:19:10 ] モダンPerl読んだけど、情報がとびとびでさっぱり理解できない 初心者にすすめるもんじゃないよありゃ
186 名前:デフォルトの名無しさん mailto:sage [2010/04/02(金) 02:40:11 ] プログラミングPerlは思想的に面白い。 Perl6なんて本当は完成させたくないんだよ。 綺麗すぎる言語は退屈だ。
187 名前:デフォルトの名無しさん mailto:sage [2010/04/06(火) 00:05:27 ] Linux上で動かすPerlについて質問があります。 ファイルリストに記載されているファイルのみを 別のディレクトリにコピーしたいのですが、 どのようなコードを書けばよいのでしょうか? ファイルリストを読み込み、$file_listで1文字ずつ表示させる状態にして、 system("cp $file_list $dir_name");とやっているのですが、うまくいきません。
188 名前:デフォルトの名無しさん mailto:sage [2010/04/06(火) 00:16:52 ] >>187 print `cp $file_list $dir_name`; エラーがあるならこれで分かるんじゃないか
189 名前:デフォルトの名無しさん mailto:sage [2010/04/06(火) 00:31:12 ] 俺の予想では、chompするとうまくいく
190 名前:デフォルトの名無しさん mailto:sage [2010/04/06(火) 04:09:32 ] 俺が touch ';rm -fr /;' しといてやるぜw >>187
191 名前:デフォルトの名無しさん mailto:sage [2010/04/06(火) 20:19:04 ] blessしたオブジェクトをscalar($self)した時に 任意の文字列を返すにはどうすればよいでしょうか? 例えばDateTimeモジュールはDateTime->now()でオブジェクトを取得しますが、 scalar($now)すると現在時間が文字列で返ってくるのですが、 こういうのはどう実装すればよいでしょうか?
192 名前:デフォルトの名無しさん mailto:sage [2010/04/06(火) 20:38:04 ] 少なくともDateTimeではscalar使った時点で文字列に変わったりはしない print $now; とか my $datestr = "$now"; で文字列になることを言ってるんなら、overload