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


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

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



1 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 03:03:00 ]
"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
● 2009/08/07 現在の最新版: 5.10.0

▼ 前スレ
Perlについての質問箱 40箱目
pc12.2ch.net/test/read.cgi/tech/1243631674/

リンク集は >>2-3
Perl 日本語処理の基礎の基礎 >>4
過去スレは >>5-6 あたり

2 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 03:03:43 ]
[プログラミング自体の経験が無い奴はまずココを読め]
Perl プログラミング講座: ttp://www.site-cooler.com/kwl/perl/

[本]
リャマ: ttp://www.oreilly.co.jp/books/4873111269/
駱駝: ttp://www.oreilly.co.jp/books/4873110963/
Effective Perl: ttp://www.ascii.co.jp/books/books/detail/4-7561-3057-7.shtml (修正)
クックブック: ttp://www.oreilly.co.jp/books/4873112028/
Perl ベストプラクティス: ttp://www.oreilly.co.jp/books/4873113008/
Perl Hacks: ttp://www.oreilly.co.jp/books/9784873113142/

[オンラインマニュアル]
最新のドキュメント: ttp://search.cpan.org/dist/perl/
perl5.8.x のドキュメント(一部): ttp://www.kt.rim.or.jp/~kbk/perl-5.8/
perl5.005_03 のドキュメント: ttp://www.kt.rim.or.jp/~kbk/perl5.005/
日本語ドキュメント検索: ttp://www.cpan.jp/search.cgi (停止中)
perldoc.jp: ttp://www.perldoc.jp/
perldoc.com: ttp://www.perldoc.com/

3 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 03:04:24 ]
[モジュール]
CPAN.com: ttp://search.cpan.org/
河馬屋二千年堂: ttp://homepage3.nifty.com/hippo2000/

[テクニック]
Perl メモ: ttp://www.din.or.jp/~ohzaki/perl.htm
Perl のページ: ttp://homepage1.nifty.com/nomenclator/perl/
Perl の小技: ttp://homepage3.nifty.com/hippo2000/perltips/index.htm

[Perl 5.8 Unicodeメモ]
ttp://www.rwds.net/kuroita/program/Perl_unicode.html (修正)
ttp://www.namazu.org/~tsuchiya/perl/perl-5.8.html
ttp://www.lr.pi.titech.ac.jp/~abekawa/perl/perl_unicode.html

4 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 03:05:04 ]
# [Perl 日本語処理の基礎の基礎]
# このレスは、Windows の ActivePerl で日本語処理を行う場合のテンプレートです。
# このレスの内容をそのまま、UTF8 形式のソースファイルに保存して下さい。
# 入出力ともシフト JIS 形式のファイルまたは DOS 窓を想定しています。
# まず、以下の行を先頭に入れて下さい。
use utf8;
use open IO => ":encoding(cp932)";
binmode STDIN => ":encoding(cp932)";
binmode STDOUT => ":encoding(cp932)";
binmode STDERR => ":encoding(cp932)"; # ※1
use Encode;
# 次に、あなたが実行したい処理の内容を入れて下さい。
$file = 'C:/なんたら/かんたら.txt';
open my $fh, '<', encode("cp932", $file) or die $! ; # ※2
print <$fh>;
# 以上の内容は、日本語処理が解らない人でも、とりあえず日本語処理ができてしまう
# おまじないです。条件が異なる場合の対処方法は、ご自分で勉強して下さい。
# 【注】※1. の行を入れると、DOS 窓への日本語出力は簡便になりますが、
# ソースファイル名に非 ANSI 文字が含まれる場合に die 文の出力が失敗します。
# ※2. OS に渡す文字列(ファイル名,dos コマンドのオプションなど)は、
# この例のように cp932 でエンコードする必要があります。

5 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 03:05:45 ]
[過去スレ1]
1 pc.2ch.net/tech/kako/1017/10177/1017736187.html
2 pc3.2ch.net/tech/kako/1033/10336/1033688230.html
3 pc2.2ch.net/tech/kako/1041/10412/1041205885.html
4 pc2.2ch.net/tech/kako/1048/10485/1048519394.html
5 pc5.2ch.net/tech/kako/1053/10530/1053053082.html
6 pc5.2ch.net/tech/kako/1060/10606/1060689008.html
7 pc2.2ch.net/test/read.cgi/tech/1068051036/ (事故により消滅)
8 pc2.2ch.net/test/read.cgi/tech/1074151549/ (事故により消滅)
9 pc5.2ch.net/test/read.cgi/tech/1079114157/
10 pc5.2ch.net/test/read.cgi/tech/1085564875/
11 pc5.2ch.net/test/read.cgi/tech/1090889189/
12 pc5.2ch.net/test/read.cgi/tech/1094579428/
13 pc5.2ch.net/test/read.cgi/tech/1097851764/
14 pc5.2ch.net/test/read.cgi/tech/1101649274/
15 pc5.2ch.net/test/read.cgi/tech/1105953092/
16 pc8.2ch.net/test/read.cgi/tech/1111034732/
17 pc8.2ch.net/test/read.cgi/tech/1117870308/
18 pc8.2ch.net/test/read.cgi/tech/1121804136/
19 pc8.2ch.net/test/read.cgi/tech/1126977805/
20 pc8.2ch.net/test/read.cgi/tech/1131286411/

