-$! Time to bail out before it's too late, i.e. too deep.
-$! Depth check is unnecessary on Alpha VMS V7.2++ (even for ODS-2).
-$ tmp = f$extract(1,3,f$edit(f$getsyi("VERSION"),"TRIM,COLLAPSE"))
-$ IF (tmp .GES. "7.2") .AND. (F$GETSYI("HW_MODEL") .GE. 1024) THEN GOTO Beyond_depth_check
-$! Depth check also unnecessary on ODS 5 (or later) file systems.
-$ tmp = F$INTEGER(F$GETDVI(F$ENVIRONMENT("DEFAULT"),"ACPTYPE") - "F11V")
-$ IF (tmp .GE. 5) THEN GOTO Beyond_depth_check
-$ IF (F$ELEMENT(max_allowed_dir_depth,".",F$ENVIRONMENT("DEFAULT")).nes.".")
-$ THEN
-$ TYPE SYS$INPUT:
-$ DECK
-%Config-E-VMS, ERROR:
- Sorry! It apears as though your perl build sub-directory is already too
- deep into the VMS file system. Please try moving stuff into a shallower
- directory (or altering the "max_allowed_dir_depth" parameter).
-$ EOD
-$ echo4 "ABORTING..."
-$ SET DEFAULT 'vms_default_directory_name' !be kind rewind
-$ STOP
-$ EXIT !2 !$STATUS = "%X00000002" (error)
-$ ENDIF
-$Beyond_depth_check:
+$!
+$ escape_extended_chars: subroutine
+$ string = 'p1' ! It's the name of the symbol
+$ chars_to_escape = p2
+$ sindex = 0
+$ slength = f$length(string)
+$ loop_over_chars:
+$ if sindex .eq. slength then goto end_loop_over_chars
+$ char = f$extract(sindex, 1, string)
+$ if f$locate(char, chars_to_escape) .lt. f$length(chars_to_escape)
+$ then
+$ string = f$extract(0, sindex, string) + "^" + f$extract(sindex, slength, string)
+$ slength = slength + 1 ! we've increased overall length by 1
+$ sindex = sindex + 1 ! don't check the char we just escaped again
+$ endif
+$ sindex = sindex + 1
+$ goto loop_over_chars
+$ end_loop_over_chars:
+$ 'p1' == string
+$!
+$ endsubroutine