特定の行が含まれていると異常終了するプログラム

30分プログラム、その421。特定の行が含まれていると異常t5終了するプログラム。
ボクはOUnitを正しく使いこなせていないらしく、エラーが発生しても終了コードは0のままだったりする。

$ omake check; echo $?
...
FAIL: base module test:0:range

OUnit:
expected: [1; 2; 3] but got: [1; 2]
----------------------------------------------------------------------
Ran: 4 tests in: 0.00 Seconds
FAILED: Cases: 4 Tried: 4 Errors: 0 Failures: 1
........
0

OUnitの詳しい使い方はまた調べるとして、とりあえずこれをネタにしてプログラムを書いておこう。
というわけで、特定の文字列が含まれていると終了コードが0以外になるプログラムを書いてみた。実際のところ、grepのオプションをごにょごにょすれば実現できる気はちょっとしてる。

使い方

$ perl fail.pl hoge < tmp ; echo $?
foo
bar
bar
0

$ perl fail.pl foo < tmp ; echo $?
foo
bar
bar
1

ソースコード

#! /usr/bin/perl
# -*- mode:perl; coding:utf-8 -*-
#
# fail.pl -
#
# Copyright(C) 2008 by mzp
# Author: MIZUNO Hiroki / mzpppp at gmail dot com
# http://howdyworld.org
#
# Timestamp: 2008/11/24 21:02:09
#
# This program is free software; you can redistribute it and/or
# modify it under MIT Lincence.
#

use strict;
use warnings;
use Data::Dumper;
use Perl6::Say;

my $regex = shift;
my $fail  = 0;
while(<>){
    print $_;
    $fail++ if($_ =~ /$regex/);
}

exit $fail;