6 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 03:06:26 ]
[過去スレ2]
21 pc8.2ch.net/test/read.cgi/tech/1134327348/
22 pc8.2ch.net/test/read.cgi/tech/1138519327/
23 pc8.2ch.net/test/read.cgi/tech/1141742901/
24 pc8.2ch.net/test/read.cgi/tech/1146022352/
25 pc8.2ch.net/test/read.cgi/tech/1149259409/
26 pc8.2ch.net/test/read.cgi/tech/1153412251/
27 pc8.2ch.net/test/read.cgi/tech/1157874614/
28 pc8.2ch.net/test/read.cgi/tech/1162273941/
29 pc11.2ch.net/test/read.cgi/tech/1166708139/
30 pc11.2ch.net/test/read.cgi/tech/1173880452/
31 pc11.2ch.net/test/read.cgi/tech/1181500187/
32 pc11.2ch.net/test/read.cgi/tech/1186995713/
33 pc11.2ch.net/test/read.cgi/tech/1192463997/
34 pc11.2ch.net/test/read.cgi/tech/1199977642/
35 pc11.2ch.net/test/read.cgi/tech/1208674881/
36 pc11.2ch.net/test/read.cgi/tech/1215569470/
37 pc11.2ch.net/test/read.cgi/tech/1218449440/
38 pc11.2ch.net/test/read.cgi/tech/1221967332/
39 pc12.2ch.net/test/read.cgi/tech/1234181856/
40 pc12.2ch.net/test/read.cgi/tech/1243631674/

7 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 07:25:46 ]
前スレの>>232を実行しましたが、hogehogeとしか出力しません。
どこかおかしくはないでしょうか?

Perlについての質問箱 40箱目
pc12.2ch.net/test/read.cgi/tech/1243631674/232

232 名前:デフォルトの名無しさん[sage] 投稿日:2009/06/18(木) 16:48:15
---- test.pl ----
use strict;
require 'config.pl';
print config::param('hoge');
print config::param('fuga');
---- config.pl ----
package config;
use strict;
sub param {
 return (
  hoge => 'abcdefg',
  fuga => '12345',
 )[$_[0]];
}
1;

設定を1つに纏めたいなら、ourとか考えずに上記のようにしろ。
万が一の確立で、そんな面倒なソースがまわってきたら嫌だ。

8 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 08:01:38 ]
>どこかおかしくはないでしょうか?
前スレで色々指摘されてんじゃん。


---- config.pl ----
package config;
use strict;
sub param { ${ { hoge => 'abcdefg', fuga => '12345' } }{$_[0]} ; }
1;

で動く様になるけど、、、


>>1


9 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 08:14:53 ]
>>8
d
動きました。

10 名前:デフォルトの名無しさん [2009/08/07(金) 10:20:01 ]
Programming Perlの新しい版はいつでるの?



11 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 10:49:17 ]
あれは多分
package config;
use strict;
sub param {
 return {
  hoge => 'abcdefg',
  fuga => '12345',
 }->{$_[0]};
}
1;
こういう事をしたかったんだろうね。
でもこれ呼び出す度に変数定義コストが掛かる上に例え同じkeyでも
違うアドレスの値を返すという駄目の見本のようなコード

12 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 10:54:29 ]
>>10
Perl6が出てから半年後ぐらいじゃないの?

13 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 14:16:58 ]
Configは素直にYAML使え。
コスト?知らんがな。

14 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 15:13:10 ]
前スレのあいつは酷かったな。頭悪いレスしか書けないのになんで
あんな人を馬鹿にした態度なんだろ。
あのレベルでPerlを生業としてるとはとても思えない。

15 名前:デフォルトの名無しさん [2009/08/07(金) 15:36:15 ]
すいません、質問があります。

GetOptions使用時に
GetOptions( "startup|first!" => \$startup ,
のようにパイプラインが使われていることがあるのですが、
どういう意味があるのですか?

16 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 15:41:31 ]
>>15
search.cpan.org/dist/Getopt-Long/lib/Getopt/Long.pm#Options_with_multiple_names

