xargsっぽいのを作ってみた

30分プログラム、その773。xargsっぽいのを作ってみた。

xargsそのものについてはxargs - Wikipediaを参照してください。重要な部分だけを引用すると下記のようになります。

xargs(エックスアーグズ)はほとんどの UNIXオペレーティングシステムに用意されているコマンドであ
る。コマンドに多くの引数を渡すときに便利なコマンドである。非常に長い引数のリストはコマンドに渡すこ
とが出来ない^[1]、その際にxargsを使うことによって引数リストをシステムが受け入れることが出来るサイ
ズに分割しコマンドに渡してくれる。

実際の動作例はこのようになります。

# コマンドを含めて10文字ごとに区切る
$ jot 10 | xargs -s 10 echo
1 2
3 4
5 6
7 8
9 10

本家xargsは、スペースでなくNULLで引数を区切るオプションなどがあり非常に多機能ですが、そのへんを全部省略した非常に単純なコマンドを作ってみました。

使い方

$ jot 10 | perl myargs.pl echo
1 2
3 4
5 6
7 8
9 10

ソースコード

#! /usr/bin/perl
# -*- mode:perl; coding:utf-8 -*-
use strict;
use warnings;
use Data::Dumper;

my $WIDTH = 10;
my @stock = ();
while(<stdin>){
    chomp $_;
    if(length "@stock $_" > $WIDTH){
	system "@ARGV @stock\n";
	@stock = ();
    }

    @stock = (@stock, $_);
}
system "@ARGV @stock\n";