mieki256's diary



2009/05/21(木) [n年前の日記]

#1 [prog] Perl/TkとConfig::Simpleでハマり

昨日作成したスクリプト(exe化したもの)を、ActivePerlをインストールしていない親父さんpcに入れてみたらちゃんと動いてくれた。が、親父さんの使い方からすると、いくつか修正しなければいけない点があることに気付いたり。その中の一つに、htmlのページタイトルをその都度指定したいというソレがあって。であれば、初期値文字列をiniに含めて…と修正したところでハマったり。

SJISのiniを読み込んで表示できない例

UTF8のiniを読み込んで表示できない例

SJISのiniを読み込んで表示できた例

UTF8のiniを読み込んで表示できた例


スクリプト自体をUTF8で書くことと関連して、iniをSJISで書くか、UTF8で書くかなどの問題もあるようで。

サンプルスクリプトはこんな感じ。
#!/usr/bin/perl -w
#
# Config:Simple と Tk のテスト
# スクリプト自体は utf8で記述

use strict;
use warnings;
use utf8;
use Tk;
use Encode;
use Config::Simple;

my $mode = 3;

# iniファイル読み込み

my $title = '';
if ( $mode == 0 ) {                                     # NG : ini が shiftjis
    my $cfg = new Config::Simple('setting_sjis.ini');
    $title = $cfg->param('setting.title');
} elsif ( $mode == 1 ) {                                # NG : ini が utf8
    my $cfg = new Config::Simple('setting_utf8.ini');
    $title = $cfg->param('setting.title');
} elsif ( $mode == 2 ) {                                # OK : ini が shiftjis
    my $cfg = new Config::Simple('setting_sjis.ini');
    binmode STDIN, ':encoding(shiftjis)';
    $title = decode('shiftjis', $cfg->param('setting.title'));
} else {                                                # OK : ini が utf8
    my $cfg = new Config::Simple('setting_utf8.ini');
    $title = decode('utf8', $cfg->param('setting.title'));
}

# Tk 初期化

my $mw= new MainWindow;
$mw->title("Config::Simple and Tk test");
$mw->fontCreate('MS',-family => 'MS ゴシック');
$mw->optionAdd('*font' => 'MS 9');

$mw->Label(-text => "タイトル")->grid(-row => 0, -column => 0);
$mw->Entry(-textvariable => \$title)->grid(-row => 0, -column => 1);

MainLoop;
encoding() とか decode() とか、さっぱり判ってないまま巷のソレをコピペでアレコレなのです。

以上です。

過去ログ表示

Prev - 2009/05 - Next
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project