ランニング用のBluetoothイヤホン買った

札幌も春が来て、そろそろランニングを開始したいと考えてたんだけどランニング中って暇じゃないですか。 暇っていうかランニングしてるじゃんって言われると思うんだけど走ってる時って何かを考えているようでボケーッとしてるんですよね僕の場合。 なんでオーディオブックを聴きながらランニング出来たら良いなと思い、このBluetoothイヤホンを買ってみました。

完全ワイヤレス型も欲しかったんだけど無くしそうなのでカナル式のこれにしました。 コスパが良かったのとamazonのレビューも良さげだったので決定。 早速、ジムで装着してランニングしたけどフィット感がよくて耳から落ちてしまうようなことはなさそう。 音質は、まあそれなりな印象。僕の場合はオーディオブックを聴くだけなので十分だけど音楽を聴くとなると クリアではないので、もうちょい高めのを選択したほうが良いと感じた。


オーディオブックサービスのaudiobook.jp

最近otobankさんからリリースされたサービスのaudiobook.jp audiobook.jp

なんと月額750円で聴き放題プランが!ランニング中や通勤などのスキマ時間に本を聴けます。スマートスピーカーもそうだけど、これから音声コンテンツは まだまだ増えてきそう。リリースされたばかりなので、これからコンテンツもさらに充実していきそうなので気になる方は是非。

Perl 正規表現の基本

入力された文字列にyesという文字が含まれているか調べるプログラム


my $str = <STDIN>;

if ($str =~ /yes/) {
  print "Match!\n";
} else {
  print "No match\n";
}

$str =~ /yes/ という部分は、演算子=~にて入力された文字列にyesが含まれているかどうかを調べる。 含まれていればMatch!を返し、含まれていなければNo matchを返す。

大文字小文字は区別される為、Yesのように大文字が含まれていると、No matchを返す事になる。 スペースについても文字とみなされる為、y esなどはNo matchが返される。

メタ文字


正規表現/yes/では入力された文字列のどこにyesが含まれていてもマッチした。 これをメタ文字^を使用し/^yes/とすると、文字列のはじめにyesがマッチするかどうかを調べる。

入力された文字がyyesno yesであればNo matchとなりyesterdayyes!!!!!!!!などはMatch!となる。 また、正規表現/yes$/では、文字列の終わりとyesがマッチするかどうかを調べる事になる。

Perl 演算子 x を使った文字列の繰り返し

演算子xを使った文字列の繰り返し


勉強していて楽しかったので記録。文字列を文字で作った飾り枠で囲ったりしました。 演算子xの使って'-'を40個表示する。

print '-' x 40, "\n";

> ----------------------------------------

次に配列@textの各要素を文字で作った飾り枠で囲みます。

my @text = (
     "There's more than one way to do it.",
     "Write once, run anywhere.",
     "Programming Lesson",
);
foreach my $str (@text) {
  print '+','-' x length($str),'+',"\n";
  print '|',$str,'|',"\n";
  print '+','-' x length($str),'+',"\n";
}

> +-----------------------------------+
> |There's more than one way to do it.|
> +-----------------------------------+
> +-------------------------+
> |Write once, run anywhere.|
> +-------------------------+
> +-------------------+
> |Programming Lesson.|
> +-------------------+

'-'をいくつ繰り返すかはlength($str)で得ています。

参考文書

新版Perl言語プログラミングレッスン入門編

新版Perl言語プログラミングレッスン入門編

perlの配列関数 splice

配列関数の中でちょっと特殊っぽい関数 spliceについて書き留めておく。
push/pop/shift/unshiftなどは配列の最初から、または最後から要素を足したり引いたりする関数だったが、spliceは途中の要素に対して操作できる。

形式としては splice (ARRAY , OFFSET , LENGTH ,LIST) のようになる。
わかりやすく書くと splice(対象配列の,ここから,これだけの長さを削除し,そこにこのリストを挿入)。

具体例は以下のような感じ。

my @array = qw(a b c d e f );
my @xyz = qw(x y z);
my @removed = splice (@array , 1 , 4 , @xyz);
print "\@array = @array\n";
print "\@removed = @removed\n";

