[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 2chのread.cgiへ]
Update time : 02/17 02:25 / Filesize : 157 KB / Number-of Response : 572
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Perlについての質問箱 43箱目



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 あたり

29 名前:デフォルトの名無しさん mailto:sage [2010/02/23(火) 16:40:49 ]
前スレから、用語がどうとか本捨てろとか話の腰を折っては
自己満足してる初心者がいるな

30 名前:デフォルトの名無しさん [2010/02/24(水) 16:02:17 ]
if ($res->is_success && (!($recstr =~ /.+/) ||
$res->content =~ /$recstr/)) {
service_set($v, $r, "up");
&ld_debug(2, "check_http: $$r{url} is up\n");
return $SERVICE_UP;
}

service_set($v, $r, "down");
&ld_debug(3, "Headers " . $res->headers->as_string);
&ld_debug(2, "check_http: $$r{url} is down\n");
return $SERVICE_DOWN;

こんなコードあるんだけど
if ($res->is_success の箇所で
Can't call method "is_success"って出てて処理が停止しちゃうんだけど
とりあえず続行させるにはどうすればいいの?


31 名前:デフォルトの名無しさん mailto:sage [2010/02/24(水) 16:05:22 ]
削ればいいと思うよ。その後の動作は保証しないが。

32 名前:30 [2010/02/24(水) 20:26:30 ]
なんか{is_success}にしたらとりあえず大丈夫な気がしないでもないけど、
Perlってそもそも変数に原始性はもってないものなの?

ECCメモリ使ってないせいなのかな?

33 名前:デフォルトの名無しさん mailto:sage [2010/02/24(水) 20:34:59 ]
その話を続けるつもりなら、CPAN モジュールならモジュール名を晒せよ。
じゃなきゃ、こっちが分かるわけないだろ。


34 名前:デフォルトの名無しさん mailto:sage [2010/02/24(水) 21:58:33 ]
HTTP::Response でしょ。コードで use してるのは LWP::UserAgent 辺りかもしれないけど。

35 名前:デフォルトの名無しさん mailto:sage [2010/02/24(水) 22:09:35 ]
HTTP::Status


36 名前:デフォルトの名無しさん [2010/02/24(水) 22:55:42 ]
とりあえずData::Dumperで$resの値を晒してもらうのがいいんじゃないか?

37 名前:デフォルトの名無しさん mailto:sage [2010/02/24(水) 22:59:36 ]
「Can't call method」って出てるのにデータ構造見せられてもね



38 名前:デフォルトの名無しさん mailto:sage [2010/02/25(木) 00:12:20 ]
どのパッケージにblessされてるかわかるだろ。もっともそれだけなら
ref $resをprintするだけでいいけどな。

39 名前:デフォルトの名無しさん mailto:sage [2010/02/25(木) 16:40:46 ]
AUTOLOADが実行されてない時点で何かおかしいだろ

40 名前:デフォルトの名無しさん mailto:sage [2010/02/26(金) 11:49:00 ]
>>33 お父さんかよ!
>>34 お母さんかよ!
>>35 お兄ちゃんかよ!
>>36 家庭訪問の先生かよ!
>>37 たまたま居合わせた水道屋かよ!
>>38 とりあえず呼ばれてきた親戚かよ!
>>39 とりあえず呼ばれてきたお巡りさんかよ!

41 名前:デフォルトの名無しさん mailto:sage [2010/02/26(金) 12:11:25 ]
mooseでis => 'bare'して、自分でアクセサ書く時に、そのアクセサの中で型制約したい時はどうするの?

42 名前:デフォルトの名無しさん mailto:sage [2010/02/26(金) 20:45:28 ]
has 'hoge' => ( is => 'bare', isa => 'Foo', reader => '_get_hoge', writer => '_set_hoge' );
最終的にhogeに値をセットするんなら最初にhogeに対して指定した制約(Foo)が適用されるんじゃないの?
俺が素人だからかもしれんが何がしたいのかよくわからん

43 名前:デフォルトの名無しさん mailto:sage [2010/02/28(日) 09:44:33 ]
web上の画像ファイルを自動でダウンロードするにはどうるすれば良いですか?
たとえばhogehoge/hoge.jpgを自動でダウンロードする場合です。


44 名前:デフォルトの名無しさん mailto:sage [2010/02/28(日) 09:51:13 ]
use LWP;

45 名前:デフォルトの名無しさん mailto:sage [2010/03/01(月) 00:00:24 ]
新Perldocって死んだの?
Googleグループもスパムが飛んでるし

46 名前:デフォルトの名無しさん mailto:sage [2010/03/01(月) 01:51:13 ]
perldoc.perl.org/ ならこっちからは繋がるけど?

47 名前:デフォルトの名無しさん [2010/03/01(月) 02:48:27 ]

requireで実行した処理に引数を送りつけるにはどうしたら良いでしょうか?
requireで実行でなくても構わないんですが、

1: 実行中に外部から文字列 (フィル名と引数) を受け取る。
2: その文字列をrequireして返って来た内容を処理する。

と言うのがしたいのです。
コマンドとかではなくて、同じプロセス内で実行できたらいいなと思ってます。




48 名前:47 mailto:sage [2010/03/01(月) 03:27:24 ]

eval( qq[ local \@_ = @外部から受け取った引数\; \n] . $openで読んだファイル内容 );

とやるのはあまりに強引でしょうか?


49 名前:デフォルトの名無しさん mailto:sage [2010/03/01(月) 05:19:14 ]
>>46
あ、新PerldocJPだった
年末に空中分解したような感触を受けたんだけど

50 名前:デフォルトの名無しさん mailto:sage [2010/03/01(月) 06:02:22 ]
>49
分解以前に、始まってるようにも見えなかったが

51 名前:デフォルトの名無しさん mailto:sage [2010/03/01(月) 21:58:27 ]
貴重な生きてる板だから何かしようぜ

52 名前:デフォルトの名無しさん mailto:sage [2010/03/02(火) 23:17:42 ]
これからやろうぜ!って集まったけど年開けてみんな忙しくてはや3月って感じだろ

53 名前:デフォルトの名無しさん [2010/03/03(水) 09:05:51 ]
5.11使ってる人いる?

54 名前:デフォルトの名無しさん mailto:sage [2010/03/03(水) 13:30:51 ]
CPANTSってメンテ中?
>>53
12月に5.12が出ると思ったら難航しているみたいだから使っているよ、5.11.5を。

55 名前:デフォルトの名無しさん mailto:sage [2010/03/03(水) 19:38:03 ]
($var) = unpack(...)

こんなかんじのコードがあるんですけど$varに括弧を付ける意味ってなんですか?

56 名前:デフォルトの名無しさん mailto:sage [2010/03/03(水) 19:45:27 ]
リストコンテキストになる

57 名前:デフォルトの名無しさん mailto:sage [2010/03/03(水) 19:57:36 ]
>>56
ありがとうございます。
ググってもうまく探せなかったので助かりました。



58 名前:デフォルトの名無しさん [2010/03/04(木) 02:00:32 ]
1〜1000の整数の先頭に0を付け加えて、4桁にしたい

1   →0001
100 →0100
1000→1000

s/〜/〜/;

で一発で置換するには〜の部分はどう書けばいいですか?

59 名前:デフォルトの名無しさん mailto:sage [2010/03/04(木) 02:03:10 ]
スレ違い

60 名前:デフォルトの名無しさん mailto:sage [2010/03/04(木) 02:39:02 ]
sprintf 禁止なのかな。

61 名前:デフォルトの名無しさん mailto:sage [2010/03/04(木) 03:09:27 ]
全角だから工夫が必要かもね


62 名前:デフォルトの名無しさん mailto:sage [2010/03/04(木) 03:14:54 ]
Pythonでやればいいのに

63 名前:デフォルトの名無しさん mailto:sage [2010/03/04(木) 03:15:30 ]
Python厨

64 名前:デフォルトの名無しさん mailto:sage [2010/03/04(木) 03:20:21 ]
いやだからその部分だけPythonにやらせてPerlから呼び出せばいいじゃん
そういう使い方ができるのがPythonなんんだから

65 名前:デフォルトの名無しさん mailto:sage [2010/03/04(木) 03:23:50 ]
print( substr("0000" . "1", -8, 8 ) . "\n");
print( substr("0000" . "100", -8, 8 ) . "\n");
print( substr("0000" . "1000", -8, 8 ) . "\n");

66 名前:デフォルトの名無しさん mailto:sage [2010/03/04(木) 04:05:45 ]
$str =~ tr/0-9/0-9/;
my $formated_str = sprintf( %04d, $str );
$formated_str =~ tr/0-9/0-9/;
文字コードは書かれてないから知らん

67 名前:デフォルトの名無しさん mailto:sage [2010/03/04(木) 04:21:09 ]
use utf8;
utf8::is_utf8($_) or die "死ね";
s{ (?<!\d) (\d{1,3}) (?!\d) }{
  my $is_zenkaku = $1 =~ tr/0-9//;
  ( $is_zenkaku ? '0' : '0' ) x ( 4 - length $1 ) . $1;
}egx;



68 名前:デフォルトの名無しさん mailto:sage [2010/03/04(木) 05:05:06 ]
なんかたまたま全角で書いてるだけだったりしてな・・・整数って書いてるし。
ということで俺は つsprintf

69 名前:デフォルトの名無しさん mailto:sage [2010/03/04(木) 16:44:31 ]
use utf8;
$_ = "1〜1000の整数の先頭に0を付け加えて、4桁にしたい ";
1 while(s/(?<![0-9])([0-9]{1,3})(?![0-9])/0$1/g);

規制一時解除記念カキコ。

70 名前:デフォルトの名無しさん mailto:sage [2010/03/08(月) 06:52:00 ]
*{__PACKAGE__ . "p"} = \&CORE::print;
p(); #=> Undefined subroutine &main::p called at - line 2.

これは print 関数の厳密なエイリアスは作れないということでしょうか

71 名前:デフォルトの名無しさん mailto:sage [2010/03/08(月) 10:49:27 ]
>>70
作れないかどうかはわからないが、コードだけ見ると名前空間の::がないからでは?
*{__PACKAGE__."::p"}

72 名前:デフォルトの名無しさん [2010/03/10(水) 12:16:30 ]
#!/usr/bin/perl -w
# perl のパスを指定

$send="00000000000\@docomo.ne.jp"; # デフォルト送信先

while (<>){
$content .= $_;

m/^Content-Length: (\d+)$/;

if ( m/^$/ ){ # 本文は調べない
while (<STDIN>){
$content .= $_;
}
}
}

open(SENDMAIL,"|/usr/bin/sendmail $send");
print SENDMAIL $content;
close(SENDMAIL);

exit;

Perlを勉強中で、上記を使って自分の携帯からメールを送りそのまま返信
(転送)するプログラムを作ろうとしています。
実際にメールを送るとサーバーには届いているのですが、返信をしてくれ
ません。記述で間違っている箇所があれば教えてください。

73 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 12:33:34 ]
とりあえず受信と送信一度に書くとどこに問題があるかわかりにくいので、

