1225

Twitter:@dn0t_ GitHub:@ogrew

sprintf関数で自由自在に数字や文字列のフォーマットを指定する

1234 -> 001234 みたいな数字のゼロ埋め作業をPerlで楽にやる方法。

下記のように書くと便利です。

my $hoge = 1234;
my $fuga = sprintf("%06d", $hoge);
print $fuga;
# -> 001234

sprintf関数は指定した書式で文字列を作成することが出来ます。

応用して小数点の丸め込み(四捨五入)にも使えます。

my $hoge = 12.343;
my $fuga = sprintf("%.2f", $hoge);
print $fuga;
# -> 12.35

0をなくせばspace埋めも可能です。

$fuga = sprintf("%-6s", 1234);
# -> '1234  '
$fuga = sprintf("%6s", 1234);
# -> '  1234'

浮動小数点数や16進数との返還などもsprintf関数でたやすくできます。

d.hatena.ne.jp

d.hatena.ne.jp

perlでHashの一部分をテストで確認したいときにsuperhashof便利やん。

f:id:taiga006:20180509225412p:plain:w500
use Test::More;
use Test::Deep;

my $user = {
        name => '齋藤飛鳥',
        age => 19,
        height => 158,
        blood_type => 'O',
        center => '裸足でSummer',
    };

is $user->{age}, 19;
cmp_deeply $user, superhashof { name => '齋藤飛鳥', blood_type => 'O' };

done_testing;

[output]

₍ ᕕ( ‘ω’)ᕗ⁾ $ prove -lvf superhashof.pl
superhashof.pl ..
ok 1
ok 2
1..2
ok
All tests successful.
Files=1, Tests=2,  0 wallclock secs ( 0.03 usr  0.01 sys +  0.07 cusr  0.01 csys =  0.1
2 CPU)
Result: PASS

こける場合はこんな感じ。

use Test::More;
use Test::Deep;

my $user_2 = {
        name => '斉藤優里',
        age => 24,
        height => 157,
        blood_type => 'O',
        center => '13日の金曜日',
    };

cmp_deeply $user_2, superhashof { name => '齋藤優里', height => 157 };

done_testing;

[output]

₍ ᕕ( ‘ω’)ᕗ⁾ $ prove -lvf superhashof.pl
superhashof.pl ..
not ok 1
#   Failed test at superhashof.pl line 12.
# Compared $data->{"name"}
#    got : '斉藤優里'
# expect : '齋藤優里'
1..1
# Looks like you failed 1 test of 1.
Dubious, test returned 1 (wstat 256, 0x100)
Failed 1/1 subtests

Test Summary Report
-------------------
superhashof.pl (Wstat: 256 Tests: 1 Failed: 1)
  Failed test:  1
  Non-zero exit status: 1
Files=1, Tests=1,  0 wallclock secs ( 0.02 usr  0.00 sys +  0.05 cusr  0.01 csys =  0.08 CPU)
Result: FAIL

[参考]

Test::Deep - search.cpan.org