アットウィキロゴ
初歩の初歩~プログミング~@ ウィキ
掲示板 掲示板 ページ検索 ページ検索 メニュー メニュー

初歩の初歩~プログミング~@ ウィキ

Perl

最終更新:

Bot(ページ名リンク)

- view
だれでも歓迎! 編集
perl

install

install-PAR-

exeファイルを作りたいので「perl exe」で検索
参考
の通り行うとuse Encodeもつかえた。(^^)
ActivePerlの各Ver
PARのVer

以下は試行錯誤の残骸
+ ...
  • ここここをみてinstall
    • [[ここ>http://nabe.blog.abk.nu/par510]]はうまくいかない。PAR実行時にperl510.dllがなんたらどうやらuse Encode使うと出るエラーのよう

  • 追記:なんだかWin32::GUIモジュールを使ったスクリプトがexe化した後実行エラーになる。(他のモジュールもいくつかアウト)
そこでActivePerl5.10に乗り換え。なんか色々ごちゃごちゃして何やったか憶えてないけど、とりあえずWin32::GUIは動いた(しかしmixi_exportはperl510.dllがないと言われる)
    • やったこと
      • MinGWをインストール。PATHにC:\MinGW\bin;追加。再起動。
      • PPM(GUI)でCompress::Raw::Zlibをupdate(pp実行時にCant loadと言われたので)
      • PARはhttp://downloads.activestate.com/ActivePerl/Windows/をみて、Active Perlのverにあったものを

    • use Encodeが使えないのは不便なのでActivePerl再インストール。
そしたらpp使えなくなった(涙
5.8.9入れたら使えた。でもuse Encodeは使えない

ppmでno missing error(参考)

ppm search xxxx
で出てきた数字を
ppm install 数字

exe化コマンド(pp)

>pp -o hoge.exe hoge.pl 
    • cui非表示
>pp --gui -o hoge.exe hoge.pl

    • 注意:exe化する際packegeをrequireするときは条件文の中ではしない
    するとlibに含まれない。ならuseにしてしまえばいいとも思う。

GUI

ここの通り行う。
THE GUI LOFTのページリンクだけここに変更
GUI TEST

メモ

とりあえず

日本語表示(参考

文頭で
use utf8;
binmode STDIN,  ":encoding(cp932)";
binmode STDOUT, ":encoding(cp932)";
※binmodeはPARで作ったEXEがうまく動かない
追記:useEncodeを行うとPARで出来たexeが動かない
ただしGUI上ではこれはうまく動かない

GUI
  • Labelは
use utf8;を使わない。
  • ListBoxでは
decode('charaset',$string);   ※入力時
print encode('charaset',$string); ※出力時
charasetはwin上ではcp932が多いように思う。
が[[コマンドプロンプト]]でchcpで確認する。
ここの方がわかりやすいかも
utf-8フラグについて

split-第二引数に@は使えない。使うと要素数を返す。

@var=split(/nanika/,$list[i])

wait key

$wait=<STDIN>;#STDINは省略可能

配列の要素数(参考

# 最後の添字を取得(この場合は2。配列が空の場合は-1)
$num = $#hoge;
# 要素数を取得(この場合は3。配列が空の場合は0)
$num = @hoge;

print

    • 変数の中身を出力するときは””(ダブルクォーテーション)で囲む
print "@hoge" ----@hoge=(1,2)なら12と出力
    • 変数の要素数を出力するときは’’(シングルクォーテーション)で囲む
print '@hoge' ----@hoge=(1,2)なら2と出力
    • 文字列を連結する時は「.」を使う
print "$a"."$b" 

36進数<=>10進数 (参考

+ ...
use strict;
my $base_str = "0123456789abcdefghijklmnopqrstuvwxyz";
my $base_36 = convert_36(1234567);
print "$base_36\n";
my $base_10 = convert_10($base_36);
print "$base_10\n";

sub convert_36 {
my $number = shift;
my @work;
while ($number > 0) {
unshift @work, substr($base_str, $number % 36, 1);
$number = int($number / 36);
}
return join('', @work);
}

sub convert_10 {
my @work = reverse split //, shift;
my $number;
foreach my $idx (0 .. $#work) {
$number += index($base_str, $work[$idx]) * (36 ** $idx);
}
return $number;
}

コメントアウト(複数行)参考

print "ここは実行されます。\n";
=pod
ここはコメント行になります。
ここもコメント行になります。
=cut
print "ここも実行されます。\n";

論理演算子

ストリングの比較に==は使えない。eqを使う。

ENDサブルーチン(スクリプト終了時に実行)参考

END {
print "END!";
}

useとrequireの違い

ココ
メモリの使用量が~とかあるけど、気にしないなら全部useでいいんじゃないだろうか?

重複値の削除

ここ
簡単なのは
my @data = qw(aa dd bb cc dd cc bb aa);
my %uniq = map {$_ => 1} @data;  ※配列の要素をkeyとしてkeyの要素
my @data2_1 = keys %uniq;     を1とする(同じkeyは上書き?されて消える)

マッチングー正規表現ー

こことか
  • 数字のみの文字列抜き出し
=~ m/^[0-9]+$/

ファイル操作

  • ファイルの日本語読み込み(参考)
    • 読み込むファイルがUTF-8で書かれているなら、次のようにopenで指定する。
open(FH, "<:utf8", $filename);
    • 読み込むファイルがshift-jisなど、UTF-8以外のコードで書かれているなら、次のようにencodingをopenで用いて指定する。
pen(FH, "<:encoding(shiftjis)", $filename);
    • 行数を数える ファイル読み込み後$.に格納されている(参考の中から最後のを参照。)
open(FILE, 'hoge') or die;
print $. . '行\n';
close(FILE)


GUI

入門

  • ここをみながら色々と
  • リファレンス1 2 3
  • デモ(sample)-これが一番参考になるかも
    • コマンドプロンプトで~/Perl/site/lib/Win32/GUI/demosに移動(デフォルトの場合)
 以下実行
>win32-gui-demos

メモ

nameを大文字から始めるとボタンのCheckが参照できずうまくいかない

ファイルを開くダイアログ(参考)

+ ...
use strict;
use warnings;
use utf8;
use Win32::GUI();

my $file = "\0" . " " x 256;

my $ret = Win32::GUI::GetOpenFileName(
   -title  =>  "Win32::GUI::GetOpenFileName test",
   -file   =>  "\0" . " " x 256,
   -filter =>  [
       "Text documents (*.txt)" =>  "*.txt", 
       "Perl stuff (*.pl, *.pm)" =>  "*.pl;*.pm", 
       "All files", "*.*",
    ],
);

if($ret) {
    print "GetOpenFileName returned: '$ret'\n";
} else {
    if(GUI::CommDlgExtendedError()) {
        print "ERROR. CommDlgExtendedError is: ",
GUI::CommDlgExtendedError(), "\n";    
   } else {
       print "You cancelled.\n";
    }
}


Textfield

  • GetStringは使えず、Text()でGet&Setができる

XML


デバッグモード

  • コマンドプロンプトで以下実行(参考)
>perl -d hoge.pl

Mechanize

文字化け対策

タグ:

+ タグ編集
  • タグ:
最近更新されたスレッド
ウィキ募集バナー