Skip to content
Ben Tyler edited this page Apr 9, 2015 · 26 revisions

Upgrading to Mojolicious 6.0

Parameter name listing

Name listing support was removed from the Mojolicious::Controller and Mojo::Parameters param methods, in favor of the more appropriate Mojolicious::Parameters names method. For example, my @names = $c->param should now be written as my @names = @{$c->req->params->names}, if you wish to retrieve all GET/POST parameter names. The previous behavior of including names of placeholders and uploads has been removed. Similarly, the names of validated parameters in Mojolicious::Validator::Validation have been moved from param to passed and failed, which also now return arrayrefs instead of lists.

Multi-name parameter retrieval

Multi-name support was removed from various methods that retrieved parameters by name; these methods can only be used to retrieve one parameter at a time now. The affected methods include: Mojolicious::Controller cookie, param, and signed_cookie; Mojolicious::Validator::Validation param; Mojo::Parameters param; Mojo::Message cookie and upload.

Removed Mojo::Log methods

The log method was removed from Mojo::Log; use the individual logging methods instead (e.g. debug, info). The is_level method was also removed, use is_debug and similar methods to test the log level. The is_fatal method was removed because fatal logging is always enabled.

Mojo::UserAgent::CookieJar return values

The all and find methods now return arrayrefs instead of lists.

Removed Mojo::UserAgent custom socket support

Mojo::Transaction no longer supports receiving a prepared socket in $tx->connection, which means the UserAgent cannot be coerced into using a special socket. This is only relevant to you if you rely on UA over Unix domain sockets or similar. Sri has indicated that a patch to factor out some UA internals into Mojo::UserAgent::ConnectionPool might be a reasonable way to restore this, if you're interested.

Removed Mojo::Loader object-oriented API

The Mojo::Loader OO API has been removed, use the exported-on-demand functions data_section, find_modules, and load_class directly instead.

Exception and Not-Found rendering

The deprecated Mojolicious::Controller methods render_exception and render_not_found have been removed, use the helpers $c->reply->exception and $c->reply->not_found instead.

Removed accept mutex

The accept mutex behavior was removed from Mojo::IOLoop and Mojo::Server::Prefork for better performance, along with the related attributes and options:

  • Mojo::IOLoop: accept_interval, lock, and unlock
  • Mojo::Server::Prefork: accept_interval, lock_file, and lock_timeout
  • prefork command -a/--accept-interval, --lock-file and -L/--lock-timeout options
  • Hypnotoad settings accept_interval, lock_file, and lock_timeout

Other removals

  • Mojo::Reactor is_readable method
  • Mojolicious::Routes::Route bridge method - use under instead
  • Mojolicious::Routes auto_render method

Mojo::DOM renaming

Mojo::DOM methods have been reorganized to better match the DOM spec.

  • all_contents => descendant_nodes
  • contents => child_nodes
  • match => matches (also renamed in Mojo::DOM::CSS)
  • following_siblings => following_nodes
  • preceding_siblings => preceding_nodes
  • next_sibling => next_node
  • previous_sibling => previous_node
  • siblings => Replaced by following and preceding methods
  • node => type
  • type => tag

Other renames

  • Mojo::UserAgent::CookieJar:
  • extracting => collecting
  • extract => collect
  • inject => prepare
  • Mojo::Template: template => unparsed
  • Mojolicious::Types: types => mapping
  • Mojolicious::Routes::Match:
  • current => position
  • match => find
  • Mojolicious::Routes::Pattern: pattern => unparsed
  • Mojo::UserAgent::Proxy: inject => prepare
  • Mojo::Parameters: params => pairs
  • prefork command switch: -A => -a
  • Hypnotoad option: keep_alive_requests => requests

Upgrading to Mojolicious 5.73

Removed Mojo::JSON object-oriented API

The Mojo::JSON object-oriented API has been removed, encode_json and decode_json functions should be used instead.

Mojo::Collection changes

Mojo::Collection stringification support has been removed, use the join method instead. Mojo::Collection also no longer uses AUTOLOAD; the map method should be used for this functionality (as well as to replace the removed pluck method).

Mojo::DOM changes

Mojo::DOM no longer uses AUTOLOAD, the children method should be used instead. The val method has also been removed.

Mojo::JSON::Pointer data arguments

Mojo::JSON::Pointer methods no longer take a $data argument to specify the data structure to traverse, and only uses its data attribute.

Upgrading to Mojolicious 5.69

Static rendering

The render_static method of Mojolicious::Controller has been removed, use the $c->reply->static helper instead.

Removed methods

  • Mojo::EventEmitter: emit_safe
  • Mojolicious::Routes::Route: has_conditions

Upgrading to Mojolicious 5.48

Context sensitivity

Methods that previously worked differently in scalar than in list context now always assume scalar context, and new methods (every_*) have been added to cover the list context functionality, returning an arrayref. For example, my @things = $c->param('thing') should now be written my @things = @{$c->every_param('thing')}.

  • Mojo::Message:
  • cookie / every_cookie
  • upload / every_upload
  • Mojo::Message::Request: param / every_param
  • Mojo::Parameters: param / every_param
  • Mojolicious::Controller:
  • cookie / every_cookie
  • param / every_param
  • signed_cookie / every_signed_cookie
  • Mojolicious::Validator::Validation: param / every_param

This change addresses a security vulnerability when working with context-sensitive functions in perl; see here for more information.

Clone this wiki locally