#!/usr/bin/perl # http://perlmonks.org/?node_id=1144184 use strict; use warnings; sub e { /\Guc*/gc or return 0; # rule 1. & 5. /\Ga/gc and return e(); # rule 2. /\Gc+/gc; # rule 5. /\Gd/gc and return e() && /\Gf/gc && e(); # rule 3. /\Gb/gc and return e(); # rule 4. return 1; } for (qw( u udufu uau uu uc ubu ucbuc uaau ua uauau uccc )) { print e() && /\G\z/ ? "matches" : " fail", " $_\n"; }