・受信したメールを適当なファイルに格納するプログラム
・適当な内容のメールを送信するプログラム

を別々に書くところからはじめるのをお勧めする。

74 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 23:23:28 ]
perlの前にmailを勉強すべきかもしれない
ちゃんとヘッダを作ってないのに /usr/bin/sendmail を
使うのはよくない。

75 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 01:57:19 ]
sendmailは本当に/usr/binにあるのか?

76 名前:72 mailto:sage [2010/03/11(木) 09:21:14 ]
レスありがとうございました。いろいろ試してみて、.forwardを作り直したら
上手くいきました。記述は全然変えていないのですが、.plで作成してサーバー
で変更をしていたのがよくなかったようです。
原因がわからず解決まで半日もかかってしまいましたorz

上のコードは社内でperlができる人のを真似たものでした。

77 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 17:54:42 ]
続けてですみません。
私が作りたいと思っているプログラムが

「携帯Aから(絵文字などを含む)メールを受け取り、携帯Bに転送する」

というものなのですが、>>72で書いたコードではデコメは良いのですが
絵文字が全て〓に化けてしまいました。

サーバーで受け取った時点で〓に置換されてしまうので、送る各キャリ
アに合わせて文字コードを変換しなくてはならないとわかりました。
ttp://cgipon.specters.net/labo/it_emoji.htmlで紹介されているサン
プルを試してみたりしているのですが、上手く変換してやることができ
ずにいます。 どのような方法を試してみればよいでしょうか?