> @array = a x y z f
> @removed = b c d e

spliceの後をわかりやすく説明すると@arrayのリストの添え字の1(b)から4(e)までを削除して配列@removedに突っ込んで、そこに配列@xyzのリスト(x y z)を入れてねという意味になります。

# 参考文書

新版Perl言語プログラミングレッスン入門編

新版Perl言語プログラミングレッスン入門編

Perlの基礎(演算子とか覚えた事の追記)

演算子の「かつ」、「または」


演算子として「かつ」を || としたり「または」を&&とするが
ほぼ同じ意味合いで「かつ」をand、「または」をorという演算子で表現できる。

my $hour = 13;
if ( 9 <= hour and hour <= 17) {
    print 'お仕事中';
}

> お仕事中

なお、||&&よりand,or演算子のほうが優先順位は低くなるようです。

if文とunless文


if文では「もしも・・・だったら」を表現するがunless文では「もしも・・・でなかったら」を表現する。

if文だと・・・

if ($hour != 12) {
    print 'お昼ではありません。';
}

unless文だと・・・

unless ($hour ==12) {
    print 'お昼ではありません。';
}

if文とif修飾子


if文の{ }の内部が1つの文の場合、「if修飾子」を使ってシンプルに書くことができる。

if文では・・・

if ($hour < 8) {
print 'おはようございます。';
}

if修飾子でシンプルに書くと・・・

print 'おはようございます。' if ($hour < 8) ;

というように書くことができる。

if文とif修飾子ではプログラムは同じ動作となる。if文では「条件式を調べて真であれば処理が実行される」と なるが、if修飾子では「処理が実行される。ところでこれが実行されるのは・・の時です」という感じで 条件式よりも実行される処理に重点を置いた表現となる。 この使い分けはプログラムの「読みやすさ」を意識した書き方である。

参考書籍


Perlの基礎(ハッシュ変数)

ハッシュ変数とは


連想配列とも呼ばれ「キー」と「値」を1組のペアとして関連付けさせた配列。
% + 英字1文字から始まり、それ以降は英字、数字、アンダースコアが使える。

記述の方法は下記のようにし、キーを指定して値にアクセスする。

%fruit = ("red"=>"apple","yellow"=>"banana","purple"=>"grape");
print "$fruit{'red'}\n";

> apple

ハッシュ関数


  1. keys
    全てのキーを取り出す。
%fruit = ("red"=>"apple","yellow"=>"banana","purple"=>"grape");
@file = keys %fruit;
print "@file\n";

> red yellow purple

2.values
全ての値を取り出す。

%fruit = ("red"=>"apple","yellow"=>"banana","purple"=>"grape");
@file = values %fruit;
print "@file\n";
> banana grape apple

3.each
1組のキーと値を取り出す。while構文と併用して使用する。

%fruit = ("red"=>"apple","yellow"=>"banana","purple"=>"grape");
while (my($key,$val) = each %fruit) {
  print "$key : $val\n";
}

> red : apple
> purple : grape
> yellow : banana

4.delete
特定の要素を取り除く。

%fruit = ("red"=>"apple","yellow"=>"banana","purple"=>"grape");
delete $fruit{yellow}; #(yellow - banana)の要素を削除

while (my($key,$val) = each %fruit) {
  print "$key : $val\n";
}

> purple : grape
> red : apple

ハッシュスライス


%age = (tom=>21,mike=>19,kent=>25,nancy=>17);という年齢データを
ハッシュスライスを使用し
@age{qw(tom mike kent nancy) } = (21,19,25,17);と記述する事が出来る。

ハッシュスライスを用いて年齢を更新する。

my %age = (tom=>21,mike=>19,kent=>25,nancy=>17);

@age { qw(tom mike)} = (22,20);
while (my ($key,$val) = each %age) {
  print "$key : $val\n";
}

> nancy : 17
> tom : 22
> kent : 25
> mike : 20

ハッシュスライスを用いて値を取り出す。

my %age = (tom=>21,mike=>19,kent=>25,nancy=>17);
my @data = @age{qw(kent nancy)};
print "@data\n";

> 25 17

参考サイト


Perl基礎入門|KentWeb