Perlでの書き方
投稿:2019-06-08
こちらのツイート/ブログを拝見しました。
私のようにPerlばかり20年書いてるとどうするだろうと思い、試しに書いてみました。
私のようにPerlばかり20年書いてるとどうするだろうと思い、試しに書いてみました。
Dumperにパッチを当てて漢字を表示させるモジュールMyDumper.pmです。
package MyDumper; use Data::Dumper; use Exporter qw/ import /; our @EXPORT = qw/ Dumper /; $Data::Dumper::Useperl = 1; $Data::Dumper::Quotekeys = 0; use Sub::Install; Sub::Install::install_sub({ code => sub { my $val = shift; return qq("$val"); }, into => "Data::Dumper", as => "qquote", }); 1;こっちが本編です。UTF-8で書いてます。
#!/usr/bin/env perl -w use strict; use warnings; use utf8; use DateTime; use Encode::Argv; use Encode::Locale; use FindBin; use lib $FindBin::Bin; use MyDumper; use feature "say"; use open IO => ":utf8"; binmode STDIN, ":encoding(console_in)"; binmode STDOUT, ":encoding(console_out)"; $| = 1; say "----------"; say "Hello, world.を出力"; say "Hello, world."; say "----------"; say "ハッシュのダンプ"; my $month = { 一月 => "睦月", 二月 => "如月", 三月 => "弥生", }; say Dumper($month); say "----------"; say "配列の値を出力"; my @array = qw/ 3 1 2 /; say $_ for @array; say "----------"; say "ハッシュの出力"; my %month = ( 一月 => "睦月", 二月 => "如月", 三月 => "弥生", ); say $month{一月}; say $month{二月}; say $month{三月}; say "----------"; say "配列の長さを得る"; say "配列:@array"; my $len = @array; say "配列の長さ:$len"; say "----------"; say "配列の最小値を得る"; my $min; for (@array) { $min = $_ if !defined $min || $_ < $min; } say "最小値:$min"; say "----------"; say "配列の最大値を得る"; my $max; for (@array) { $max = $_ if !defined $max || $max < $_; } say "最大値:$max"; say "----------"; say "配列を昇順に並び替えて出力"; my @sorted = sort @array; say $_ for @sorted; say "----------"; say "配列を降順に並び替えて出力"; my @rev_sorted = sort {$b cmp $a} @array; say $_ for @rev_sorted; say "----------"; say "配列の要素を文字列に連結して出力"; say "配列:@array"; my $joined_str = join ",", @array; say "連結した文字列:$joined_str"; say "----------"; say "変数が定義されているか調べる"; { # 未定義変数の記述はuse strictで実行不可になるため、このスコープ内を無効にする no strict; if (defined $max) { say '変数$maxあり'; } else { say '変数$maxなし'; } if (defined $takoluka) { say '変数$takolukaあり'; } else { say '変数$takolukaなし'; } } say "----------"; say "コマンドラインで渡された引数の出力"; { # コマンドラインでの引数をエミュレート @ARGV = qw/ たこルカ は 俺 の 嫁 /; } say "コマンドライン:@ARGV"; say $_ for @ARGV; say "----------"; say "文字列を特定の文字で分割して配列に入れ出力"; say "元の文字列:$joined_str"; my @split_array = split ',', $joined_str; say $_ for @split_array; say "----------"; say "特定文字の置換と同時に小文字化し出力"; my $str = "A-B-C"; say "置換前:$str"; $str =~ s/-/_/g; $str = lc $str; say "置換後:$str"; say "Unicodeの場合"; my $str2 = "A-B-C"; say "変換前:$str2"; $str2 =~ s/-/_/g; $str2 = lc $str2; say "変換後:$str2"; say "----------"; say "大文字を小文字に変換し出力"; my $str3 = "ABCABC"; say "変換前:$str3"; $str3 = lc $str3; say "変換後:$str3"; say "----------"; say "文字列の長さの取得"; say "文字列:$str3"; my $len_str = length $str3; say "文字列の長さ:$len_str";
---------- Hello, world.を出力 Hello, world. ---------- ハッシュのダンプ $VAR1 = { "二月" => "如月", "三月" => "弥生", "一月" => "睦月" }; ---------- 配列の値を出力 3 1 2 ---------- ハッシュの出力 睦月 如月 弥生 ---------- 配列の長さを得る 配列:3 1 2 配列の長さ:3 ---------- 配列の最小値を得る 最小値:1 ---------- 配列の最大値を得る 最大値:3 ---------- 配列を昇順に並び替えて出力 1 2 3 ---------- 配列を降順に並び替えて出力 3 2 1 ---------- 配列の要素を文字列に連結して出力 配列:3 1 2 連結した文字列:3,1,2 ---------- 変数が定義されているか調べる 変数$maxあり 変数$takolukaなし ---------- コマンドラインで渡された引数の出力 コマンドライン:たこルカ は 俺 の 嫁 たこルカ は 俺 の 嫁 ---------- 文字列を特定の文字で分割して配列に入れ出力 元の文字列:3,1,2 3 1 2 ---------- 特定文字の置換と同時に小文字化し出力 置換前:A-B-C 置換後:a_b_c Unicodeの場合 変換前:A-B-C 変換後:a_b_c ---------- 大文字を小文字に変換し出力 変換前:ABCABC 変換後:abcabc ---------- 文字列の長さの取得 文字列:abcabc 文字列の長さ:6