while (<>) { s/\[([^=\]\/]+)(=([^\]]+))?\]([^\[]+)\[\/\1]/&handler($1,$3,$4)/eg; print; } sub handler { my ($tag, $value, $data) = @_; for ( $tag ) { /img/ && return ""; /link/ && return "$data"; } }