Created by
sironekotoro
| #!/usr/nbin/perl
use strict;
use warnings;
# https///twitter.com/perlzemi/status/11414955238005
# Perl入学式で、何をしたらいいですかと聞かれたりするので、 何も思いつかない方のために、演習問題をひとつ。
# [キャメル-スネーク変換]
# 入力 AbcDefGhi 出力 abc_def_ghi を
# 1. 正規表現なしでループで処理する
# ものと
# 2. 正規表現を使う
# ものを作ってみてください。
# このスクリプトは
# 1. 正規表現なしでループで処理する(Perl入学式の範囲外)
# で解いてます
my $str = 'AbcDefGhi';
use String::CamelCase qw/decamelize/;
print decamelize($str); #abc_def_ghi
|
| #!/usr/nbin/perl
use strict;
use warnings;
# https///twitter.com/perlzemi/status/11414955238005
# Perl入学式で、何をしたらいいですかと聞かれたりするので、 何も思いつかない方のために、演習問題をひとつ。
# [キャメル-スネーク変換]
# 入力 AbcDefGhi 出力 abc_def_ghi を
# 1. 正規表現なしでループで処理する
# ものと
# 2. 正規表現を使う
# ものを作ってみてください。
# このスクリプトは
# 1. 正規表現なしでループで処理する(Perl入学式の範囲内)
# で解いてます
my $str = 'AbcDefGhi';
# 回答格納用のスカラー変数
my $answer;
# 愚直なハッシュテーブル
# lc 教えてないからfor文でハッシュテーブル構築できない!
my %hash = (
A => '_a',
B => '_b',
C => '_c',
D => '_d',
E => '_e',
F => '_f',
G => '_g',
H => '_h',
I => '_i',
J => '_j',
K => '_k',
L => '_l',
M => '_m',
N => '_n',
O => '_o',
P => '_p',
Q => '_q',
R => '_r',
S => '_s',
T => '_t',
U => '_u',
V => '_v',
W => '_w',
X => '_x',
Y => '_y',
Z => '_z',
);
# 中間処理用のテンポラリ
my $temp = '';
# ループ処理
for my $char ( split //, $str ) {
if ( $hash{$char} ) {
$temp .= $hash{$char};
}
else {
$temp .= $char;
}
}
# この時点で $temp には _abc_def_ghi が入ってる
# でも最初の _ はどうする?うーんsubstrは教えていない・・・
# 無条件に捨ててもいいかな?
# いや、変換後の最初の文字が_から始まるとは限らないし
# 頑張ってif文にしよう
# splitで1文字ずつ分割
my @array = (split //, $temp);
# 配列の先頭が _ だったらshiftして取り出して捨てる
if ($array[0] eq '_' ){
shift @array;
}
# 配列を join でつなげて答えにする
$answer = join '', @array;
print $answer;
|
| #!/usr/nbin/perl
use strict;
use warnings;
# https///twitter.com/perlzemi/status/11414955238005
# Perl入学式で、何をしたらいいですかと聞かれたりするので、 何も思いつかない方のために、演習問題をひとつ。
# [キャメル-スネーク変換]
# 入力 AbcDefGhi 出力 abc_def_ghi を
# 1. 正規表現なしでループで処理する
# ものと
# 2. 正規表現を使う
# ものを作ってみてください。
# 2. 正規表現を使う(Perl入学式の範囲外)
my $str = 'AbcDefGhi';
# 先頭が大文字だったら小文字に置換する
$str =~ s/\A(.)/\l$1/x;
# 大文字だったら、 アンダースコア付きの小文字 に置換する
$str =~ s/([A-Z])/_\l$1/g;
print $str; # abc_def_ghi
|
| #!/usr/nbin/perl
use strict;
use warnings;
# https///twitter.com/perlzemi/status/11414955238005
# Perl入学式で、何をしたらいいですかと聞かれたりするので、 何も思いつかない方のために、演習問題をひとつ。
# [キャメル-スネーク変換]
# 入力 AbcDefGhi 出力 abc_def_ghi を
# 1. 正規表現なしでループで処理する
# ものと
# 2. 正規表現を使う
# ものを作ってみてください。
# このスクリプトは
# 2. 正規表現を使う(Perl入学式の範囲内)
# で解いてます
my $str = 'AbcDefGhi';
# 全ての大文字の前に _ を入れる
# [A-Z] 大文字の文字クラス
# ([A-Z]) 大文字の文字クラスを ( ) で囲んで、$1 で参照できるようにしたもの
$str =~ s/([A-Z])/_$1/g; # _Abc_Def_Ghi
# 全てを小文字にする... \l 教えてたら楽なのだけどなぁ・・・教えてないし。
# 困った時のハッシュテーブル(とっても愚直な書き方)
my %hash = (
A => 'a',
B => 'b',
C => 'c',
D => 'd',
E => 'e',
F => 'f',
G => 'g',
H => 'h',
I => 'i',
J => 'j',
K => 'k',
L => 'l',
M => 'm',
N => 'n',
O => 'o',
P => 'p',
Q => 'q',
R => 'r',
S => 's',
T => 't',
U => 'u',
V => 'v',
W => 'w',
X => 'x',
Y => 'y',
Z => 'z',
);
# 大文字[A-Z]は、() で囲まれているので、該当すれば $1 に入る
# $1をkeyとしてhashをさがし、valueの小文字に置き換える
$str =~ s/([A-Z])/$hash{$1}/g;
# 先頭に _ があれば置換で削除する
$str =~ s/^_//;
print $str;
|