MVC::Neaf::Util - Some static functions for Not Even A Framework


This is utility class. Nothing to see here unless one intends to work on MVC::Neaf itself.


This module optionally exports anything it has.

canonize_path( path, want_slash )

Convert '////fooo//bar/' to '/foo/bar' and '//////' to either '' or '/'.


    @array = check_path @array

Check a list of path for bad characters in path spec. Will issue a warning if something strange is present. Most notably, forbids : in order to allow for future /my/path/:param

Returns unmodified list. This as well as prototype is done so for simpler integration with map.


Decode unpadded URL-friendly base64. Also works on normal one.

See "decode_base64url" in MIME::Base64.


Encode data as unpadded URL-friendly base64 - with - for 62 and _ for 63. = signs are removed.

See "encode_base64url" in MIME::Base64.


    extra_missing( \%input, \%allowed, \@required )

Dies if %input doesn't pass validation. Only definedness is checked.


Return a date in format required by HTTP standard for cookies and cache expiration.

    Expires=Wed, 13 Jan 2021 22:23:01 GMT;


Create dumb accessors in the calling class from hash. Keys are method names.

Key in the object is hash value if it's an identifier, or just method name otherwise:

    package My::Class;

    # (declare constructor somehow)
    make_getters (
        foo => bar,
        baz => 1,
        quux => '',

    # ...

    my $obj = My::Class->new;

    $obj->foo;  # {bar}
    $obj->baz;  # {baz}
    $obj->quux; # {quux}


    maybe_list( $value, @defaults )

If $value is undef, return a copy of \@defaults.

If $value is a list, return a copy of it.

Otherwise, return [ $value ].

path_prefixes ($path)

List ('', '/foo', '/foo/bar') for '/foo/bar'

rex( $string || qr/r.e.g.e.x/ )

Convert string or regex to an anchored regex.

run_all( [CODE, ...], @args )

Run all subroutines in array. Exceptions not handled. Return nothing.

run_all_nodie( [CODE, ...], $on_error, @args )

Run all subroutines in array, even if some die.

Execute on_error in such cases.

Return number of failed callbacks.



Because JSON::MaybeXS is not available on all systems, try to load it or emulate it.



These two are reexported from whatever JSON module we were lucky enough to load.


Get DATA filehandle in the calling package $n levels up the stack, together with the file name (so that we don't read the same __DATA__ twice).

bare_html_escape( $dangerous )

A crude html-entities escaper. Should be replaced by something real.


This module is part of MVC::Neaf suite.

Copyright 2016-2019 Konstantin S. Uvarin

This program is free software; you can redistribute it and/or modify it under the terms of either: the GNU General Public License as published by the Free Software Foundation; or the Artistic License.

See for more information.