Revision history for App-makefilepl2cpanfile

0.04	Sun Aug  2 12:59:14 PM EDT 2026
	[ Bug Fixes ]
	Gracefully handle Makefile.PL files containing invalid UTF-8 bytes: fall back to
	  raw-byte read and emit a carp warning rather than dying; true I/O errors
	  (EIO, ENOENT, etc.) are still propagated to the caller

0.03	Wed Jul 22 20:12:54 EDT 2026
	[ Enhancements ]

	Extract parse_prereqs() as a public API function
	Preserve inline comments from Makefile.PL entries in generated cpanfile
	Parse structured prereqs => { phase => { rel => { ... } } } blocks,
	  including those nested under META_MERGE
	Extract recommends and suggests relationships into cpanfile output
	Support brace nesting up to four levels deep in dependency blocks
	Replace File::Slurp with Path::Tiny throughout
	Add Carp (croak/carp) in place of die/warn in library code
	Add Readonly constants for phase map, phase order, and develop defaults
	Guard against directories being passed as the makefile path

	[ Security ]
	Validate YAML config keys and values against strict patterns to prevent cpanfile code injection
	Save $1/$2 before inner validation regex to prevent capture-variable clobber in develop-block merge
	Add word-boundary anchors to MIN_PERL_VERSION extraction pattern
	Use possessive quantifiers in all brace-extraction and module-name regexes to eliminate backtracking

	[ Performance ]
	Replace grep with List::Util::any (short-circuits) for develop-phase presence check
	Replace each with keys in _load_develop_config to avoid stale iterator cursor
	Add '0' short-circuit to _has_version to avoid looks_like_number call for zero versions

	[ Tests ]
	Add t/parse_prereqs.t, t/error_paths.t, t/locales.t, t/extended_tests.t

0.02	Mon Mar 30 19:22:57 EDT 2026
	Added which tool created it
	Ignore comments in Makefile.PL
	Improved handling of version set to '0'
	Improved error handling
	With_develop now defaults to 1.
	Handle on develop being in quotes

0.01	Fri Jan  2 21:38:25 EST 2026
        First draft