78 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 19:35:50 ]
〓に変換されたらもとが何の絵文字だったか知りようがないのでは?

79 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 21:27:10 ]
SoftBankの絵文字に変換されてるって意味じゃないよな

80 名前:デフォルトの名無しさん mailto:sage [2010/03/12(金) 01:59:19 ]
>>77
> どのような方法を試してみればよいでしょうか?

どこが悪いのか突き止めて、そこを修正するといいよ。

81 名前:デフォルトの名無しさん mailto:sage [2010/03/12(金) 07:40:31 ]
バッチファイルに以下のように記述し、放り込んだファイルの名前に応じて
テキストファイルの一部を置換したいんですが、よく文字化けしてしまいます
>>4を使ったplファイルを別途用意せず、バッチファイルへの記述だけで
文字化けに対応する方法はないでしょうか?

perl -pe s/"置換前文字列"/"置換後文字列"/ "置換前.txt" > "置換後.txt"

82 名前:デフォルトの名無しさん mailto:sage [2010/03/12(金) 09:30:44 ]
>>77です。
>>78
全てを試したのではないのですが〓に変換されたのは、ほぼ全ての絵文字
でした。
>>79
SoftBankではないです、言われてみれば〓はSoftBankのロゴなんですね。
>>80
上記のサイトのサンプルの関数を通して変化しなかったので、他のサイト
を一生懸命探していました。

