A simple approach here is to do:
our $i //= 28;
 That is still declare it as a package global variable to work around strict but only assign 28 if not already defined.
 Alternatively, with zsh's zmv:
autoload -Uz
n=28; zmv -n '(*_)<->(.png)' '$1${(l[3][0])$((n++))}'
(like for most implementations of rename, -n is for dry-run).
 
                