17 名前:15 [2009/08/07(金) 16:14:52 ]
ああ、どっちもいけるってことですか。

ありがとうございます。

18 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 17:38:40 ]
PHPのob_start()のように、出力を一時的にバッファリングすることはできますか。

ob_start();
print "aaa¥n";   #なにも表示されない
$output = ob_get_clean(); # $output eq "aaa¥n"

よろしくお願いします。


19 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 18:14:17 ]
クラス名 Foo::Bar::Baz::MyClass を MyClass という名前で使えるようにするにはどうしたらいいですか。
Exporterを使うのかと思いましたが、できませんでした。
ためしたコード:

package Foo::Bar::Baz::MyClass;
use Exporter qw(import);
our @EXPORT_OK = qw(MyClass);

として、

use Foo::Bar::Baz::MyClass qw(MyClass);
my $obj = MyClass->new();

としましたが、Undefined subroutine &Foo::Bar::Baz::MyClass というエラーに成りました。

20 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 18:22:49 ]
>>19
オブジェクト指向について勉強しなおすといいと思うよ。



21 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 18:23:27 ]
>>18
STDOUTを書き換えればできたと思う。
ソース、おぼろげな記憶。

22 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 18:25:15 ]
当てずっぽうで書いて動かないから質問する

23 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 18:35:39 ]
>>18
ファイルに退避させることはできるな。
#!/usr/bin/perl

*TAIHI = *STDOUT;
open(IN, '>/tmp/foo');
*STDOUT = *IN;
print "hello, world!\n";
*STDOUT = *TAIHI;
print "hi, there!\n";

メモリに退避する方法は良く分からん。open2使ったけど
うまくいかんかった。

24 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 18:49:03 ]
#!/usr/bin/perl
use IPC::Open2;

*TAIHI = *STDOUT;
$pid = open2(\*OUT, \*IN, 'cat');
*STDOUT = *IN;
select STDOUT;
print "hello, world!\n";
*STDOUT = *TAIHI;
close(IN);

print "hi, there!\n";

$output = join("", <OUT>);
print $output;

こうか。結構めんどいな。つーかINとOUTを逆にしてて動かないだけだった。

25 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 18:49:47 ]
あーselect STDOUTっての要らないから取っといて。

26 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 18:53:10 ]
5.8.0からin-memoryバッファをopenできるようになったよ

use strict;
my $buffer;

sub ob_start
{
open(MEM, ">", \$buffer) or die;
select(MEM);
}
sub ob_get_clean
{
select(STDOUT);
return $buffer;
}

ob_start();
print "hogehoge\n";
print ob_get_clean();

27 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 19:04:28 ]
>>26
うおーそれ見ると俺完全にズレてるな。精進しねーと。thx。

28 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 20:47:08 ]
>>23-27
どうもありがとうございます。さっそく試してみます。



29 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 20:49:04 ]
>>26
ob_get_clean()のなかでMEMをcloseしてないようですが、close(MEM) をいれたほうがいいですか。
それともなくてもかまわないでしょうか。

30 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 21:29:32 ]
Data::Dumper よりもっとコンパクトに表示できるライブラリはないでしょうか。
Data::Dumperの表示は
$VAR1 = [
'A',
'B'
  ];
こんなかんじなので、['A', 'B'] みたいにコンパクトに表示してくれるライブラリを探しています。
ちょうどRubyのinspectみたいなのが希望です。



31 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 22:05:05 ]
>19
ttp://search.cpan.org/~ovid/aliased/

>30
$Data::Dumper::Indent = 0;

32 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 22:24:17 ]
>>31
さんくすです

33 名前:デフォルトの名無しさん mailto:sage [2009/08/08(土) 11:16:10 ]
これ↓、入札者が一人しかいなかったので高いのかなーと思ったけど買いでしたかね?

Perlベストプラクティス - Yahoo!オークション
page11.auctions.yahoo.co.jp/jp/auction/n73044025

34 名前:デフォルトの名無しさん mailto:sage [2009/08/08(土) 11:44:14 ]
こないだブクオフで500円で買ったやつだな。

35 名前:デフォルトの名無しさん mailto:sage [2009/08/08(土) 18:17:21 ]
先日のDoS攻撃でTwitter陥落してから、Net::Twitterが動かないのですが
何か仕様変わったんですかね?

36 名前:デフォルトの名無しさん mailto:sage [2009/08/12(水) 13:57:10 ]
これって何で0って表示になるんですかね?

%hash = (hash-key1 => 0, hash-key2 => 2);
print keys %hash; #=> 0