絵文字はこんなに難しかったのですね

83 名前:デフォルトの名無しさん mailto:sage [2010/03/12(金) 11:35:37 ]
>>81
perl -Mencoding=xxx かな。
PERLIOとかPERL_ENCODINGは効かないのか...

84 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 03:58:23 ]
>>83
ありがとうございます
が、恥ずかしながらうまく使えません・・・
以下みたいなのとは根本的に使い方が違うんでしょうか?
perl -Mencoding=sjis -pe s/"置換前文字列"/"置換後文字列"/ "置換前.txt" > "置換後.txt"

85 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 06:34:22 ]
実はsjisじゃなくてcp932ってオチだったりして

86 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 18:34:27 ]
Encode::JP::Mobile; を使った経験のある方がいたら、教えてく下さい。

my $subject_encoded =
is_imode($email_to)
? '=?SHIFT-JIS?B?' . MIME::Base64::encode_base64( encode( 'x-sjis-docomo', $subject ), '' ) . '?='
: is_softbank($email_to)
? '=?UTF-8?B?' . MIME::Base64::encode_base64( encode( 'x-utf8-softbank', $subject ), '' ) . '?='
: is_ezweb($email_to) ? encode( 'x-sjis-kddi-auto', $subject )
: '=?ISO-2022-JP?B?' . MIME::Base64::encode_base64( encode( 'iso-2022-jp', $subject ), '' ) . '?=';

UTF-8文字列の$subjectを上記を使ってエンコードしたいのですが、文字
化けしてしまいます。Encode::Guessで確認するとasciiに変換されていま
した。使い方に間違いがあるでしょうか?よろしくお願いします。

87 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 09:11:14 ]
>>86
どの携帯キャリアの分岐だったのか、encode_base64を通す前が問題なのか
通した後が問題なのか、ぐらいは切り分けてから質問しろよ。



88 名前:デフォルトの名無しさん [2010/03/16(火) 14:21:01 ]
プログラムを組む際は use strict を最初に書いておく事といわれたので、
これをつけて.plファイルを実行すると、
下記のようなエラーが多く出ます。どう対応すればいいでしょうか_?
use strict をつけないと特にエラーは出ません。

Global symbol "$xxxx" requires explicit package name at xxxx.cgi line 16.

89 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 14:55:14 ]
>>88
「use strict を付けた状態でエラーにならないように書け」ってこと。
変数にmy付けてスコープを明確にせよ

90 名前:デフォルトの名無しさん [2010/03/16(火) 15:10:35 ]
>>89

thanks

91 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 18:26:58 ]
>>87
不十分でした、すみません。
キャリアはdocomoなのでis_imodeの分岐を通っています。
encode_base64の前と後、どちらに問題があるのかつかめていない状
態です。
utf-8にデコードした文字列をそこに通すだけで良いのかと考えてしま
っていたのですが、使い方を間違っているようです。

絵文字について調べてEncode::JP::Mobileを見つける事ができたので
すが、携帯から受け取ったメールをそのまま返信するというコードに、
どう当てはめていけばよいのかわからずに苦戦中です。

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みたいに板違いなのに回答するとこうやって図にのるのでみんなやめようね






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<157KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef