さわだのノート

書籍のお仕事に役立つかもしれない思いつきを記録しています。

RSS: 記事の更新情報 Rss Feed

Perlスクリプトにコマンド置換のリストを投げ込む

たいした話ではないのですが、Perlのスクリプトの引数に、コマンド置換の結果を投げ込めるということに今気づきました。

こんな感じのスクリプトがあったとしたら、

#!/usr/bin/perl

use strict;
use warnings;

use utf8;
use Encode::Locale;
use open IO => qw/:encoding(console_out) :std/;
use XmlToCsv;

my ($csv_path, @file_list) = @ARGV or die;

foreach my $xml_file (@file_list) {
  XmlToCsv->main($xml_file, $csv_path);
}

下記のコマンド置換の結果――.xmlファイルのパスのリスト――が「@file_list」に代入されます。

$ batch_xml.pl applist_android_v3.csv `find . -name "*.xml" | egrep "2[7-9]|3[0-4]|95" | egrep -v test`

考えてみたら当たり前のことですね。気づくまではファイル名をPerlスクリプト内でむりやり書いたりとまぬけなことをしていました。

全然違う話なのですが、数字のリストでforコマンドを回したいときは、ブレースで囲ってやればいいみたいです。これも知りませんでした。

for i in {27..34} {40..50}
do
mv `ls | grep "$i" | grep icon` P"$i"
done

物覚えが悪いもので、Perlもシェルコマンドもなかなか思い通りに動いてくれませんが、少しずついろんなことを学んでいきたいですね。