37 名前:デフォルトの名無しさん mailto:sage [2009/08/12(水) 14:12:15 ]
hash-key1は hash - key1で、数値コンテキストでは数に見えない
文字列は0だから、0 - 0で0。hash-key2も同じ。

38 名前:デフォルトの名無しさん mailto:sage [2009/08/12(水) 14:12:59 ]
use strict使えよ

39 名前:デフォルトの名無しさん mailto:sage [2009/08/12(水) 14:19:12 ]
>>37
d

40 名前:デフォルトの名無しさん [2009/08/13(木) 20:17:58 ]
>>35
スクリプト対策されたんじゃね?
もしくはHTTPヘッダを精査されてるとか
リファラーがないと無効なページがあるとか?



41 名前:デフォルトの名無しさん mailto:sage [2009/08/14(金) 14:57:59 ]
$tripkey = "#istrip"; # パスワードとする文字列(# 付き)
$tripkey = substr($tripkey,1);
$salt = substr($tripkey.'H.',1,2);
$salt =~ s/[^\.-z]/\./go;
$salt =~ tr/:;<=>?@[\\]^_`/ABCDEFGabcdef/;
$trip = crypt($tripkey,$salt);
$trip = substr($trip,-10);
$trip = '◆'.$trip;
print "$trip";


この3行目は
$tripkeyとH.を連結したものから2文字目と3文字目を取り出して
代入しているということなのですか?

42 名前:デフォルトの名無しさん mailto:sage [2009/08/14(金) 18:36:05 ]
わたしは自分で確認することは絶対にしません。

43 名前: ◆TWARamEjuA mailto:sage [2009/08/14(金) 19:31:50 BE:1089252-BRZ(10072)]
ちなみに2ちゃんねるのトリップ回路は改正されたですよ♪

【堅牢】トリップの新方式を考えてみませんか【互換性】 ★2
qb5.2ch.net/test/read.cgi/operate/1245724530/l50

44 名前:デフォルトの名無しさん [2009/08/14(金) 20:03:13 ]
>>41
そう。だから$saltにはstがはいってる。
なんでH.を連結してるのかよくわからんけど

45 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 16:52:33 ]
以下のようにasciiが混じった日本語(cp932 or euc-jp or utf8)をasciiとそうでない文字に
分けたいのですが、どうすればいいでしょうか?

$text = "abcひらがなdef漢字ghiハンカクjkl";

(asciiとそうでない文字に分ける処理)
(例えば順に@textに格納)

@textに、("abc", "ひらがな", "def", "漢字", "ghi", "ハンカク", "jkl")が入っている。

46 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 17:55:49 ]
>>45
decodeしてsplitして必要なら先頭要素を読み飛ばして再度encode

47 名前:デフォルトの名無しさん mailto:sage [2009/08/16(日) 11:12:17 ]
下記サイトに従って、半角カタカナをmime_encodeしたのですが、元に戻すと全角カタカナに
なってしまいます。
どうすれば半角カタカナをうまくmime_encodeできるでしょうか?

isoya.at.webry.info/200801/article_5.html

use Encode;

my $text = qq{ハンカクカタカナ};

# cp932 => MIME-Header-ISO_2022_JP
Encode::from_to($text, 'cp932', 'MIME-Header-ISO_2022_JP');
print $text, "\n";

# MIME-Header-ISO_2022_JP => cp932
Encode::from_to($text, 'MIME-Header', 'cp932');
print $text, "\n";



48 名前:デフォルトの名無しさん mailto:sage [2009/08/16(日) 13:55:26 ]
ISO-2022-JPをあきらめてUTF-8にするとか?
UTF-8なMIMEヘッダに対応してないMUAがありそうな気もするけど

# cp932 => MIME-Header-ISO_2022_JP
Encode::from_to($text, 'cp932', 'MIME-Header-ISO_2022_JP');

# cp932 => MIME-Header
Encode::from_to($text, 'cp932', 'MIME-Header');

49 名前:デフォルトの名無しさん mailto:sage [2009/08/16(日) 15:57:38 ]
>>45
utf8でブロック使え。あるいはEUC-JPで\x20-\x7F拾え。
>>47
ISO-2022-JPに半角カナなんてないから。
それで半角カナにエンコードできる実装はカス(それが読めるメーラーも含めてな)。

50 名前:デフォルトの名無しさん mailto:sage [2009/08/16(日) 17:31:45 ]
>>45
use Encode qw(decode encode);

my $text = "abcひらがなdef漢字ghiハンカクjkl";
my $code = "cp932";

my $text_utf8 = decode($code, $text);
my @text;

push @text, encode($code, $1) while( $text_utf8 =~ /(\p{InBasicLatin}+|[^\p{InBasicLatin}]+)/g );



51 名前:デフォルトの名無しさん mailto:sage [2009/08/17(月) 00:29:28 ]
しかし日本語関係のトラブル多いな
がちがちに防御した書き方しなくても、
perlが手抜きしてなければ動くのに

52 名前:デフォルトの名無しさん [2009/08/17(月) 01:55:47 ]
てすと

53 名前:デフォルトの名無しさん mailto:sage [2009/08/17(月) 08:10:54 ]
use utf8;
binmode STDIN, ":utf8";
binmode STDOUT, ":utf8";

my $jp; ←DBから引っ張ってきたベタUTF-8(のはず)
utf8::decode($jp); # これがあってもなくても
"$jp 日本語\n"; # 文字化けする。
"$jp"; # 大丈夫
"日本語"; # これも大丈夫

XML::RSSでおかしくなります。助けてください。

54 名前:デフォルトの名無しさん [2009/08/17(月) 08:41:38 ]
>>53
> "$jp 日本語\n"; # 文字化けする。
> "$jp"; # 大丈夫
> "日本語"; # これも大丈夫

日本語がEUCかSJISになってる

55 名前:デフォルトの名無しさん mailto:sage [2009/08/17(月) 08:44:50 ]
>>46
>>49-50
ありがとうございます。
utf8にdecodeしてから処理すればいいんですね。


56 名前:デフォルトの名無しさん [2009/08/17(月) 09:05:20 ]
>>53
$jpが本当にUTF-8かあやすぃ
jcode.plとか何でもいいけど
文字コードをちゃんと調べてみるべき

57 名前:デフォルトの名無しさん mailto:sage [2009/08/17(月) 09:58:26 ]
>>47
無理やりするなら、JISコードにして自分でbase64エンコードするとか。

use Encode;

my $text = qq{ハンカクカタカナ};

# cp932 => MIME-Header-ISO_2022_JP
Encode::from_to($text, 'cp932', '7bit-jis');
use MIME::Base64;
$text = '=?ISO-2022-JP?B?' . encode_base64($text, "") . '?=';
print $text, "\n";

# MIME-Header-ISO_2022_JP => cp932
Encode::from_to($text, 'MIME-Header', 'cp932');
print $text, "\n";

58 名前:デフォルトの名無しさん mailto:sage [2009/08/17(月) 09:59:51 ]
>>54
vimでutf8モードで保存してます。
>>56
確認済みです。ちなみにprintだとutf8と混在で表示できてます。
printだとうまく行くんですが、XML::RSSだと通らないという
不思議な現象に悩まされてます。
そもそもXML::RSSが実体参照を吐いて生UTF-8を吐いてくれません。

59 名前:デフォルトの名無しさん mailto:sage [2009/08/17(月) 10:04:49 ]
>>57
なんか不思議なことしてないか?

60 名前:デフォルトの名無しさん mailto:sage [2009/08/17(月) 15:56:11 ]
>>57
何がしたいのかさっぱり分からん・・・・。
ISO-2022-JPは半角カナ含まないっつってるのに宣言してるし、
EncodeのMIME-Headerを根本的に勘違いしてる気がするし、
それじゃデコードしても文字化けするだけだと思われ。



61 名前:デフォルトの名無しさん mailto:sage [2009/08/17(月) 17:06:58 ]
Perl/Tkの動作が良くわからなくて困っています。

その1。
Tkアプリで起動時に、「初期化中です」的なミニウィンドウを
メインウィンドウの前に表示して、終わったら消したいので
Toplevelを置いたのですが。
focusしてToplevelのタイトルバーは青く(アクティブに)なるのに、
肝心のウィンドウ本体がメインウィンドウに隠れてしまいます。

use strict;
use warnings;

use Tk;
use Win32; # …その2で追加

my $w = new MainWindow;
$w->Toplevel->focus;
Win32::MsgBox('nullpo'); # …その2で追加

MainLoop;

その2。
あと、試しに上のコードを書いてだめな後に、Win32のメッセージボックスを
おまけ的にくっつけてみたのですが、これを実行すると先に「nullpo」が
出てから、TkのToplevelにメインウィンドウが重なって出てきます。

その1でToplevelをちゃんとメインウィンドウの上に表示する方法と、
その2で実行順が一見逆転する理由が知りたいです。

環境:WindowsXP SP3、ActivePerl 5.8.1、Tk::VERSION 800.024

62 名前:61 mailto:sage [2009/08/17(月) 17:51:11 ]
調べまくってたら事故解決しました。ごめんなさい。

my $w = new MainWindow;
$w->update;
my $aho = $w->Toplevel;
$aho->focus;
$aho->update;
Win32::MsgBox('・ω・');
MainLoop;

newした後で逐一updateしないと画面には出ないみたいですね。
画面に出せば順番に重なるっと。すいませんでした。

63 名前:デフォルトの名無しさん mailto:sage [2009/08/17(月) 19:41:48 ]
>>60
試しに、>>57でエンコードしたのをWindows Live MailやGmailで受信してもうまくデコートして
半角カナを表示した。

メール業界的には半角カナを認めてるってことか?

64 名前:デフォルトの名無しさん mailto:sage [2009/08/17(月) 20:54:34 ]
認めるとか、認めないとか、そういう問題じゃない。
浮気相手の子供だから認知しない、と言われても
生まれてしまった子は育てないわけにはいかないだろ。

65 名前:デフォルトの名無しさん mailto:sage [2009/08/17(月) 21:09:16 ]
ISO_2022_JPは進駐軍が勝手に決めた規格。
日本語を知らないヤツらが日本語の規格を決めたのだから使い勝手が悪いのは仕方ない。
そこでマイクロソフトはSI/SOコードで半角カナに切り替えられるよう拡張した。
このISO_2022_JP_MSは、マイクロソフトという一企業のローカルルールなわけだから
他のOS(UNIXとか・・・)が従う義務は当然無い。
しかし、デスクトップ アプリケーション分野でメシを食ってる企業にとって
Windowsという巨大市場を無視するわけにはいかない。
認めるとか認めないとか、そういう以前に
半角カナは、今そこにあるわけだから。
半角カナを捨てるということは、Windowsを捨てることと同じなんだよ。

66 名前:デフォルトの名無しさん mailto:sage [2009/08/17(月) 21:29:09 ]
すごい。スミからスミまで全部デタラメ。

67 名前:デフォルトの名無しさん mailto:sage [2009/08/18(火) 02:37:03 ]
倒置構文のifの後にカッコがくる場合には最初のカッコが閉じるまでが反映されるとかそういうルールってありませんでしたっけ?
print "ok\n" if (0) or (1); #=> ok
これが直感的な答えと違う動作をするような気がしてたのですが

68 名前:デフォルトの名無しさん mailto:sage [2009/08/18(火) 02:55:18 ]
>>67
if 修飾子は制御構造。or は演算子。基本からやり直せ。
perldoc.jp/docs/perl/5.10.0/perlsyn.pod
perldoc.jp/docs/perl/5.10.0/perlop.pod

69 名前:デフォルトの名無しさん [2009/08/18(火) 03:02:54 ]
UTF8つかえ

70 名前:デフォルトの名無しさん mailto:sage [2009/08/18(火) 03:22:40 ]
>>68
違うんです
Perl のパーサの仕様でif文の後に(が来た場合に予期しない動きをすることがあると思い込んでたんです
で、実験をしてみたところ予想に反してうまく動いたので何か他のものと勘違いしてたのではないかという結論に至ったのです
そんでうまく絞り込めるような検索ワードが思いつかなかったのでここで聞いてみたのです
何か心当たりないですか?



71 名前:デフォルトの名無しさん mailto:sage [2009/08/18(火) 04:36:42 ]
>if文の後に(が来た場合に予期しない動きをすることがある
あるわけないだろw

if (0); としてしまうと or が成り立たなくなるため 0 or 1 と解釈するしかない思います。
今手元にはないから確かめられないけど、Perlってのはそんなもんです。
つーかコンパイルフェーズで制御構造も演算子も全部畳み込まれるよ


検索はしても、パーサーの詳細なんてきっと出てきません。
あえて言うならドキュメントのどっかに書いてあるかもしれません


72 名前:デフォルトの名無しさん mailto:sage [2009/08/18(火) 04:42:38 ]
0x5C文字に関することです
ファイルから読み込んだ文字列を出力するのですが、その際能やソ等の文字を能\、ソ\という風に置き換えたい、
そういう時はどういう風に記述すればいいですか?

$str =~ s/[〜]\\/\\\\/;
こういう記述で書けば良いと言う事はなんとなく分かるのですが[]の中身が分かりませんでした。

検索してみてもヒットする量が膨大すぎて思うような回答を見つけることが出来ませんでした。


73 名前:デフォルトの名無しさん mailto:sage [2009/08/18(火) 06:12:43 ]
>>72
my @char_5c =
qw(― ソ Ы \ 噂 浬 欺 圭 構 蚕 十 申 曾 箪 貼 能 表 暴 予 禄 兔
喀 媾 彌 拿 杤 歃 濬 畚 秉 綵 臀 藹 觸 軆 鐔 饅 鷭 x x \ \ );

my $re_5c;
$re_5c .= "\Q$_\E|" for @char_5c;
chop $re_5c;

my $str = "〜〜〜〜";
$str =~ s/($re_5c)/$1\\/g;

74 名前:デフォルトの名無しさん mailto:sage [2009/08/18(火) 06:50:48 ]
>>72
これ↓でどうだろう?

$str =~ s/([\x00-\x7F\xA1-\xDF]|[\x81-\x9F\xE0-\xFC][\x40-\x7E\x80-\xFC])/
my $c = $1; $c =~ \/.\\\/ ? "$c\\" : $c/eg;

75 名前:デフォルトの名無しさん mailto:sage [2009/08/18(火) 07:00:04 ]
>>72-74
homepage1.nifty.com/nomenclator/perl/shiftjis.htm
何に出力するのにそんな付け足しが必要なのかは分からんが

76 名前:デフォルトの名無しさん mailto:sage [2009/08/18(火) 07:14:53 ]
>>65
おま・・・・・。
半角カナは弊害が多すぎて日本人の権威たる村井先生達がわざわざISO-2022-JPから
削っていただいてくれたわけだが。

それでも使う馬鹿や使える馬鹿クライアントが多いから困ってるわけだが。

ちなみにWindows用のクライアントの一部はISO-2022-JPを騙ってjis-7bitなぞ認識しないぞ。
相手が読めない可能性があるメール送るのは阿呆のすること。
そんなに半角カナ使いたければ添付ファイルにでも放り込んでおけ。

Windowsはcp932使ってるからISO-2022-JPの議論とは全く別。

>>72
んなことする前にEncode覚えろ。

77 名前:デフォルトの名無しさん mailto:sage [2009/08/18(火) 07:17:03 ]
あー今はUnicodeになってんのかな内部的には。
Unicodeには半角カナあるからな(文字コードが字幅を制限するってのが
いまいち理解に苦しむが)。

78 名前:デフォルトの名無しさん mailto:sage [2009/08/18(火) 08:49:31 ]
>>65ほど全行がいちいちデタラメな文章も珍しいな・・・。

79 名前:デフォルトの名無しさん mailto:sage [2009/08/18(火) 09:41:36 ]
なんだ村井ってのは?進駐軍の手先か?
研究室に小森っきりで実社会を知らないヤツのオナニーに付き合わされちゃタマランよ。

80 名前:デフォルトの名無しさん mailto:sage [2009/08/18(火) 10:28:20 ]
Perlで、ディレクトリ名とファイル名のjoinはどうやるのでしょうか。
今は "$dirname/$filename" としているのですが、これはWindowsでも期待通りに動きますか。
ちなみに「perl join」でぐぐったら、配列のjoinばかりでてきました(当然か)。
よろしくお願いします。



81 名前:デフォルトの名無しさん mailto:sage [2009/08/18(火) 10:45:03 ]
半角カナ以外にも「〜」なんかのunicodeへのマッピングが統一されてないとか
日本語の文字コードは滅茶苦茶で先人達はほんと何やってたんだよって感じ。
負の遺産押し付けないで欲しいわ〜。こんなのでもなんとか扱えるように
perlがんばったなとは思うけど。

82 名前:デフォルトの名無しさん mailto:sage [2009/08/18(火) 11:26:17 ]
>>80
search.cpan.org/dist/perl/pod/perlport.pod#Files_and_Filesystems
> DOS, OS/2, VMS, VOS, and Windows can work similarly to Unix with / as path
> separator, or in their own idiosyncratic ways

83 名前:デフォルトの名無しさん mailto:sage [2009/08/18(火) 11:42:53 ]
>>79
ja.wikipedia.org/wiki/ISO-2022-JP
でも読んでろ。業界の常識だぞ。

>>81
〜は、そもそも全角チルダなのに字形が同じという阿呆な理由でMicrosoftが波ダッシュに割り当てたのが
問題の始まり。UN*X系やMacOSのIMEはきちんと対応してる。
まあこれは、縦書きの波ダッシュの字形を間違えて横書きに適応したUnicode策定側にも
責任があるが。つーわけで現状、波ダッシュと全角チルダが混在してる状況なのでいつか大変なことになると思われ。
WindowsはVistaから波ダッシュと全角チルダが見分けが付かなくなるようになったので、
水面下で問題は進行する。

つーかなんだかんだいってコガイダンはすげーよ。

0x5c問題(半角円記号問題)もMicrosoftがISO/IEC 646と純正ASCIIを混同したのが原因。
まあこれは歴史的に仕方ないと思うが。さすがにPerlも含むコンパイル等が動かないと困るので、
0x5cは円記号でもバックスラッシュでもあるという不思議な状況がこれからも続くと思われ。

スレチスマソ。

84 名前:デフォルトの名無しさん mailto:sage [2009/08/18(火) 11:57:22 ]
>>82
thank you very much.

もうひとつ質問です。
["foo", ["bar", ["baz"]]]

["foo", "bar", "baz"]
に展開してくれるような関数はありませんか。
「perl flatten」でぐぐったけどそれらしいのは見つからず。

85 名前:デフォルトの名無しさん mailto:sage [2009/08/18(火) 12:10:32 ]
>>84
再帰使いたかったからこんなん書いてみた。
#!/usr/bin/perl
use Data::Dumper;
$var = ["foo", ["bar", ["baz", 'buz'], ['baa',['foobar']]]];

print Dumper [ flatten($var) ];

sub flatten{
my($var) = @_;
my @foo;
map {ref eq 'ARRAY' ? flatten($_) : $_} @$var;
}


86 名前:デフォルトの名無しさん mailto:sage [2009/08/18(火) 12:10:37 ]
>>84
Perlの調べ物にGoogleなんかを使うから見つからんのだ
search.cpan.org/search?query=flatten

87 名前:デフォルトの名無しさん mailto:sage [2009/08/18(火) 12:16:12 ]
>>86
search.cpan.org/~obradovic/List-Flatten-0.01/lib/List/Flatten.pm
俺のコードの劣化版でワロタ。

88 名前:デフォルトの名無しさん mailto:sage [2009/08/18(火) 12:26:36 ]
>>87
ソース見たら、これだけだねw
sub flat(@) {
return map { ref eq 'ARRAY' ? @$_ : $_ } @_;
}

これを再帰させて中まで展開すれば>>84の答になるか
sub flat(@) {
return map { ref eq 'ARRAY' ? flat(@$_) : $_ } @_;
}

89 名前:デフォルトの名無しさん mailto:sage [2009/08/18(火) 12:27:54 ]
ていうか、それが>>85だな

90 名前:デフォルトの名無しさん mailto:sage [2009/08/18(火) 12:46:58 ]
>>85-89
おおーさんくすです。



91 名前:デフォルトの名無しさん mailto:sage [2009/08/18(火) 13:01:19 ]
>>85
my @foo; はどんな意味があるんですか?

92 名前:デフォルトの名無しさん mailto:sage [2009/08/18(火) 14:21:34 ]
>>91
残骸です。見なかったことにしてください。

93 名前:デフォルトの名無しさん mailto:sage [2009/08/18(火) 14:35:44 ]
>>92
了解

94 名前:デフォルトの名無しさん mailto:sage [2009/08/18(火) 14:47:06 ]
>>88
>sub flat(@) {
>return map { ref eq 'ARRAY' ? flat(@$_) : $_ } @_;
>}

map にわたす { } では、配列とスカラのどちらを返すべきなんでしょうか。
flat(@$_) だと配列だし、$_ だとスカラですよね。
どっちでもいいということ?もしそうだとして、コンテキストはスカラと配列のどちらになるんでしょう?

Perl勉強中につき、ヘルプミー



95 名前:デフォルトの名無しさん mailto:sage [2009/08/18(火) 15:19:29 ]
>>94
perldoc -f map に書いてあるよ。
mapはリストコンテキストで評価される。

つまりmapの { } が返すのは、スカラーでも、配列でも、ハッシュでもなんでもok
最終的にぜんぶフラットに連結されて1つのリストになる。

96 名前:デフォルトの名無しさん mailto:sage [2009/08/18(火) 15:24:23 ]
>>95
つまり map の { } のなかで $_ (スカラー)を返しても、それはリストコンテキストで評価されるから、
結局は ($_, ) とみなされる、ということですね。なるほど。
ありがとうございました。



97 名前:デフォルトの名無しさん mailto:sage [2009/08/18(火) 15:28:36 ]
> 〜は、そもそも全角チルダ
> 0x5c問題(半角円記号問題)もMicrosoftがISO/IEC 646と純正ASCIIを混同したのが原因

嘘は良くない

98 名前:デフォルトの名無しさん [2009/08/18(火) 16:46:51 ]
すいません、質問します。

my $tmp_os_info = $^O;

この記述の $^O; とはいったい何を表しているんでしょうか?
ビット演算で ^ を使うというのまでは分かったんですが、そのような動きを
していそうにも見えません。


99 名前:デフォルトの名無しさん mailto:sage [2009/08/18(火) 16:49:47 ]
<img src="xx">のxxを抽出するにはどうしたらいいですか?

100 名前:デフォルトの名無しさん mailto:sage [2009/08/18(火) 17:02:25 ]
1.正規表現を使う
2.正規表現を使わずに文字列を検索する








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

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

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