91³Ô¹ÏÍø

Watch CBS News

Methuen Mayor Neil Perry dies after health battles, office announces

METHUEN - Methuen Mayor Neil Perry passed away on Saturday. The city's announcement did not give an official cause of death.

He was 65 years old, according to the .

3.jpg
Neil Perry in 2021. He served as mayor for four years. Methuen Mayor Neil Perry

"Mayor Perry has fought many health battles over the last several years but came back from each of them with renewed vigor to tackle, in his own words, the greatest job he ever had: being the mayor of the great City of Methuen," his office said in a statement.

In a , Perry announced that he would be returning to work remotely after being admitted to a rehab hospital after an "experience that happened to me during a routine dialysis appointment."

His office said his last and "perhaps greatest" achievement as mayor was the city's purchase of the historic Searles Estate. Perry was a native of Methuen and first became mayor in January 2020. 

At-large city councilor D.J. Beauregard will be acting mayor until a special election can be held in the next two months. More information will be available in the coming days, the mayor's office said.

"Wonderful and caring person"

"We extend our deepest condolences to the family and friends of Mayor Neil Perry and the Methuen community," Massachusetts Gov. Maura Healey said in a statement. 

"Mayor Perry was a wonderful and caring person, and a strong and courageous leader. He believed in and gave so much to his community. He will be deeply missed. Our administration is prepared to support the City of Methuen during this difficult time." 

"He loved Methuen deeply and was a steadfast advocate for the city and its families. I am grateful for his service and partnership. My thoughts are with his loved ones and the people of Methuen," said Massachusetts Senator Ed Markey.

Massachusetts Rep. Lori Trahan released a statement saying in part, "Everyone in the Commonwealth knew that no matter the situation, Neil never backed down from a fight if it was in the best interest of hardworking families in Methuen. We will sorely miss his leadership, his determination, and his resilience, and my heart goes out to his family and friends mourning this tremendous loss."

View CBS News In
CBS News App Open
Chrome Safari Continue
const link = doc.createElement('link'); link.rel = 'stylesheet'; link.href = '/fly/fly/bundles/cbsnewscontent/css/cmp-banner.min.css?v=fd53910ecf4604072044ab7c46d9b028'; doc.head.appendChild(link); doc.body.innerHTML = CONSENT_MESSAGE; } else { el.insertAdjacentHTML('afterend', CONSENT_MESSAGE); } }); } function hidePrivacyMessage() { // Remove from the main document document.querySelectorAll(`.${CONSENT_MESSAGE_CLASS}`).forEach(el => el.remove()); // Remove from inside any iframes document.querySelectorAll('iframe').forEach(iframe => { const doc = iframe.contentDocument || iframe.contentWindow.document; doc.querySelectorAll(`.${CONSENT_MESSAGE_CLASS}`).forEach(el => el.remove()); }); } function activateGatedScripts() { // Handle both new format (cmp-gated-script) and old OneTrust/Ketch format (optanon-category-4) const gatedScripts = Array.from(document.querySelectorAll('script.cmp-gated-script, script.optanon-category-4')); // Activate scripts sequentially with a small delay to avoid timing issues let delay = 0; gatedScripts.forEach(function(placeholder, index) { setTimeout(function() { // Skip if already processed if (placeholder.hasAttribute('data-cmp-processed')) { return; } placeholder.setAttribute('data-cmp-processed', 'true'); const newScript = document.createElement('script'); newScript.type = 'text/javascript'; // Try new format first (data-cmp-src), then fall back to old format (data-src) const src = placeholder.getAttribute('data-cmp-src') || placeholder.getAttribute('data-src'); if (src) { newScript.src = src; } else if (placeholder.textContent) { // Inline script - just copy the content newScript.textContent = placeholder.textContent; } // Handle new format attributes (data-cmp-attrs) - for both inline and external scripts const attrs = placeholder.getAttribute('data-cmp-attrs'); if (attrs) { const tempDiv = document.createElement('div'); tempDiv.innerHTML = '
<\/div>'; const tempAttrs = tempDiv.firstChild.attributes; for (let i = 0; i < tempAttrs.length; i++) { // For external scripts, allow defer/async. For inline scripts, skip them (not valid) if (src || (tempAttrs[i].name !== 'async' && tempAttrs[i].name !== 'defer')) { newScript.setAttribute(tempAttrs[i].name, tempAttrs[i].value); } } } // Copy other attributes from old OneTrust format for (let i = 0; i < placeholder.attributes.length; i++) { const attr = placeholder.attributes[i]; // Skip attributes we've already handled or don't want to copy if (!['class', 'data-src', 'data-type', 'data-cmp-src', 'data-cmp-attrs', 'data-cmp-processed', 'type', 'async', 'defer', 'src'].includes(attr.name)) { newScript.setAttribute(attr.name, attr.value); } } placeholder.parentNode.replaceChild(newScript, placeholder); // If external script, manually trigger window.onload handlers after it loads // This handles widgets that use window.onload for initialization if (src) { newScript.addEventListener('load', function() { // If page already loaded and script set a new onload handler, trigger it if (document.readyState === 'complete' && window.onload) { const originalOnload = window.onload; window.onload = null; // Clear temporarily to prevent loops originalOnload(); // Execute the handler } }); } }, delay); delay += 500; // 500ms delay between each script to allow full loading }); } cbsoptanon.onScriptsReady(function(cmp) { cmp.ot.targetingAllowed(function(allowed) { if (!allowed) { showPrivacyMessage(); } else { activateGatedScripts(); } }); cmp.ot.awaitInitialConsent(function(consent_model) { cmp.ot.addOnConsentChangedHandler(function() { cmp.ot.targetingAllowed(function(allowed) { if (allowed) { hidePrivacyMessage(); activateGatedScripts(); } else { showPrivacyMessage(); } }); }); }); });